@codemieai/code 0.2.0 → 0.3.0

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 (258) hide show
  1. package/README.md +38 -7
  2. package/dist/agents/core/session/ensure-session.d.ts.map +1 -1
  3. package/dist/agents/core/session/ensure-session.js +14 -11
  4. package/dist/agents/core/session/ensure-session.js.map +1 -1
  5. package/dist/agents/plugins/claude/plugin/{codemie-statusline.mjs → session-status.mjs} +1 -0
  6. package/dist/agents/plugins/claude/plugin/skills/codemie-analytics/SKILL.md +641 -0
  7. package/dist/agents/plugins/claude/plugin/skills/codemie-analytics/references/leaderboard-dashboard-report.md +225 -0
  8. package/dist/agents/plugins/claude/plugin/skills/codemie-analytics/references/people-spending-dashboard-report.md +746 -0
  9. package/dist/agents/plugins/claude/plugin/skills/codemie-analytics/references/people-spending-dashboard-template.html +3270 -0
  10. package/dist/agents/plugins/claude/plugin/skills/codemie-analytics/scripts/analytics-cli.js +893 -0
  11. package/dist/agents/plugins/claude/plugin/skills/codemie-analytics/scripts/inspect-schema.js +211 -0
  12. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/README.md +39 -0
  13. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/SKILL.md +117 -26
  14. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/scripts/inject-css.js +40 -0
  15. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/scripts/inject-data.js +68 -0
  16. package/dist/agents/plugins/claude/plugin/skills/codemie-html-report/style-guide/css/bundle.css +1 -0
  17. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/SKILL.md +240 -0
  18. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/assistants.md +256 -0
  19. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/categories.md +101 -0
  20. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/datasources.md +401 -0
  21. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/integrations.md +242 -0
  22. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/skills.md +191 -0
  23. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/users.md +38 -0
  24. package/dist/agents/plugins/claude/plugin/skills/codemie-sdk/examples/workflows.md +151 -0
  25. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +12 -2
  26. package/dist/agents/plugins/claude/plugin/statusline.mjs +216 -0
  27. package/dist/agents/plugins/claude/statusline-installer.d.ts +8 -0
  28. package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -0
  29. package/dist/agents/plugins/claude/statusline-installer.js +127 -0
  30. package/dist/agents/plugins/claude/statusline-installer.js.map +1 -0
  31. package/dist/agents/plugins/codemie-code.plugin.d.ts.map +1 -1
  32. package/dist/agents/plugins/codemie-code.plugin.js +5 -0
  33. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  34. package/dist/cli/commands/assistants/chat/index.d.ts.map +1 -1
  35. package/dist/cli/commands/assistants/chat/index.js +8 -2
  36. package/dist/cli/commands/assistants/chat/index.js.map +1 -1
  37. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.d.ts +3 -2
  38. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.d.ts.map +1 -1
  39. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js +5 -4
  40. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js.map +1 -1
  41. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts +3 -2
  42. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts.map +1 -1
  43. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js +8 -6
  44. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js.map +1 -1
  45. package/dist/cli/commands/assistants/setup/helpers.d.ts +3 -2
  46. package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
  47. package/dist/cli/commands/assistants/setup/helpers.js +3 -2
  48. package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
  49. package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
  50. package/dist/cli/commands/assistants/setup/index.js +7 -13
  51. package/dist/cli/commands/assistants/setup/index.js.map +1 -1
  52. package/dist/cli/commands/assistants/setup/summary/index.d.ts +3 -3
  53. package/dist/cli/commands/assistants/setup/summary/index.d.ts.map +1 -1
  54. package/dist/cli/commands/assistants/setup/summary/index.js +5 -5
  55. package/dist/cli/commands/assistants/setup/summary/index.js.map +1 -1
  56. package/dist/cli/commands/install.d.ts.map +1 -1
  57. package/dist/cli/commands/install.js +40 -0
  58. package/dist/cli/commands/install.js.map +1 -1
  59. package/dist/cli/commands/profile/display.d.ts.map +1 -1
  60. package/dist/cli/commands/profile/display.js +1 -0
  61. package/dist/cli/commands/profile/display.js.map +1 -1
  62. package/dist/cli/commands/proxy/connectors/desktop-managed-mcp-servers.json +0 -6
  63. package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
  64. package/dist/cli/commands/proxy/connectors/desktop.js +20 -10
  65. package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
  66. package/dist/cli/commands/sdk/assistants.d.ts +3 -0
  67. package/dist/cli/commands/sdk/assistants.d.ts.map +1 -0
  68. package/dist/cli/commands/sdk/assistants.js +211 -0
  69. package/dist/cli/commands/sdk/assistants.js.map +1 -0
  70. package/dist/cli/commands/sdk/categories.d.ts +3 -0
  71. package/dist/cli/commands/sdk/categories.d.ts.map +1 -0
  72. package/dist/cli/commands/sdk/categories.js +186 -0
  73. package/dist/cli/commands/sdk/categories.js.map +1 -0
  74. package/dist/cli/commands/sdk/datasources.d.ts +3 -0
  75. package/dist/cli/commands/sdk/datasources.d.ts.map +1 -0
  76. package/dist/cli/commands/sdk/datasources.js +276 -0
  77. package/dist/cli/commands/sdk/datasources.js.map +1 -0
  78. package/dist/cli/commands/sdk/index.d.ts +3 -0
  79. package/dist/cli/commands/sdk/index.d.ts.map +1 -0
  80. package/dist/cli/commands/sdk/index.js +23 -0
  81. package/dist/cli/commands/sdk/index.js.map +1 -0
  82. package/dist/cli/commands/sdk/integrations.d.ts +3 -0
  83. package/dist/cli/commands/sdk/integrations.d.ts.map +1 -0
  84. package/dist/cli/commands/sdk/integrations.js +220 -0
  85. package/dist/cli/commands/sdk/integrations.js.map +1 -0
  86. package/dist/cli/commands/sdk/llm.d.ts +3 -0
  87. package/dist/cli/commands/sdk/llm.d.ts.map +1 -0
  88. package/dist/cli/commands/sdk/llm.js +48 -0
  89. package/dist/cli/commands/sdk/llm.js.map +1 -0
  90. package/dist/cli/commands/sdk/services/assistants.d.ts +13 -0
  91. package/dist/cli/commands/sdk/services/assistants.d.ts.map +1 -0
  92. package/dist/cli/commands/sdk/services/assistants.js +60 -0
  93. package/dist/cli/commands/sdk/services/assistants.js.map +1 -0
  94. package/dist/cli/commands/sdk/services/categories.d.ts +8 -0
  95. package/dist/cli/commands/sdk/services/categories.d.ts.map +1 -0
  96. package/dist/cli/commands/sdk/services/categories.js +19 -0
  97. package/dist/cli/commands/sdk/services/categories.js.map +1 -0
  98. package/dist/cli/commands/sdk/services/datasources.d.ts +33 -0
  99. package/dist/cli/commands/sdk/services/datasources.d.ts.map +1 -0
  100. package/dist/cli/commands/sdk/services/datasources.js +268 -0
  101. package/dist/cli/commands/sdk/services/datasources.js.map +1 -0
  102. package/dist/cli/commands/sdk/services/index.d.ts +6 -0
  103. package/dist/cli/commands/sdk/services/index.d.ts.map +1 -0
  104. package/dist/cli/commands/sdk/services/index.js +6 -0
  105. package/dist/cli/commands/sdk/services/index.js.map +1 -0
  106. package/dist/cli/commands/sdk/services/integrations.d.ts +27 -0
  107. package/dist/cli/commands/sdk/services/integrations.d.ts.map +1 -0
  108. package/dist/cli/commands/sdk/services/integrations.js +59 -0
  109. package/dist/cli/commands/sdk/services/integrations.js.map +1 -0
  110. package/dist/cli/commands/sdk/services/llm.d.ts +4 -0
  111. package/dist/cli/commands/sdk/services/llm.d.ts.map +1 -0
  112. package/dist/cli/commands/sdk/services/llm.js +7 -0
  113. package/dist/cli/commands/sdk/services/llm.js.map +1 -0
  114. package/dist/cli/commands/sdk/services/skills.d.ts +23 -0
  115. package/dist/cli/commands/sdk/services/skills.d.ts.map +1 -0
  116. package/dist/cli/commands/sdk/services/skills.js +69 -0
  117. package/dist/cli/commands/sdk/services/skills.js.map +1 -0
  118. package/dist/cli/commands/sdk/services/users.d.ts +4 -0
  119. package/dist/cli/commands/sdk/services/users.d.ts.map +1 -0
  120. package/dist/cli/commands/sdk/services/users.js +7 -0
  121. package/dist/cli/commands/sdk/services/users.js.map +1 -0
  122. package/dist/cli/commands/sdk/services/workflows.d.ts +7 -0
  123. package/dist/cli/commands/sdk/services/workflows.d.ts.map +1 -0
  124. package/dist/cli/commands/sdk/services/workflows.js +34 -0
  125. package/dist/cli/commands/sdk/services/workflows.js.map +1 -0
  126. package/dist/cli/commands/sdk/skills.d.ts +3 -0
  127. package/dist/cli/commands/sdk/skills.d.ts.map +1 -0
  128. package/dist/cli/commands/sdk/skills.js +492 -0
  129. package/dist/cli/commands/sdk/skills.js.map +1 -0
  130. package/dist/cli/commands/sdk/users.d.ts +3 -0
  131. package/dist/cli/commands/sdk/users.d.ts.map +1 -0
  132. package/dist/cli/commands/sdk/users.js +81 -0
  133. package/dist/cli/commands/sdk/users.js.map +1 -0
  134. package/dist/cli/commands/sdk/utils/cli-utils.d.ts +35 -0
  135. package/dist/cli/commands/sdk/utils/cli-utils.d.ts.map +1 -0
  136. package/dist/cli/commands/sdk/utils/cli-utils.js +110 -0
  137. package/dist/cli/commands/sdk/utils/cli-utils.js.map +1 -0
  138. package/dist/cli/commands/sdk/utils/datasource-types.d.ts +9 -0
  139. package/dist/cli/commands/sdk/utils/datasource-types.d.ts.map +1 -0
  140. package/dist/cli/commands/sdk/utils/datasource-types.js +61 -0
  141. package/dist/cli/commands/sdk/utils/datasource-types.js.map +1 -0
  142. package/dist/cli/commands/sdk/utils/file-utils.d.ts +8 -0
  143. package/dist/cli/commands/sdk/utils/file-utils.d.ts.map +1 -0
  144. package/dist/cli/commands/sdk/utils/file-utils.js +21 -0
  145. package/dist/cli/commands/sdk/utils/file-utils.js.map +1 -0
  146. package/dist/cli/commands/sdk/utils/render.d.ts +82 -0
  147. package/dist/cli/commands/sdk/utils/render.d.ts.map +1 -0
  148. package/dist/cli/commands/sdk/utils/render.js +149 -0
  149. package/dist/cli/commands/sdk/utils/render.js.map +1 -0
  150. package/dist/cli/commands/sdk/workflows.d.ts +3 -0
  151. package/dist/cli/commands/sdk/workflows.d.ts.map +1 -0
  152. package/dist/cli/commands/sdk/workflows.js +170 -0
  153. package/dist/cli/commands/sdk/workflows.js.map +1 -0
  154. package/dist/cli/commands/setup.js +4 -0
  155. package/dist/cli/commands/setup.js.map +1 -1
  156. package/dist/cli/commands/shared/prompts/storage-scope.d.ts +2 -1
  157. package/dist/cli/commands/shared/prompts/storage-scope.d.ts.map +1 -1
  158. package/dist/cli/commands/shared/prompts/storage-scope.js +4 -3
  159. package/dist/cli/commands/shared/prompts/storage-scope.js.map +1 -1
  160. package/dist/cli/commands/skills/add.d.ts.map +1 -1
  161. package/dist/cli/commands/skills/add.js +28 -9
  162. package/dist/cli/commands/skills/add.js.map +1 -1
  163. package/dist/cli/commands/skills/lib/skills-sh-telemetry.d.ts +5 -0
  164. package/dist/cli/commands/skills/lib/skills-sh-telemetry.d.ts.map +1 -1
  165. package/dist/cli/commands/skills/lib/skills-sh-telemetry.js +22 -4
  166. package/dist/cli/commands/skills/lib/skills-sh-telemetry.js.map +1 -1
  167. package/dist/cli/commands/skills/setup/generators/claude-skill-generator.d.ts +3 -2
  168. package/dist/cli/commands/skills/setup/generators/claude-skill-generator.d.ts.map +1 -1
  169. package/dist/cli/commands/skills/setup/generators/claude-skill-generator.js +29 -14
  170. package/dist/cli/commands/skills/setup/generators/claude-skill-generator.js.map +1 -1
  171. package/dist/cli/commands/skills/setup/helpers.d.ts +3 -2
  172. package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
  173. package/dist/cli/commands/skills/setup/helpers.js +6 -8
  174. package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
  175. package/dist/cli/commands/skills/setup/index.js +8 -16
  176. package/dist/cli/commands/skills/setup/index.js.map +1 -1
  177. package/dist/cli/commands/skills/setup/sync.d.ts.map +1 -1
  178. package/dist/cli/commands/skills/setup/sync.js +6 -5
  179. package/dist/cli/commands/skills/setup/sync.js.map +1 -1
  180. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  181. package/dist/cli/commands/uninstall.js +17 -0
  182. package/dist/cli/commands/uninstall.js.map +1 -1
  183. package/dist/cli/index.js +2 -0
  184. package/dist/cli/index.js.map +1 -1
  185. package/dist/env/types.d.ts +11 -4
  186. package/dist/env/types.d.ts.map +1 -1
  187. package/dist/env/types.js +5 -0
  188. package/dist/env/types.js.map +1 -1
  189. package/dist/migrations/004-skills-assistants-top-level.migration.d.ts +10 -0
  190. package/dist/migrations/004-skills-assistants-top-level.migration.d.ts.map +1 -0
  191. package/dist/migrations/004-skills-assistants-top-level.migration.js +65 -0
  192. package/dist/migrations/004-skills-assistants-top-level.migration.js.map +1 -0
  193. package/dist/migrations/005-skill-slug-format.migration.d.ts +10 -0
  194. package/dist/migrations/005-skill-slug-format.migration.d.ts.map +1 -0
  195. package/dist/migrations/005-skill-slug-format.migration.js +82 -0
  196. package/dist/migrations/005-skill-slug-format.migration.js.map +1 -0
  197. package/dist/migrations/index.d.ts +2 -0
  198. package/dist/migrations/index.d.ts.map +1 -1
  199. package/dist/migrations/index.js +2 -2
  200. package/dist/migrations/index.js.map +1 -1
  201. package/dist/providers/core/codemie-auth-helpers.d.ts +4 -1
  202. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
  203. package/dist/providers/core/codemie-auth-helpers.js +21 -18
  204. package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
  205. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.d.ts.map +1 -1
  206. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.js +4 -2
  207. package/dist/providers/plugins/anthropic-subscription/anthropic-subscription.setup-steps.js.map +1 -1
  208. package/dist/providers/plugins/sso/proxy/plugins/endpoint-blocker.plugin.d.ts.map +1 -1
  209. package/dist/providers/plugins/sso/proxy/plugins/endpoint-blocker.plugin.js +14 -6
  210. package/dist/providers/plugins/sso/proxy/plugins/endpoint-blocker.plugin.js.map +1 -1
  211. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +1 -0
  212. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  213. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -0
  214. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  215. package/dist/providers/plugins/sso/proxy/plugins/session-expiry-handler.plugin.d.ts +9 -0
  216. package/dist/providers/plugins/sso/proxy/plugins/session-expiry-handler.plugin.d.ts.map +1 -0
  217. package/dist/providers/plugins/sso/proxy/plugins/session-expiry-handler.plugin.js +23 -0
  218. package/dist/providers/plugins/sso/proxy/plugins/session-expiry-handler.plugin.js.map +1 -0
  219. package/dist/providers/plugins/sso/proxy/proxy-errors.d.ts.map +1 -1
  220. package/dist/providers/plugins/sso/proxy/proxy-errors.js +1 -2
  221. package/dist/providers/plugins/sso/proxy/proxy-errors.js.map +1 -1
  222. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts +10 -0
  223. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  224. package/dist/providers/plugins/sso/proxy/sso.proxy.js +77 -2
  225. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  226. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +1 -1
  227. package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
  228. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js +2 -2
  229. package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js.map +1 -1
  230. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +1 -1
  231. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
  232. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  233. package/dist/providers/plugins/sso/sso.auth.js +10 -2
  234. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  235. package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
  236. package/dist/providers/plugins/sso/sso.setup-steps.js +3 -1
  237. package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
  238. package/dist/utils/config.d.ts +16 -11
  239. package/dist/utils/config.d.ts.map +1 -1
  240. package/dist/utils/config.js +87 -82
  241. package/dist/utils/config.js.map +1 -1
  242. package/dist/utils/paths.d.ts +5 -0
  243. package/dist/utils/paths.d.ts.map +1 -1
  244. package/dist/utils/paths.js +14 -0
  245. package/dist/utils/paths.js.map +1 -1
  246. package/dist/utils/profile.d.ts +0 -2
  247. package/dist/utils/profile.d.ts.map +1 -1
  248. package/dist/utils/profile.js +0 -5
  249. package/dist/utils/profile.js.map +1 -1
  250. package/dist/utils/security.d.ts.map +1 -1
  251. package/dist/utils/security.js +18 -8
  252. package/dist/utils/security.js.map +1 -1
  253. package/dist/utils/slug.d.ts +2 -0
  254. package/dist/utils/slug.d.ts.map +1 -0
  255. package/dist/utils/slug.js +6 -0
  256. package/dist/utils/slug.js.map +1 -0
  257. package/package.json +4 -2
  258. package/scripts/postinstall.mjs +52 -0
@@ -0,0 +1,110 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import chalk from "chalk";
3
+ import { ApiError } from "codemie-sdk";
4
+ import { ConfigLoader } from "../../../../utils/config.js";
5
+ import { getAuthenticatedClient } from "../../../../utils/auth.js";
6
+ import { ConfigurationError } from "../../../../utils/errors.js";
7
+ import { logger } from "../../../../utils/logger.js";
8
+ import { sanitizeLogArgs } from "../../../../utils/security.js";
9
+ import z, { ZodError } from "zod";
10
+ /**
11
+ * Get an authenticated CodeMie SDK client
12
+ */
13
+ export async function getSdkClient() {
14
+ const config = await ConfigLoader.load();
15
+ return getAuthenticatedClient(config);
16
+ }
17
+ /**
18
+ * Parse --data flag value: inline JSON string only
19
+ */
20
+ export async function parseDataInput(dataFlag) {
21
+ if (!dataFlag) {
22
+ throw new ConfigurationError('No data provided. Use --data \'{"key":"value"}\'');
23
+ }
24
+ try {
25
+ return JSON.parse(dataFlag);
26
+ }
27
+ catch {
28
+ throw new ConfigurationError(`Invalid JSON passed to --data. Check syntax near the beginning of the string.`);
29
+ }
30
+ }
31
+ /**
32
+ * Parse --json flag value: path to JSON file
33
+ */
34
+ export async function parseJsonFileInput(jsonFlag) {
35
+ if (!jsonFlag) {
36
+ throw new ConfigurationError("No JSON file provided. Use --json path/to/file.json");
37
+ }
38
+ const content = await readFile(jsonFlag, "utf-8");
39
+ return JSON.parse(content);
40
+ }
41
+ /**
42
+ * Parse data from either --data (inline JSON string) or --json (file path)
43
+ * They are mutually exclusive
44
+ */
45
+ export async function parseDataOrJsonFile(dataFlag, jsonFlag) {
46
+ if (dataFlag && jsonFlag) {
47
+ throw new ConfigurationError("Cannot use both --data and --json. Use --data for inline JSON string or --json for JSON file path.");
48
+ }
49
+ if (!dataFlag && !jsonFlag) {
50
+ throw new ConfigurationError('Either --data or --json is required. Use --data \'{"key":"value"}\' or --json path/to/file.json');
51
+ }
52
+ if (dataFlag) {
53
+ return parseDataInput(dataFlag);
54
+ }
55
+ return parseJsonFileInput(jsonFlag);
56
+ }
57
+ /**
58
+ * Output data as formatted JSON
59
+ */
60
+ export function outputJson(data) {
61
+ console.log(JSON.stringify(data, null, 2));
62
+ }
63
+ /**
64
+ * Handle API errors with user-friendly messages and exit
65
+ */
66
+ export function handleSdkError(error, operation) {
67
+ const msg = error instanceof Error ? error.message : String(error);
68
+ logger.error("SDK operation failed", ...sanitizeLogArgs({ operation, error: msg }));
69
+ if (error instanceof ApiError) {
70
+ const status = error.status;
71
+ if (status === 401 || status === 403) {
72
+ console.error(chalk.red(`❌ Authorization error: You do not have permission to ${operation}.`));
73
+ console.error(chalk.dim(' Run "codemie setup" to re-authenticate if your session expired.'));
74
+ }
75
+ else if (status === 404) {
76
+ console.error(chalk.red(`❌ Not found: The requested resource does not exist.`));
77
+ }
78
+ else {
79
+ console.error(chalk.red(`❌ API error: ${msg}`));
80
+ }
81
+ }
82
+ else if (error instanceof ZodError) {
83
+ console.error(chalk.red(`❌ Operation failed:`));
84
+ console.error(chalk.red(z.prettifyError(error)));
85
+ }
86
+ else {
87
+ console.error(chalk.red(`❌ ${msg}`));
88
+ }
89
+ process.exit(1);
90
+ }
91
+ /**
92
+ * Read a single string property safely from an unknown API response
93
+ */
94
+ export function getResponseMessage(response) {
95
+ if (response && typeof response === "object" && "message" in response) {
96
+ return String(response.message);
97
+ }
98
+ return "Done.";
99
+ }
100
+ /**
101
+ * Parse --config flag value: path to a YAML file
102
+ */
103
+ export async function parseConfigInput(configFlag) {
104
+ if (!configFlag) {
105
+ throw new ConfigurationError("No config provided. Use --config path/to/file.yaml");
106
+ }
107
+ const content = await readFile(configFlag, "utf-8");
108
+ return content;
109
+ }
110
+ //# sourceMappingURL=cli-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/cli-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface DatasourceTypeConfig {
2
+ command: string;
3
+ serviceKey?: string;
4
+ type: string;
5
+ description: string;
6
+ example?: string;
7
+ }
8
+ export declare const DATASOURCE_TYPES: DatasourceTypeConfig[];
9
+ //# sourceMappingURL=datasource-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource-types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/datasource-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,gBAAgB,EAAE,oBAAoB,EA4DlD,CAAC"}
@@ -0,0 +1,61 @@
1
+ export const DATASOURCE_TYPES = [
2
+ {
3
+ command: "confluence",
4
+ type: "knowledge_base_confluence",
5
+ description: "Confluence datasource",
6
+ example: '{"name":"Wiki","project_name":"Docs","cql":"space=TEAM","description":"Company wiki","shared_with_project":true}',
7
+ },
8
+ {
9
+ command: "jira",
10
+ type: "knowledge_base_jira",
11
+ description: "Jira datasource",
12
+ },
13
+ {
14
+ command: "file",
15
+ type: "knowledge_base_file",
16
+ description: "File datasource (use --file flags for local files)",
17
+ },
18
+ {
19
+ command: "code",
20
+ type: "code",
21
+ description: "Code repository datasource",
22
+ },
23
+ {
24
+ command: "google",
25
+ type: "llm_routing_google",
26
+ description: "Google Docs datasource",
27
+ },
28
+ {
29
+ command: "provider",
30
+ type: "provider",
31
+ description: "Provider datasource",
32
+ },
33
+ {
34
+ command: "azure-devops-wiki",
35
+ serviceKey: "azureDevOpsWiki",
36
+ type: "knowledge_base_azure_devops_wiki",
37
+ description: "Azure DevOps Wiki datasource",
38
+ },
39
+ {
40
+ command: "azure-devops-work-item",
41
+ serviceKey: "azureDevOpsWorkItem",
42
+ type: "knowledge_base_azure_devops_work_item",
43
+ description: "Azure DevOps Work Item datasource",
44
+ },
45
+ {
46
+ command: "xray",
47
+ type: "knowledge_base_xray",
48
+ description: "Xray test management datasource",
49
+ },
50
+ {
51
+ command: "sharepoint",
52
+ type: "knowledge_base_sharepoint",
53
+ description: "SharePoint datasource",
54
+ },
55
+ {
56
+ command: "platform",
57
+ type: "platform_marketplace_assistant",
58
+ description: "Platform marketplace assistant datasource",
59
+ },
60
+ ];
61
+ //# sourceMappingURL=datasource-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource-types.js","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/datasource-types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD;QACE,OAAO,EAAE,YAAY;QACrB,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,uBAAuB;QACpC,OAAO,EACL,kHAAkH;KACrH;IACD;QACE,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,iBAAiB;KAC/B;IACD;QACE,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,oDAAoD;KAClE;IACD;QACE,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,4BAA4B;KAC1C;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,wBAAwB;KACtC;IACD;QACE,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,OAAO,EAAE,mBAAmB;QAC5B,UAAU,EAAE,iBAAiB;QAC7B,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,8BAA8B;KAC5C;IACD;QACE,OAAO,EAAE,wBAAwB;QACjC,UAAU,EAAE,qBAAqB;QACjC,IAAI,EAAE,uCAAuC;QAC7C,WAAW,EAAE,mCAAmC;KACjD;IACD;QACE,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,iCAAiC;KAC/C;IACD;QACE,OAAO,EAAE,YAAY;QACrB,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,uBAAuB;KACrC;IACD;QACE,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,2CAA2C;KACzD;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { File } from "codemie-sdk";
2
+ /**
3
+ * Read files from local paths and convert to SDK File format
4
+ * @param filePaths Array of local file paths
5
+ * @returns Array of File objects with content and metadata
6
+ */
7
+ export declare function readFilesFromPaths(filePaths: string[]): Promise<File[]>;
8
+ //# sourceMappingURL=file-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/file-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,EAAE,CAAC,CAYjB"}
@@ -0,0 +1,21 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { basename, normalize } from "node:path";
3
+ import { lookup } from "mime-types";
4
+ import { PathSecurityError } from "../../../../utils/errors.js";
5
+ /**
6
+ * Read files from local paths and convert to SDK File format
7
+ * @param filePaths Array of local file paths
8
+ * @returns Array of File objects with content and metadata
9
+ */
10
+ export async function readFilesFromPaths(filePaths) {
11
+ return Promise.all(filePaths.map(async (filePath) => {
12
+ if (normalize(filePath).includes("..")) {
13
+ throw new PathSecurityError(filePath, "path traversal not allowed");
14
+ }
15
+ const content = await readFile(filePath);
16
+ const name = basename(filePath);
17
+ const mime_type = lookup(filePath) || "application/octet-stream";
18
+ return { name, content, mime_type };
19
+ }));
20
+ }
21
+ //# sourceMappingURL=file-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/file-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAmB;IAEnB,OAAO,OAAO,CAAC,GAAG,CAChB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,iBAAiB,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,0BAA0B,CAAC;QACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,82 @@
1
+ export interface TableColumn<T> {
2
+ header: string;
3
+ width: number;
4
+ getValue: (item: T) => string;
5
+ }
6
+ /**
7
+ * Generic table renderer for list views
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const columns: TableColumn<Assistant>[] = [
12
+ * { header: "ID", width: 40, getValue: (a) => chalk.cyan(a.id) },
13
+ * { header: "Name", width: 28, getValue: (a) => a.name },
14
+ * ];
15
+ * printTable(assistants, columns);
16
+ * ```
17
+ */
18
+ export declare function printTable<T>(items: T[], columns: TableColumn<T>[]): void;
19
+ export interface DetailRow {
20
+ label: string;
21
+ value: string;
22
+ }
23
+ /**
24
+ * Generic detail renderer for entity detail views
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const rows: DetailRow[] = [
29
+ * { label: "ID", value: chalk.cyan(assistant.id) },
30
+ * { label: "Name", value: assistant.name },
31
+ * ];
32
+ * printDetail(rows);
33
+ * ```
34
+ */
35
+ export declare function printDetail(rows: DetailRow[], options?: {
36
+ labelWidth?: number;
37
+ valueWidth?: number;
38
+ }): void;
39
+ /**
40
+ * Format optional field with fallback to dim dash
41
+ */
42
+ export declare function optional(value: string | null | undefined): string;
43
+ /**
44
+ * Format boolean as yes/no with color
45
+ */
46
+ export declare function yesNo(value: boolean | null | undefined): string;
47
+ /**
48
+ * Format status with color coding
49
+ */
50
+ export declare function statusColor(status: string | null | undefined, colorMap?: Record<string, (text: string) => string>): string;
51
+ export interface EmptyStateInstructions {
52
+ message?: string;
53
+ commands?: string[];
54
+ locations?: string[];
55
+ helpUrl?: string;
56
+ }
57
+ /**
58
+ * Generic empty state message with optional helpful instructions
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * printEmpty('assistants', {
63
+ * message: 'Create assistants to get started',
64
+ * commands: ['codemie sdk assistants create --data @assistant.json'],
65
+ * helpUrl: 'https://docs.codemie.ai/assistants'
66
+ * });
67
+ * ```
68
+ */
69
+ export declare function printEmpty(entityType: string, instructions?: EmptyStateInstructions): void;
70
+ /**
71
+ * Generic list header
72
+ */
73
+ export declare function printListHeader(entityType: string, count: number): void;
74
+ /**
75
+ * Generic success message for create/update/delete operations
76
+ */
77
+ export declare function printSuccess(message: string): void;
78
+ /**
79
+ * Print additional info line (dimmed)
80
+ */
81
+ export declare function printInfo(message: string): void;
82
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/render.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAezE;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,EAAE,EACjB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,IAAI,CAaN;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAI/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAM,GACtD,MAAM,CAeR;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,sBAAsB,GACpC,IAAI,CAqCN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C"}
@@ -0,0 +1,149 @@
1
+ import chalk from "chalk";
2
+ import Table from "cli-table3";
3
+ /**
4
+ * Generic table renderer for list views
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * const columns: TableColumn<Assistant>[] = [
9
+ * { header: "ID", width: 40, getValue: (a) => chalk.cyan(a.id) },
10
+ * { header: "Name", width: 28, getValue: (a) => a.name },
11
+ * ];
12
+ * printTable(assistants, columns);
13
+ * ```
14
+ */
15
+ export function printTable(items, columns) {
16
+ const table = new Table({
17
+ style: {
18
+ head: columns.map(() => "white"),
19
+ },
20
+ head: columns.map((col) => chalk.bold(col.header)),
21
+ colWidths: columns.map((col) => col.width),
22
+ wordWrap: true,
23
+ });
24
+ for (const item of items) {
25
+ table.push(columns.map((col) => col.getValue(item)));
26
+ }
27
+ console.log(table.toString());
28
+ }
29
+ /**
30
+ * Generic detail renderer for entity detail views
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const rows: DetailRow[] = [
35
+ * { label: "ID", value: chalk.cyan(assistant.id) },
36
+ * { label: "Name", value: assistant.name },
37
+ * ];
38
+ * printDetail(rows);
39
+ * ```
40
+ */
41
+ export function printDetail(rows, options = {}) {
42
+ const { labelWidth = 18, valueWidth = 60 } = options;
43
+ const table = new Table({
44
+ colWidths: [labelWidth, valueWidth],
45
+ wordWrap: true,
46
+ });
47
+ for (const row of rows) {
48
+ table.push([chalk.bold(row.label), row.value]);
49
+ }
50
+ console.log("\n" + table.toString());
51
+ }
52
+ /**
53
+ * Format optional field with fallback to dim dash
54
+ */
55
+ export function optional(value) {
56
+ return value ?? chalk.dim("—");
57
+ }
58
+ /**
59
+ * Format boolean as yes/no with color
60
+ */
61
+ export function yesNo(value) {
62
+ if (value === true)
63
+ return chalk.green("yes");
64
+ if (value === false)
65
+ return chalk.dim("no");
66
+ return chalk.dim("—");
67
+ }
68
+ /**
69
+ * Format status with color coding
70
+ */
71
+ export function statusColor(status, colorMap = {}) {
72
+ if (!status)
73
+ return chalk.dim("—");
74
+ const defaultMap = {
75
+ completed: chalk.green,
76
+ success: chalk.green,
77
+ failed: chalk.red,
78
+ error: chalk.red,
79
+ pending: chalk.yellow,
80
+ in_progress: chalk.yellow,
81
+ ...colorMap,
82
+ };
83
+ const colorFn = defaultMap[status.toLowerCase()] || ((s) => s);
84
+ return colorFn(status);
85
+ }
86
+ /**
87
+ * Generic empty state message with optional helpful instructions
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * printEmpty('assistants', {
92
+ * message: 'Create assistants to get started',
93
+ * commands: ['codemie sdk assistants create --data @assistant.json'],
94
+ * helpUrl: 'https://docs.codemie.ai/assistants'
95
+ * });
96
+ * ```
97
+ */
98
+ export function printEmpty(entityType, instructions) {
99
+ console.log(chalk.yellow(`\nNo ${entityType} found.`));
100
+ if (!instructions) {
101
+ return;
102
+ }
103
+ // Optional custom message
104
+ if (instructions.message) {
105
+ console.log(chalk.white(instructions.message));
106
+ console.log("");
107
+ }
108
+ // Commands to run
109
+ if (instructions.commands && instructions.commands.length > 0) {
110
+ console.log(chalk.white("Create new with:"));
111
+ for (const cmd of instructions.commands) {
112
+ console.log(` ${chalk.cyan(cmd)}`);
113
+ }
114
+ console.log("");
115
+ }
116
+ // Locations/paths
117
+ if (instructions.locations && instructions.locations.length > 0) {
118
+ console.log(chalk.white("Or manage via:"));
119
+ for (const loc of instructions.locations) {
120
+ console.log(` • ${chalk.cyan(loc)}`);
121
+ }
122
+ console.log("");
123
+ }
124
+ // Help URL
125
+ if (instructions.helpUrl) {
126
+ console.log(chalk.white("Learn more:"));
127
+ console.log(` ${chalk.cyan(instructions.helpUrl)}`);
128
+ console.log("");
129
+ }
130
+ }
131
+ /**
132
+ * Generic list header
133
+ */
134
+ export function printListHeader(entityType, count) {
135
+ console.log(chalk.bold(`\n${entityType} (${count})`));
136
+ }
137
+ /**
138
+ * Generic success message for create/update/delete operations
139
+ */
140
+ export function printSuccess(message) {
141
+ console.log(chalk.green(`✓ ${message}`));
142
+ }
143
+ /**
144
+ * Print additional info line (dimmed)
145
+ */
146
+ export function printInfo(message) {
147
+ console.log(chalk.dim(` ${message}`));
148
+ }
149
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../../src/cli/commands/sdk/utils/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createWorkflowsSubcommand(): Command;
3
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/sdk/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,wBAAgB,yBAAyB,IAAI,OAAO,CAsNnD"}
@@ -0,0 +1,170 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { listWorkflows, getWorkflow, createWorkflow, updateWorkflow, deleteWorkflow, } from "./services/workflows.js";
5
+ import { getSdkClient, parseDataOrJsonFile, parseConfigInput, outputJson, handleSdkError, getResponseMessage, } from "./utils/cli-utils.js";
6
+ import { printTable, printDetail, printEmpty, printListHeader, printSuccess, optional, yesNo, } from "./utils/render.js";
7
+ export function createWorkflowsSubcommand() {
8
+ const cmd = new Command("workflows").description("Manage CodeMie workflows");
9
+ cmd
10
+ .command("list")
11
+ .description("List workflows visible to the current user\n" +
12
+ "Examples:\n" +
13
+ " $ codemie workflows list\n" +
14
+ " $ codemie workflows list --page 2 --per-page 25\n" +
15
+ " $ codemie workflows list --search 'My Workflow' --project MyProject --json")
16
+ .option("--json", "Output in JSON format")
17
+ .option("--page <n>", "Page number (starts at 0)", "0")
18
+ .option("--per-page <n>", "Results per page (1-100)", "10")
19
+ .option("--search <value>", "Search by name or description")
20
+ .option("--projects <name>", "Filter by project name (comma-separated)")
21
+ .action(async (opts) => {
22
+ const client = await getSdkClient();
23
+ const spinner = ora("Fetching workflows...").start();
24
+ try {
25
+ const params = {
26
+ page: parseInt(opts.page, 10),
27
+ per_page: parseInt(opts.perPage, 10),
28
+ };
29
+ if (opts.search) {
30
+ params.search = opts.search;
31
+ }
32
+ if (opts.projects) {
33
+ params.projects = opts.projects.trim().split(",");
34
+ }
35
+ const items = await listWorkflows(client, params);
36
+ spinner.stop();
37
+ if (opts.json) {
38
+ outputJson(items);
39
+ return;
40
+ }
41
+ if (items.length === 0) {
42
+ printEmpty("workflows");
43
+ return;
44
+ }
45
+ printListHeader("Workflows", items.length);
46
+ const columns = [
47
+ { header: "ID", width: 40, getValue: (w) => chalk.cyan(w.id) },
48
+ { header: "Name", width: 26, getValue: (w) => w.name },
49
+ {
50
+ header: "Project",
51
+ width: 20,
52
+ getValue: (w) => optional(w.project),
53
+ },
54
+ { header: "Mode", width: 14, getValue: (w) => optional(w.mode) },
55
+ { header: "Shared", width: 8, getValue: (w) => yesNo(w.shared) },
56
+ ];
57
+ printTable(items, columns);
58
+ }
59
+ catch (error) {
60
+ spinner.stop();
61
+ handleSdkError(error, "list workflows");
62
+ }
63
+ });
64
+ cmd
65
+ .command("get <id>")
66
+ .description("Get detailed information about a specific workflow")
67
+ .option("--json", "Output in JSON format")
68
+ .action(async (id, opts) => {
69
+ const client = await getSdkClient();
70
+ const spinner = ora("Fetching workflow...").start();
71
+ try {
72
+ const item = await getWorkflow(client, id);
73
+ spinner.stop();
74
+ if (opts.json) {
75
+ outputJson(item);
76
+ return;
77
+ }
78
+ const rows = [
79
+ { label: "ID", value: chalk.cyan(item.id) },
80
+ { label: "Name", value: item.name },
81
+ { label: "Project", value: optional(item.project) },
82
+ { label: "Mode", value: optional(item.mode) },
83
+ { label: "Description", value: optional(item.description) },
84
+ { label: "Shared", value: yesNo(item.shared) },
85
+ {
86
+ label: "Creator",
87
+ value: optional(item.created_by?.name),
88
+ },
89
+ ];
90
+ if (item.update_date) {
91
+ rows.push({ label: "Updated", value: item.update_date });
92
+ }
93
+ printDetail(rows);
94
+ }
95
+ catch (error) {
96
+ spinner.stop();
97
+ handleSdkError(error, "get workflow");
98
+ }
99
+ });
100
+ cmd
101
+ .command("create")
102
+ .description("Create a new workflow with the specified configuration\n" +
103
+ "Examples:\n" +
104
+ ' $ codemie workflows create --data \'{"name":"My Workflow","description":"Custom workflow"}\' --config workflow.yaml\n' +
105
+ ' $ codemie workflows create --json path/to/workflow.json --config workflow.yaml\n')
106
+ .option("--data <string>", "Workflow configuration as inline JSON string")
107
+ .option("--json <path>", "Path to JSON file with workflow configuration")
108
+ .option("--config <path>", "Path to workflow YAML config file")
109
+ .action(async (opts) => {
110
+ const client = await getSdkClient();
111
+ const spinner = ora("Creating workflow...").start();
112
+ try {
113
+ const data = await parseDataOrJsonFile(opts.data, opts.json);
114
+ const config = opts.config
115
+ ? await parseConfigInput(opts.config)
116
+ : undefined;
117
+ const result = await createWorkflow(client, data, config);
118
+ spinner.stop();
119
+ printSuccess(getResponseMessage(result));
120
+ }
121
+ catch (error) {
122
+ spinner.stop();
123
+ handleSdkError(error, "create workflow");
124
+ }
125
+ });
126
+ cmd
127
+ .command("update <id>")
128
+ .description("Update an existing workflow's configuration\n" +
129
+ "Examples:\n" +
130
+ ' $ codemie workflows update wfl_abc123 --data \'{"name":"Updated Name"}\' --config workflow.yaml\n' +
131
+ ' $ codemie workflows update wfl_abc123 --json path/to/update.json --config workflow.yaml\n')
132
+ .option("--data <string>", "Fields to update as inline JSON string")
133
+ .option("--json <path>", "Path to JSON file with fields to update")
134
+ .option("--config <path>", "Path to workflow YAML config file")
135
+ .action(async (id, opts) => {
136
+ const client = await getSdkClient();
137
+ const spinner = ora("Updating workflow...").start();
138
+ try {
139
+ const data = await parseDataOrJsonFile(opts.data, opts.json);
140
+ const config = opts.config
141
+ ? await parseConfigInput(opts.config)
142
+ : undefined;
143
+ const result = await updateWorkflow(client, id, data, config);
144
+ spinner.stop();
145
+ printSuccess(getResponseMessage(result));
146
+ }
147
+ catch (error) {
148
+ spinner.stop();
149
+ handleSdkError(error, "update workflow");
150
+ }
151
+ });
152
+ cmd
153
+ .command("delete <id>")
154
+ .description("Permanently delete a workflow")
155
+ .action(async (id) => {
156
+ const client = await getSdkClient();
157
+ const spinner = ora("Deleting workflow...").start();
158
+ try {
159
+ await deleteWorkflow(client, id);
160
+ spinner.stop();
161
+ printSuccess(`✓ Workflow ${chalk.cyan(id)} deleted.`);
162
+ }
163
+ catch (error) {
164
+ spinner.stop();
165
+ handleSdkError(error, "delete workflow");
166
+ }
167
+ });
168
+ return cmd;
169
+ }
170
+ //# sourceMappingURL=workflows.js.map