langwatch 0.3.0 → 0.3.1

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 (131) hide show
  1. package/dist/add-LBBS4I3H.js +114 -0
  2. package/dist/add-LBBS4I3H.js.map +1 -0
  3. package/dist/add-RD3ZKFAT.mjs +114 -0
  4. package/dist/add-RD3ZKFAT.mjs.map +1 -0
  5. package/dist/chunk-2JU376G7.js +242 -0
  6. package/dist/chunk-2JU376G7.js.map +1 -0
  7. package/dist/chunk-2ODBGSBI.js +4 -0
  8. package/dist/{chunk-G3AUABT7.js.map → chunk-2ODBGSBI.js.map} +1 -1
  9. package/dist/chunk-3GKPQB4R.mjs +242 -0
  10. package/dist/chunk-3GKPQB4R.mjs.map +1 -0
  11. package/dist/chunk-4NRLVT2U.mjs +35 -0
  12. package/dist/chunk-4NRLVT2U.mjs.map +1 -0
  13. package/dist/{chunk-SVJ7SCGB.js → chunk-52GXX3MA.js} +33 -31
  14. package/dist/chunk-52GXX3MA.js.map +1 -0
  15. package/dist/chunk-5NC5ILKA.js +94 -0
  16. package/dist/chunk-5NC5ILKA.js.map +1 -0
  17. package/dist/{chunk-76KNOWLS.js → chunk-6I4EA43Y.js} +2 -2
  18. package/dist/chunk-6I4EA43Y.js.map +1 -0
  19. package/dist/chunk-DHJKJVY7.mjs +20 -0
  20. package/dist/chunk-DHJKJVY7.mjs.map +1 -0
  21. package/dist/{chunk-VJSOCNPA.js → chunk-DTEKFQ4U.js} +6 -28
  22. package/dist/chunk-DTEKFQ4U.js.map +1 -0
  23. package/dist/chunk-E7UE2MPD.mjs +93 -0
  24. package/dist/chunk-E7UE2MPD.mjs.map +1 -0
  25. package/dist/chunk-F6E4XQQU.js +20 -0
  26. package/dist/chunk-F6E4XQQU.js.map +1 -0
  27. package/dist/chunk-FJLK5CFL.js +37 -0
  28. package/dist/chunk-FJLK5CFL.js.map +1 -0
  29. package/dist/{chunk-Z5J5UI5E.mjs → chunk-GJSEBQXF.mjs} +139 -107
  30. package/dist/chunk-GJSEBQXF.mjs.map +1 -0
  31. package/dist/chunk-HA3LI5IK.js +35 -0
  32. package/dist/chunk-HA3LI5IK.js.map +1 -0
  33. package/dist/chunk-HJU67C7H.js +93 -0
  34. package/dist/chunk-HJU67C7H.js.map +1 -0
  35. package/dist/{chunk-PMBEK6YE.mjs → chunk-J7ICRUU4.mjs} +5 -3
  36. package/dist/{chunk-PMBEK6YE.mjs.map → chunk-J7ICRUU4.mjs.map} +1 -1
  37. package/dist/{chunk-HPC6Z7J4.js → chunk-PWZBLTHR.js} +3 -3
  38. package/dist/{chunk-HPC6Z7J4.js.map → chunk-PWZBLTHR.js.map} +1 -1
  39. package/dist/chunk-SMXXAVMB.js +100 -0
  40. package/dist/chunk-SMXXAVMB.js.map +1 -0
  41. package/dist/{chunk-CSC3CMIT.mjs → chunk-STV4ZVNA.mjs} +2 -2
  42. package/dist/chunk-T5AZMMVS.mjs +94 -0
  43. package/dist/chunk-T5AZMMVS.mjs.map +1 -0
  44. package/dist/{chunk-4BZATFKJ.mjs → chunk-UU33HCCZ.mjs} +4 -26
  45. package/dist/{chunk-4BZATFKJ.mjs.map → chunk-UU33HCCZ.mjs.map} +1 -1
  46. package/dist/{chunk-PTJ6AAI7.js → chunk-VGHLQXKB.js} +138 -106
  47. package/dist/chunk-VGHLQXKB.js.map +1 -0
  48. package/dist/chunk-W5ZEP3CI.mjs +100 -0
  49. package/dist/chunk-W5ZEP3CI.mjs.map +1 -0
  50. package/dist/chunk-Y666BJA5.mjs +4 -0
  51. package/dist/{chunk-X62YT4WB.mjs → chunk-YFUZF7JM.mjs} +2 -2
  52. package/dist/chunk-YFUZF7JM.mjs.map +1 -0
  53. package/dist/chunk-YN4436PK.mjs +37 -0
  54. package/dist/chunk-YN4436PK.mjs.map +1 -0
  55. package/dist/cli/index.d.mts +1 -0
  56. package/dist/cli/index.d.ts +1 -0
  57. package/dist/cli/index.js +106 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/index.mjs +106 -0
  60. package/dist/cli/index.mjs.map +1 -0
  61. package/dist/client-browser.js +12 -10
  62. package/dist/client-browser.js.map +1 -1
  63. package/dist/client-browser.mjs +5 -3
  64. package/dist/client-browser.mjs.map +1 -1
  65. package/dist/client-node.js +11 -9
  66. package/dist/client-node.js.map +1 -1
  67. package/dist/client-node.mjs +7 -5
  68. package/dist/client-node.mjs.map +1 -1
  69. package/dist/create-G5MTGOOH.js +70 -0
  70. package/dist/create-G5MTGOOH.js.map +1 -0
  71. package/dist/create-QUZYBMQB.mjs +70 -0
  72. package/dist/create-QUZYBMQB.mjs.map +1 -0
  73. package/dist/evaluation/index.js +5 -4
  74. package/dist/evaluation/index.js.map +1 -1
  75. package/dist/evaluation/index.mjs +4 -3
  76. package/dist/index.d.mts +2 -2
  77. package/dist/index.d.ts +2 -2
  78. package/dist/index.js +10 -7
  79. package/dist/index.js.map +1 -1
  80. package/dist/index.mjs +9 -6
  81. package/dist/init-H67RW22E.mjs +16 -0
  82. package/dist/init-H67RW22E.mjs.map +1 -0
  83. package/dist/init-XU2JFY6N.js +16 -0
  84. package/dist/init-XU2JFY6N.js.map +1 -0
  85. package/dist/list-7NPSX2E4.mjs +136 -0
  86. package/dist/list-7NPSX2E4.mjs.map +1 -0
  87. package/dist/list-ZXFLAF52.js +136 -0
  88. package/dist/list-ZXFLAF52.js.map +1 -0
  89. package/dist/login-76NQIHKR.js +110 -0
  90. package/dist/login-76NQIHKR.js.map +1 -0
  91. package/dist/login-EK4WVOI2.mjs +110 -0
  92. package/dist/login-EK4WVOI2.mjs.map +1 -0
  93. package/dist/observability/index.d.mts +3 -3
  94. package/dist/observability/index.d.ts +3 -3
  95. package/dist/observability/index.js +5 -4
  96. package/dist/observability/index.js.map +1 -1
  97. package/dist/observability/index.mjs +4 -3
  98. package/dist/observability/instrumentation/langchain/index.d.mts +2 -2
  99. package/dist/observability/instrumentation/langchain/index.d.ts +2 -2
  100. package/dist/observability/instrumentation/langchain/index.js +29 -27
  101. package/dist/observability/instrumentation/langchain/index.js.map +1 -1
  102. package/dist/observability/instrumentation/langchain/index.mjs +5 -3
  103. package/dist/observability/instrumentation/langchain/index.mjs.map +1 -1
  104. package/dist/prompt/index.d.mts +2 -2
  105. package/dist/prompt/index.d.ts +2 -2
  106. package/dist/prompt/index.js +8 -4
  107. package/dist/prompt/index.js.map +1 -1
  108. package/dist/prompt/index.mjs +10 -6
  109. package/dist/{prompt-BXJWdbQp.d.mts → prompt-D-jpMrLS.d.mts} +245 -0
  110. package/dist/{prompt-BXJWdbQp.d.ts → prompt-D-jpMrLS.d.ts} +245 -0
  111. package/dist/remove-SDJYEPAY.mjs +106 -0
  112. package/dist/remove-SDJYEPAY.mjs.map +1 -0
  113. package/dist/remove-XBNGIVMR.js +106 -0
  114. package/dist/remove-XBNGIVMR.js.map +1 -0
  115. package/dist/sync-EISKGPTL.js +403 -0
  116. package/dist/sync-EISKGPTL.js.map +1 -0
  117. package/dist/sync-ST2IWXSB.mjs +403 -0
  118. package/dist/sync-ST2IWXSB.mjs.map +1 -0
  119. package/dist/{trace-G2312klE.d.ts → trace-CqaKo0kZ.d.ts} +1 -1
  120. package/dist/{trace-D-bZOuqb.d.mts → trace-DtVc5GhF.d.mts} +1 -1
  121. package/package.json +13 -2
  122. package/dist/chunk-76KNOWLS.js.map +0 -1
  123. package/dist/chunk-G3AUABT7.js +0 -4
  124. package/dist/chunk-OM7VY3XT.mjs +0 -4
  125. package/dist/chunk-PTJ6AAI7.js.map +0 -1
  126. package/dist/chunk-SVJ7SCGB.js.map +0 -1
  127. package/dist/chunk-VJSOCNPA.js.map +0 -1
  128. package/dist/chunk-X62YT4WB.mjs.map +0 -1
  129. package/dist/chunk-Z5J5UI5E.mjs.map +0 -1
  130. /package/dist/{chunk-CSC3CMIT.mjs.map → chunk-STV4ZVNA.mjs.map} +0 -0
  131. /package/dist/{chunk-OM7VY3XT.mjs.map → chunk-Y666BJA5.mjs.map} +0 -0
@@ -0,0 +1,106 @@
1
+ import {
2
+ FileManager
3
+ } from "./chunk-3GKPQB4R.mjs";
4
+ import "./chunk-4NRLVT2U.mjs";
5
+ import {
6
+ PromptsError
7
+ } from "./chunk-GJSEBQXF.mjs";
8
+ import "./chunk-W5ZEP3CI.mjs";
9
+ import "./chunk-QEWDG5QE.mjs";
10
+ import "./chunk-YN4436PK.mjs";
11
+
12
+ // src/cli/commands/remove.ts
13
+ import * as fs from "fs";
14
+ import * as path from "path";
15
+ import chalk from "chalk";
16
+ import ora from "ora";
17
+ var removeCommand = async (name) => {
18
+ try {
19
+ if (!name || name.trim() === "") {
20
+ console.error(chalk.red("Error: Prompt name cannot be empty"));
21
+ process.exit(1);
22
+ }
23
+ const config = FileManager.loadPromptsConfig();
24
+ const lock = FileManager.loadPromptsLock();
25
+ if (!config.prompts[name]) {
26
+ console.error(chalk.red(`Error: Prompt "${name}" not found in dependencies`));
27
+ console.log(chalk.gray(`Available prompts: ${Object.keys(config.prompts).join(", ") || "none"}`));
28
+ process.exit(1);
29
+ }
30
+ const dependency = config.prompts[name];
31
+ const isLocalPrompt = typeof dependency === "string" && dependency.startsWith("file:") || typeof dependency === "object" && dependency.file;
32
+ const spinner = ora(`Removing ${chalk.cyan(name)}...`).start();
33
+ try {
34
+ if (isLocalPrompt) {
35
+ let localFilePath;
36
+ if (typeof dependency === "string" && dependency.startsWith("file:")) {
37
+ localFilePath = path.resolve(dependency.slice(5));
38
+ } else if (typeof dependency === "object" && dependency.file) {
39
+ localFilePath = path.resolve(dependency.file);
40
+ } else {
41
+ localFilePath = path.join(FileManager.getPromptsDir(), `${name}.prompt.yaml`);
42
+ }
43
+ if (fs.existsSync(localFilePath)) {
44
+ fs.unlinkSync(localFilePath);
45
+ const relativePath = path.relative(process.cwd(), localFilePath);
46
+ spinner.succeed();
47
+ console.log(chalk.green(`\u2713 Removed local file ${chalk.gray(relativePath)}`));
48
+ } else {
49
+ spinner.succeed();
50
+ console.log(chalk.yellow(`\u26A0 Local file not found (already deleted?)`));
51
+ }
52
+ console.log(chalk.yellow(`\u26A0 Note: This prompt may still exist on the server. Visit LangWatch to fully delete it.`));
53
+ }
54
+ const lockEntry = lock.prompts[name];
55
+ if (lockEntry == null ? void 0 : lockEntry.materialized) {
56
+ const materializedPath = path.resolve(lockEntry.materialized);
57
+ if (fs.existsSync(materializedPath)) {
58
+ fs.unlinkSync(materializedPath);
59
+ const materializedDir = path.dirname(materializedPath);
60
+ const rootMaterializedDir = FileManager.getMaterializedDir();
61
+ let currentDir = materializedDir;
62
+ while (currentDir !== rootMaterializedDir && currentDir !== path.dirname(currentDir)) {
63
+ try {
64
+ const entries = fs.readdirSync(currentDir);
65
+ if (entries.length === 0) {
66
+ fs.rmdirSync(currentDir);
67
+ currentDir = path.dirname(currentDir);
68
+ } else {
69
+ break;
70
+ }
71
+ } catch (e) {
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ }
77
+ delete config.prompts[name];
78
+ delete lock.prompts[name];
79
+ FileManager.savePromptsConfig(config);
80
+ FileManager.savePromptsLock(lock);
81
+ if (!isLocalPrompt) {
82
+ spinner.succeed();
83
+ console.log(chalk.green(`\u2713 Removed ${chalk.cyan(name)} from dependencies`));
84
+ }
85
+ } catch (error) {
86
+ spinner.fail();
87
+ if (error instanceof PromptsError) {
88
+ console.error(chalk.red(`Error: ${error.message}`));
89
+ } else {
90
+ console.error(chalk.red(`Error removing prompt: ${error instanceof Error ? error.message : "Unknown error"}`));
91
+ }
92
+ process.exit(1);
93
+ }
94
+ } catch (error) {
95
+ if (error instanceof PromptsError) {
96
+ console.error(chalk.red(`Error: ${error.message}`));
97
+ } else {
98
+ console.error(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`));
99
+ }
100
+ process.exit(1);
101
+ }
102
+ };
103
+ export {
104
+ removeCommand
105
+ };
106
+ //# sourceMappingURL=remove-SDJYEPAY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/remove.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { FileManager } from \"../utils/fileManager\";\nimport { PromptService, PromptsError } from \"../../prompt/service\";\n\nexport const removeCommand = async (name: string): Promise<void> => {\n try {\n // Validate prompt name\n if (!name || name.trim() === \"\") {\n console.error(chalk.red(\"Error: Prompt name cannot be empty\"));\n process.exit(1);\n }\n\n // Load existing config and lock\n const config = FileManager.loadPromptsConfig();\n const lock = FileManager.loadPromptsLock();\n\n // Check if prompt exists in dependencies\n if (!config.prompts[name]) {\n console.error(chalk.red(`Error: Prompt \"${name}\" not found in dependencies`));\n console.log(chalk.gray(`Available prompts: ${Object.keys(config.prompts).join(', ') || 'none'}`));\n process.exit(1);\n }\n\n const dependency = config.prompts[name];\n const isLocalPrompt = (typeof dependency === \"string\" && dependency.startsWith(\"file:\")) ||\n (typeof dependency === \"object\" && dependency.file);\n\n const spinner = ora(`Removing ${chalk.cyan(name)}...`).start();\n\n try {\n // Handle local prompts\n if (isLocalPrompt) {\n let localFilePath: string;\n\n if (typeof dependency === \"string\" && dependency.startsWith(\"file:\")) {\n localFilePath = path.resolve(dependency.slice(5)); // Remove \"file:\" prefix\n } else if (typeof dependency === \"object\" && dependency.file) {\n localFilePath = path.resolve(dependency.file);\n } else {\n // Fallback: assume it's in the prompts directory\n localFilePath = path.join(FileManager.getPromptsDir(), `${name}.prompt.yaml`);\n }\n\n // Delete the local file if it exists\n if (fs.existsSync(localFilePath)) {\n fs.unlinkSync(localFilePath);\n const relativePath = path.relative(process.cwd(), localFilePath);\n spinner.succeed();\n console.log(chalk.green(`✓ Removed local file ${chalk.gray(relativePath)}`));\n } else {\n spinner.succeed();\n console.log(chalk.yellow(`⚠ Local file not found (already deleted?)`));\n }\n\n console.log(chalk.yellow(`⚠ Note: This prompt may still exist on the server. Visit LangWatch to fully delete it.`));\n }\n\n // Remove materialized file if it exists\n const lockEntry = lock.prompts[name];\n if (lockEntry?.materialized) {\n const materializedPath = path.resolve(lockEntry.materialized);\n if (fs.existsSync(materializedPath)) {\n fs.unlinkSync(materializedPath);\n\n // Clean up empty directories\n const materializedDir = path.dirname(materializedPath);\n const rootMaterializedDir = FileManager.getMaterializedDir();\n\n let currentDir = materializedDir;\n while (currentDir !== rootMaterializedDir && currentDir !== path.dirname(currentDir)) {\n try {\n const entries = fs.readdirSync(currentDir);\n if (entries.length === 0) {\n fs.rmdirSync(currentDir);\n currentDir = path.dirname(currentDir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n }\n }\n\n // Remove from config and lock\n delete config.prompts[name];\n delete lock.prompts[name];\n\n // Save updated files\n FileManager.savePromptsConfig(config);\n FileManager.savePromptsLock(lock);\n\n if (!isLocalPrompt) {\n spinner.succeed();\n console.log(chalk.green(`✓ Removed ${chalk.cyan(name)} from dependencies`));\n }\n\n } catch (error) {\n spinner.fail();\n if (error instanceof PromptsError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(`Error removing prompt: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n process.exit(1);\n }\n\n } catch (error) {\n if (error instanceof PromptsError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n process.exit(1);\n }\n};"],"mappings":"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","names":[]}
@@ -0,0 +1,106 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunk2JU376G7js = require('./chunk-2JU376G7.js');
4
+ require('./chunk-HA3LI5IK.js');
5
+
6
+
7
+ var _chunkVGHLQXKBjs = require('./chunk-VGHLQXKB.js');
8
+ require('./chunk-SMXXAVMB.js');
9
+ require('./chunk-PCQVQ7SB.js');
10
+ require('./chunk-FJLK5CFL.js');
11
+
12
+ // src/cli/commands/remove.ts
13
+ var _fs = require('fs'); var fs = _interopRequireWildcard(_fs);
14
+ var _path = require('path'); var path = _interopRequireWildcard(_path);
15
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
16
+ var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
17
+ var removeCommand = async (name) => {
18
+ try {
19
+ if (!name || name.trim() === "") {
20
+ console.error(_chalk2.default.red("Error: Prompt name cannot be empty"));
21
+ process.exit(1);
22
+ }
23
+ const config = _chunk2JU376G7js.FileManager.loadPromptsConfig();
24
+ const lock = _chunk2JU376G7js.FileManager.loadPromptsLock();
25
+ if (!config.prompts[name]) {
26
+ console.error(_chalk2.default.red(`Error: Prompt "${name}" not found in dependencies`));
27
+ console.log(_chalk2.default.gray(`Available prompts: ${Object.keys(config.prompts).join(", ") || "none"}`));
28
+ process.exit(1);
29
+ }
30
+ const dependency = config.prompts[name];
31
+ const isLocalPrompt = typeof dependency === "string" && dependency.startsWith("file:") || typeof dependency === "object" && dependency.file;
32
+ const spinner = _ora2.default.call(void 0, `Removing ${_chalk2.default.cyan(name)}...`).start();
33
+ try {
34
+ if (isLocalPrompt) {
35
+ let localFilePath;
36
+ if (typeof dependency === "string" && dependency.startsWith("file:")) {
37
+ localFilePath = path.resolve(dependency.slice(5));
38
+ } else if (typeof dependency === "object" && dependency.file) {
39
+ localFilePath = path.resolve(dependency.file);
40
+ } else {
41
+ localFilePath = path.join(_chunk2JU376G7js.FileManager.getPromptsDir(), `${name}.prompt.yaml`);
42
+ }
43
+ if (fs.existsSync(localFilePath)) {
44
+ fs.unlinkSync(localFilePath);
45
+ const relativePath = path.relative(process.cwd(), localFilePath);
46
+ spinner.succeed();
47
+ console.log(_chalk2.default.green(`\u2713 Removed local file ${_chalk2.default.gray(relativePath)}`));
48
+ } else {
49
+ spinner.succeed();
50
+ console.log(_chalk2.default.yellow(`\u26A0 Local file not found (already deleted?)`));
51
+ }
52
+ console.log(_chalk2.default.yellow(`\u26A0 Note: This prompt may still exist on the server. Visit LangWatch to fully delete it.`));
53
+ }
54
+ const lockEntry = lock.prompts[name];
55
+ if (lockEntry == null ? void 0 : lockEntry.materialized) {
56
+ const materializedPath = path.resolve(lockEntry.materialized);
57
+ if (fs.existsSync(materializedPath)) {
58
+ fs.unlinkSync(materializedPath);
59
+ const materializedDir = path.dirname(materializedPath);
60
+ const rootMaterializedDir = _chunk2JU376G7js.FileManager.getMaterializedDir();
61
+ let currentDir = materializedDir;
62
+ while (currentDir !== rootMaterializedDir && currentDir !== path.dirname(currentDir)) {
63
+ try {
64
+ const entries = fs.readdirSync(currentDir);
65
+ if (entries.length === 0) {
66
+ fs.rmdirSync(currentDir);
67
+ currentDir = path.dirname(currentDir);
68
+ } else {
69
+ break;
70
+ }
71
+ } catch (e) {
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ }
77
+ delete config.prompts[name];
78
+ delete lock.prompts[name];
79
+ _chunk2JU376G7js.FileManager.savePromptsConfig(config);
80
+ _chunk2JU376G7js.FileManager.savePromptsLock(lock);
81
+ if (!isLocalPrompt) {
82
+ spinner.succeed();
83
+ console.log(_chalk2.default.green(`\u2713 Removed ${_chalk2.default.cyan(name)} from dependencies`));
84
+ }
85
+ } catch (error) {
86
+ spinner.fail();
87
+ if (error instanceof _chunkVGHLQXKBjs.PromptsError) {
88
+ console.error(_chalk2.default.red(`Error: ${error.message}`));
89
+ } else {
90
+ console.error(_chalk2.default.red(`Error removing prompt: ${error instanceof Error ? error.message : "Unknown error"}`));
91
+ }
92
+ process.exit(1);
93
+ }
94
+ } catch (error) {
95
+ if (error instanceof _chunkVGHLQXKBjs.PromptsError) {
96
+ console.error(_chalk2.default.red(`Error: ${error.message}`));
97
+ } else {
98
+ console.error(_chalk2.default.red(`Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`));
99
+ }
100
+ process.exit(1);
101
+ }
102
+ };
103
+
104
+
105
+ exports.removeCommand = removeCommand;
106
+ //# sourceMappingURL=remove-XBNGIVMR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/remove-XBNGIVMR.js","../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACA;ACXA,+DAAoB;AACpB,uEAAsB;AACtB,4EAAkB;AAClB,oEAAgB;AAIT,IAAM,cAAA,EAAgB,MAAA,CAAO,IAAA,EAAA,GAAgC;AAClE,EAAA,IAAI;AAEF,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,EAAA,IAAM,EAAA,EAAI;AAC/B,MAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAM,GAAA,CAAI,oCAAoC,CAAC,CAAA;AAC7D,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,IAChB;AAGA,IAAA,MAAM,OAAA,EAAS,4BAAA,CAAY,iBAAA,CAAkB,CAAA;AAC7C,IAAA,MAAM,KAAA,EAAO,4BAAA,CAAY,eAAA,CAAgB,CAAA;AAGzC,IAAA,GAAA,CAAI,CAAC,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAM,GAAA,CAAI,CAAA,eAAA,EAAkB,IAAI,CAAA,2BAAA,CAA6B,CAAC,CAAA;AAC5E,MAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,EAAA,GAAK,MAAM,CAAA,CAAA;AAC/E,MAAA;AAChB,IAAA;AAEsC,IAAA;AAEhB,IAAA;AAEuC,IAAA;AAEzD,IAAA;AAEiB,MAAA;AACb,QAAA;AAEkE,QAAA;AACpB,UAAA;AACY,QAAA;AAChB,UAAA;AACvC,QAAA;AAEuE,UAAA;AAC9E,QAAA;AAGkC,QAAA;AACL,UAAA;AACoC,UAAA;AAC/C,UAAA;AAC2D,UAAA;AACtE,QAAA;AACW,UAAA;AACqD,UAAA;AACvE,QAAA;AAEyB,QAAA;AAC3B,MAAA;AAGmC,MAAA;AACN,MAAA;AACiC,QAAA;AACvB,QAAA;AACL,UAAA;AAGuB,UAAA;AACM,UAAA;AAE1C,UAAA;AACqE,UAAA;AAChF,YAAA;AACuC,cAAA;AACf,cAAA;AACD,gBAAA;AACa,gBAAA;AAC/B,cAAA;AACL,gBAAA;AACF,cAAA;AACM,YAAA;AACN,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AAG0B,MAAA;AACF,MAAA;AAGY,MAAA;AACJ,MAAA;AAEZ,MAAA;AACF,QAAA;AAC0D,QAAA;AAC5E,MAAA;AAEc,IAAA;AACD,MAAA;AACsB,MAAA;AACiB,QAAA;AAC7C,MAAA;AACsF,QAAA;AAC7F,MAAA;AACc,MAAA;AAChB,IAAA;AAEc,EAAA;AACqB,IAAA;AACiB,MAAA;AAC7C,IAAA;AACiF,MAAA;AACxF,IAAA;AACc,IAAA;AAChB,EAAA;AACF;ADjBoG;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/remove-XBNGIVMR.js","sourcesContent":[null,"import * as fs from \"fs\";\nimport * as path from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { FileManager } from \"../utils/fileManager\";\nimport { PromptService, PromptsError } from \"../../prompt/service\";\n\nexport const removeCommand = async (name: string): Promise<void> => {\n try {\n // Validate prompt name\n if (!name || name.trim() === \"\") {\n console.error(chalk.red(\"Error: Prompt name cannot be empty\"));\n process.exit(1);\n }\n\n // Load existing config and lock\n const config = FileManager.loadPromptsConfig();\n const lock = FileManager.loadPromptsLock();\n\n // Check if prompt exists in dependencies\n if (!config.prompts[name]) {\n console.error(chalk.red(`Error: Prompt \"${name}\" not found in dependencies`));\n console.log(chalk.gray(`Available prompts: ${Object.keys(config.prompts).join(', ') || 'none'}`));\n process.exit(1);\n }\n\n const dependency = config.prompts[name];\n const isLocalPrompt = (typeof dependency === \"string\" && dependency.startsWith(\"file:\")) ||\n (typeof dependency === \"object\" && dependency.file);\n\n const spinner = ora(`Removing ${chalk.cyan(name)}...`).start();\n\n try {\n // Handle local prompts\n if (isLocalPrompt) {\n let localFilePath: string;\n\n if (typeof dependency === \"string\" && dependency.startsWith(\"file:\")) {\n localFilePath = path.resolve(dependency.slice(5)); // Remove \"file:\" prefix\n } else if (typeof dependency === \"object\" && dependency.file) {\n localFilePath = path.resolve(dependency.file);\n } else {\n // Fallback: assume it's in the prompts directory\n localFilePath = path.join(FileManager.getPromptsDir(), `${name}.prompt.yaml`);\n }\n\n // Delete the local file if it exists\n if (fs.existsSync(localFilePath)) {\n fs.unlinkSync(localFilePath);\n const relativePath = path.relative(process.cwd(), localFilePath);\n spinner.succeed();\n console.log(chalk.green(`✓ Removed local file ${chalk.gray(relativePath)}`));\n } else {\n spinner.succeed();\n console.log(chalk.yellow(`⚠ Local file not found (already deleted?)`));\n }\n\n console.log(chalk.yellow(`⚠ Note: This prompt may still exist on the server. Visit LangWatch to fully delete it.`));\n }\n\n // Remove materialized file if it exists\n const lockEntry = lock.prompts[name];\n if (lockEntry?.materialized) {\n const materializedPath = path.resolve(lockEntry.materialized);\n if (fs.existsSync(materializedPath)) {\n fs.unlinkSync(materializedPath);\n\n // Clean up empty directories\n const materializedDir = path.dirname(materializedPath);\n const rootMaterializedDir = FileManager.getMaterializedDir();\n\n let currentDir = materializedDir;\n while (currentDir !== rootMaterializedDir && currentDir !== path.dirname(currentDir)) {\n try {\n const entries = fs.readdirSync(currentDir);\n if (entries.length === 0) {\n fs.rmdirSync(currentDir);\n currentDir = path.dirname(currentDir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n }\n }\n\n // Remove from config and lock\n delete config.prompts[name];\n delete lock.prompts[name];\n\n // Save updated files\n FileManager.savePromptsConfig(config);\n FileManager.savePromptsLock(lock);\n\n if (!isLocalPrompt) {\n spinner.succeed();\n console.log(chalk.green(`✓ Removed ${chalk.cyan(name)} from dependencies`));\n }\n\n } catch (error) {\n spinner.fail();\n if (error instanceof PromptsError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(`Error removing prompt: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n process.exit(1);\n }\n\n } catch (error) {\n if (error instanceof PromptsError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n process.exit(1);\n }\n};"]}
@@ -0,0 +1,403 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkHJU67C7Hjs = require('./chunk-HJU67C7H.js');
4
+
5
+
6
+ var _chunk2JU376G7js = require('./chunk-2JU376G7.js');
7
+
8
+
9
+ var _chunkF6E4XQQUjs = require('./chunk-F6E4XQQU.js');
10
+ require('./chunk-HA3LI5IK.js');
11
+
12
+
13
+
14
+ var _chunkVGHLQXKBjs = require('./chunk-VGHLQXKB.js');
15
+
16
+
17
+ var _chunkSMXXAVMBjs = require('./chunk-SMXXAVMB.js');
18
+ require('./chunk-PCQVQ7SB.js');
19
+
20
+
21
+ var _chunkFJLK5CFLjs = require('./chunk-FJLK5CFL.js');
22
+
23
+ // src/cli/commands/sync.ts
24
+ var _fs = require('fs'); var fs = _interopRequireWildcard(_fs);
25
+ var _path = require('path'); var path = _interopRequireWildcard(_path);
26
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
27
+ var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
28
+ var _jsyaml = require('js-yaml'); var yaml = _interopRequireWildcard(_jsyaml);
29
+ var handleConflict = async (promptName, conflictInfo) => {
30
+ console.log(
31
+ _chalk2.default.yellow(
32
+ `
33
+ \u26A0 Conflict detected for prompt: ${_chalk2.default.cyan(promptName)}`
34
+ )
35
+ );
36
+ console.log(
37
+ _chalk2.default.gray(
38
+ `Local version: ${conflictInfo.localVersion}, Remote version: ${conflictInfo.remoteVersion}`
39
+ )
40
+ );
41
+ if (conflictInfo.differences.length > 0) {
42
+ console.log(_chalk2.default.yellow("\nDifferences:"));
43
+ conflictInfo.differences.forEach((diff) => {
44
+ console.log(_chalk2.default.gray(` \u2022 ${diff}`));
45
+ });
46
+ }
47
+ console.log(_chalk2.default.yellow("\nOptions:"));
48
+ console.log(" [l] Use local version (overwrite remote)");
49
+ console.log(" [r] Use remote version (overwrite local)");
50
+ console.log(" [a] Abort sync for this prompt");
51
+ const readline = _chunkFJLK5CFLjs.__require.call(void 0, "readline");
52
+ const rl = readline.createInterface({
53
+ input: process.stdin,
54
+ output: process.stdout
55
+ });
56
+ return new Promise((resolve2) => {
57
+ rl.question("Choose resolution (l/r/a): ", (answer) => {
58
+ rl.close();
59
+ const choice = answer.toLowerCase();
60
+ if (choice === "l" || choice === "local") {
61
+ resolve2("local");
62
+ } else if (choice === "r" || choice === "remote") {
63
+ resolve2("remote");
64
+ } else {
65
+ resolve2("abort");
66
+ }
67
+ });
68
+ });
69
+ };
70
+ var syncCommand = async () => {
71
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
72
+ const startTime = Date.now();
73
+ try {
74
+ _chunkF6E4XQQUjs.checkApiKey.call(void 0, );
75
+ const promptService = _chunkVGHLQXKBjs.PromptService.getInstance();
76
+ await _chunkHJU67C7Hjs.ensureProjectInitialized.call(void 0, false);
77
+ const config = _chunk2JU376G7js.FileManager.loadPromptsConfig();
78
+ const lock = _chunk2JU376G7js.FileManager.loadPromptsLock();
79
+ const result = {
80
+ fetched: [],
81
+ pushed: [],
82
+ unchanged: [],
83
+ cleaned: [],
84
+ errors: []
85
+ };
86
+ const remoteDeps = Object.entries(config.prompts).filter(
87
+ ([, dependency]) => {
88
+ if (typeof dependency === "object" && dependency.file) {
89
+ return false;
90
+ }
91
+ if (typeof dependency === "string" && dependency.startsWith("file:")) {
92
+ return false;
93
+ }
94
+ return true;
95
+ }
96
+ );
97
+ if (remoteDeps.length > 0) {
98
+ const fetchSpinner = _ora2.default.call(void 0,
99
+ `Checking ${remoteDeps.length} remote prompts...`
100
+ ).start();
101
+ for (const [name, dependency] of remoteDeps) {
102
+ try {
103
+ const versionSpec = typeof dependency === "string" ? dependency : dependency.version || "latest";
104
+ const lockEntry = lock.prompts[name];
105
+ const prompt = await promptService.get(name);
106
+ if (prompt) {
107
+ const needsUpdate = !lockEntry || lockEntry.version !== prompt.version || !lockEntry.materialized || !fs.existsSync(path.resolve(lockEntry.materialized));
108
+ if (needsUpdate) {
109
+ const materializedPrompt = _chunkSMXXAVMBjs.PromptConverter.fromApiToMaterialized(prompt);
110
+ const savedPath = _chunk2JU376G7js.FileManager.saveMaterializedPrompt(
111
+ name,
112
+ materializedPrompt
113
+ );
114
+ const relativePath = path.relative(process.cwd(), savedPath);
115
+ result.fetched.push({
116
+ name,
117
+ version: prompt.version,
118
+ versionSpec
119
+ });
120
+ _chunk2JU376G7js.FileManager.updateLockEntry(
121
+ lock,
122
+ name,
123
+ materializedPrompt,
124
+ savedPath
125
+ );
126
+ fetchSpinner.text = `Fetched ${_chalk2.default.cyan(
127
+ `${name}@${versionSpec}`
128
+ )} ${_chalk2.default.gray(`(version ${prompt.version})`)} \u2192 ${_chalk2.default.gray(
129
+ relativePath
130
+ )}`;
131
+ } else {
132
+ result.unchanged.push(name);
133
+ }
134
+ } else {
135
+ result.errors.push({ name, error: "Prompt not found" });
136
+ }
137
+ } catch (error) {
138
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
139
+ result.errors.push({ name, error: errorMessage });
140
+ }
141
+ }
142
+ fetchSpinner.stop();
143
+ }
144
+ const localFileRefs = Object.entries(config.prompts).filter(
145
+ ([, dependency]) => {
146
+ return typeof dependency === "string" && dependency.startsWith("file:");
147
+ }
148
+ );
149
+ if (localFileRefs.length > 0) {
150
+ const pushSpinner = _ora2.default.call(void 0,
151
+ `Pushing ${localFileRefs.length} local prompts...`
152
+ ).start();
153
+ for (const [promptName, dependency] of localFileRefs) {
154
+ try {
155
+ const filePath = dependency.slice(5);
156
+ const localConfig = _chunk2JU376G7js.FileManager.loadLocalPrompt(filePath);
157
+ const currentVersion = (_a = lock.prompts[promptName]) == null ? void 0 : _a.version;
158
+ const configData = {
159
+ model: localConfig.model,
160
+ prompt: _chunkSMXXAVMBjs.PromptConverter.extractSystemPrompt(localConfig.messages),
161
+ messages: _chunkSMXXAVMBjs.PromptConverter.filterNonSystemMessages(
162
+ localConfig.messages
163
+ ),
164
+ temperature: (_b = localConfig.modelParameters) == null ? void 0 : _b.temperature,
165
+ max_tokens: (_c = localConfig.modelParameters) == null ? void 0 : _c.max_tokens,
166
+ inputs: [{ identifier: "input", type: "str" }],
167
+ outputs: [{ identifier: "output", type: "str" }]
168
+ };
169
+ const syncResult = await promptService.sync({
170
+ name: promptName,
171
+ configData,
172
+ localVersion: currentVersion,
173
+ commitMessage: `Synced from local file: ${path.basename(filePath)}`
174
+ });
175
+ const relativePath = path.relative(process.cwd(), filePath);
176
+ let conflictResolution = null;
177
+ if (syncResult.action === "conflict") {
178
+ pushSpinner.stop();
179
+ conflictResolution = await handleConflict(
180
+ promptName,
181
+ syncResult.conflictInfo
182
+ );
183
+ if (conflictResolution === "abort") {
184
+ result.errors.push({
185
+ name: promptName,
186
+ error: "Sync aborted due to conflict"
187
+ });
188
+ continue;
189
+ }
190
+ if (conflictResolution === "remote" && syncResult.conflictInfo) {
191
+ const remoteConfig = {
192
+ model: syncResult.conflictInfo.remoteConfigData.model,
193
+ modelParameters: {
194
+ temperature: syncResult.conflictInfo.remoteConfigData.temperature,
195
+ max_tokens: syncResult.conflictInfo.remoteConfigData.max_tokens
196
+ },
197
+ messages: [
198
+ {
199
+ role: "system",
200
+ content: syncResult.conflictInfo.remoteConfigData.prompt
201
+ },
202
+ ...(_d = syncResult.conflictInfo.remoteConfigData.messages) != null ? _d : []
203
+ ]
204
+ };
205
+ const yamlContent = yaml.dump(remoteConfig, {
206
+ lineWidth: -1,
207
+ noRefs: true,
208
+ sortKeys: false
209
+ });
210
+ fs.writeFileSync(filePath, yamlContent);
211
+ }
212
+ pushSpinner.start();
213
+ }
214
+ if (syncResult.prompt) {
215
+ lock.prompts[promptName] = {
216
+ version: syncResult.prompt.version,
217
+ versionId: syncResult.prompt.versionId,
218
+ materialized: filePath
219
+ };
220
+ } else if (syncResult.action === "conflict") {
221
+ const remoteVersion = (_f = (_e = syncResult.conflictInfo) == null ? void 0 : _e.remoteVersion) != null ? _f : 0;
222
+ if (conflictResolution === "remote") {
223
+ lock.prompts[promptName] = {
224
+ version: remoteVersion,
225
+ versionId: "remote_version",
226
+ // We don't have the actual versionId from conflict info
227
+ materialized: filePath
228
+ };
229
+ } else {
230
+ lock.prompts[promptName] = {
231
+ version: remoteVersion + 1,
232
+ versionId: "conflict_resolved",
233
+ // Temporary until we get actual versionId
234
+ materialized: filePath
235
+ };
236
+ }
237
+ }
238
+ let actionText;
239
+ if (syncResult.action === "conflict") {
240
+ if (conflictResolution === "remote") {
241
+ actionText = "Pulled";
242
+ result.fetched.push({
243
+ name: promptName,
244
+ version: ((_g = syncResult.conflictInfo) == null ? void 0 : _g.remoteVersion) || 0,
245
+ versionSpec: "latest"
246
+ // Default for conflict resolution
247
+ });
248
+ } else {
249
+ actionText = "Pushed";
250
+ result.pushed.push({
251
+ name: promptName,
252
+ version: (((_h = syncResult.conflictInfo) == null ? void 0 : _h.remoteVersion) || 0) + 1
253
+ // New version after push
254
+ });
255
+ }
256
+ } else if (syncResult.action === "up_to_date") {
257
+ actionText = "Up-to-date";
258
+ result.unchanged.push(promptName);
259
+ } else {
260
+ actionText = {
261
+ created: "Created",
262
+ updated: "Updated"
263
+ }[syncResult.action] || "Pushed";
264
+ result.pushed.push({
265
+ name: promptName,
266
+ version: ((_i = syncResult.prompt) == null ? void 0 : _i.version) || 0
267
+ });
268
+ }
269
+ pushSpinner.text = `${actionText} ${_chalk2.default.cyan(
270
+ promptName
271
+ )} ${_chalk2.default.gray(
272
+ `(version ${((_j = syncResult.prompt) == null ? void 0 : _j.version) || ((_k = syncResult.conflictInfo) == null ? void 0 : _k.remoteVersion) || "unknown"})`
273
+ )} ${conflictResolution === "remote" ? "to" : "from"} ${_chalk2.default.gray(
274
+ relativePath
275
+ )}`;
276
+ } catch (error) {
277
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
278
+ result.errors.push({ name: promptName, error: errorMessage });
279
+ }
280
+ }
281
+ _chunk2JU376G7js.FileManager.savePromptsLock(lock);
282
+ pushSpinner.stop();
283
+ }
284
+ const discoveredLocalFiles = _chunk2JU376G7js.FileManager.getLocalPromptFiles();
285
+ const orphanFiles = discoveredLocalFiles.filter((filePath) => {
286
+ const promptName = _chunk2JU376G7js.FileManager.promptNameFromPath(filePath);
287
+ return !config.prompts[promptName];
288
+ });
289
+ if (orphanFiles.length > 0) {
290
+ console.log(
291
+ _chalk2.default.yellow(
292
+ `
293
+ \u26A0 Found ${orphanFiles.length} orphan prompt file${orphanFiles.length > 1 ? "s" : ""}:`
294
+ )
295
+ );
296
+ for (const filePath of orphanFiles) {
297
+ const promptName = _chunk2JU376G7js.FileManager.promptNameFromPath(filePath);
298
+ const relativePath = path.relative(process.cwd(), filePath);
299
+ console.log(_chalk2.default.yellow(` ${relativePath}`));
300
+ console.log(
301
+ _chalk2.default.gray(
302
+ ` Add to prompts.json: "${promptName}": "file:${relativePath}"`
303
+ )
304
+ );
305
+ }
306
+ console.log(
307
+ _chalk2.default.gray(
308
+ `
309
+ Tip: Add these to prompts.json to include them in sync operations.`
310
+ )
311
+ );
312
+ }
313
+ const currentDependencies = new Set(
314
+ Object.keys(config.prompts).filter((name) => {
315
+ const dependency = config.prompts[name];
316
+ if (typeof dependency === "object" && dependency.file) {
317
+ return false;
318
+ }
319
+ if (typeof dependency === "string" && dependency.startsWith("file:")) {
320
+ return false;
321
+ }
322
+ return true;
323
+ })
324
+ );
325
+ const cleanedFiles = _chunk2JU376G7js.FileManager.cleanupOrphanedMaterializedFiles(currentDependencies);
326
+ if (cleanedFiles.length > 0) {
327
+ result.cleaned = cleanedFiles;
328
+ _chunk2JU376G7js.FileManager.removeFromLock(lock, cleanedFiles);
329
+ }
330
+ _chunk2JU376G7js.FileManager.savePromptsLock(lock);
331
+ if (result.fetched.length > 0) {
332
+ for (const { name, version, versionSpec } of result.fetched) {
333
+ const lockEntry = lock.prompts[name];
334
+ const displayPath = (lockEntry == null ? void 0 : lockEntry.materialized) ? `./${lockEntry.materialized}` : `./prompts/.materialized/${name}.prompt.yaml`;
335
+ console.log(
336
+ _chalk2.default.green(
337
+ `\u2713 Pulled ${_chalk2.default.cyan(`${name}@${versionSpec}`)} ${_chalk2.default.gray(
338
+ `(version ${version})`
339
+ )} \u2192 ${_chalk2.default.gray(displayPath)}`
340
+ )
341
+ );
342
+ }
343
+ }
344
+ if (result.pushed.length > 0) {
345
+ for (const { name, version } of result.pushed) {
346
+ const localPath = `./prompts/${name}.prompt.yaml`;
347
+ console.log(
348
+ _chalk2.default.green(
349
+ `\u2713 Pushed ${_chalk2.default.cyan(name)} ${_chalk2.default.gray(`(version ${version})`)} from ${_chalk2.default.gray(localPath)}`
350
+ )
351
+ );
352
+ }
353
+ }
354
+ if (result.cleaned.length > 0) {
355
+ for (const name of result.cleaned) {
356
+ console.log(
357
+ _chalk2.default.yellow(
358
+ `\u2713 Cleaned ${_chalk2.default.cyan(name)} (no longer in dependencies)`
359
+ )
360
+ );
361
+ }
362
+ }
363
+ if (result.errors.length > 0) {
364
+ for (const { name, error } of result.errors) {
365
+ console.log(_chalk2.default.red(`\u2717 Failed ${_chalk2.default.cyan(name)}: ${error}`));
366
+ }
367
+ }
368
+ const duration = ((Date.now() - startTime) / 1e3).toFixed(1);
369
+ const totalActions = result.fetched.length + result.pushed.length + result.cleaned.length;
370
+ if (totalActions === 0 && result.errors.length === 0) {
371
+ console.log(_chalk2.default.gray(`Synced in ${duration}s, no changes`));
372
+ } else {
373
+ const summary = [];
374
+ if (result.fetched.length > 0)
375
+ summary.push(`${result.fetched.length} fetched`);
376
+ if (result.pushed.length > 0)
377
+ summary.push(`${result.pushed.length} pushed`);
378
+ if (result.cleaned.length > 0)
379
+ summary.push(`${result.cleaned.length} cleaned`);
380
+ if (result.errors.length > 0)
381
+ summary.push(`${result.errors.length} errors`);
382
+ console.log(_chalk2.default.gray(`Synced ${summary.join(", ")} in ${duration}s`));
383
+ }
384
+ if (result.errors.length > 0) {
385
+ process.exit(1);
386
+ }
387
+ } catch (error) {
388
+ if (error instanceof _chunkVGHLQXKBjs.PromptsError) {
389
+ console.error(_chalk2.default.red(`Error: ${error.message}`));
390
+ } else {
391
+ console.error(
392
+ _chalk2.default.red(
393
+ `Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`
394
+ )
395
+ );
396
+ }
397
+ process.exit(1);
398
+ }
399
+ };
400
+
401
+
402
+ exports.syncCommand = syncCommand;
403
+ //# sourceMappingURL=sync-EISKGPTL.js.map