@contextium/cli 0.4.1 → 0.7.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 (92) hide show
  1. package/dist/commands/agents.d.ts +3 -0
  2. package/dist/commands/agents.d.ts.map +1 -0
  3. package/dist/commands/agents.js +243 -0
  4. package/dist/commands/agents.js.map +1 -0
  5. package/dist/commands/cat.js +3 -3
  6. package/dist/commands/cat.js.map +1 -1
  7. package/dist/commands/create-library.d.ts +3 -0
  8. package/dist/commands/create-library.d.ts.map +1 -0
  9. package/dist/commands/create-library.js +49 -0
  10. package/dist/commands/create-library.js.map +1 -0
  11. package/dist/commands/delete-file.d.ts +3 -0
  12. package/dist/commands/delete-file.d.ts.map +1 -0
  13. package/dist/commands/delete-file.js +39 -0
  14. package/dist/commands/delete-file.js.map +1 -0
  15. package/dist/commands/edit-file.d.ts +3 -0
  16. package/dist/commands/edit-file.d.ts.map +1 -0
  17. package/dist/commands/edit-file.js +64 -0
  18. package/dist/commands/edit-file.js.map +1 -0
  19. package/dist/commands/files.d.ts.map +1 -1
  20. package/dist/commands/files.js +5 -4
  21. package/dist/commands/files.js.map +1 -1
  22. package/dist/commands/find.d.ts.map +1 -1
  23. package/dist/commands/find.js +2 -1
  24. package/dist/commands/find.js.map +1 -1
  25. package/dist/commands/init.js +2 -2
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/marketplace.d.ts +3 -0
  28. package/dist/commands/marketplace.d.ts.map +1 -0
  29. package/dist/commands/marketplace.js +178 -0
  30. package/dist/commands/marketplace.js.map +1 -0
  31. package/dist/commands/new-file.d.ts +3 -0
  32. package/dist/commands/new-file.d.ts.map +1 -0
  33. package/dist/commands/new-file.js +77 -0
  34. package/dist/commands/new-file.js.map +1 -0
  35. package/dist/commands/projects.js +6 -6
  36. package/dist/commands/projects.js.map +1 -1
  37. package/dist/commands/search.d.ts.map +1 -1
  38. package/dist/commands/search.js +5 -4
  39. package/dist/commands/search.js.map +1 -1
  40. package/dist/commands/setup.d.ts +3 -0
  41. package/dist/commands/setup.d.ts.map +1 -0
  42. package/dist/commands/setup.js +9 -0
  43. package/dist/commands/setup.js.map +1 -0
  44. package/dist/commands/skills.d.ts +3 -0
  45. package/dist/commands/skills.d.ts.map +1 -0
  46. package/dist/commands/skills.js +98 -0
  47. package/dist/commands/skills.js.map +1 -0
  48. package/dist/commands/status.js +1 -1
  49. package/dist/commands/status.js.map +1 -1
  50. package/dist/commands/structure.d.ts +3 -0
  51. package/dist/commands/structure.d.ts.map +1 -0
  52. package/dist/commands/structure.js +96 -0
  53. package/dist/commands/structure.js.map +1 -0
  54. package/dist/commands/sync.js +1 -1
  55. package/dist/commands/sync.js.map +1 -1
  56. package/dist/commands/tags.d.ts.map +1 -1
  57. package/dist/commands/tags.js +381 -22
  58. package/dist/commands/tags.js.map +1 -1
  59. package/dist/commands/update-library.d.ts +3 -0
  60. package/dist/commands/update-library.d.ts.map +1 -0
  61. package/dist/commands/update-library.js +69 -0
  62. package/dist/commands/update-library.js.map +1 -0
  63. package/dist/commands/versions.d.ts +3 -0
  64. package/dist/commands/versions.d.ts.map +1 -0
  65. package/dist/commands/versions.js +48 -0
  66. package/dist/commands/versions.js.map +1 -0
  67. package/dist/commands/workflow.js +2 -2
  68. package/dist/commands/workflow.js.map +1 -1
  69. package/dist/commands/workflows.d.ts.map +1 -1
  70. package/dist/commands/workflows.js +400 -17
  71. package/dist/commands/workflows.js.map +1 -1
  72. package/dist/commands/workspaces.js +1 -1
  73. package/dist/commands/workspaces.js.map +1 -1
  74. package/dist/index.js +63 -13
  75. package/dist/index.js.map +1 -1
  76. package/dist/lib/api-client.d.ts +1 -0
  77. package/dist/lib/api-client.d.ts.map +1 -1
  78. package/dist/lib/api-client.js +11 -6
  79. package/dist/lib/api-client.js.map +1 -1
  80. package/dist/lib/claude-permissions.d.ts +4 -0
  81. package/dist/lib/claude-permissions.d.ts.map +1 -0
  82. package/dist/lib/claude-permissions.js +41 -0
  83. package/dist/lib/claude-permissions.js.map +1 -0
  84. package/dist/lib/wizard-state.d.ts +22 -0
  85. package/dist/lib/wizard-state.d.ts.map +1 -0
  86. package/dist/lib/wizard-state.js +23 -0
  87. package/dist/lib/wizard-state.js.map +1 -0
  88. package/dist/lib/wizard.d.ts +4 -0
  89. package/dist/lib/wizard.d.ts.map +1 -0
  90. package/dist/lib/wizard.js +910 -0
  91. package/dist/lib/wizard.js.map +1 -0
  92. package/package.json +6 -3
@@ -0,0 +1,69 @@
1
+ import { Command } from 'commander';
2
+ import { ApiClient } from '../lib/api-client.js';
3
+ import { loadConfig } from '../lib/config.js';
4
+ import { chalk, ora } from '../lib/output.js';
5
+ export const updateLibraryCommand = new Command('update-library')
6
+ .description('Update a context library (project)')
7
+ .argument('<libraryId>', 'Library ID, name, or slug')
8
+ .option('-w, --workspace <id>', 'Workspace name or slug (required for name/slug lookup)')
9
+ .option('-n, --name <name>', 'New library name')
10
+ .option('-s, --slug <slug>', 'New library slug')
11
+ .option('-d, --description <text>', 'New description')
12
+ .action(async (libraryId, options) => {
13
+ const spinner = ora('Updating context library...').start();
14
+ try {
15
+ const config = await loadConfig();
16
+ const client = new ApiClient(config.api_key, config.api_url);
17
+ // Resolve library by name/slug if not a UUID
18
+ let projectId = libraryId;
19
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
20
+ if (!uuidRegex.test(projectId)) {
21
+ if (!options.workspace) {
22
+ spinner.fail('Workspace is required when using library name/slug. Use -w flag.');
23
+ process.exit(1);
24
+ }
25
+ const { data: workspacesData } = await client.get('/workspaces');
26
+ const workspaces = workspacesData.data || workspacesData;
27
+ const workspace = workspaces.find((w) => w.slug.toLowerCase().trim() === options.workspace.toLowerCase().trim() ||
28
+ w.name.toLowerCase().trim() === options.workspace.toLowerCase().trim());
29
+ if (!workspace) {
30
+ spinner.fail(`Workspace '${options.workspace}' not found`);
31
+ process.exit(1);
32
+ }
33
+ const { data: projectsData } = await client.get(`/workspaces/${workspace.id}/projects`);
34
+ const projects = projectsData.data || projectsData || [];
35
+ const match = projects.find((p) => p.slug === projectId || p.name.toLowerCase() === projectId.toLowerCase());
36
+ if (!match) {
37
+ spinner.fail(`Context library '${projectId}' not found.`);
38
+ process.exit(1);
39
+ }
40
+ projectId = match.id;
41
+ }
42
+ const data = {};
43
+ if (options.name)
44
+ data.name = options.name;
45
+ if (options.slug)
46
+ data.slug = options.slug;
47
+ if (options.description)
48
+ data.description = options.description;
49
+ if (Object.keys(data).length === 0) {
50
+ spinner.fail('No fields to update. Use --name, --slug, or --description.');
51
+ process.exit(1);
52
+ }
53
+ const { data: projectData } = await client.put(`/projects/${projectId}`, data);
54
+ const project = projectData.data || projectData;
55
+ spinner.stop();
56
+ console.log(chalk.green('\n✓ Context library updated successfully!'));
57
+ console.log(` Name: ${project.name}`);
58
+ console.log(` Slug: ${project.slug}`);
59
+ console.log(` ID: ${project.id}`);
60
+ if (project.description)
61
+ console.log(` Description: ${project.description}`);
62
+ console.log();
63
+ }
64
+ catch (error) {
65
+ spinner.fail(`Failed to update context library: ${error.message}`);
66
+ process.exit(1);
67
+ }
68
+ });
69
+ //# sourceMappingURL=update-library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-library.js","sourceRoot":"","sources":["../../src/commands/update-library.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const versionsCommand: Command;
3
+ //# sourceMappingURL=versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,eAAe,SAiDxB,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { Command } from 'commander';
2
+ import { ApiClient } from '../lib/api-client.js';
3
+ import { loadConfig } from '../lib/config.js';
4
+ import { chalk, ora } from '../lib/output.js';
5
+ export const versionsCommand = new Command('versions')
6
+ .description('Show version history for a file')
7
+ .argument('<fileId>', 'File ID')
8
+ .option('--limit <n>', 'Number of versions to show', '10')
9
+ .action(async (fileId, options) => {
10
+ const spinner = ora('Loading version history...').start();
11
+ try {
12
+ const config = await loadConfig();
13
+ const client = new ApiClient(config.api_key, config.api_url);
14
+ // Get file info
15
+ const { data: fileData } = await client.get(`/files/${fileId}`);
16
+ const file = fileData.data || fileData;
17
+ // Get versions
18
+ const { data: versionsData } = await client.get(`/files/${fileId}/versions`);
19
+ const versions = versionsData.data || versionsData || [];
20
+ spinner.stop();
21
+ console.log(chalk.bold(`\nVersion history for '${file.title}':`));
22
+ console.log(chalk.dim(` Current version: ${file.currentVersion || 1}\n`));
23
+ if (versions.length === 0) {
24
+ console.log(chalk.yellow(' No previous versions found.'));
25
+ console.log();
26
+ return;
27
+ }
28
+ const limit = parseInt(options.limit);
29
+ const displayVersions = versions.slice(0, limit);
30
+ for (const version of displayVersions) {
31
+ const date = version.createdAt ? new Date(version.createdAt).toLocaleString() : 'unknown';
32
+ console.log(chalk.cyan(` v${version.versionNumber || version.version}`), chalk.dim(`— ${date}`));
33
+ if (version.changeSummary)
34
+ console.log(chalk.dim(` ${version.changeSummary}`));
35
+ console.log(chalk.gray(` id: ${version.id}`));
36
+ console.log();
37
+ }
38
+ if (versions.length > limit) {
39
+ console.log(chalk.dim(` ... and ${versions.length - limit} more. Use --limit to show more.`));
40
+ console.log();
41
+ }
42
+ }
43
+ catch (error) {
44
+ spinner.fail(`Failed to load versions: ${error.message}`);
45
+ process.exit(1);
46
+ }
47
+ });
48
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { chalk, ora } from '../lib/output.js';
6
6
  export const workflowCommand = new Command('workflow')
7
7
  .description('Load a workflow and activate all its connected resources')
8
8
  .argument('<workflow>', 'Workflow name or ID')
9
- .requiredOption('--workspace <slug>', 'Workspace name or slug')
9
+ .requiredOption('-w, --workspace <slug>', 'Workspace name or slug')
10
10
  .option('--sync', 'Sync context library files to local cache')
11
11
  .option('--format <format>', 'Output format (text|json)', 'text')
12
12
  .action(async (workflowName, options) => {
@@ -145,7 +145,7 @@ export const workflowCommand = new Command('workflow')
145
145
  console.log();
146
146
  }
147
147
  else if (files.length > 0) {
148
- console.log(chalk.dim(`To sync files to cache: contextium workflow "${workflowName}" --workspace ${options.workspace} --sync`));
148
+ console.log(chalk.dim(`To sync files to cache: contextium workflow "${workflowName}" -w ${options.workspace} --sync`));
149
149
  console.log();
150
150
  }
151
151
  console.log(chalk.green(`✓ Workflow '${workflow.name}' loaded`));
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,0DAA0D,CAAC;KACvE,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC7C,cAAc,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;KAC9D,MAAM,CAAC,QAAQ,EAAE,2CAA2C,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAA;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;QACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAE5D,iBAAiB;QACjB,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAChE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,cAAc,CAAA;QAExD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC3C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;YACtE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CACvE,CAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,SAAS,aAAa,CAAC,CAAA;YAC1D,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC/C,UAAU,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;YACrD,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,8BAA8B;QAC9B,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;QACzF,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,IAAI,aAAa,CAAA;QAErD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAO,EAAE,EAAE,CAC1C,EAAE,CAAC,EAAE,KAAK,YAAY;YACtB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CACnE,CAAA;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,aAAa,YAAY,6BAA6B,SAAS,CAAC,IAAI,GAAG,CAAC,CAAA;YACrF,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAC9C,SAAS,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;oBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC1C,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,OAAO,GAAG,0BAA0B,QAAQ,CAAC,IAAI,MAAM,CAAA;QAC/D,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAC9C,eAAe,SAAS,CAAC,EAAE,cAAc,QAAQ,CAAC,EAAE,OAAO,CAC5D,CAAA;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,IAAI,aAAa,CAAA;QAErD,OAAO,CAAC,IAAI,EAAE,CAAA;QAEd,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC/C,OAAM;QACR,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/F,IAAI,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,SAAS;QACT,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBACrF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,CAAA;gBACzD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;gBACpD,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,SAAS;QACT,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC3D,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,oBAAoB;QACpB,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,IAAI,EAAE,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACnE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACxC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,OAAO;QACP,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,IAAI,EAAE,CAAA;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,QAAQ;QACR,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAA;QACjE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC1B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,EAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,CACvC,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,mCAAmC;QACnC,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAA;YAE5E,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,IAAI,MAAM,GAAG,CAAC,CAAA;YAEd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC9C,IAAI,UAAU,IAAI,UAAU,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpE,MAAM,EAAE,CAAA;oBACR,SAAQ;gBACV,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;gBAChE,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBACrC,UAAU,EAAE,CAAA;YACd,CAAC;YAED,WAAW,CAAC,OAAO,CACjB,UAAU,KAAK,CAAC,MAAM,WAAW,UAAU,gBAAgB,MAAM,kBAAkB,CACpF,CAAA;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,YAAY,iBAAiB,OAAO,CAAC,SAAS,SAAS,CAAC,CAAC,CAAA;YAC/H,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,IAAI,UAAU,CAAC,CAAC,CAAA;QAChE,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,0DAA0D,CAAC;KACvE,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC7C,cAAc,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAClE,MAAM,CAAC,QAAQ,EAAE,2CAA2C,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,OAAO,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAA;IAElD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;QACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAE5D,iBAAiB;QACjB,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAChE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,cAAc,CAAA;QAExD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAC3C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;YACtE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CACvE,CAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,SAAS,aAAa,CAAC,CAAA;YAC1D,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC/C,UAAU,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;YACrD,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,8BAA8B;QAC9B,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;QACzF,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,IAAI,aAAa,CAAA;QAErD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAO,EAAE,EAAE,CAC1C,EAAE,CAAC,EAAE,KAAK,YAAY;YACtB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CACnE,CAAA;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,aAAa,YAAY,6BAA6B,SAAS,CAAC,IAAI,GAAG,CAAC,CAAA;YACrF,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAC9C,SAAS,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;oBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC1C,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,OAAO,GAAG,0BAA0B,QAAQ,CAAC,IAAI,MAAM,CAAA;QAC/D,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAC9C,eAAe,SAAS,CAAC,EAAE,cAAc,QAAQ,CAAC,EAAE,OAAO,CAC5D,CAAA;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,IAAI,aAAa,CAAA;QAErD,OAAO,CAAC,IAAI,EAAE,CAAA;QAEd,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAC/C,OAAM;QACR,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/F,IAAI,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,SAAS;QACT,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBACrF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,CAAA;gBACzD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;gBACpD,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,SAAS;QACT,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC3D,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,oBAAoB;QACpB,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,IAAI,EAAE,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACnE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACxC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,OAAO;QACP,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,IAAI,EAAE,CAAA;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,QAAQ;QACR,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAA;QACjE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC1B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,EAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,CACvC,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QAEb,mCAAmC;QACnC,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAA;YAE5E,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,IAAI,MAAM,GAAG,CAAC,CAAA;YAEd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC9C,IAAI,UAAU,IAAI,UAAU,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpE,MAAM,EAAE,CAAA;oBACR,SAAQ;gBACV,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;gBAChE,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBACrC,UAAU,EAAE,CAAA;YACd,CAAC;YAED,WAAW,CAAC,OAAO,CACjB,UAAU,KAAK,CAAC,MAAM,WAAW,UAAU,gBAAgB,MAAM,kBAAkB,CACpF,CAAA;YACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,YAAY,QAAQ,OAAO,CAAC,SAAS,SAAS,CAAC,CAAC,CAAA;YACtH,OAAO,CAAC,GAAG,EAAE,CAAA;QACf,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,IAAI,UAAU,CAAC,CAAC,CAAA;QAChE,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/commands/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,eAAO,MAAM,gBAAgB,SAoEzB,CAAA"}
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/commands/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA+BnC,eAAO,MAAM,gBAAgB,SACoB,CAAA"}
@@ -2,28 +2,40 @@ import { Command } from 'commander';
2
2
  import { ApiClient } from '../lib/api-client.js';
3
3
  import { loadConfig } from '../lib/config.js';
4
4
  import { chalk, ora } from '../lib/output.js';
5
+ async function resolveSkillsByName(client, workspaceId) {
6
+ const { data: projectsData } = await client.get(`/workspaces/${workspaceId}/projects`);
7
+ const projects = projectsData.data || projectsData || [];
8
+ const skillsProject = projects.find((p) => p.isSystem && p.systemType === 'skills');
9
+ if (!skillsProject) {
10
+ throw new Error('Skills Library not found in workspace.');
11
+ }
12
+ const { data: filesData } = await client.get(`/projects/${skillsProject.id}/files`);
13
+ return (filesData.data || filesData || []).filter((f) => !f.deletedAt);
14
+ }
15
+ async function resolveWorkspace(client, workspaceName) {
16
+ const { data: workspacesData } = await client.get('/workspaces');
17
+ const workspaces = workspacesData.data || workspacesData;
18
+ const workspace = workspaces.find((w) => w.slug.toLowerCase().trim() === workspaceName.toLowerCase().trim() ||
19
+ w.name.toLowerCase().trim() === workspaceName.toLowerCase().trim());
20
+ if (!workspace) {
21
+ console.log(chalk.dim('Available workspaces:'));
22
+ workspaces.forEach((w) => console.log(chalk.dim(` - ${w.name} (${w.slug})`)));
23
+ throw new Error(`Workspace '${workspaceName}' not found`);
24
+ }
25
+ return workspace;
26
+ }
5
27
  export const workflowsCommand = new Command('workflows')
28
+ .description('Manage workflows in a workspace');
29
+ workflowsCommand
30
+ .command('list')
6
31
  .description('List workflows in a workspace')
7
- .argument('<workspace>', 'Workspace name or slug')
8
- .action(async (workspaceName) => {
32
+ .requiredOption('-w, --workspace <workspace>', 'Workspace name or slug')
33
+ .action(async (options) => {
9
34
  const spinner = ora('Loading workflows...').start();
10
35
  try {
11
36
  const config = await loadConfig();
12
37
  const client = new ApiClient(config.api_key, config.api_url);
13
- // Find workspace by name or slug
14
- const { data: workspacesData } = await client.get('/workspaces');
15
- const workspaces = workspacesData.data || workspacesData;
16
- const workspace = workspaces.find((w) => w.slug.toLowerCase().trim() === workspaceName.toLowerCase().trim() ||
17
- w.name.toLowerCase().trim() === workspaceName.toLowerCase().trim());
18
- if (!workspace) {
19
- spinner.fail(`Workspace '${workspaceName}' not found`);
20
- console.log();
21
- console.log(chalk.dim('Available workspaces:'));
22
- workspaces.forEach((w) => {
23
- console.log(chalk.dim(` - ${w.name} (${w.slug})`));
24
- });
25
- process.exit(1);
26
- }
38
+ const workspace = await resolveWorkspace(client, options.workspace);
27
39
  const { data: workflowsData } = await client.get(`/workspaces/${workspace.id}/workflows`);
28
40
  const workflows = workflowsData.data || workflowsData;
29
41
  spinner.stop();
@@ -54,7 +66,7 @@ export const workflowsCommand = new Command('workflows')
54
66
  console.log(chalk.gray(` id: ${workflow.id}`));
55
67
  console.log();
56
68
  }
57
- console.log(chalk.dim(`To load a workflow: contextium workflow load "<name>" --workspace ${workspace.slug}`));
69
+ console.log(chalk.dim(`To load a workflow: contextium workflow "<name>" -w ${workspace.slug}`));
58
70
  console.log();
59
71
  }
60
72
  catch (error) {
@@ -62,4 +74,375 @@ export const workflowsCommand = new Command('workflows')
62
74
  process.exit(1);
63
75
  }
64
76
  });
77
+ workflowsCommand
78
+ .command('create')
79
+ .description('Create a new workflow')
80
+ .requiredOption('-w, --workspace <workspace>', 'Workspace name or slug')
81
+ .requiredOption('-n, --name <name>', 'Workflow name')
82
+ .option('-d, --description <text>', 'Workflow description')
83
+ .option('--agents <ids>', 'Comma-separated agent IDs or names')
84
+ .option('--skills <ids>', 'Comma-separated skill IDs or names')
85
+ .option('--tags <ids>', 'Comma-separated tag IDs or slug:value')
86
+ .option('--tag-types <ids>', 'Comma-separated tag type IDs or slugs')
87
+ .option('--libraries <ids>', 'Comma-separated context library IDs or names')
88
+ .action(async (options) => {
89
+ const spinner = ora('Creating workflow...').start();
90
+ try {
91
+ const config = await loadConfig();
92
+ const client = new ApiClient(config.api_key, config.api_url);
93
+ const workspace = await resolveWorkspace(client, options.workspace);
94
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
95
+ const data = { name: options.name };
96
+ if (options.description)
97
+ data.description = options.description;
98
+ // Resolve agents
99
+ if (options.agents) {
100
+ const agentInputs = options.agents.split(',').map((s) => s.trim());
101
+ const agentIds = [];
102
+ const needsResolve = agentInputs.some((a) => !uuidRegex.test(a));
103
+ let agents = [];
104
+ if (needsResolve) {
105
+ const { data: agentsData } = await client.get(`/workspaces/${workspace.id}/agents`);
106
+ agents = agentsData.data || agentsData || [];
107
+ }
108
+ for (const input of agentInputs) {
109
+ if (uuidRegex.test(input)) {
110
+ agentIds.push(input);
111
+ }
112
+ else {
113
+ const match = agents.find((a) => a.name.toLowerCase() === input.toLowerCase());
114
+ if (!match) {
115
+ spinner.fail(`Agent '${input}' not found.`);
116
+ process.exit(1);
117
+ }
118
+ agentIds.push(match.id);
119
+ }
120
+ }
121
+ data.agentIds = agentIds;
122
+ }
123
+ // Resolve skills
124
+ if (options.skills) {
125
+ const skillInputs = options.skills.split(',').map((s) => s.trim());
126
+ const skillIds = [];
127
+ const needsResolve = skillInputs.some((s) => !uuidRegex.test(s));
128
+ let skills = [];
129
+ if (needsResolve) {
130
+ skills = await resolveSkillsByName(client, workspace.id);
131
+ }
132
+ for (const input of skillInputs) {
133
+ if (uuidRegex.test(input)) {
134
+ skillIds.push(input);
135
+ }
136
+ else {
137
+ const match = skills.find((s) => (s.title || s.name || '').toLowerCase() === input.toLowerCase());
138
+ if (!match) {
139
+ spinner.fail(`Skill '${input}' not found.`);
140
+ process.exit(1);
141
+ }
142
+ skillIds.push(match.id);
143
+ }
144
+ }
145
+ data.skillIds = skillIds;
146
+ }
147
+ // Resolve tags
148
+ if (options.tags) {
149
+ const tagInputs = options.tags.split(',').map((s) => s.trim());
150
+ const tagIds = [];
151
+ const needsResolve = tagInputs.some((t) => !uuidRegex.test(t));
152
+ let allTags = [];
153
+ if (needsResolve) {
154
+ const { data: tagsData } = await client.get(`/workspaces/${workspace.id}/tags`);
155
+ allTags = tagsData.data || tagsData || [];
156
+ }
157
+ for (const input of tagInputs) {
158
+ if (uuidRegex.test(input)) {
159
+ tagIds.push(input);
160
+ }
161
+ else {
162
+ const [typeSlug, value] = input.includes(':') ? input.split(':') : [null, input];
163
+ const match = allTags.find((t) => {
164
+ if (typeSlug)
165
+ return t.typeSlug === typeSlug && t.value === value;
166
+ return t.value === value;
167
+ });
168
+ if (!match) {
169
+ spinner.fail(`Tag '${input}' not found.`);
170
+ process.exit(1);
171
+ }
172
+ tagIds.push(match.id);
173
+ }
174
+ }
175
+ data.tagIds = tagIds;
176
+ }
177
+ // Resolve tag types
178
+ if (options.tagTypes) {
179
+ const typeInputs = options.tagTypes.split(',').map((s) => s.trim());
180
+ const typeIds = [];
181
+ const needsResolve = typeInputs.some((t) => !uuidRegex.test(t));
182
+ let allTypes = [];
183
+ if (needsResolve) {
184
+ const { data: typesData } = await client.get(`/workspaces/${workspace.id}/tag-types`);
185
+ allTypes = typesData.data || typesData || [];
186
+ }
187
+ for (const input of typeInputs) {
188
+ if (uuidRegex.test(input)) {
189
+ typeIds.push(input);
190
+ }
191
+ else {
192
+ const match = allTypes.find((t) => t.slug === input || t.name.toLowerCase() === input.toLowerCase());
193
+ if (!match) {
194
+ spinner.fail(`Tag type '${input}' not found.`);
195
+ process.exit(1);
196
+ }
197
+ typeIds.push(match.id);
198
+ }
199
+ }
200
+ data.tagTypeIds = typeIds;
201
+ }
202
+ // Resolve libraries
203
+ if (options.libraries) {
204
+ const libInputs = options.libraries.split(',').map((s) => s.trim());
205
+ const libIds = [];
206
+ const needsResolve = libInputs.some((l) => !uuidRegex.test(l));
207
+ let allLibs = [];
208
+ if (needsResolve) {
209
+ const { data: libsData } = await client.get(`/workspaces/${workspace.id}/projects`);
210
+ allLibs = libsData.data || libsData || [];
211
+ }
212
+ for (const input of libInputs) {
213
+ if (uuidRegex.test(input)) {
214
+ libIds.push(input);
215
+ }
216
+ else {
217
+ const match = allLibs.find((l) => l.slug === input || l.name.toLowerCase() === input.toLowerCase());
218
+ if (!match) {
219
+ spinner.fail(`Context library '${input}' not found.`);
220
+ process.exit(1);
221
+ }
222
+ libIds.push(match.id);
223
+ }
224
+ }
225
+ data.projectIds = libIds;
226
+ }
227
+ const { data: workflowData } = await client.post(`/workspaces/${workspace.id}/workflows`, data);
228
+ const workflow = workflowData.data || workflowData;
229
+ spinner.stop();
230
+ console.log(chalk.green('\n✓ Workflow created successfully!'));
231
+ console.log(` Name: ${workflow.name}`);
232
+ console.log(` ID: ${workflow.id}`);
233
+ if (workflow.description)
234
+ console.log(` Description: ${workflow.description}`);
235
+ const parts = [];
236
+ if (workflow.agentIds?.length)
237
+ parts.push(`${workflow.agentIds.length} agent(s)`);
238
+ if (workflow.skillIds?.length)
239
+ parts.push(`${workflow.skillIds.length} skill(s)`);
240
+ if (workflow.projectIds?.length)
241
+ parts.push(`${workflow.projectIds.length} library(ies)`);
242
+ if (workflow.tagIds?.length)
243
+ parts.push(`${workflow.tagIds.length} tag(s)`);
244
+ if (parts.length)
245
+ console.log(` Resources: ${parts.join(', ')}`);
246
+ console.log();
247
+ }
248
+ catch (error) {
249
+ spinner.fail(`Failed to create workflow: ${error.message}`);
250
+ process.exit(1);
251
+ }
252
+ });
253
+ workflowsCommand
254
+ .command('update')
255
+ .description('Update an existing workflow')
256
+ .requiredOption('-w, --workspace <workspace>', 'Workspace name or slug')
257
+ .requiredOption('--id <workflowId>', 'Workflow ID or name')
258
+ .option('-n, --name <name>', 'New workflow name')
259
+ .option('-d, --description <text>', 'New description')
260
+ .option('--agents <ids>', 'Comma-separated agent IDs or names (replaces existing)')
261
+ .option('--skills <ids>', 'Comma-separated skill IDs or names (replaces existing)')
262
+ .option('--tags <ids>', 'Comma-separated tag IDs or slug:value (replaces existing)')
263
+ .option('--tag-types <ids>', 'Comma-separated tag type IDs or slugs (replaces existing)')
264
+ .option('--libraries <ids>', 'Comma-separated context library IDs or names (replaces existing)')
265
+ .action(async (options) => {
266
+ const spinner = ora('Updating workflow...').start();
267
+ try {
268
+ const config = await loadConfig();
269
+ const client = new ApiClient(config.api_key, config.api_url);
270
+ const workspace = await resolveWorkspace(client, options.workspace);
271
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
272
+ // Resolve workflow by name if not a UUID
273
+ let workflowId = options.id;
274
+ if (!uuidRegex.test(workflowId)) {
275
+ const { data: wfData } = await client.get(`/workspaces/${workspace.id}/workflows`);
276
+ const workflows = wfData.data || wfData || [];
277
+ const match = workflows.find((w) => w.name.toLowerCase() === workflowId.toLowerCase());
278
+ if (!match) {
279
+ spinner.fail(`Workflow '${workflowId}' not found.`);
280
+ process.exit(1);
281
+ }
282
+ workflowId = match.id;
283
+ }
284
+ const data = {};
285
+ if (options.name)
286
+ data.name = options.name;
287
+ if (options.description)
288
+ data.description = options.description;
289
+ // Resolve agents
290
+ if (options.agents) {
291
+ const inputs = options.agents.split(',').map((s) => s.trim());
292
+ const ids = [];
293
+ const needsResolve = inputs.some((a) => !uuidRegex.test(a));
294
+ let list = [];
295
+ if (needsResolve) {
296
+ const { data: d } = await client.get(`/workspaces/${workspace.id}/agents`);
297
+ list = d.data || d || [];
298
+ }
299
+ for (const input of inputs) {
300
+ if (uuidRegex.test(input)) {
301
+ ids.push(input);
302
+ }
303
+ else {
304
+ const m = list.find((a) => a.name.toLowerCase() === input.toLowerCase());
305
+ if (!m) {
306
+ spinner.fail(`Agent '${input}' not found.`);
307
+ process.exit(1);
308
+ }
309
+ ids.push(m.id);
310
+ }
311
+ }
312
+ data.agentIds = ids;
313
+ }
314
+ // Resolve skills
315
+ if (options.skills) {
316
+ const inputs = options.skills.split(',').map((s) => s.trim());
317
+ const ids = [];
318
+ const needsResolve = inputs.some((s) => !uuidRegex.test(s));
319
+ let list = [];
320
+ if (needsResolve) {
321
+ list = await resolveSkillsByName(client, workspace.id);
322
+ }
323
+ for (const input of inputs) {
324
+ if (uuidRegex.test(input)) {
325
+ ids.push(input);
326
+ }
327
+ else {
328
+ const m = list.find((s) => (s.title || s.name || '').toLowerCase() === input.toLowerCase());
329
+ if (!m) {
330
+ spinner.fail(`Skill '${input}' not found.`);
331
+ process.exit(1);
332
+ }
333
+ ids.push(m.id);
334
+ }
335
+ }
336
+ data.skillIds = ids;
337
+ }
338
+ // Resolve tags
339
+ if (options.tags) {
340
+ const inputs = options.tags.split(',').map((s) => s.trim());
341
+ const ids = [];
342
+ const needsResolve = inputs.some((t) => !uuidRegex.test(t));
343
+ let list = [];
344
+ if (needsResolve) {
345
+ const { data: d } = await client.get(`/workspaces/${workspace.id}/tags`);
346
+ list = d.data || d || [];
347
+ }
348
+ for (const input of inputs) {
349
+ if (uuidRegex.test(input)) {
350
+ ids.push(input);
351
+ }
352
+ else {
353
+ const [typeSlug, value] = input.includes(':') ? input.split(':') : [null, input];
354
+ const m = list.find((t) => {
355
+ if (typeSlug)
356
+ return t.typeSlug === typeSlug && t.value === value;
357
+ return t.value === value;
358
+ });
359
+ if (!m) {
360
+ spinner.fail(`Tag '${input}' not found.`);
361
+ process.exit(1);
362
+ }
363
+ ids.push(m.id);
364
+ }
365
+ }
366
+ data.tagIds = ids;
367
+ }
368
+ // Resolve tag types
369
+ if (options.tagTypes) {
370
+ const inputs = options.tagTypes.split(',').map((s) => s.trim());
371
+ const ids = [];
372
+ const needsResolve = inputs.some((t) => !uuidRegex.test(t));
373
+ let list = [];
374
+ if (needsResolve) {
375
+ const { data: d } = await client.get(`/workspaces/${workspace.id}/tag-types`);
376
+ list = d.data || d || [];
377
+ }
378
+ for (const input of inputs) {
379
+ if (uuidRegex.test(input)) {
380
+ ids.push(input);
381
+ }
382
+ else {
383
+ const m = list.find((t) => t.slug === input || t.name.toLowerCase() === input.toLowerCase());
384
+ if (!m) {
385
+ spinner.fail(`Tag type '${input}' not found.`);
386
+ process.exit(1);
387
+ }
388
+ ids.push(m.id);
389
+ }
390
+ }
391
+ data.tagTypeIds = ids;
392
+ }
393
+ // Resolve libraries
394
+ if (options.libraries) {
395
+ const inputs = options.libraries.split(',').map((s) => s.trim());
396
+ const ids = [];
397
+ const needsResolve = inputs.some((l) => !uuidRegex.test(l));
398
+ let list = [];
399
+ if (needsResolve) {
400
+ const { data: d } = await client.get(`/workspaces/${workspace.id}/projects`);
401
+ list = d.data || d || [];
402
+ }
403
+ for (const input of inputs) {
404
+ if (uuidRegex.test(input)) {
405
+ ids.push(input);
406
+ }
407
+ else {
408
+ const m = list.find((l) => l.slug === input || l.name.toLowerCase() === input.toLowerCase());
409
+ if (!m) {
410
+ spinner.fail(`Context library '${input}' not found.`);
411
+ process.exit(1);
412
+ }
413
+ ids.push(m.id);
414
+ }
415
+ }
416
+ data.projectIds = ids;
417
+ }
418
+ if (Object.keys(data).length === 0) {
419
+ spinner.fail('No fields to update. Use --name, --description, --agents, --skills, --tags, --tag-types, or --libraries.');
420
+ process.exit(1);
421
+ }
422
+ const { data: workflowData } = await client.put(`/workspaces/${workspace.id}/workflows/${workflowId}`, data);
423
+ const workflow = workflowData.data || workflowData;
424
+ spinner.stop();
425
+ console.log(chalk.green('\n✓ Workflow updated successfully!'));
426
+ console.log(` Name: ${workflow.name}`);
427
+ console.log(` ID: ${workflow.id}`);
428
+ if (workflow.description)
429
+ console.log(` Description: ${workflow.description}`);
430
+ const parts = [];
431
+ if (workflow.agentIds?.length)
432
+ parts.push(`${workflow.agentIds.length} agent(s)`);
433
+ if (workflow.skillIds?.length)
434
+ parts.push(`${workflow.skillIds.length} skill(s)`);
435
+ if (workflow.projectIds?.length)
436
+ parts.push(`${workflow.projectIds.length} library(ies)`);
437
+ if (workflow.tagIds?.length)
438
+ parts.push(`${workflow.tagIds.length} tag(s)`);
439
+ if (parts.length)
440
+ console.log(` Resources: ${parts.join(', ')}`);
441
+ console.log();
442
+ }
443
+ catch (error) {
444
+ spinner.fail(`Failed to update workflow: ${error.message}`);
445
+ process.exit(1);
446
+ }
447
+ });
65
448
  //# sourceMappingURL=workflows.js.map