drift-it 0.1.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 (138) hide show
  1. package/README.md +90 -0
  2. package/dist/commands/agent/create.d.ts +3 -0
  3. package/dist/commands/agent/create.d.ts.map +1 -0
  4. package/dist/commands/agent/create.js +30 -0
  5. package/dist/commands/agent/create.js.map +1 -0
  6. package/dist/commands/agent/delete.d.ts +3 -0
  7. package/dist/commands/agent/delete.d.ts.map +1 -0
  8. package/dist/commands/agent/delete.js +34 -0
  9. package/dist/commands/agent/delete.js.map +1 -0
  10. package/dist/commands/agent/index.d.ts +3 -0
  11. package/dist/commands/agent/index.d.ts.map +1 -0
  12. package/dist/commands/agent/index.js +20 -0
  13. package/dist/commands/agent/index.js.map +1 -0
  14. package/dist/commands/agent/list.d.ts +3 -0
  15. package/dist/commands/agent/list.d.ts.map +1 -0
  16. package/dist/commands/agent/list.js +31 -0
  17. package/dist/commands/agent/list.js.map +1 -0
  18. package/dist/commands/agent/rename.d.ts +3 -0
  19. package/dist/commands/agent/rename.d.ts.map +1 -0
  20. package/dist/commands/agent/rename.js +19 -0
  21. package/dist/commands/agent/rename.js.map +1 -0
  22. package/dist/commands/agent/run.d.ts +3 -0
  23. package/dist/commands/agent/run.d.ts.map +1 -0
  24. package/dist/commands/agent/run.js +28 -0
  25. package/dist/commands/agent/run.js.map +1 -0
  26. package/dist/commands/agent/update.d.ts +3 -0
  27. package/dist/commands/agent/update.d.ts.map +1 -0
  28. package/dist/commands/agent/update.js +32 -0
  29. package/dist/commands/agent/update.js.map +1 -0
  30. package/dist/commands/agent/view.d.ts +3 -0
  31. package/dist/commands/agent/view.d.ts.map +1 -0
  32. package/dist/commands/agent/view.js +24 -0
  33. package/dist/commands/agent/view.js.map +1 -0
  34. package/dist/commands/config/index.d.ts +3 -0
  35. package/dist/commands/config/index.d.ts.map +1 -0
  36. package/dist/commands/config/index.js +12 -0
  37. package/dist/commands/config/index.js.map +1 -0
  38. package/dist/commands/config/reset.d.ts +3 -0
  39. package/dist/commands/config/reset.d.ts.map +1 -0
  40. package/dist/commands/config/reset.js +31 -0
  41. package/dist/commands/config/reset.js.map +1 -0
  42. package/dist/commands/config/setProvider.d.ts +3 -0
  43. package/dist/commands/config/setProvider.d.ts.map +1 -0
  44. package/dist/commands/config/setProvider.js +25 -0
  45. package/dist/commands/config/setProvider.js.map +1 -0
  46. package/dist/commands/config/view.d.ts +3 -0
  47. package/dist/commands/config/view.d.ts.map +1 -0
  48. package/dist/commands/config/view.js +24 -0
  49. package/dist/commands/config/view.js.map +1 -0
  50. package/dist/commands/doctor.d.ts +3 -0
  51. package/dist/commands/doctor.d.ts.map +1 -0
  52. package/dist/commands/doctor.js +68 -0
  53. package/dist/commands/doctor.js.map +1 -0
  54. package/dist/commands/init.d.ts +3 -0
  55. package/dist/commands/init.d.ts.map +1 -0
  56. package/dist/commands/init.js +83 -0
  57. package/dist/commands/init.js.map +1 -0
  58. package/dist/commands/pipeline/create.d.ts +3 -0
  59. package/dist/commands/pipeline/create.d.ts.map +1 -0
  60. package/dist/commands/pipeline/create.js +34 -0
  61. package/dist/commands/pipeline/create.js.map +1 -0
  62. package/dist/commands/pipeline/delete.d.ts +3 -0
  63. package/dist/commands/pipeline/delete.d.ts.map +1 -0
  64. package/dist/commands/pipeline/delete.js +31 -0
  65. package/dist/commands/pipeline/delete.js.map +1 -0
  66. package/dist/commands/pipeline/index.d.ts +3 -0
  67. package/dist/commands/pipeline/index.d.ts.map +1 -0
  68. package/dist/commands/pipeline/index.js +20 -0
  69. package/dist/commands/pipeline/index.js.map +1 -0
  70. package/dist/commands/pipeline/list.d.ts +3 -0
  71. package/dist/commands/pipeline/list.d.ts.map +1 -0
  72. package/dist/commands/pipeline/list.js +30 -0
  73. package/dist/commands/pipeline/list.js.map +1 -0
  74. package/dist/commands/pipeline/rename.d.ts +3 -0
  75. package/dist/commands/pipeline/rename.d.ts.map +1 -0
  76. package/dist/commands/pipeline/rename.js +18 -0
  77. package/dist/commands/pipeline/rename.js.map +1 -0
  78. package/dist/commands/pipeline/run.d.ts +3 -0
  79. package/dist/commands/pipeline/run.d.ts.map +1 -0
  80. package/dist/commands/pipeline/run.js +42 -0
  81. package/dist/commands/pipeline/run.js.map +1 -0
  82. package/dist/commands/pipeline/update.d.ts +3 -0
  83. package/dist/commands/pipeline/update.d.ts.map +1 -0
  84. package/dist/commands/pipeline/update.js +39 -0
  85. package/dist/commands/pipeline/update.js.map +1 -0
  86. package/dist/commands/pipeline/view.d.ts +3 -0
  87. package/dist/commands/pipeline/view.d.ts.map +1 -0
  88. package/dist/commands/pipeline/view.js +26 -0
  89. package/dist/commands/pipeline/view.js.map +1 -0
  90. package/dist/core/agentManager.d.ts +13 -0
  91. package/dist/core/agentManager.d.ts.map +1 -0
  92. package/dist/core/agentManager.js +118 -0
  93. package/dist/core/agentManager.js.map +1 -0
  94. package/dist/core/executor.d.ts +6 -0
  95. package/dist/core/executor.d.ts.map +1 -0
  96. package/dist/core/executor.js +31 -0
  97. package/dist/core/executor.js.map +1 -0
  98. package/dist/core/pipelineManager.d.ts +11 -0
  99. package/dist/core/pipelineManager.d.ts.map +1 -0
  100. package/dist/core/pipelineManager.js +99 -0
  101. package/dist/core/pipelineManager.js.map +1 -0
  102. package/dist/core/providers/AIProvider.d.ts +5 -0
  103. package/dist/core/providers/AIProvider.d.ts.map +1 -0
  104. package/dist/core/providers/AIProvider.js +2 -0
  105. package/dist/core/providers/AIProvider.js.map +1 -0
  106. package/dist/core/providers/clipboardProvider.d.ts +6 -0
  107. package/dist/core/providers/clipboardProvider.d.ts.map +1 -0
  108. package/dist/core/providers/clipboardProvider.js +24 -0
  109. package/dist/core/providers/clipboardProvider.js.map +1 -0
  110. package/dist/core/providers/ollamaProvider.d.ts +9 -0
  111. package/dist/core/providers/ollamaProvider.d.ts.map +1 -0
  112. package/dist/core/providers/ollamaProvider.js +35 -0
  113. package/dist/core/providers/ollamaProvider.js.map +1 -0
  114. package/dist/index.d.ts +3 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +19 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/utils/fileLoader.d.ts +22 -0
  119. package/dist/utils/fileLoader.d.ts.map +1 -0
  120. package/dist/utils/fileLoader.js +85 -0
  121. package/dist/utils/fileLoader.js.map +1 -0
  122. package/dist/utils/logger.d.ts +10 -0
  123. package/dist/utils/logger.d.ts.map +1 -0
  124. package/dist/utils/logger.js +25 -0
  125. package/dist/utils/logger.js.map +1 -0
  126. package/dist/utils/promptBuilder.d.ts +2 -0
  127. package/dist/utils/promptBuilder.d.ts.map +1 -0
  128. package/dist/utils/promptBuilder.js +4 -0
  129. package/dist/utils/promptBuilder.js.map +1 -0
  130. package/dist/utils/suggestions.d.ts +6 -0
  131. package/dist/utils/suggestions.d.ts.map +1 -0
  132. package/dist/utils/suggestions.js +40 -0
  133. package/dist/utils/suggestions.js.map +1 -0
  134. package/dist/utils/validator.d.ts +3 -0
  135. package/dist/utils/validator.d.ts.map +1 -0
  136. package/dist/utils/validator.js +20 -0
  137. package/dist/utils/validator.js.map +1 -0
  138. package/package.json +43 -0
@@ -0,0 +1,68 @@
1
+ import { execSync } from "node:child_process";
2
+ import path from "node:path";
3
+ import { logger } from "../utils/logger.js";
4
+ import { fileExists, getGlobalDir } from "../utils/fileLoader.js";
5
+ export function registerDoctorCommand(program) {
6
+ program
7
+ .command("doctor")
8
+ .description("Check system requirements and Drift setup")
9
+ .action(async () => {
10
+ let allGood = true;
11
+ // Check Node version
12
+ const nodeVersion = process.versions.node;
13
+ const major = parseInt(nodeVersion.split(".")[0], 10);
14
+ if (major >= 20) {
15
+ logger.success(`Node.js v${nodeVersion} (>= 20 required)`);
16
+ }
17
+ else {
18
+ logger.error(`Node.js v${nodeVersion} — v20+ required`);
19
+ allGood = false;
20
+ }
21
+ // Check Ollama
22
+ try {
23
+ execSync("which ollama", { stdio: "pipe" });
24
+ logger.success("Ollama is installed");
25
+ }
26
+ catch {
27
+ logger.warn("Ollama is not installed (required for ollama provider)");
28
+ logger.dim(" Install: https://ollama.com/download");
29
+ allGood = false;
30
+ }
31
+ // Check global directory
32
+ const globalDir = getGlobalDir();
33
+ const configPath = path.join(globalDir, "config.json");
34
+ if (await fileExists(configPath)) {
35
+ logger.success(`Config found at ${configPath}`);
36
+ }
37
+ else {
38
+ logger.error("Config not found — run `drift init` first");
39
+ allGood = false;
40
+ }
41
+ // Check agents directory
42
+ const agentsPath = path.join(globalDir, "agents");
43
+ if (await fileExists(agentsPath)) {
44
+ logger.success("Agents directory exists");
45
+ }
46
+ else {
47
+ logger.error("Agents directory missing — run `drift init`");
48
+ allGood = false;
49
+ }
50
+ // Check pipelines directory
51
+ const pipelinesPath = path.join(globalDir, "pipelines");
52
+ if (await fileExists(pipelinesPath)) {
53
+ logger.success("Pipelines directory exists");
54
+ }
55
+ else {
56
+ logger.error("Pipelines directory missing — run `drift init`");
57
+ allGood = false;
58
+ }
59
+ console.log();
60
+ if (allGood) {
61
+ logger.success("All checks passed — Drift is ready!");
62
+ }
63
+ else {
64
+ logger.warn("Some checks failed. Fix the issues above and re-run `drift doctor`.");
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,qBAAqB;QACrB,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,CAAC,OAAO,CAAC,YAAY,WAAW,mBAAmB,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,YAAY,WAAW,kBAAkB,CAAC,CAAC;YACxD,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACrD,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC1D,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,yBAAyB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC5D,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,IAAI,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAC/D,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerInitCommand(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAsFnD"}
@@ -0,0 +1,83 @@
1
+ import inquirer from "inquirer";
2
+ import path from "node:path";
3
+ import { logger } from "../utils/logger.js";
4
+ import { ensureDir, writeJSON, getGlobalDir, getLocalDir, agentsDir, pipelinesDir, DEFAULT_CONFIG, fileExists, } from "../utils/fileLoader.js";
5
+ export function registerInitCommand(program) {
6
+ program
7
+ .command("init")
8
+ .description("Initialize Drift — create config and data directories")
9
+ .option("--local", "Also create a project-local .drift/ directory")
10
+ .action(async (opts) => {
11
+ try {
12
+ const globalDir = getGlobalDir();
13
+ const globalConfigPath = path.join(globalDir, "config.json");
14
+ const alreadyInitialized = await fileExists(globalConfigPath);
15
+ if (alreadyInitialized) {
16
+ logger.info("Drift is already initialized globally.");
17
+ }
18
+ // Create global dirs
19
+ await ensureDir(agentsDir(globalDir));
20
+ await ensureDir(pipelinesDir(globalDir));
21
+ // Interactive provider selection
22
+ const { provider } = await inquirer.prompt([
23
+ {
24
+ type: "list",
25
+ name: "provider",
26
+ message: "Choose your default AI provider:",
27
+ choices: [
28
+ { name: "Ollama (local LLM — recommended)", value: "ollama" },
29
+ { name: "Clipboard (paste into GitHub Copilot)", value: "clipboard" },
30
+ ],
31
+ default: "ollama",
32
+ },
33
+ ]);
34
+ let model = DEFAULT_CONFIG.model;
35
+ if (provider === "ollama") {
36
+ const { selectedModel } = await inquirer.prompt([
37
+ {
38
+ type: "input",
39
+ name: "selectedModel",
40
+ message: "Which Ollama model? (default: llama3)",
41
+ default: "llama3",
42
+ },
43
+ ]);
44
+ model = selectedModel;
45
+ }
46
+ await writeJSON(globalConfigPath, { provider, model });
47
+ logger.success(`Global config written to ${globalConfigPath}`);
48
+ // Create sample agent
49
+ const { createSample } = await inquirer.prompt([
50
+ {
51
+ type: "confirm",
52
+ name: "createSample",
53
+ message: "Create a sample 'reviewer' agent?",
54
+ default: true,
55
+ },
56
+ ]);
57
+ if (createSample) {
58
+ const sampleAgent = {
59
+ name: "reviewer",
60
+ prompt: "You are a strict senior code reviewer. Review the provided code for bugs, performance issues, security vulnerabilities, and best practice violations. Be thorough and specific in your feedback.",
61
+ };
62
+ const samplePath = path.join(agentsDir(globalDir), "reviewer.json");
63
+ await writeJSON(samplePath, sampleAgent);
64
+ logger.success("Sample agent 'reviewer' created.");
65
+ }
66
+ // Project-local initialization
67
+ if (opts.local) {
68
+ const localDir = getLocalDir();
69
+ await ensureDir(agentsDir(localDir));
70
+ await ensureDir(pipelinesDir(localDir));
71
+ await writeJSON(path.join(localDir, "config.json"), { provider, model });
72
+ logger.success(`Project-local .drift/ created at ${localDir}`);
73
+ }
74
+ logger.success("Drift initialized successfully!");
75
+ logger.info("Run `drift doctor` to verify your setup.");
76
+ }
77
+ catch (err) {
78
+ logger.error(`Initialization failed: ${err.message}`);
79
+ process.exit(1);
80
+ }
81
+ });
82
+ }
83
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineCreateCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,OAAO,QA8B9D"}
@@ -0,0 +1,34 @@
1
+ import inquirer from "inquirer";
2
+ import { logger } from "../../utils/logger.js";
3
+ import { createPipeline } from "../../core/pipelineManager.js";
4
+ import { getAllAgentNames } from "../../core/agentManager.js";
5
+ export function registerPipelineCreateCommand(pipeline) {
6
+ pipeline
7
+ .command("create <name>")
8
+ .description("Create a new multi-agent pipeline")
9
+ .action(async (name) => {
10
+ try {
11
+ const agentNames = await getAllAgentNames();
12
+ if (agentNames.length === 0) {
13
+ logger.error("No agents found. Create agents first with: drift agent create <name>");
14
+ process.exit(1);
15
+ }
16
+ const { steps } = await inquirer.prompt([
17
+ {
18
+ type: "checkbox",
19
+ name: "steps",
20
+ message: "Select agents for this pipeline (in execution order):",
21
+ choices: agentNames.map((n) => ({ name: n, value: n })),
22
+ validate: (input) => input.length > 0 || "Select at least one agent.",
23
+ },
24
+ ]);
25
+ await createPipeline(name, steps);
26
+ logger.success(`Pipeline '${name}' created with ${steps.length} step(s): ${steps.join(" → ")}`);
27
+ }
28
+ catch (err) {
29
+ logger.error(err.message);
30
+ process.exit(1);
31
+ }
32
+ });
33
+ }
34
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/pipeline/create.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,UAAU,6BAA6B,CAAC,QAAiB;IAC7D,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;gBACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAsB;gBAC3D;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,uDAAuD;oBAChE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvD,QAAQ,EAAE,CAAC,KAAe,EAAE,EAAE,CAC5B,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,4BAA4B;iBACnD;aACF,CAAC,CAAC;YAEH,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,kBAAkB,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineDeleteCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,OAAO,QA2B9D"}
@@ -0,0 +1,31 @@
1
+ import inquirer from "inquirer";
2
+ import { logger } from "../../utils/logger.js";
3
+ import { deletePipeline } from "../../core/pipelineManager.js";
4
+ export function registerPipelineDeleteCommand(pipeline) {
5
+ pipeline
6
+ .command("delete <name>")
7
+ .description("Delete a pipeline")
8
+ .action(async (name) => {
9
+ try {
10
+ const { confirm } = await inquirer.prompt([
11
+ {
12
+ type: "confirm",
13
+ name: "confirm",
14
+ message: `Are you sure you want to delete pipeline '${name}'?`,
15
+ default: false,
16
+ },
17
+ ]);
18
+ if (!confirm) {
19
+ logger.info("Deletion cancelled.");
20
+ return;
21
+ }
22
+ await deletePipeline(name);
23
+ logger.success(`Pipeline '${name}' deleted.`);
24
+ }
25
+ catch (err) {
26
+ logger.error(err.message);
27
+ process.exit(1);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/pipeline/delete.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,UAAU,6BAA6B,CAAC,QAAiB;IAC7D,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;gBAC9D;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,6CAA6C,IAAI,IAAI;oBAC9D,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,YAAY,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineCommands(program: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,QAYxD"}
@@ -0,0 +1,20 @@
1
+ import { registerPipelineCreateCommand } from "./create.js";
2
+ import { registerPipelineListCommand } from "./list.js";
3
+ import { registerPipelineViewCommand } from "./view.js";
4
+ import { registerPipelineUpdateCommand } from "./update.js";
5
+ import { registerPipelineRenameCommand } from "./rename.js";
6
+ import { registerPipelineDeleteCommand } from "./delete.js";
7
+ import { registerPipelineRunCommand } from "./run.js";
8
+ export function registerPipelineCommands(program) {
9
+ const pipeline = program
10
+ .command("pipeline")
11
+ .description("Manage multi-agent pipelines — create, list, view, update, rename, delete, run");
12
+ registerPipelineCreateCommand(pipeline);
13
+ registerPipelineListCommand(pipeline);
14
+ registerPipelineViewCommand(pipeline);
15
+ registerPipelineUpdateCommand(pipeline);
16
+ registerPipelineRenameCommand(pipeline);
17
+ registerPipelineDeleteCommand(pipeline);
18
+ registerPipelineRunCommand(pipeline);
19
+ }
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/pipeline/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,gFAAgF,CAAC,CAAC;IAEjG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACxC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACxC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACxC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACxC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineListCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,QAyB5D"}
@@ -0,0 +1,30 @@
1
+ import chalk from "chalk";
2
+ import { logger } from "../../utils/logger.js";
3
+ import { listPipelines } from "../../core/pipelineManager.js";
4
+ export function registerPipelineListCommand(pipeline) {
5
+ pipeline
6
+ .command("list")
7
+ .description("List all pipelines")
8
+ .action(async () => {
9
+ try {
10
+ const pipelines = await listPipelines();
11
+ if (pipelines.length === 0) {
12
+ logger.info("No pipelines found. Create one with: drift pipeline create <name>");
13
+ return;
14
+ }
15
+ logger.heading("Pipelines");
16
+ console.log();
17
+ for (const p of pipelines) {
18
+ console.log(` ${chalk.bold.cyan(p.name)}`);
19
+ console.log(` ${chalk.dim(`${p.steps.length} step(s): ${p.steps.join(" → ")}`)}`);
20
+ console.log();
21
+ }
22
+ logger.dim(`${pipelines.length} pipeline(s) total`);
23
+ }
24
+ catch (err) {
25
+ logger.error(err.message);
26
+ process.exit(1);
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/pipeline/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,MAAM,UAAU,2BAA2B,CAAC,QAAiB;IAC3D,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,oBAAoB,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineRenameCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=rename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,OAAO,QAa9D"}
@@ -0,0 +1,18 @@
1
+ import { logger } from "../../utils/logger.js";
2
+ import { renamePipeline } from "../../core/pipelineManager.js";
3
+ export function registerPipelineRenameCommand(pipeline) {
4
+ pipeline
5
+ .command("rename <old> <new>")
6
+ .description("Rename a pipeline")
7
+ .action(async (oldName, newName) => {
8
+ try {
9
+ await renamePipeline(oldName, newName);
10
+ logger.success(`Pipeline '${oldName}' renamed to '${newName}'.`);
11
+ }
12
+ catch (err) {
13
+ logger.error(err.message);
14
+ process.exit(1);
15
+ }
16
+ });
17
+ }
18
+ //# sourceMappingURL=rename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../../src/commands/pipeline/rename.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,UAAU,6BAA6B,CAAC,QAAiB;IAC7D,QAAQ;SACL,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,aAAa,OAAO,iBAAiB,OAAO,IAAI,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineRunCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,QA0C3D"}
@@ -0,0 +1,42 @@
1
+ import chalk from "chalk";
2
+ import { logger } from "../../utils/logger.js";
3
+ import { readFileContent } from "../../utils/fileLoader.js";
4
+ import { getPipeline } from "../../core/pipelineManager.js";
5
+ import { resolveProvider, runAgent } from "../../core/executor.js";
6
+ export function registerPipelineRunCommand(pipeline) {
7
+ pipeline
8
+ .command("run <name> <file>")
9
+ .description("Run a pipeline on a file (sequential agent chaining)")
10
+ .option("-p, --provider <provider>", "Override the configured provider (ollama | clipboard)")
11
+ .action(async (name, file, opts) => {
12
+ try {
13
+ const pipelineData = await getPipeline(name);
14
+ const content = await readFileContent(file);
15
+ const provider = await resolveProvider(opts.provider);
16
+ logger.step(`Running pipeline '${name}' (${pipelineData.steps.length} steps) with ${provider.name} provider...`);
17
+ console.log();
18
+ let currentInput = content;
19
+ const outputs = [];
20
+ for (let i = 0; i < pipelineData.steps.length; i++) {
21
+ const agentName = pipelineData.steps[i];
22
+ logger.step(`Step ${i + 1}/${pipelineData.steps.length}: ${agentName}`);
23
+ const output = await runAgent(agentName, currentInput, provider);
24
+ outputs.push({ agent: agentName, output });
25
+ currentInput = output;
26
+ }
27
+ // Print all outputs
28
+ console.log();
29
+ for (const { agent, output } of outputs) {
30
+ console.log(chalk.bold(`===== ${agent.toUpperCase()} =====`));
31
+ console.log(output);
32
+ console.log();
33
+ }
34
+ logger.success("Pipeline complete.");
35
+ }
36
+ catch (err) {
37
+ logger.error(err.message);
38
+ process.exit(1);
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/pipeline/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,UAAU,0BAA0B,CAAC,QAAiB;IAC1D,QAAQ;SACL,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,2BAA2B,EAAE,uDAAuD,CAAC;SAC5F,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,IAA2B,EAAE,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEtD,MAAM,CAAC,IAAI,CACT,qBAAqB,IAAI,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,gBAAgB,QAAQ,CAAC,IAAI,cAAc,CACpG,CAAC;YACF,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,IAAI,YAAY,GAAG,OAAO,CAAC;YAC3B,MAAM,OAAO,GAAwC,EAAE,CAAC;YAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC;gBAExE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3C,YAAY,GAAG,MAAM,CAAC;YACxB,CAAC;YAED,oBAAoB;YACpB,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACpB,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineUpdateCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,OAAO,QAoC9D"}
@@ -0,0 +1,39 @@
1
+ import inquirer from "inquirer";
2
+ import { logger } from "../../utils/logger.js";
3
+ import { getPipeline, updatePipeline } from "../../core/pipelineManager.js";
4
+ import { getAllAgentNames } from "../../core/agentManager.js";
5
+ export function registerPipelineUpdateCommand(pipeline) {
6
+ pipeline
7
+ .command("update <name>")
8
+ .description("Update a pipeline's steps")
9
+ .action(async (name) => {
10
+ try {
11
+ const existing = await getPipeline(name);
12
+ const agentNames = await getAllAgentNames();
13
+ if (agentNames.length === 0) {
14
+ logger.error("No agents found. Create agents first.");
15
+ process.exit(1);
16
+ }
17
+ const { steps } = await inquirer.prompt([
18
+ {
19
+ type: "checkbox",
20
+ name: "steps",
21
+ message: "Select agents for this pipeline (in execution order):",
22
+ choices: agentNames.map((n) => ({
23
+ name: n,
24
+ value: n,
25
+ checked: existing.steps.includes(n),
26
+ })),
27
+ validate: (input) => input.length > 0 || "Select at least one agent.",
28
+ },
29
+ ]);
30
+ await updatePipeline(name, steps);
31
+ logger.success(`Pipeline '${name}' updated: ${steps.join(" → ")}`);
32
+ }
33
+ catch (err) {
34
+ logger.error(err.message);
35
+ process.exit(1);
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/pipeline/update.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,UAAU,6BAA6B,CAAC,QAAiB;IAC7D,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,UAAU,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAE5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAsB;gBAC3D;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,uDAAuD;oBAChE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC9B,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;qBACpC,CAAC,CAAC;oBACH,QAAQ,EAAE,CAAC,KAAe,EAAE,EAAE,CAC5B,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,4BAA4B;iBACnD;aACF,CAAC,CAAC;YAEH,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,cAAc,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerPipelineViewCommand(pipeline: Command): void;
3
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/commands/pipeline/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,QAoB5D"}
@@ -0,0 +1,26 @@
1
+ import chalk from "chalk";
2
+ import { logger } from "../../utils/logger.js";
3
+ import { getPipeline } from "../../core/pipelineManager.js";
4
+ export function registerPipelineViewCommand(pipeline) {
5
+ pipeline
6
+ .command("view <name>")
7
+ .description("View a pipeline's details")
8
+ .action(async (name) => {
9
+ try {
10
+ const p = await getPipeline(name);
11
+ console.log();
12
+ logger.heading(`Pipeline: ${p.name}`);
13
+ console.log();
14
+ console.log(chalk.bold("Steps:"));
15
+ p.steps.forEach((step, i) => {
16
+ console.log(` ${i + 1}. ${chalk.cyan(step)}`);
17
+ });
18
+ console.log();
19
+ }
20
+ catch (err) {
21
+ logger.error(err.message);
22
+ process.exit(1);
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/commands/pipeline/view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,MAAM,UAAU,2BAA2B,CAAC,QAAiB;IAC3D,QAAQ;SACL,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface Agent {
2
+ name: string;
3
+ prompt: string;
4
+ }
5
+ export declare function createAgent(name: string, prompt: string): Promise<void>;
6
+ export declare function listAgents(): Promise<Agent[]>;
7
+ export declare function getAgent(name: string): Promise<Agent>;
8
+ export declare function updateAgent(name: string, newPrompt: string): Promise<void>;
9
+ export declare function renameAgent(oldName: string, newName: string): Promise<void>;
10
+ export declare function deleteAgent(name: string): Promise<string[]>;
11
+ export declare function agentExists(name: string): Promise<boolean>;
12
+ export declare function getAllAgentNames(): Promise<string[]>;
13
+ //# sourceMappingURL=agentManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentManager.d.ts","sourceRoot":"","sources":["../../src/core/agentManager.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe7E;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CASnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAgB3D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBjF;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWjE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1D"}