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.
- package/dist/add-LBBS4I3H.js +114 -0
- package/dist/add-LBBS4I3H.js.map +1 -0
- package/dist/add-RD3ZKFAT.mjs +114 -0
- package/dist/add-RD3ZKFAT.mjs.map +1 -0
- package/dist/chunk-2JU376G7.js +242 -0
- package/dist/chunk-2JU376G7.js.map +1 -0
- package/dist/chunk-2ODBGSBI.js +4 -0
- package/dist/{chunk-G3AUABT7.js.map → chunk-2ODBGSBI.js.map} +1 -1
- package/dist/chunk-3GKPQB4R.mjs +242 -0
- package/dist/chunk-3GKPQB4R.mjs.map +1 -0
- package/dist/chunk-4NRLVT2U.mjs +35 -0
- package/dist/chunk-4NRLVT2U.mjs.map +1 -0
- package/dist/{chunk-SVJ7SCGB.js → chunk-52GXX3MA.js} +33 -31
- package/dist/chunk-52GXX3MA.js.map +1 -0
- package/dist/chunk-5NC5ILKA.js +94 -0
- package/dist/chunk-5NC5ILKA.js.map +1 -0
- package/dist/{chunk-76KNOWLS.js → chunk-6I4EA43Y.js} +2 -2
- package/dist/chunk-6I4EA43Y.js.map +1 -0
- package/dist/chunk-DHJKJVY7.mjs +20 -0
- package/dist/chunk-DHJKJVY7.mjs.map +1 -0
- package/dist/{chunk-VJSOCNPA.js → chunk-DTEKFQ4U.js} +6 -28
- package/dist/chunk-DTEKFQ4U.js.map +1 -0
- package/dist/chunk-E7UE2MPD.mjs +93 -0
- package/dist/chunk-E7UE2MPD.mjs.map +1 -0
- package/dist/chunk-F6E4XQQU.js +20 -0
- package/dist/chunk-F6E4XQQU.js.map +1 -0
- package/dist/chunk-FJLK5CFL.js +37 -0
- package/dist/chunk-FJLK5CFL.js.map +1 -0
- package/dist/{chunk-Z5J5UI5E.mjs → chunk-GJSEBQXF.mjs} +139 -107
- package/dist/chunk-GJSEBQXF.mjs.map +1 -0
- package/dist/chunk-HA3LI5IK.js +35 -0
- package/dist/chunk-HA3LI5IK.js.map +1 -0
- package/dist/chunk-HJU67C7H.js +93 -0
- package/dist/chunk-HJU67C7H.js.map +1 -0
- package/dist/{chunk-PMBEK6YE.mjs → chunk-J7ICRUU4.mjs} +5 -3
- package/dist/{chunk-PMBEK6YE.mjs.map → chunk-J7ICRUU4.mjs.map} +1 -1
- package/dist/{chunk-HPC6Z7J4.js → chunk-PWZBLTHR.js} +3 -3
- package/dist/{chunk-HPC6Z7J4.js.map → chunk-PWZBLTHR.js.map} +1 -1
- package/dist/chunk-SMXXAVMB.js +100 -0
- package/dist/chunk-SMXXAVMB.js.map +1 -0
- package/dist/{chunk-CSC3CMIT.mjs → chunk-STV4ZVNA.mjs} +2 -2
- package/dist/chunk-T5AZMMVS.mjs +94 -0
- package/dist/chunk-T5AZMMVS.mjs.map +1 -0
- package/dist/{chunk-4BZATFKJ.mjs → chunk-UU33HCCZ.mjs} +4 -26
- package/dist/{chunk-4BZATFKJ.mjs.map → chunk-UU33HCCZ.mjs.map} +1 -1
- package/dist/{chunk-PTJ6AAI7.js → chunk-VGHLQXKB.js} +138 -106
- package/dist/chunk-VGHLQXKB.js.map +1 -0
- package/dist/chunk-W5ZEP3CI.mjs +100 -0
- package/dist/chunk-W5ZEP3CI.mjs.map +1 -0
- package/dist/chunk-Y666BJA5.mjs +4 -0
- package/dist/{chunk-X62YT4WB.mjs → chunk-YFUZF7JM.mjs} +2 -2
- package/dist/chunk-YFUZF7JM.mjs.map +1 -0
- package/dist/chunk-YN4436PK.mjs +37 -0
- package/dist/chunk-YN4436PK.mjs.map +1 -0
- package/dist/cli/index.d.mts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +106 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +106 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/client-browser.js +12 -10
- package/dist/client-browser.js.map +1 -1
- package/dist/client-browser.mjs +5 -3
- package/dist/client-browser.mjs.map +1 -1
- package/dist/client-node.js +11 -9
- package/dist/client-node.js.map +1 -1
- package/dist/client-node.mjs +7 -5
- package/dist/client-node.mjs.map +1 -1
- package/dist/create-G5MTGOOH.js +70 -0
- package/dist/create-G5MTGOOH.js.map +1 -0
- package/dist/create-QUZYBMQB.mjs +70 -0
- package/dist/create-QUZYBMQB.mjs.map +1 -0
- package/dist/evaluation/index.js +5 -4
- package/dist/evaluation/index.js.map +1 -1
- package/dist/evaluation/index.mjs +4 -3
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -6
- package/dist/init-H67RW22E.mjs +16 -0
- package/dist/init-H67RW22E.mjs.map +1 -0
- package/dist/init-XU2JFY6N.js +16 -0
- package/dist/init-XU2JFY6N.js.map +1 -0
- package/dist/list-7NPSX2E4.mjs +136 -0
- package/dist/list-7NPSX2E4.mjs.map +1 -0
- package/dist/list-ZXFLAF52.js +136 -0
- package/dist/list-ZXFLAF52.js.map +1 -0
- package/dist/login-76NQIHKR.js +110 -0
- package/dist/login-76NQIHKR.js.map +1 -0
- package/dist/login-EK4WVOI2.mjs +110 -0
- package/dist/login-EK4WVOI2.mjs.map +1 -0
- package/dist/observability/index.d.mts +3 -3
- package/dist/observability/index.d.ts +3 -3
- package/dist/observability/index.js +5 -4
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/index.mjs +4 -3
- package/dist/observability/instrumentation/langchain/index.d.mts +2 -2
- package/dist/observability/instrumentation/langchain/index.d.ts +2 -2
- package/dist/observability/instrumentation/langchain/index.js +29 -27
- package/dist/observability/instrumentation/langchain/index.js.map +1 -1
- package/dist/observability/instrumentation/langchain/index.mjs +5 -3
- package/dist/observability/instrumentation/langchain/index.mjs.map +1 -1
- package/dist/prompt/index.d.mts +2 -2
- package/dist/prompt/index.d.ts +2 -2
- package/dist/prompt/index.js +8 -4
- package/dist/prompt/index.js.map +1 -1
- package/dist/prompt/index.mjs +10 -6
- package/dist/{prompt-BXJWdbQp.d.mts → prompt-D-jpMrLS.d.mts} +245 -0
- package/dist/{prompt-BXJWdbQp.d.ts → prompt-D-jpMrLS.d.ts} +245 -0
- package/dist/remove-SDJYEPAY.mjs +106 -0
- package/dist/remove-SDJYEPAY.mjs.map +1 -0
- package/dist/remove-XBNGIVMR.js +106 -0
- package/dist/remove-XBNGIVMR.js.map +1 -0
- package/dist/sync-EISKGPTL.js +403 -0
- package/dist/sync-EISKGPTL.js.map +1 -0
- package/dist/sync-ST2IWXSB.mjs +403 -0
- package/dist/sync-ST2IWXSB.mjs.map +1 -0
- package/dist/{trace-G2312klE.d.ts → trace-CqaKo0kZ.d.ts} +1 -1
- package/dist/{trace-D-bZOuqb.d.mts → trace-DtVc5GhF.d.mts} +1 -1
- package/package.json +13 -2
- package/dist/chunk-76KNOWLS.js.map +0 -1
- package/dist/chunk-G3AUABT7.js +0 -4
- package/dist/chunk-OM7VY3XT.mjs +0 -4
- package/dist/chunk-PTJ6AAI7.js.map +0 -1
- package/dist/chunk-SVJ7SCGB.js.map +0 -1
- package/dist/chunk-VJSOCNPA.js.map +0 -1
- package/dist/chunk-X62YT4WB.mjs.map +0 -1
- package/dist/chunk-Z5J5UI5E.mjs.map +0 -1
- /package/dist/{chunk-CSC3CMIT.mjs.map → chunk-STV4ZVNA.mjs.map} +0 -0
- /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
|