langwatch 0.4.2 → 0.5.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 (105) hide show
  1. package/dist/{add-SV662KZU.js → add-4WXEWG5H.js} +63 -34
  2. package/dist/add-4WXEWG5H.js.map +1 -0
  3. package/dist/{add-SMYALCQG.mjs → add-D2WVVKIP.mjs} +48 -19
  4. package/dist/add-D2WVVKIP.mjs.map +1 -0
  5. package/dist/{chunk-ZZLIF3DE.js → chunk-7OZKH5K2.js} +10 -10
  6. package/dist/{chunk-ZZLIF3DE.js.map → chunk-7OZKH5K2.js.map} +1 -1
  7. package/dist/{chunk-I5NDMIK5.js → chunk-AZHZ4NB4.js} +1 -1
  8. package/dist/{chunk-I5NDMIK5.js.map → chunk-AZHZ4NB4.js.map} +1 -1
  9. package/dist/{chunk-YQVVPMKH.mjs → chunk-BTBSMJTY.mjs} +1 -1
  10. package/dist/chunk-BTBSMJTY.mjs.map +1 -0
  11. package/dist/{chunk-P5F63PAW.js → chunk-CAZONSXV.js} +5 -5
  12. package/dist/{chunk-P5F63PAW.js.map → chunk-CAZONSXV.js.map} +1 -1
  13. package/dist/{chunk-7ZRAJ52N.mjs → chunk-CKVDNVFL.mjs} +3 -3
  14. package/dist/{chunk-K4ICRI7W.mjs → chunk-DLJO7AK5.mjs} +2 -2
  15. package/dist/{chunk-T7FQHOLK.js → chunk-DSIQSULK.js} +15 -18
  16. package/dist/chunk-DSIQSULK.js.map +1 -0
  17. package/dist/{chunk-ILTCLEIF.js → chunk-ECOC36EA.js} +7 -7
  18. package/dist/chunk-ECOC36EA.js.map +1 -0
  19. package/dist/{chunk-5ZKAT4KI.mjs → chunk-H5PON53W.mjs} +12 -29
  20. package/dist/chunk-H5PON53W.mjs.map +1 -0
  21. package/dist/{chunk-NVKMXXNP.js → chunk-P4SQTYGN.js} +14 -14
  22. package/dist/{chunk-NVKMXXNP.js.map → chunk-P4SQTYGN.js.map} +1 -1
  23. package/dist/{chunk-VI5NJ53L.js → chunk-QCYYSMCU.js} +2 -2
  24. package/dist/chunk-QCYYSMCU.js.map +1 -0
  25. package/dist/{chunk-VILW5FYO.mjs → chunk-QZGTM76F.mjs} +7 -7
  26. package/dist/{chunk-VILW5FYO.mjs.map → chunk-QZGTM76F.mjs.map} +1 -1
  27. package/dist/{chunk-PUHM465C.js → chunk-R6FBJN7K.js} +18 -4
  28. package/dist/chunk-R6FBJN7K.js.map +1 -0
  29. package/dist/{chunk-NFM6RB4R.js → chunk-SVXNUWZI.js} +15 -32
  30. package/dist/chunk-SVXNUWZI.js.map +1 -0
  31. package/dist/{chunk-LXVDGQA4.mjs → chunk-V5M3HUBV.mjs} +18 -4
  32. package/dist/chunk-V5M3HUBV.mjs.map +1 -0
  33. package/dist/{chunk-RBZNMZTF.mjs → chunk-YEGQXDTE.mjs} +5 -8
  34. package/dist/{chunk-RBZNMZTF.mjs.map → chunk-YEGQXDTE.mjs.map} +1 -1
  35. package/dist/{chunk-CAVBDSBT.mjs → chunk-YKFTFYKK.mjs} +2 -2
  36. package/dist/chunk-YKFTFYKK.mjs.map +1 -0
  37. package/dist/{chunk-ENSRDEDA.mjs → chunk-ZIULPOMQ.mjs} +2 -2
  38. package/dist/cli/index.js +9 -9
  39. package/dist/cli/index.mjs +8 -8
  40. package/dist/{create-GUY3HZM2.js → create-4LG4N2A4.js} +27 -16
  41. package/dist/create-4LG4N2A4.js.map +1 -0
  42. package/dist/{create-BHWZP6YD.mjs → create-OQEMO4MU.mjs} +22 -11
  43. package/dist/create-OQEMO4MU.mjs.map +1 -0
  44. package/dist/{implementation--7B7PUww.d.ts → implementation-BIlL6-SW.d.ts} +1 -1
  45. package/dist/{implementation-D7LzdQop.d.mts → implementation-fAgqv8OM.d.mts} +1 -1
  46. package/dist/index.d.mts +2 -2
  47. package/dist/index.d.ts +2 -2
  48. package/dist/index.js +7 -7
  49. package/dist/index.mjs +6 -6
  50. package/dist/init-EKNL2SQE.js +16 -0
  51. package/dist/{init-OO2BUJ6V.js.map → init-EKNL2SQE.js.map} +1 -1
  52. package/dist/{init-RDW2F4G3.mjs → init-MQXXHCNT.mjs} +5 -5
  53. package/dist/{list-GZGLSJ52.js → list-GIAXAAH5.js} +10 -10
  54. package/dist/list-GIAXAAH5.js.map +1 -0
  55. package/dist/{list-32BRZ6RS.mjs → list-PFWV7IU6.mjs} +7 -7
  56. package/dist/list-PFWV7IU6.mjs.map +1 -0
  57. package/dist/{login-IAP4RFUM.js → login-3STX2FAO.js} +3 -3
  58. package/dist/{login-IAP4RFUM.js.map → login-3STX2FAO.js.map} +1 -1
  59. package/dist/{login-VXLW2OXR.mjs → login-BYLXS23I.mjs} +2 -2
  60. package/dist/observability-sdk/index.d.mts +3 -3
  61. package/dist/observability-sdk/index.d.ts +3 -3
  62. package/dist/observability-sdk/index.js +4 -4
  63. package/dist/observability-sdk/index.mjs +3 -3
  64. package/dist/observability-sdk/instrumentation/langchain/index.d.mts +1 -1
  65. package/dist/observability-sdk/instrumentation/langchain/index.d.ts +1 -1
  66. package/dist/observability-sdk/instrumentation/langchain/index.js +3 -3
  67. package/dist/observability-sdk/instrumentation/langchain/index.mjs +1 -1
  68. package/dist/observability-sdk/setup/node/index.d.mts +1 -1
  69. package/dist/observability-sdk/setup/node/index.d.ts +1 -1
  70. package/dist/observability-sdk/setup/node/index.js +10 -10
  71. package/dist/observability-sdk/setup/node/index.mjs +2 -2
  72. package/dist/{remove-JUVM6M7G.mjs → remove-FTF3EBYV.mjs} +8 -8
  73. package/dist/{remove-N3324KHS.js → remove-U3PILQDV.js} +16 -16
  74. package/dist/{remove-N3324KHS.js.map → remove-U3PILQDV.js.map} +1 -1
  75. package/dist/{sync-B4YK6QYX.mjs → sync-FOW7DHAH.mjs} +23 -18
  76. package/dist/sync-FOW7DHAH.mjs.map +1 -0
  77. package/dist/{sync-E32H3H52.js → sync-T3T22GVZ.js} +41 -36
  78. package/dist/sync-T3T22GVZ.js.map +1 -0
  79. package/dist/{types-D6Cs1385.d.ts → types-DyUmlaDx.d.ts} +71 -21
  80. package/dist/{types-D61S7yPU.d.mts → types-jrEEZt9d.d.mts} +71 -21
  81. package/package.json +6 -5
  82. package/dist/add-SMYALCQG.mjs.map +0 -1
  83. package/dist/add-SV662KZU.js.map +0 -1
  84. package/dist/chunk-5ZKAT4KI.mjs.map +0 -1
  85. package/dist/chunk-CAVBDSBT.mjs.map +0 -1
  86. package/dist/chunk-ILTCLEIF.js.map +0 -1
  87. package/dist/chunk-LXVDGQA4.mjs.map +0 -1
  88. package/dist/chunk-NFM6RB4R.js.map +0 -1
  89. package/dist/chunk-PUHM465C.js.map +0 -1
  90. package/dist/chunk-T7FQHOLK.js.map +0 -1
  91. package/dist/chunk-VI5NJ53L.js.map +0 -1
  92. package/dist/chunk-YQVVPMKH.mjs.map +0 -1
  93. package/dist/create-BHWZP6YD.mjs.map +0 -1
  94. package/dist/create-GUY3HZM2.js.map +0 -1
  95. package/dist/init-OO2BUJ6V.js +0 -16
  96. package/dist/list-32BRZ6RS.mjs.map +0 -1
  97. package/dist/list-GZGLSJ52.js.map +0 -1
  98. package/dist/sync-B4YK6QYX.mjs.map +0 -1
  99. package/dist/sync-E32H3H52.js.map +0 -1
  100. /package/dist/{chunk-7ZRAJ52N.mjs.map → chunk-CKVDNVFL.mjs.map} +0 -0
  101. /package/dist/{chunk-K4ICRI7W.mjs.map → chunk-DLJO7AK5.mjs.map} +0 -0
  102. /package/dist/{chunk-ENSRDEDA.mjs.map → chunk-ZIULPOMQ.mjs.map} +0 -0
  103. /package/dist/{init-RDW2F4G3.mjs.map → init-MQXXHCNT.mjs.map} +0 -0
  104. /package/dist/{login-VXLW2OXR.mjs.map → login-BYLXS23I.mjs.map} +0 -0
  105. /package/dist/{remove-JUVM6M7G.mjs.map → remove-FTF3EBYV.mjs.map} +0 -0
@@ -3,25 +3,25 @@
3
3
  var _chunkF6E4XQQUjs = require('./chunk-F6E4XQQU.js');
4
4
 
5
5
 
6
- var _chunkT7FQHOLKjs = require('./chunk-T7FQHOLK.js');
6
+ var _chunkDSIQSULKjs = require('./chunk-DSIQSULK.js');
7
7
 
8
8
 
9
- var _chunkNFM6RB4Rjs = require('./chunk-NFM6RB4R.js');
9
+ var _chunkSVXNUWZIjs = require('./chunk-SVXNUWZI.js');
10
10
  require('./chunk-YH5TIVK2.js');
11
- require('./chunk-ILTCLEIF.js');
12
- require('./chunk-NVKMXXNP.js');
13
- require('./chunk-VI5NJ53L.js');
11
+ require('./chunk-ECOC36EA.js');
12
+ require('./chunk-P4SQTYGN.js');
13
+ require('./chunk-QCYYSMCU.js');
14
14
  require('./chunk-DISMHYXC.js');
15
15
 
16
16
 
17
- var _chunkZZLIF3DEjs = require('./chunk-ZZLIF3DE.js');
17
+ var _chunk7OZKH5K2js = require('./chunk-7OZKH5K2.js');
18
18
 
19
19
 
20
- var _chunkP5F63PAWjs = require('./chunk-P5F63PAW.js');
20
+ var _chunkCAZONSXVjs = require('./chunk-CAZONSXV.js');
21
21
 
22
22
 
23
- var _chunkPUHM465Cjs = require('./chunk-PUHM465C.js');
24
- require('./chunk-I5NDMIK5.js');
23
+ var _chunkR6FBJN7Kjs = require('./chunk-R6FBJN7K.js');
24
+ require('./chunk-AZHZ4NB4.js');
25
25
  require('./chunk-OXBO24RB.js');
26
26
 
27
27
  // src/cli/commands/add.ts
@@ -35,16 +35,18 @@ var addLocalFile = async (name, localFilePath) => {
35
35
  process.exit(1);
36
36
  }
37
37
  if (!localFilePath.endsWith(".prompt.yaml")) {
38
- console.error(_chalk2.default.red(`Error: Local file must have .prompt.yaml extension`));
38
+ console.error(
39
+ _chalk2.default.red(`Error: Local file must have .prompt.yaml extension`)
40
+ );
39
41
  process.exit(1);
40
42
  }
41
43
  try {
42
- const config = _chunkP5F63PAWjs.FileManager.loadLocalPrompt(localFilePath);
43
- await _chunkZZLIF3DEjs.ensureProjectInitialized.call(void 0, );
44
- const promptsConfig = _chunkP5F63PAWjs.FileManager.loadPromptsConfig();
44
+ _chunkCAZONSXVjs.FileManager.loadLocalPrompt(localFilePath);
45
+ await _chunk7OZKH5K2js.ensureProjectInitialized.call(void 0, );
46
+ const promptsConfig = _chunkCAZONSXVjs.FileManager.loadPromptsConfig();
45
47
  promptsConfig.prompts[name] = `file:${localFilePath}`;
46
- _chunkP5F63PAWjs.FileManager.savePromptsConfig(promptsConfig);
47
- const lock = _chunkP5F63PAWjs.FileManager.loadPromptsLock();
48
+ _chunkCAZONSXVjs.FileManager.savePromptsConfig(promptsConfig);
49
+ const lock = _chunkCAZONSXVjs.FileManager.loadPromptsLock();
48
50
  lock.prompts[name] = {
49
51
  version: 0,
50
52
  // Local files start at version 0
@@ -52,11 +54,19 @@ var addLocalFile = async (name, localFilePath) => {
52
54
  materialized: localFilePath
53
55
  // Store the original file path
54
56
  };
55
- _chunkP5F63PAWjs.FileManager.savePromptsLock(lock);
56
- console.log(_chalk2.default.green(`\u2713 Added local prompt: ${_chalk2.default.cyan(name)} \u2192 ${_chalk2.default.gray(localFilePath)}`));
57
+ _chunkCAZONSXVjs.FileManager.savePromptsLock(lock);
58
+ console.log(
59
+ _chalk2.default.green(
60
+ `\u2713 Added local prompt: ${_chalk2.default.cyan(name)} \u2192 ${_chalk2.default.gray(
61
+ localFilePath
62
+ )}`
63
+ )
64
+ );
57
65
  } catch (error) {
58
66
  console.error(_chalk2.default.red("Error loading local prompt file:"));
59
- console.error(_chalk2.default.red(error instanceof Error ? error.message : String(error)));
67
+ console.error(
68
+ _chalk2.default.red(error instanceof Error ? error.message : String(error))
69
+ );
60
70
  process.exit(1);
61
71
  }
62
72
  };
@@ -72,9 +82,11 @@ var addCommand = async (name, options) => {
72
82
  return;
73
83
  }
74
84
  _chunkF6E4XQQUjs.checkApiKey.call(void 0, );
75
- const langwatch = new (0, _chunkT7FQHOLKjs.LangWatch)();
85
+ const langwatch = new (0, _chunkDSIQSULKjs.LangWatch)();
76
86
  const version = (_a = options.version) != null ? _a : "latest";
77
- const spinner = _ora2.default.call(void 0, `Adding ${_chalk2.default.cyan(`${name}@${version}`)}...`).start();
87
+ const spinner = _ora2.default.call(void 0,
88
+ `Adding ${_chalk2.default.cyan(`${name}@${version}`)}...`
89
+ ).start();
78
90
  try {
79
91
  const prompt = await langwatch.prompts.get(name);
80
92
  if (!prompt) {
@@ -83,34 +95,51 @@ var addCommand = async (name, options) => {
83
95
  process.exit(1);
84
96
  }
85
97
  spinner.stop();
86
- await _chunkZZLIF3DEjs.ensureProjectInitialized.call(void 0, );
98
+ await _chunk7OZKH5K2js.ensureProjectInitialized.call(void 0, );
87
99
  spinner.start(`Adding ${_chalk2.default.cyan(`${name}@${version}`)}...`);
88
- const materializedPrompt = _chunkPUHM465Cjs.PromptConverter.fromApiToMaterialized(prompt);
89
- const savedPath = _chunkP5F63PAWjs.FileManager.saveMaterializedPrompt(name, materializedPrompt);
100
+ const materializedPrompt = _chunkR6FBJN7Kjs.PromptConverter.fromApiToMaterialized(prompt);
101
+ const savedPath = _chunkCAZONSXVjs.FileManager.saveMaterializedPrompt(
102
+ name,
103
+ materializedPrompt
104
+ );
90
105
  const relativePath = path.relative(process.cwd(), savedPath);
91
- const config = _chunkP5F63PAWjs.FileManager.loadPromptsConfig();
92
- const lock = _chunkP5F63PAWjs.FileManager.loadPromptsLock();
106
+ const config = _chunkCAZONSXVjs.FileManager.loadPromptsConfig();
107
+ const lock = _chunkCAZONSXVjs.FileManager.loadPromptsLock();
93
108
  config.prompts[name] = version;
94
- _chunkP5F63PAWjs.FileManager.updateLockEntry(lock, name, materializedPrompt, savedPath);
95
- _chunkP5F63PAWjs.FileManager.savePromptsConfig(config);
96
- _chunkP5F63PAWjs.FileManager.savePromptsLock(lock);
109
+ _chunkCAZONSXVjs.FileManager.updateLockEntry(lock, name, materializedPrompt, savedPath);
110
+ _chunkCAZONSXVjs.FileManager.savePromptsConfig(config);
111
+ _chunkCAZONSXVjs.FileManager.savePromptsLock(lock);
97
112
  spinner.succeed();
98
113
  const displayPath = relativePath.startsWith("./") ? relativePath : `./${relativePath}`;
99
- console.log(_chalk2.default.green(`\u2713 Pulled ${_chalk2.default.cyan(`${name}@${version}`)} ${_chalk2.default.gray(`(version ${prompt.version})`)} \u2192 ${_chalk2.default.gray(displayPath)}`));
114
+ console.log(
115
+ _chalk2.default.green(
116
+ `\u2713 Pulled ${_chalk2.default.cyan(`${name}@${version}`)} ${_chalk2.default.gray(
117
+ `(version ${prompt.version})`
118
+ )} \u2192 ${_chalk2.default.gray(displayPath)}`
119
+ )
120
+ );
100
121
  } catch (error) {
101
122
  spinner.fail();
102
- if (error instanceof _chunkNFM6RB4Rjs.PromptsError) {
123
+ if (error instanceof _chunkSVXNUWZIjs.PromptsError) {
103
124
  console.error(_chalk2.default.red(`Error: ${error.message}`));
104
125
  } else {
105
- console.error(_chalk2.default.red(`Error adding prompt: ${error instanceof Error ? error.message : "Unknown error"}`));
126
+ console.error(
127
+ _chalk2.default.red(
128
+ `Error adding prompt: ${error instanceof Error ? error.message : "Unknown error"}`
129
+ )
130
+ );
106
131
  }
107
132
  process.exit(1);
108
133
  }
109
134
  } catch (error) {
110
- if (error instanceof _chunkNFM6RB4Rjs.PromptsError) {
135
+ if (error instanceof _chunkSVXNUWZIjs.PromptsError) {
111
136
  console.error(_chalk2.default.red(`Error: ${error.message}`));
112
137
  } else {
113
- console.error(_chalk2.default.red(`Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`));
138
+ console.error(
139
+ _chalk2.default.red(
140
+ `Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`
141
+ )
142
+ );
114
143
  }
115
144
  process.exit(1);
116
145
  }
@@ -118,4 +147,4 @@ var addCommand = async (name, options) => {
118
147
 
119
148
 
120
149
  exports.addCommand = addCommand;
121
- //# sourceMappingURL=add-SV662KZU.js.map
150
+ //# sourceMappingURL=add-4WXEWG5H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/add-4WXEWG5H.js","../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACA;AC1BA,+DAAoB;AACpB,uEAAsB;AACtB,4EAAkB;AAClB,oEAAgB;AAahB,IAAM,aAAA,EAAe,MAAA,CACnB,IAAA,EACA,aAAA,EAAA,GACkB;AAElB,EAAA,GAAA,CAAI,CAAI,EAAA,CAAA,UAAA,CAAW,aAAa,CAAA,EAAG;AACjC,IAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,CAAM,GAAA,CAAI,CAAA,6BAAA,EAAgC,aAAa,CAAA,CAAA;AACvD,IAAA;AAChB,EAAA;AAE6C,EAAA;AACnC,IAAA;AACwD,MAAA;AAChE,IAAA;AACc,IAAA;AAChB,EAAA;AAGI,EAAA;AACuC,IAAA;AAGV,IAAA;AAGqB,IAAA;AACD,IAAA;AACR,IAAA;AAGF,IAAA;AACpB,IAAA;AACV,MAAA;AAAA;AACE,MAAA;AACG,MAAA;AAAA;AAChB,IAAA;AACgC,IAAA;AAExB,IAAA;AACA,MAAA;AACiD,QAAA;AACnD,UAAA;AACD,QAAA;AACH,MAAA;AACF,IAAA;AACc,EAAA;AAC6C,IAAA;AACnD,IAAA;AAC0D,MAAA;AAClE,IAAA;AACc,IAAA;AAChB,EAAA;AACF;AAKoB;AAzEpB,EAAA;AA0EM,EAAA;AAE+B,IAAA;AAC8B,MAAA;AAC/C,MAAA;AAChB,IAAA;AAGuB,IAAA;AACqB,MAAA;AAC1C,MAAA;AACF,IAAA;AAGY,IAAA;AAEoB,IAAA;AACG,IAAA;AAGnB,IAAA;AAC4B,MAAA;AACpC,IAAA;AAEJ,IAAA;AAE6C,MAAA;AAElC,MAAA;AACE,QAAA;AAC+C,QAAA;AAC9C,QAAA;AAChB,MAAA;AAGa,MAAA;AAGkB,MAAA;AAG8B,MAAA;AAGI,MAAA;AACnC,MAAA;AAC5B,QAAA;AACA,QAAA;AACF,MAAA;AAC2D,MAAA;AAGd,MAAA;AACJ,MAAA;AAElB,MAAA;AACqC,MAAA;AAGxB,MAAA;AACJ,MAAA;AAEhB,MAAA;AAKZ,MAAA;AACI,MAAA;AACA,QAAA;AACkD,UAAA;AAC1B,YAAA;AACE,UAAA;AAChC,QAAA;AACF,MAAA;AACc,IAAA;AACD,MAAA;AACsB,MAAA;AACiB,QAAA;AAC7C,MAAA;AACG,QAAA;AACA,UAAA;AAE6B,YAAA;AAEnC,UAAA;AACF,QAAA;AACF,MAAA;AACc,MAAA;AAChB,IAAA;AACc,EAAA;AACqB,IAAA;AACiB,MAAA;AAC7C,IAAA;AACG,MAAA;AACA,QAAA;AAEuC,UAAA;AAE7C,QAAA;AACF,MAAA;AACF,IAAA;AACc,IAAA;AAChB,EAAA;AACF;ADhC0E;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/add-4WXEWG5H.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 { PromptsError } from \"@/client-sdk/services/prompts\";\nimport { PromptConverter } from \"../utils/promptConverter\";\nimport { ensureProjectInitialized } from \"../utils/init\";\nimport { checkApiKey } from \"../utils/apiKey\";\nimport { LangWatch } from \"@/client-sdk\";\n\ninterface AddOptions {\n version?: string;\n localFile?: string;\n}\n\nconst addLocalFile = async (\n name: string,\n localFilePath: string,\n): Promise<void> => {\n // Validate that the file exists and has the right extension\n if (!fs.existsSync(localFilePath)) {\n console.error(chalk.red(`Error: Local file not found: ${localFilePath}`));\n process.exit(1);\n }\n\n if (!localFilePath.endsWith(\".prompt.yaml\")) {\n console.error(\n chalk.red(`Error: Local file must have .prompt.yaml extension`),\n );\n process.exit(1);\n }\n\n // Load and validate the YAML file\n try {\n FileManager.loadLocalPrompt(localFilePath);\n\n // Ensure project is initialized\n await ensureProjectInitialized();\n\n // Add to prompts.json as a file: dependency\n const promptsConfig = FileManager.loadPromptsConfig();\n promptsConfig.prompts[name] = `file:${localFilePath}`;\n FileManager.savePromptsConfig(promptsConfig);\n\n // Update lock file\n const lock = FileManager.loadPromptsLock();\n lock.prompts[name] = {\n version: 0, // Local files start at version 0\n versionId: \"local\",\n materialized: localFilePath, // Store the original file path\n };\n FileManager.savePromptsLock(lock);\n\n console.log(\n chalk.green(\n `✓ Added local prompt: ${chalk.cyan(name)} → ${chalk.gray(\n localFilePath,\n )}`,\n ),\n );\n } catch (error) {\n console.error(chalk.red(\"Error loading local prompt file:\"));\n console.error(\n chalk.red(error instanceof Error ? error.message : String(error)),\n );\n process.exit(1);\n }\n};\n\nexport const addCommand = async (\n name: string,\n options: AddOptions,\n): 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 // Handle local file addition\n if (options.localFile) {\n await addLocalFile(name, options.localFile);\n return;\n }\n\n // Check API key before doing anything else\n checkApiKey();\n\n const langwatch = new LangWatch();\n const version = options.version ?? \"latest\";\n\n // Fetch and materialize the prompt (like sync does for individual prompts)\n const spinner = ora(\n `Adding ${chalk.cyan(`${name}@${version}`)}...`,\n ).start();\n\n try {\n // Fetch the prompt from the API\n const prompt = await langwatch.prompts.get(name);\n\n if (!prompt) {\n spinner.fail();\n console.error(chalk.red(`Error: Prompt \"${name}\" not found`));\n process.exit(1);\n }\n\n // Stop spinner before any user input prompts\n spinner.stop();\n\n // Ensure project is initialized (prompts.json, lock file, directories)\n await ensureProjectInitialized();\n\n // Restart spinner for the actual work\n spinner.start(`Adding ${chalk.cyan(`${name}@${version}`)}...`);\n\n // Convert to MaterializedPrompt format and save\n const materializedPrompt = PromptConverter.fromApiToMaterialized(prompt);\n const savedPath = FileManager.saveMaterializedPrompt(\n name,\n materializedPrompt,\n );\n const relativePath = path.relative(process.cwd(), savedPath);\n\n // Load existing config and lock, add the new dependency\n const config = FileManager.loadPromptsConfig();\n const lock = FileManager.loadPromptsLock();\n\n config.prompts[name] = version;\n FileManager.updateLockEntry(lock, name, materializedPrompt, savedPath);\n\n // Save the updated config and lock\n FileManager.savePromptsConfig(config);\n FileManager.savePromptsLock(lock);\n\n spinner.succeed();\n\n // Show what was done (add ./ prefix for consistency)\n const displayPath = relativePath.startsWith(\"./\")\n ? relativePath\n : `./${relativePath}`;\n console.log(\n chalk.green(\n `✓ Pulled ${chalk.cyan(`${name}@${version}`)} ${chalk.gray(\n `(version ${prompt.version})`,\n )} → ${chalk.gray(displayPath)}`,\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(\n chalk.red(\n `Error adding prompt: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n ),\n );\n }\n process.exit(1);\n }\n } catch (error) {\n if (error instanceof PromptsError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(\n chalk.red(\n `Unexpected error: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n ),\n );\n }\n process.exit(1);\n }\n};\n"]}
@@ -3,25 +3,25 @@ import {
3
3
  } from "./chunk-DHJKJVY7.mjs";
4
4
  import {
5
5
  LangWatch
6
- } from "./chunk-RBZNMZTF.mjs";
6
+ } from "./chunk-YEGQXDTE.mjs";
7
7
  import {
8
8
  PromptsError
9
- } from "./chunk-5ZKAT4KI.mjs";
9
+ } from "./chunk-H5PON53W.mjs";
10
10
  import "./chunk-N2V6J3U2.mjs";
11
- import "./chunk-VILW5FYO.mjs";
12
- import "./chunk-ENSRDEDA.mjs";
13
- import "./chunk-CAVBDSBT.mjs";
11
+ import "./chunk-QZGTM76F.mjs";
12
+ import "./chunk-ZIULPOMQ.mjs";
13
+ import "./chunk-YKFTFYKK.mjs";
14
14
  import "./chunk-YNQ44U6D.mjs";
15
15
  import {
16
16
  ensureProjectInitialized
17
- } from "./chunk-K4ICRI7W.mjs";
17
+ } from "./chunk-DLJO7AK5.mjs";
18
18
  import {
19
19
  FileManager
20
- } from "./chunk-7ZRAJ52N.mjs";
20
+ } from "./chunk-CKVDNVFL.mjs";
21
21
  import {
22
22
  PromptConverter
23
- } from "./chunk-LXVDGQA4.mjs";
24
- import "./chunk-YQVVPMKH.mjs";
23
+ } from "./chunk-V5M3HUBV.mjs";
24
+ import "./chunk-BTBSMJTY.mjs";
25
25
  import "./chunk-CU3443HD.mjs";
26
26
 
27
27
  // src/cli/commands/add.ts
@@ -35,11 +35,13 @@ var addLocalFile = async (name, localFilePath) => {
35
35
  process.exit(1);
36
36
  }
37
37
  if (!localFilePath.endsWith(".prompt.yaml")) {
38
- console.error(chalk.red(`Error: Local file must have .prompt.yaml extension`));
38
+ console.error(
39
+ chalk.red(`Error: Local file must have .prompt.yaml extension`)
40
+ );
39
41
  process.exit(1);
40
42
  }
41
43
  try {
42
- const config = FileManager.loadLocalPrompt(localFilePath);
44
+ FileManager.loadLocalPrompt(localFilePath);
43
45
  await ensureProjectInitialized();
44
46
  const promptsConfig = FileManager.loadPromptsConfig();
45
47
  promptsConfig.prompts[name] = `file:${localFilePath}`;
@@ -53,10 +55,18 @@ var addLocalFile = async (name, localFilePath) => {
53
55
  // Store the original file path
54
56
  };
55
57
  FileManager.savePromptsLock(lock);
56
- console.log(chalk.green(`\u2713 Added local prompt: ${chalk.cyan(name)} \u2192 ${chalk.gray(localFilePath)}`));
58
+ console.log(
59
+ chalk.green(
60
+ `\u2713 Added local prompt: ${chalk.cyan(name)} \u2192 ${chalk.gray(
61
+ localFilePath
62
+ )}`
63
+ )
64
+ );
57
65
  } catch (error) {
58
66
  console.error(chalk.red("Error loading local prompt file:"));
59
- console.error(chalk.red(error instanceof Error ? error.message : String(error)));
67
+ console.error(
68
+ chalk.red(error instanceof Error ? error.message : String(error))
69
+ );
60
70
  process.exit(1);
61
71
  }
62
72
  };
@@ -74,7 +84,9 @@ var addCommand = async (name, options) => {
74
84
  checkApiKey();
75
85
  const langwatch = new LangWatch();
76
86
  const version = (_a = options.version) != null ? _a : "latest";
77
- const spinner = ora(`Adding ${chalk.cyan(`${name}@${version}`)}...`).start();
87
+ const spinner = ora(
88
+ `Adding ${chalk.cyan(`${name}@${version}`)}...`
89
+ ).start();
78
90
  try {
79
91
  const prompt = await langwatch.prompts.get(name);
80
92
  if (!prompt) {
@@ -86,7 +98,10 @@ var addCommand = async (name, options) => {
86
98
  await ensureProjectInitialized();
87
99
  spinner.start(`Adding ${chalk.cyan(`${name}@${version}`)}...`);
88
100
  const materializedPrompt = PromptConverter.fromApiToMaterialized(prompt);
89
- const savedPath = FileManager.saveMaterializedPrompt(name, materializedPrompt);
101
+ const savedPath = FileManager.saveMaterializedPrompt(
102
+ name,
103
+ materializedPrompt
104
+ );
90
105
  const relativePath = path.relative(process.cwd(), savedPath);
91
106
  const config = FileManager.loadPromptsConfig();
92
107
  const lock = FileManager.loadPromptsLock();
@@ -96,13 +111,23 @@ var addCommand = async (name, options) => {
96
111
  FileManager.savePromptsLock(lock);
97
112
  spinner.succeed();
98
113
  const displayPath = relativePath.startsWith("./") ? relativePath : `./${relativePath}`;
99
- console.log(chalk.green(`\u2713 Pulled ${chalk.cyan(`${name}@${version}`)} ${chalk.gray(`(version ${prompt.version})`)} \u2192 ${chalk.gray(displayPath)}`));
114
+ console.log(
115
+ chalk.green(
116
+ `\u2713 Pulled ${chalk.cyan(`${name}@${version}`)} ${chalk.gray(
117
+ `(version ${prompt.version})`
118
+ )} \u2192 ${chalk.gray(displayPath)}`
119
+ )
120
+ );
100
121
  } catch (error) {
101
122
  spinner.fail();
102
123
  if (error instanceof PromptsError) {
103
124
  console.error(chalk.red(`Error: ${error.message}`));
104
125
  } else {
105
- console.error(chalk.red(`Error adding prompt: ${error instanceof Error ? error.message : "Unknown error"}`));
126
+ console.error(
127
+ chalk.red(
128
+ `Error adding prompt: ${error instanceof Error ? error.message : "Unknown error"}`
129
+ )
130
+ );
106
131
  }
107
132
  process.exit(1);
108
133
  }
@@ -110,7 +135,11 @@ var addCommand = async (name, options) => {
110
135
  if (error instanceof PromptsError) {
111
136
  console.error(chalk.red(`Error: ${error.message}`));
112
137
  } else {
113
- console.error(chalk.red(`Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`));
138
+ console.error(
139
+ chalk.red(
140
+ `Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`
141
+ )
142
+ );
114
143
  }
115
144
  process.exit(1);
116
145
  }
@@ -118,4 +147,4 @@ var addCommand = async (name, options) => {
118
147
  export {
119
148
  addCommand
120
149
  };
121
- //# sourceMappingURL=add-SMYALCQG.mjs.map
150
+ //# sourceMappingURL=add-D2WVVKIP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/add.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 { PromptsError } from \"@/client-sdk/services/prompts\";\nimport { PromptConverter } from \"../utils/promptConverter\";\nimport { ensureProjectInitialized } from \"../utils/init\";\nimport { checkApiKey } from \"../utils/apiKey\";\nimport { LangWatch } from \"@/client-sdk\";\n\ninterface AddOptions {\n version?: string;\n localFile?: string;\n}\n\nconst addLocalFile = async (\n name: string,\n localFilePath: string,\n): Promise<void> => {\n // Validate that the file exists and has the right extension\n if (!fs.existsSync(localFilePath)) {\n console.error(chalk.red(`Error: Local file not found: ${localFilePath}`));\n process.exit(1);\n }\n\n if (!localFilePath.endsWith(\".prompt.yaml\")) {\n console.error(\n chalk.red(`Error: Local file must have .prompt.yaml extension`),\n );\n process.exit(1);\n }\n\n // Load and validate the YAML file\n try {\n FileManager.loadLocalPrompt(localFilePath);\n\n // Ensure project is initialized\n await ensureProjectInitialized();\n\n // Add to prompts.json as a file: dependency\n const promptsConfig = FileManager.loadPromptsConfig();\n promptsConfig.prompts[name] = `file:${localFilePath}`;\n FileManager.savePromptsConfig(promptsConfig);\n\n // Update lock file\n const lock = FileManager.loadPromptsLock();\n lock.prompts[name] = {\n version: 0, // Local files start at version 0\n versionId: \"local\",\n materialized: localFilePath, // Store the original file path\n };\n FileManager.savePromptsLock(lock);\n\n console.log(\n chalk.green(\n `✓ Added local prompt: ${chalk.cyan(name)} → ${chalk.gray(\n localFilePath,\n )}`,\n ),\n );\n } catch (error) {\n console.error(chalk.red(\"Error loading local prompt file:\"));\n console.error(\n chalk.red(error instanceof Error ? error.message : String(error)),\n );\n process.exit(1);\n }\n};\n\nexport const addCommand = async (\n name: string,\n options: AddOptions,\n): 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 // Handle local file addition\n if (options.localFile) {\n await addLocalFile(name, options.localFile);\n return;\n }\n\n // Check API key before doing anything else\n checkApiKey();\n\n const langwatch = new LangWatch();\n const version = options.version ?? \"latest\";\n\n // Fetch and materialize the prompt (like sync does for individual prompts)\n const spinner = ora(\n `Adding ${chalk.cyan(`${name}@${version}`)}...`,\n ).start();\n\n try {\n // Fetch the prompt from the API\n const prompt = await langwatch.prompts.get(name);\n\n if (!prompt) {\n spinner.fail();\n console.error(chalk.red(`Error: Prompt \"${name}\" not found`));\n process.exit(1);\n }\n\n // Stop spinner before any user input prompts\n spinner.stop();\n\n // Ensure project is initialized (prompts.json, lock file, directories)\n await ensureProjectInitialized();\n\n // Restart spinner for the actual work\n spinner.start(`Adding ${chalk.cyan(`${name}@${version}`)}...`);\n\n // Convert to MaterializedPrompt format and save\n const materializedPrompt = PromptConverter.fromApiToMaterialized(prompt);\n const savedPath = FileManager.saveMaterializedPrompt(\n name,\n materializedPrompt,\n );\n const relativePath = path.relative(process.cwd(), savedPath);\n\n // Load existing config and lock, add the new dependency\n const config = FileManager.loadPromptsConfig();\n const lock = FileManager.loadPromptsLock();\n\n config.prompts[name] = version;\n FileManager.updateLockEntry(lock, name, materializedPrompt, savedPath);\n\n // Save the updated config and lock\n FileManager.savePromptsConfig(config);\n FileManager.savePromptsLock(lock);\n\n spinner.succeed();\n\n // Show what was done (add ./ prefix for consistency)\n const displayPath = relativePath.startsWith(\"./\")\n ? relativePath\n : `./${relativePath}`;\n console.log(\n chalk.green(\n `✓ Pulled ${chalk.cyan(`${name}@${version}`)} ${chalk.gray(\n `(version ${prompt.version})`,\n )} → ${chalk.gray(displayPath)}`,\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(\n chalk.red(\n `Error adding prompt: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n ),\n );\n }\n process.exit(1);\n }\n } catch (error) {\n if (error instanceof PromptsError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(\n chalk.red(\n `Unexpected error: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n ),\n );\n }\n process.exit(1);\n }\n};\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
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
2
 
3
- var _chunkP5F63PAWjs = require('./chunk-P5F63PAW.js');
3
+ var _chunkCAZONSXVjs = require('./chunk-CAZONSXV.js');
4
4
 
5
5
  // src/cli/utils/init.ts
6
6
  var _readline = require('readline'); var readline = _interopRequireWildcard(_readline);
@@ -19,14 +19,14 @@ var promptUser = (question) => {
19
19
  };
20
20
  var initializeProject = async () => {
21
21
  console.log(_chalk2.default.blue("Initializing LangWatch prompts project..."));
22
- const configResult = _chunkP5F63PAWjs.FileManager.initializePromptsConfig();
22
+ const configResult = _chunkCAZONSXVjs.FileManager.initializePromptsConfig();
23
23
  if (configResult.created) {
24
24
  console.log(_chalk2.default.green(`\u2713 Created ${_chalk2.default.gray("./prompts.json")}`));
25
25
  const shouldAddGitignore = await promptUser(
26
26
  _chalk2.default.yellow("Add 'prompts/.materialized' to .gitignore? [Y/n]: ")
27
27
  );
28
28
  if (shouldAddGitignore === "" || shouldAddGitignore === "y" || shouldAddGitignore === "yes") {
29
- const gitignoreResult = _chunkP5F63PAWjs.FileManager.addToGitignore(
29
+ const gitignoreResult = _chunkCAZONSXVjs.FileManager.addToGitignore(
30
30
  "prompts/.materialized"
31
31
  );
32
32
  if (gitignoreResult.added) {
@@ -58,13 +58,13 @@ var initializeProject = async () => {
58
58
  } else {
59
59
  console.log(_chalk2.default.gray(`\u2022 prompts.json already exists`));
60
60
  }
61
- const lockResult = _chunkP5F63PAWjs.FileManager.initializePromptsLock();
61
+ const lockResult = _chunkCAZONSXVjs.FileManager.initializePromptsLock();
62
62
  if (lockResult.created) {
63
63
  console.log(_chalk2.default.green(`\u2713 Created ${_chalk2.default.gray("./prompts-lock.json")}`));
64
64
  } else {
65
65
  console.log(_chalk2.default.gray(`\u2022 prompts-lock.json already exists`));
66
66
  }
67
- _chunkP5F63PAWjs.FileManager.ensureDirectories();
67
+ _chunkCAZONSXVjs.FileManager.ensureDirectories();
68
68
  console.log(
69
69
  _chalk2.default.green(`\u2713 Created ${_chalk2.default.gray("./prompts/")} directory structure`)
70
70
  );
@@ -74,7 +74,7 @@ var initializeProject = async () => {
74
74
  console.log(_chalk2.default.gray(" langwatch prompt add <name>"));
75
75
  };
76
76
  var ensureProjectInitialized = async (shouldPromptForGitignore = true) => {
77
- const configResult = _chunkP5F63PAWjs.FileManager.initializePromptsConfig();
77
+ const configResult = _chunkCAZONSXVjs.FileManager.initializePromptsConfig();
78
78
  let askedAboutGitignore = false;
79
79
  if (configResult.created) {
80
80
  console.log(_chalk2.default.green(`\u2713 Created ${_chalk2.default.gray("./prompts.json")}`));
@@ -84,7 +84,7 @@ var ensureProjectInitialized = async (shouldPromptForGitignore = true) => {
84
84
  _chalk2.default.yellow("Add 'prompts/.materialized' to .gitignore? [Y/n]: ")
85
85
  );
86
86
  if (shouldAddGitignore === "" || shouldAddGitignore === "y" || shouldAddGitignore === "yes") {
87
- const gitignoreResult = _chunkP5F63PAWjs.FileManager.addToGitignore(
87
+ const gitignoreResult = _chunkCAZONSXVjs.FileManager.addToGitignore(
88
88
  "prompts/.materialized"
89
89
  );
90
90
  if (gitignoreResult.added) {
@@ -115,11 +115,11 @@ var ensureProjectInitialized = async (shouldPromptForGitignore = true) => {
115
115
  }
116
116
  }
117
117
  }
118
- const lockResult = _chunkP5F63PAWjs.FileManager.initializePromptsLock();
118
+ const lockResult = _chunkCAZONSXVjs.FileManager.initializePromptsLock();
119
119
  if (lockResult.created) {
120
120
  console.log(_chalk2.default.green(`\u2713 Created ${_chalk2.default.gray("./prompts-lock.json")}`));
121
121
  }
122
- _chunkP5F63PAWjs.FileManager.ensureDirectories();
122
+ _chunkCAZONSXVjs.FileManager.ensureDirectories();
123
123
  return {
124
124
  configCreated: configResult.created,
125
125
  lockCreated: lockResult.created
@@ -130,4 +130,4 @@ var ensureProjectInitialized = async (shouldPromptForGitignore = true) => {
130
130
 
131
131
 
132
132
  exports.initializeProject = initializeProject; exports.ensureProjectInitialized = ensureProjectInitialized;
133
- //# sourceMappingURL=chunk-ZZLIF3DE.js.map
133
+ //# sourceMappingURL=chunk-7OZKH5K2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-ZZLIF3DE.js","../src/cli/utils/init.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACJA,uFAA0B;AAC1B,4EAAkB;AAGlB,IAAM,WAAA,EAAa,CAAC,QAAA,EAAA,GAAsC;AACxD,EAAA,MAAM,GAAA,EAAc,QAAA,CAAA,eAAA,CAAgB;AAAA,IAClC,KAAA,EAAO,OAAA,CAAQ,KAAA;AAAA,IACf,MAAA,EAAQ,OAAA,CAAQ;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAA,GAAY;AAC9B,IAAA,EAAA,CAAG,QAAA,CAAS,QAAA,EAAU,CAAC,MAAA,EAAA,GAAW;AAChC,MAAA,EAAA,CAAG,KAAA,CAAM,CAAA;AACT,MAAA,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,WAAA,CAAY,CAAC,CAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH,CAAA;AAEO,IAAM,kBAAA,EAAoB,MAAA,CAAA,EAAA,GAA2B;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAM,IAAA,CAAK,2CAA2C,CAAC,CAAA;AAGnE,EAAA,MAAM,aAAA,EAAe,4BAAA,CAAY,uBAAA,CAAwB,CAAA;AACzD,EAAA,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS;AACxB,IAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAM,KAAA,CAAM,CAAA,eAAA,EAAa,eAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAA;AAGhC,IAAA;AACkC,MAAA;AACnE,IAAA;AAKE,IAAA;AAEoC,MAAA;AAClC,QAAA;AACF,MAAA;AAC2B,MAAA;AACI,QAAA;AACnB,UAAA;AACA,YAAA;AACa,cAAA;AACf,gBAAA;AACD,cAAA;AACH,YAAA;AACF,UAAA;AACK,QAAA;AACG,UAAA;AACA,YAAA;AAC+B,cAAA;AACjC,gBAAA;AACD,cAAA;AACH,YAAA;AACF,UAAA;AACF,QAAA;AACK,MAAA;AACG,QAAA;AACA,UAAA;AACoC,YAAA;AAC1C,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACK,EAAA;AACkD,IAAA;AACzD,EAAA;AAGqD,EAAA;AAC7B,EAAA;AAC0B,IAAA;AAC3C,EAAA;AACuD,IAAA;AAC9D,EAAA;AAG8B,EAAA;AACtB,EAAA;AAC2C,IAAA;AACnD,EAAA;AAEQ,EAAA;AACM,IAAA;AACd,EAAA;AACuD,EAAA;AACzD;AAIgE;AAEL,EAAA;AAC/B,EAAA;AAEA,EAAA;AACyC,IAAA;AAGX,IAAA;AAC9B,MAAA;AACW,MAAA;AACkC,QAAA;AACnE,MAAA;AAKE,MAAA;AAEoC,QAAA;AAClC,UAAA;AACF,QAAA;AAC2B,QAAA;AACI,UAAA;AACnB,YAAA;AACA,cAAA;AACa,gBAAA;AACf,kBAAA;AACD,gBAAA;AACH,cAAA;AACF,YAAA;AACK,UAAA;AACG,YAAA;AACA,cAAA;AAC+B,gBAAA;AACjC,kBAAA;AACD,gBAAA;AACH,cAAA;AACF,YAAA;AACF,UAAA;AACK,QAAA;AACG,UAAA;AACA,YAAA;AACoC,cAAA;AAC1C,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAGqD,EAAA;AAC7B,EAAA;AAC0B,IAAA;AAClD,EAAA;AAG8B,EAAA;AAEvB,EAAA;AACuB,IAAA;AACJ,IAAA;AAC1B,EAAA;AACF;AD7B2E;AACA;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-ZZLIF3DE.js","sourcesContent":[null,"import * as readline from \"readline\";\nimport chalk from \"chalk\";\nimport { FileManager } from \"./fileManager\";\n\nconst promptUser = (question: string): Promise<string> => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim().toLowerCase());\n });\n });\n};\n\nexport const initializeProject = async (): Promise<void> => {\n console.log(chalk.blue(\"Initializing LangWatch prompts project...\"));\n\n // Initialize prompts.json\n const configResult = FileManager.initializePromptsConfig();\n if (configResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts.json\")}`));\n\n // Ask about .gitignore\n const shouldAddGitignore = await promptUser(\n chalk.yellow(\"Add 'prompts/.materialized' to .gitignore? [Y/n]: \"),\n );\n\n if (\n shouldAddGitignore === \"\" ||\n shouldAddGitignore === \"y\" ||\n shouldAddGitignore === \"yes\"\n ) {\n const gitignoreResult = FileManager.addToGitignore(\n \"prompts/.materialized\",\n );\n if (gitignoreResult.added) {\n if (gitignoreResult.existed) {\n console.log(\n chalk.green(\n `✓ Added ${chalk.gray(\n \"prompts/.materialized\",\n )} to existing .gitignore`,\n ),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Created .gitignore with ${chalk.gray(\n \"prompts/.materialized\",\n )}`,\n ),\n );\n }\n } else {\n console.log(\n chalk.gray(\n `• ${chalk.gray(\"prompts/.materialized\")} already in .gitignore`,\n ),\n );\n }\n }\n } else {\n console.log(chalk.gray(`• prompts.json already exists`));\n }\n\n // Initialize lock file\n const lockResult = FileManager.initializePromptsLock();\n if (lockResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts-lock.json\")}`));\n } else {\n console.log(chalk.gray(`• prompts-lock.json already exists`));\n }\n\n // Ensure directories exist\n FileManager.ensureDirectories();\n console.log(\n chalk.green(`✓ Created ${chalk.gray(\"./prompts/\")} directory structure`),\n );\n\n console.log(\n chalk.green(\"\\n✨ Project initialized! You can now add prompts with:\"),\n );\n console.log(chalk.gray(\" langwatch prompt add <name>\"));\n};\n\nexport const ensureProjectInitialized = async (\n shouldPromptForGitignore = true,\n): Promise<{ configCreated: boolean; lockCreated: boolean }> => {\n // Initialize prompts.json\n const configResult = FileManager.initializePromptsConfig();\n let askedAboutGitignore = false;\n\n if (configResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts.json\")}`));\n\n // Ask about .gitignore only if we should prompt and haven't asked yet\n if (shouldPromptForGitignore && !askedAboutGitignore) {\n askedAboutGitignore = true;\n const shouldAddGitignore = await promptUser(\n chalk.yellow(\"Add 'prompts/.materialized' to .gitignore? [Y/n]: \"),\n );\n\n if (\n shouldAddGitignore === \"\" ||\n shouldAddGitignore === \"y\" ||\n shouldAddGitignore === \"yes\"\n ) {\n const gitignoreResult = FileManager.addToGitignore(\n \"prompts/.materialized\",\n );\n if (gitignoreResult.added) {\n if (gitignoreResult.existed) {\n console.log(\n chalk.green(\n `✓ Added ${chalk.gray(\n \"prompts/.materialized\",\n )} to existing .gitignore`,\n ),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Created .gitignore with ${chalk.gray(\n \"prompts/.materialized\",\n )}`,\n ),\n );\n }\n } else {\n console.log(\n chalk.gray(\n `• ${chalk.gray(\"prompts/.materialized\")} already in .gitignore`,\n ),\n );\n }\n }\n }\n }\n\n // Initialize lock file\n const lockResult = FileManager.initializePromptsLock();\n if (lockResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts-lock.json\")}`));\n }\n\n // Ensure directories exist\n FileManager.ensureDirectories();\n\n return {\n configCreated: configResult.created,\n lockCreated: lockResult.created,\n };\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-7OZKH5K2.js","../src/cli/utils/init.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACJA,uFAA0B;AAC1B,4EAAkB;AAGlB,IAAM,WAAA,EAAa,CAAC,QAAA,EAAA,GAAsC;AACxD,EAAA,MAAM,GAAA,EAAc,QAAA,CAAA,eAAA,CAAgB;AAAA,IAClC,KAAA,EAAO,OAAA,CAAQ,KAAA;AAAA,IACf,MAAA,EAAQ,OAAA,CAAQ;AAAA,EAClB,CAAC,CAAA;AAED,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAA,GAAY;AAC9B,IAAA,EAAA,CAAG,QAAA,CAAS,QAAA,EAAU,CAAC,MAAA,EAAA,GAAW;AAChC,MAAA,EAAA,CAAG,KAAA,CAAM,CAAA;AACT,MAAA,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,WAAA,CAAY,CAAC,CAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH,CAAA;AAEO,IAAM,kBAAA,EAAoB,MAAA,CAAA,EAAA,GAA2B;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAM,IAAA,CAAK,2CAA2C,CAAC,CAAA;AAGnE,EAAA,MAAM,aAAA,EAAe,4BAAA,CAAY,uBAAA,CAAwB,CAAA;AACzD,EAAA,GAAA,CAAI,YAAA,CAAa,OAAA,EAAS;AACxB,IAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAM,KAAA,CAAM,CAAA,eAAA,EAAa,eAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAA;AAGhC,IAAA;AACkC,MAAA;AACnE,IAAA;AAKE,IAAA;AAEoC,MAAA;AAClC,QAAA;AACF,MAAA;AAC2B,MAAA;AACI,QAAA;AACnB,UAAA;AACA,YAAA;AACa,cAAA;AACf,gBAAA;AACD,cAAA;AACH,YAAA;AACF,UAAA;AACK,QAAA;AACG,UAAA;AACA,YAAA;AAC+B,cAAA;AACjC,gBAAA;AACD,cAAA;AACH,YAAA;AACF,UAAA;AACF,QAAA;AACK,MAAA;AACG,QAAA;AACA,UAAA;AACoC,YAAA;AAC1C,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACK,EAAA;AACkD,IAAA;AACzD,EAAA;AAGqD,EAAA;AAC7B,EAAA;AAC0B,IAAA;AAC3C,EAAA;AACuD,IAAA;AAC9D,EAAA;AAG8B,EAAA;AACtB,EAAA;AAC2C,IAAA;AACnD,EAAA;AAEQ,EAAA;AACM,IAAA;AACd,EAAA;AACuD,EAAA;AACzD;AAIgE;AAEL,EAAA;AAC/B,EAAA;AAEA,EAAA;AACyC,IAAA;AAGX,IAAA;AAC9B,MAAA;AACW,MAAA;AACkC,QAAA;AACnE,MAAA;AAKE,MAAA;AAEoC,QAAA;AAClC,UAAA;AACF,QAAA;AAC2B,QAAA;AACI,UAAA;AACnB,YAAA;AACA,cAAA;AACa,gBAAA;AACf,kBAAA;AACD,gBAAA;AACH,cAAA;AACF,YAAA;AACK,UAAA;AACG,YAAA;AACA,cAAA;AAC+B,gBAAA;AACjC,kBAAA;AACD,gBAAA;AACH,cAAA;AACF,YAAA;AACF,UAAA;AACK,QAAA;AACG,UAAA;AACA,YAAA;AACoC,cAAA;AAC1C,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAGqD,EAAA;AAC7B,EAAA;AAC0B,IAAA;AAClD,EAAA;AAG8B,EAAA;AAEvB,EAAA;AACuB,IAAA;AACJ,IAAA;AAC1B,EAAA;AACF;AD7B2E;AACA;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-7OZKH5K2.js","sourcesContent":[null,"import * as readline from \"readline\";\nimport chalk from \"chalk\";\nimport { FileManager } from \"./fileManager\";\n\nconst promptUser = (question: string): Promise<string> => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim().toLowerCase());\n });\n });\n};\n\nexport const initializeProject = async (): Promise<void> => {\n console.log(chalk.blue(\"Initializing LangWatch prompts project...\"));\n\n // Initialize prompts.json\n const configResult = FileManager.initializePromptsConfig();\n if (configResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts.json\")}`));\n\n // Ask about .gitignore\n const shouldAddGitignore = await promptUser(\n chalk.yellow(\"Add 'prompts/.materialized' to .gitignore? [Y/n]: \"),\n );\n\n if (\n shouldAddGitignore === \"\" ||\n shouldAddGitignore === \"y\" ||\n shouldAddGitignore === \"yes\"\n ) {\n const gitignoreResult = FileManager.addToGitignore(\n \"prompts/.materialized\",\n );\n if (gitignoreResult.added) {\n if (gitignoreResult.existed) {\n console.log(\n chalk.green(\n `✓ Added ${chalk.gray(\n \"prompts/.materialized\",\n )} to existing .gitignore`,\n ),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Created .gitignore with ${chalk.gray(\n \"prompts/.materialized\",\n )}`,\n ),\n );\n }\n } else {\n console.log(\n chalk.gray(\n `• ${chalk.gray(\"prompts/.materialized\")} already in .gitignore`,\n ),\n );\n }\n }\n } else {\n console.log(chalk.gray(`• prompts.json already exists`));\n }\n\n // Initialize lock file\n const lockResult = FileManager.initializePromptsLock();\n if (lockResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts-lock.json\")}`));\n } else {\n console.log(chalk.gray(`• prompts-lock.json already exists`));\n }\n\n // Ensure directories exist\n FileManager.ensureDirectories();\n console.log(\n chalk.green(`✓ Created ${chalk.gray(\"./prompts/\")} directory structure`),\n );\n\n console.log(\n chalk.green(\"\\n✨ Project initialized! You can now add prompts with:\"),\n );\n console.log(chalk.gray(\" langwatch prompt add <name>\"));\n};\n\nexport const ensureProjectInitialized = async (\n shouldPromptForGitignore = true,\n): Promise<{ configCreated: boolean; lockCreated: boolean }> => {\n // Initialize prompts.json\n const configResult = FileManager.initializePromptsConfig();\n let askedAboutGitignore = false;\n\n if (configResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts.json\")}`));\n\n // Ask about .gitignore only if we should prompt and haven't asked yet\n if (shouldPromptForGitignore && !askedAboutGitignore) {\n askedAboutGitignore = true;\n const shouldAddGitignore = await promptUser(\n chalk.yellow(\"Add 'prompts/.materialized' to .gitignore? [Y/n]: \"),\n );\n\n if (\n shouldAddGitignore === \"\" ||\n shouldAddGitignore === \"y\" ||\n shouldAddGitignore === \"yes\"\n ) {\n const gitignoreResult = FileManager.addToGitignore(\n \"prompts/.materialized\",\n );\n if (gitignoreResult.added) {\n if (gitignoreResult.existed) {\n console.log(\n chalk.green(\n `✓ Added ${chalk.gray(\n \"prompts/.materialized\",\n )} to existing .gitignore`,\n ),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Created .gitignore with ${chalk.gray(\n \"prompts/.materialized\",\n )}`,\n ),\n );\n }\n } else {\n console.log(\n chalk.gray(\n `• ${chalk.gray(\"prompts/.materialized\")} already in .gitignore`,\n ),\n );\n }\n }\n }\n }\n\n // Initialize lock file\n const lockResult = FileManager.initializePromptsLock();\n if (lockResult.created) {\n console.log(chalk.green(`✓ Created ${chalk.gray(\"./prompts-lock.json\")}`));\n }\n\n // Ensure directories exist\n FileManager.ensureDirectories();\n\n return {\n configCreated: configResult.created,\n lockCreated: lockResult.created,\n };\n};\n"]}
@@ -32,4 +32,4 @@ var parsePromptSpec = (spec) => {
32
32
 
33
33
 
34
34
  exports.localPromptConfigSchema = localPromptConfigSchema; exports.parsePromptSpec = parsePromptSpec;
35
- //# sourceMappingURL=chunk-I5NDMIK5.js.map
35
+ //# sourceMappingURL=chunk-AZHZ4NB4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-I5NDMIK5.js","../src/cli/types.ts"],"names":[],"mappings":"AAAA;ACAA,0BAAkB;AAcX,IAAM,wBAAA,EAA0B,MAAA,CACpC,MAAA,CAAO;AAAA,EACN,KAAA,EAAO,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,mBAAmB,CAAA;AAAA,EAC5C,eAAA,EAAiB,MAAA,CACd,MAAA,CAAO;AAAA,IACN,WAAA,EAAa,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAA,CAAS,CAAA;AAAA,IACjC,UAAA,EAAY,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAA,CAAS;AAAA,EAClC,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,CACN,QAAA,CAAS,CAAA;AAAA,EACZ,QAAA,EAAU,MAAA,CACP,KAAA;AAAA,IACC,MAAA,CACG,MAAA,CAAO;AAAA,MACN,IAAA,EAAM,MAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAC,CAAA;AAAA,MAC5C,OAAA,EAAS,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,iCAAiC;AAAA,IAC9D,CAAC,CAAA,CACA,KAAA,CAAM;AAAA,EACX,CAAA,CACC,GAAA,CAAI,CAAA,EAAG,kCAAkC;AAC9C,CAAC,CAAA,CACA,KAAA,CAAM,CAAA;AAsCF,IAAM,gBAAA,EAAkB,CAC7B,IAAA,EAAA,GACsC;AACtC,EAAA,MAAM,QAAA,EAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACpC,EAAA,GAAA,CAAI,QAAA,IAAY,CAAA,CAAA,EAAI;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,SAAS,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA;AAClC,EAAA,MAAM,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAEtC,EAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,CAAC,OAAA,EAAS;AACrB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,IAAI,CAAA,0CAAA;AAAA,IACvC,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,QAAQ,CAAA;AACzB,CAAA;AD9DA;AACA;AACE;AACA;AACF,qGAAC","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-I5NDMIK5.js","sourcesContent":[null,"import { z } from \"zod\";\n\nexport type PromptDependency =\n | string\n | {\n version?: string;\n file?: string;\n };\n\nexport type PromptsConfig = {\n prompts: Record<string, PromptDependency>;\n};\n\n// Zod schema for local prompt config with permissive validation\nexport const localPromptConfigSchema = z\n .object({\n model: z.string().min(1, \"Model is required\"),\n modelParameters: z\n .object({\n temperature: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .loose()\n .optional(),\n messages: z\n .array(\n z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string().min(1, \"Message content cannot be empty\"),\n })\n .loose(),\n )\n .min(1, \"At least one message is required\"),\n })\n .loose();\n\nexport type LocalPromptConfig = z.infer<typeof localPromptConfigSchema>;\n\nexport type MaterializedPrompt = {\n id: string;\n name: string;\n version: number;\n versionId: string;\n model: string;\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n prompt: string;\n updatedAt: string;\n};\n\nexport type SyncResult = {\n fetched: Array<{ name: string; version: number; versionSpec: string }>;\n pushed: Array<{ name: string; version: number }>;\n unchanged: string[];\n cleaned: string[];\n errors: Array<{ name: string; error: string }>;\n};\n\nexport type PromptsLockEntry = {\n version: number;\n versionId: string;\n materialized: string;\n};\n\nexport type PromptsLock = {\n lockfileVersion: number;\n prompts: Record<string, PromptsLockEntry>;\n};\n\n// Parse npm-style version specifications like \"foo@latest\" or \"bar@5\"\nexport const parsePromptSpec = (\n spec: string,\n): { name: string; version: string } => {\n const atIndex = spec.lastIndexOf(\"@\");\n if (atIndex === -1) {\n return { name: spec, version: \"latest\" };\n }\n\n const name = spec.slice(0, atIndex);\n const version = spec.slice(atIndex + 1);\n\n if (!name || !version) {\n throw new Error(\n `Invalid prompt specification: ${spec}. Use format 'name@version' or just 'name'`,\n );\n }\n\n return { name, version };\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-AZHZ4NB4.js","../src/cli/types.ts"],"names":[],"mappings":"AAAA;ACAA,0BAAkB;AAcX,IAAM,wBAAA,EAA0B,MAAA,CACpC,MAAA,CAAO;AAAA,EACN,KAAA,EAAO,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,mBAAmB,CAAA;AAAA,EAC5C,eAAA,EAAiB,MAAA,CACd,MAAA,CAAO;AAAA,IACN,WAAA,EAAa,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAA,CAAS,CAAA;AAAA,IACjC,UAAA,EAAY,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAA,CAAS;AAAA,EAClC,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,CACN,QAAA,CAAS,CAAA;AAAA,EACZ,QAAA,EAAU,MAAA,CACP,KAAA;AAAA,IACC,MAAA,CACG,MAAA,CAAO;AAAA,MACN,IAAA,EAAM,MAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAC,CAAA;AAAA,MAC5C,OAAA,EAAS,MAAA,CAAE,MAAA,CAAO,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,iCAAiC;AAAA,IAC9D,CAAC,CAAA,CACA,KAAA,CAAM;AAAA,EACX,CAAA,CACC,GAAA,CAAI,CAAA,EAAG,kCAAkC;AAC9C,CAAC,CAAA,CACA,KAAA,CAAM,CAAA;AA0CF,IAAM,gBAAA,EAAkB,CAC7B,IAAA,EAAA,GACsC;AACtC,EAAA,MAAM,QAAA,EAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACpC,EAAA,GAAA,CAAI,QAAA,IAAY,CAAA,CAAA,EAAI;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,SAAS,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA;AAClC,EAAA,MAAM,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAEtC,EAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,CAAC,OAAA,EAAS;AACrB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,IAAI,CAAA,0CAAA;AAAA,IACvC,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,QAAQ,CAAA;AACzB,CAAA;ADlEA;AACA;AACE;AACA;AACF,qGAAC","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-AZHZ4NB4.js","sourcesContent":[null,"import { z } from \"zod\";\n\nexport type PromptDependency =\n | string\n | {\n version?: string;\n file?: string;\n };\n\nexport type PromptsConfig = {\n prompts: Record<string, PromptDependency>;\n};\n\n// Zod schema for local prompt config with permissive validation\nexport const localPromptConfigSchema = z\n .object({\n model: z.string().min(1, \"Model is required\"),\n modelParameters: z\n .object({\n temperature: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .loose()\n .optional(),\n messages: z\n .array(\n z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string().min(1, \"Message content cannot be empty\"),\n })\n .loose(),\n )\n .min(1, \"At least one message is required\"),\n })\n .loose();\n\nexport type LocalPromptConfig = z.infer<typeof localPromptConfigSchema>;\n\nexport type MaterializedPrompt = {\n id: string;\n name: string;\n version: number;\n versionId: string;\n model: string;\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n prompt: string;\n temperature?: number;\n maxTokens?: number;\n inputs?: any;\n outputs?: any;\n updatedAt: string;\n};\n\nexport type SyncResult = {\n fetched: Array<{ name: string; version: number; versionSpec: string }>;\n pushed: Array<{ name: string; version: number }>;\n unchanged: string[];\n cleaned: string[];\n errors: Array<{ name: string; error: string }>;\n};\n\nexport type PromptsLockEntry = {\n version: number;\n versionId: string;\n materialized: string;\n};\n\nexport type PromptsLock = {\n lockfileVersion: number;\n prompts: Record<string, PromptsLockEntry>;\n};\n\n// Parse npm-style version specifications like \"foo@latest\" or \"bar@5\"\nexport const parsePromptSpec = (\n spec: string,\n): { name: string; version: string } => {\n const atIndex = spec.lastIndexOf(\"@\");\n if (atIndex === -1) {\n return { name: spec, version: \"latest\" };\n }\n\n const name = spec.slice(0, atIndex);\n const version = spec.slice(atIndex + 1);\n\n if (!name || !version) {\n throw new Error(\n `Invalid prompt specification: ${spec}. Use format 'name@version' or just 'name'`,\n );\n }\n\n return { name, version };\n};\n"]}
@@ -32,4 +32,4 @@ export {
32
32
  localPromptConfigSchema,
33
33
  parsePromptSpec
34
34
  };
35
- //# sourceMappingURL=chunk-YQVVPMKH.mjs.map
35
+ //# sourceMappingURL=chunk-BTBSMJTY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/types.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type PromptDependency =\n | string\n | {\n version?: string;\n file?: string;\n };\n\nexport type PromptsConfig = {\n prompts: Record<string, PromptDependency>;\n};\n\n// Zod schema for local prompt config with permissive validation\nexport const localPromptConfigSchema = z\n .object({\n model: z.string().min(1, \"Model is required\"),\n modelParameters: z\n .object({\n temperature: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .loose()\n .optional(),\n messages: z\n .array(\n z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string().min(1, \"Message content cannot be empty\"),\n })\n .loose(),\n )\n .min(1, \"At least one message is required\"),\n })\n .loose();\n\nexport type LocalPromptConfig = z.infer<typeof localPromptConfigSchema>;\n\nexport type MaterializedPrompt = {\n id: string;\n name: string;\n version: number;\n versionId: string;\n model: string;\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n prompt: string;\n temperature?: number;\n maxTokens?: number;\n inputs?: any;\n outputs?: any;\n updatedAt: string;\n};\n\nexport type SyncResult = {\n fetched: Array<{ name: string; version: number; versionSpec: string }>;\n pushed: Array<{ name: string; version: number }>;\n unchanged: string[];\n cleaned: string[];\n errors: Array<{ name: string; error: string }>;\n};\n\nexport type PromptsLockEntry = {\n version: number;\n versionId: string;\n materialized: string;\n};\n\nexport type PromptsLock = {\n lockfileVersion: number;\n prompts: Record<string, PromptsLockEntry>;\n};\n\n// Parse npm-style version specifications like \"foo@latest\" or \"bar@5\"\nexport const parsePromptSpec = (\n spec: string,\n): { name: string; version: string } => {\n const atIndex = spec.lastIndexOf(\"@\");\n if (atIndex === -1) {\n return { name: spec, version: \"latest\" };\n }\n\n const name = spec.slice(0, atIndex);\n const version = spec.slice(atIndex + 1);\n\n if (!name || !version) {\n throw new Error(\n `Invalid prompt specification: ${spec}. Use format 'name@version' or just 'name'`,\n );\n }\n\n return { name, version };\n};\n"],"mappings":";AAAA,SAAS,SAAS;AAcX,IAAM,0BAA0B,EACpC,OAAO;AAAA,EACN,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB;AAAA,EAC5C,iBAAiB,EACd,OAAO;AAAA,IACN,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,MAAM,EACN,SAAS;AAAA,EACZ,UAAU,EACP;AAAA,IACC,EACG,OAAO;AAAA,MACN,MAAM,EAAE,KAAK,CAAC,UAAU,QAAQ,WAAW,CAAC;AAAA,MAC5C,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,iCAAiC;AAAA,IAC9D,CAAC,EACA,MAAM;AAAA,EACX,EACC,IAAI,GAAG,kCAAkC;AAC9C,CAAC,EACA,MAAM;AA0CF,IAAM,kBAAkB,CAC7B,SACsC;AACtC,QAAM,UAAU,KAAK,YAAY,GAAG;AACpC,MAAI,YAAY,IAAI;AAClB,WAAO,EAAE,MAAM,MAAM,SAAS,SAAS;AAAA,EACzC;AAEA,QAAM,OAAO,KAAK,MAAM,GAAG,OAAO;AAClC,QAAM,UAAU,KAAK,MAAM,UAAU,CAAC;AAEtC,MAAI,CAAC,QAAQ,CAAC,SAAS;AACrB,UAAM,IAAI;AAAA,MACR,iCAAiC,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,QAAQ;AACzB;","names":[]}
@@ -1,9 +1,9 @@
1
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
2
 
3
- var _chunkPUHM465Cjs = require('./chunk-PUHM465C.js');
3
+ var _chunkR6FBJN7Kjs = require('./chunk-R6FBJN7K.js');
4
4
 
5
5
 
6
- var _chunkI5NDMIK5js = require('./chunk-I5NDMIK5.js');
6
+ var _chunkAZHZ4NB4js = require('./chunk-AZHZ4NB4.js');
7
7
 
8
8
  // src/cli/utils/fileManager.ts
9
9
  var _fs = require('fs'); var fs = _interopRequireWildcard(_fs);
@@ -99,7 +99,7 @@ var FileManager = class {
99
99
  try {
100
100
  const content = fs.readFileSync(fullPath, "utf-8");
101
101
  const rawData = yaml.load(content);
102
- const result = _chunkI5NDMIK5js.localPromptConfigSchema.safeParse(rawData);
102
+ const result = _chunkAZHZ4NB4js.localPromptConfigSchema.safeParse(rawData);
103
103
  if (!result.success) {
104
104
  const prettyError = result.error.issues.map((issue) => `\u2716 ${issue.message}${issue.path.length > 0 ? `
105
105
  \u2192 at ${issue.path.join(".")}` : ""}`).join("\n");
@@ -127,7 +127,7 @@ ${prettyError}`
127
127
  }
128
128
  }
129
129
  const filePath = path.join(materializedDir, ...parts.slice(0, -1), fileName);
130
- const yamlContent = _chunkPUHM465Cjs.PromptConverter.fromMaterializedToYaml(prompt);
130
+ const yamlContent = _chunkR6FBJN7Kjs.PromptConverter.fromMaterializedToYaml(prompt);
131
131
  const yamlString = yaml.dump(yamlContent, {
132
132
  lineWidth: -1,
133
133
  noRefs: true,
@@ -239,4 +239,4 @@ FileManager.MATERIALIZED_DIR = ".materialized";
239
239
 
240
240
 
241
241
  exports.FileManager = FileManager;
242
- //# sourceMappingURL=chunk-P5F63PAW.js.map
242
+ //# sourceMappingURL=chunk-CAZONSXV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-P5F63PAW.js","../src/cli/utils/fileManager.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACPA,+DAAoB;AACpB,uEAAsB;AACtB,8EAAsB;AACtB,4EAAkB;AAKX,IAAM,YAAA,EAAN,MAAkB;AAAA,EAMvB,OAAO,oBAAA,CAAA,EAA+B;AACpC,IAAA,OAAY,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,mBAAmB,CAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,kBAAA,CAAA,EAA6B;AAClC,IAAA,OAAY,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,iBAAiB,CAAA;AAAA,EACxD;AAAA,EAEA,OAAO,aAAA,CAAA,EAAwB;AAC7B,IAAA,OAAY,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA;AAAA,EAClD;AAAA,EAEA,OAAO,kBAAA,CAAA,EAA6B;AAClC,IAAA,OAAY,IAAA,CAAA,IAAA,CAAK,IAAA,CAAK,aAAA,CAAc,CAAA,EAAG,IAAA,CAAK,gBAAgB,CAAA;AAAA,EAC9D;AAAA,EAEA,OAAO,iBAAA,CAAA,EAA0B;AAC/B,IAAA,MAAM,WAAA,EAAa,IAAA,CAAK,aAAA,CAAc,CAAA;AACtC,IAAA,MAAM,gBAAA,EAAkB,IAAA,CAAK,kBAAA,CAAmB,CAAA;AAEhD,IAAA,GAAA,CAAI,CAAI,EAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,MAAG,EAAA,CAAA,SAAA,CAAU,UAAA,EAAY,EAAE,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,IAC9C;AAEA,IAAA,GAAA,CAAI,CAAI,EAAA,CAAA,UAAA,CAAW,eAAe,CAAA,EAAG;AACnC,MAAG,EAAA,CAAA,SAAA,CAAU,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,OAAO,iBAAA,CAAA,EAAmC;AACxC,IAAA,MAAM,WAAA,EAAa,IAAA,CAAK,oBAAA,CAAqB,CAAA;AAE7C,IAAA,GAAA,CAAI,CAAI,EAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,MAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,EAAa,EAAA,CAAA,YAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AACnD,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,IAC3B,EAAA,MAAA,CAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,MAAA,WAAiB,MAAA,EAAQ,KAAA,CAAM,QAAA,EAAU,eAAe,CAAA,CAAA;AAC3G,IAAA;AACF,EAAA;AAEsD,EAAA;AACP,IAAA;AACsB,IAAA;AACrE,EAAA;AAEqE,EAAA;AACtB,IAAA;AACL,IAAA;AAE1B,IAAA;AACqC,MAAA;AACf,MAAA;AACO,MAAA;AAC3C,IAAA;AAE0C,IAAA;AAC5C,EAAA;AAEsC,EAAA;AACK,IAAA;AAEX,IAAA;AACrB,MAAA;AACY,QAAA;AACP,QAAA;AACZ,MAAA;AACF,IAAA;AAEI,IAAA;AAC+C,MAAA;AACxB,MAAA;AACX,IAAA;AACiF,MAAA;AACjG,IAAA;AACF,EAAA;AAEgD,EAAA;AACL,IAAA;AACsB,IAAA;AACjE,EAAA;AAEmE,EAAA;AACxB,IAAA;AACH,IAAA;AAExB,IAAA;AACmB,MAAA;AACZ,QAAA;AACP,QAAA;AACZ,MAAA;AAC8B,MAAA;AACS,MAAA;AACzC,IAAA;AAEwC,IAAA;AAC1C,EAAA;AAE4D,EAAA;AACpB,IAAA;AAER,IAAA;AAC8B,MAAA;AAC5D,IAAA;AAEI,IAAA;AAC+C,MAAA;AAChB,MAAA;AAGuB,MAAA;AAE7B,MAAA;AAGgC,QAAA;AAC7C,YAAA;AAEF,QAAA;AACiD,UAAA;AAAiB;AAC5E,QAAA;AACF,MAAA;AAEc,MAAA;AACA,IAAA;AACwE,MAAA;AAC9E,QAAA;AACR,MAAA;AACiG,MAAA;AACnG,IAAA;AACF,EAAA;AAEkF,EAAA;AAChC,IAAA;AACpB,IAAA;AACe,IAAA;AAGrB,IAAA;AAC2C,MAAA;AACnC,MAAA;AACc,QAAA;AAC1C,MAAA;AACF,IAAA;AAE2E,IAAA;AAGV,IAAA;AAEvB,IAAA;AAC7B,MAAA;AACH,MAAA;AACE,MAAA;AACX,IAAA;AAEoC,IAAA;AAC9B,IAAA;AACT,EAAA;AAEuC,EAAA;AACC,IAAA;AACU,IAAA;AAEhB,IAAA;AACtB,MAAA;AACV,IAAA;AAEyB,IAAA;AAEiC,IAAA;AACG,MAAA;AAE9B,MAAA;AACe,QAAA;AACiB,QAAA;AAElC,QAAA;AAEW,UAAA;AAChC,YAAA;AACF,UAAA;AACkC,UAAA;AAC8B,QAAA;AACd,UAAA;AACpD,QAAA;AACF,MAAA;AACF,IAAA;AAEkB,IAAA;AACX,IAAA;AACT,EAAA;AAEoD,EAAA;AACZ,IAAA;AACiB,IAAA;AACN,IAAA;AACnD,EAAA;AAEoF,EAAA;AAClC,IAAA;AAEX,IAAA;AAC3B,MAAA;AACV,IAAA;AAE2B,IAAA;AAEkC,IAAA;AACA,MAAA;AAE9B,MAAA;AACe,QAAA;AACiB,QAAA;AAElC,QAAA;AACc,UAAA;AAGjC,UAAA;AACwC,YAAA;AACb,YAAA;AACN,cAAA;AACvB,YAAA;AACM,UAAA;AAER,UAAA;AACgE,QAAA;AAEC,UAAA;AAEvB,UAAA;AAClB,YAAA;AACC,YAAA;AACzB,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAE0B,IAAA;AACnB,IAAA;AACT,EAAA;AAEoH,EAAA;AAChD,IAAA;AAE7C,IAAA;AACH,MAAA;AACE,MAAA;AACJ,MAAA;AAChB,IAAA;AACF,EAAA;AAEgE,EAAA;AACpC,IAAA;AACA,MAAA;AAC1B,IAAA;AACF,EAAA;AAE2E,EAAA;AACd,IAAA;AAGxB,IAAA;AAEO,MAAA;AAAI;AACP,MAAA;AACvC,IAAA;AAGsD,IAAA;AACG,IAAA;AAG9B,IAAA;AACY,MAAA;AACvC,IAAA;AAG8D,IAAA;AAAiB;AAAU;AAAA;AAC/C,IAAA;AAEL,IAAA;AACvC,EAAA;AACF;AApSgD;AACF;AACN;AACK;ADiOmE;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-P5F63PAW.js","sourcesContent":[null,"import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as yaml from \"js-yaml\";\nimport chalk from \"chalk\";\nimport type { PromptsConfig, LocalPromptConfig, MaterializedPrompt, PromptsLock } from \"../types\";\nimport { localPromptConfigSchema } from \"../types\";\nimport { PromptConverter } from \"@/cli/utils/promptConverter\";\n\nexport class FileManager {\n private static readonly PROMPTS_CONFIG_FILE = \"prompts.json\";\n private static readonly PROMPTS_LOCK_FILE = \"prompts-lock.json\";\n private static readonly PROMPTS_DIR = \"prompts\";\n private static readonly MATERIALIZED_DIR = \".materialized\";\n\n static getPromptsConfigPath(): string {\n return path.join(process.cwd(), this.PROMPTS_CONFIG_FILE);\n }\n\n static getPromptsLockPath(): string {\n return path.join(process.cwd(), this.PROMPTS_LOCK_FILE);\n }\n\n static getPromptsDir(): string {\n return path.join(process.cwd(), this.PROMPTS_DIR);\n }\n\n static getMaterializedDir(): string {\n return path.join(this.getPromptsDir(), this.MATERIALIZED_DIR);\n }\n\n static ensureDirectories(): void {\n const promptsDir = this.getPromptsDir();\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(promptsDir)) {\n fs.mkdirSync(promptsDir, { recursive: true });\n }\n\n if (!fs.existsSync(materializedDir)) {\n fs.mkdirSync(materializedDir, { recursive: true });\n }\n }\n\n static loadPromptsConfig(): PromptsConfig {\n const configPath = this.getPromptsConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return { prompts: {} };\n }\n\n try {\n const content = fs.readFileSync(configPath, \"utf-8\");\n return JSON.parse(content) as PromptsConfig;\n } catch (error) {\n throw new Error(`Failed to parse prompts.json: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n\n static savePromptsConfig(config: PromptsConfig): void {\n const configPath = this.getPromptsConfigPath();\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n }\n\n static initializePromptsConfig(): { created: boolean; path: string } {\n const configPath = this.getPromptsConfigPath();\n const existed = fs.existsSync(configPath);\n\n if (!existed) {\n const emptyConfig: PromptsConfig = { prompts: {} };\n this.savePromptsConfig(emptyConfig);\n return { created: true, path: configPath };\n }\n\n return { created: false, path: configPath };\n }\n\n static loadPromptsLock(): PromptsLock {\n const lockPath = this.getPromptsLockPath();\n\n if (!fs.existsSync(lockPath)) {\n return {\n lockfileVersion: 1,\n prompts: {}\n };\n }\n\n try {\n const content = fs.readFileSync(lockPath, \"utf-8\");\n return JSON.parse(content) as PromptsLock;\n } catch (error) {\n throw new Error(`Failed to parse prompts-lock.json: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n\n static savePromptsLock(lock: PromptsLock): void {\n const lockPath = this.getPromptsLockPath();\n fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + \"\\n\");\n }\n\n static initializePromptsLock(): { created: boolean; path: string } {\n const lockPath = this.getPromptsLockPath();\n const existed = fs.existsSync(lockPath);\n\n if (!existed) {\n const emptyLock: PromptsLock = {\n lockfileVersion: 1,\n prompts: {}\n };\n this.savePromptsLock(emptyLock);\n return { created: true, path: lockPath };\n }\n\n return { created: false, path: lockPath };\n }\n\n static loadLocalPrompt(filePath: string): LocalPromptConfig {\n const fullPath = path.resolve(filePath);\n\n if (!fs.existsSync(fullPath)) {\n throw new Error(`Local prompt file not found: ${filePath}`);\n }\n\n try {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n const rawData = yaml.load(content);\n\n // Validate with zod and provide nice error messages\n const result = localPromptConfigSchema.safeParse(rawData);\n\n if (!result.success) {\n // Format zod errors nicely (manually since z.prettifyError might not be available)\n const prettyError = result.error.issues\n .map(issue => `✖ ${issue.message}${issue.path.length > 0 ? `\\n → at ${issue.path.join('.')}` : ''}`)\n .join('\\n');\n\n throw new Error(\n `Invalid prompt configuration in ${chalk.yellow(filePath)}:\\n${prettyError}`\n );\n }\n\n return result.data;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Invalid prompt configuration\")) {\n throw error; // Re-throw zod validation errors as-is\n }\n throw new Error(`Failed to parse local prompt file ${filePath}: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n\n static saveMaterializedPrompt(name: string, prompt: MaterializedPrompt): string {\n const materializedDir = this.getMaterializedDir();\n const parts = name.split(\"/\");\n const fileName = `${parts[parts.length - 1]}.prompt.yaml`;\n\n // Create nested directories if needed\n if (parts.length > 1) {\n const subDir = path.join(materializedDir, ...parts.slice(0, -1));\n if (!fs.existsSync(subDir)) {\n fs.mkdirSync(subDir, { recursive: true });\n }\n }\n\n const filePath = path.join(materializedDir, ...parts.slice(0, -1), fileName);\n\n // Convert to YAML format using the converter\n const yamlContent = PromptConverter.fromMaterializedToYaml(prompt);\n\n const yamlString = yaml.dump(yamlContent, {\n lineWidth: -1,\n noRefs: true,\n sortKeys: false\n });\n\n fs.writeFileSync(filePath, yamlString);\n return filePath;\n }\n\n static getLocalPromptFiles(): string[] {\n const promptsDir = this.getPromptsDir();\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(promptsDir)) {\n return [];\n }\n\n const files: string[] = [];\n\n const walkDir = (dir: string, relativePath = \"\"): void => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativeFilePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n // Skip the .materialized directory\n if (fullPath === materializedDir) {\n continue;\n }\n walkDir(fullPath, relativeFilePath);\n } else if (entry.isFile() && entry.name.endsWith(\".prompt.yaml\")) {\n files.push(path.join(promptsDir, relativeFilePath));\n }\n }\n };\n\n walkDir(promptsDir);\n return files;\n }\n\n static promptNameFromPath(filePath: string): string {\n const promptsDir = this.getPromptsDir();\n const relativePath = path.relative(promptsDir, filePath);\n return relativePath.replace(/\\.prompt\\.yaml$/, \"\");\n }\n\n static cleanupOrphanedMaterializedFiles(currentDependencies: Set<string>): string[] {\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(materializedDir)) {\n return [];\n }\n\n const cleaned: string[] = [];\n\n const cleanupDir = (dir: string, relativePath = \"\"): void => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativeFilePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n cleanupDir(fullPath, relativeFilePath);\n\n // Remove empty directories\n try {\n const dirEntries = fs.readdirSync(fullPath);\n if (dirEntries.length === 0) {\n fs.rmdirSync(fullPath);\n }\n } catch {\n // Directory not empty or other error, ignore\n }\n } else if (entry.isFile() && entry.name.endsWith(\".prompt.yaml\")) {\n // Extract prompt name from materialized file path\n const promptName = relativeFilePath.replace(/\\.prompt\\.yaml$/, \"\");\n\n if (!currentDependencies.has(promptName)) {\n fs.unlinkSync(fullPath);\n cleaned.push(promptName);\n }\n }\n }\n };\n\n cleanupDir(materializedDir);\n return cleaned;\n }\n\n static updateLockEntry(lock: PromptsLock, name: string, prompt: MaterializedPrompt, materializedPath: string): void {\n const relativePath = path.relative(process.cwd(), materializedPath);\n\n lock.prompts[name] = {\n version: prompt.version,\n versionId: prompt.versionId,\n materialized: relativePath,\n };\n }\n\n static removeFromLock(lock: PromptsLock, names: string[]): void {\n for (const name of names) {\n delete lock.prompts[name];\n }\n }\n\n static addToGitignore(entry: string): { added: boolean; existed: boolean } {\n const gitignorePath = path.join(process.cwd(), \".gitignore\");\n\n // Check if .gitignore exists\n if (!fs.existsSync(gitignorePath)) {\n // Create new .gitignore with the entry\n fs.writeFileSync(gitignorePath, `${entry}\\n`);\n return { added: true, existed: false };\n }\n\n // Read existing .gitignore\n const content = fs.readFileSync(gitignorePath, \"utf-8\");\n const lines = content.split(\"\\n\").map(line => line.trim());\n\n // Check if entry already exists\n if (lines.includes(entry)) {\n return { added: false, existed: true };\n }\n\n // Add entry to .gitignore\n const newContent = content.endsWith(\"\\n\") ? `${content}${entry}\\n` : `${content}\\n${entry}\\n`;\n fs.writeFileSync(gitignorePath, newContent);\n\n return { added: true, existed: false };\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-CAZONSXV.js","../src/cli/utils/fileManager.ts"],"names":[],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-CAZONSXV.js","sourcesContent":[null,"import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as yaml from \"js-yaml\";\nimport chalk from \"chalk\";\nimport type { PromptsConfig, LocalPromptConfig, MaterializedPrompt, PromptsLock } from \"../types\";\nimport { localPromptConfigSchema } from \"../types\";\nimport { PromptConverter } from \"@/cli/utils/promptConverter\";\n\nexport class FileManager {\n private static readonly PROMPTS_CONFIG_FILE = \"prompts.json\";\n private static readonly PROMPTS_LOCK_FILE = \"prompts-lock.json\";\n private static readonly PROMPTS_DIR = \"prompts\";\n private static readonly MATERIALIZED_DIR = \".materialized\";\n\n static getPromptsConfigPath(): string {\n return path.join(process.cwd(), this.PROMPTS_CONFIG_FILE);\n }\n\n static getPromptsLockPath(): string {\n return path.join(process.cwd(), this.PROMPTS_LOCK_FILE);\n }\n\n static getPromptsDir(): string {\n return path.join(process.cwd(), this.PROMPTS_DIR);\n }\n\n static getMaterializedDir(): string {\n return path.join(this.getPromptsDir(), this.MATERIALIZED_DIR);\n }\n\n static ensureDirectories(): void {\n const promptsDir = this.getPromptsDir();\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(promptsDir)) {\n fs.mkdirSync(promptsDir, { recursive: true });\n }\n\n if (!fs.existsSync(materializedDir)) {\n fs.mkdirSync(materializedDir, { recursive: true });\n }\n }\n\n static loadPromptsConfig(): PromptsConfig {\n const configPath = this.getPromptsConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return { prompts: {} };\n }\n\n try {\n const content = fs.readFileSync(configPath, \"utf-8\");\n return JSON.parse(content) as PromptsConfig;\n } catch (error) {\n throw new Error(`Failed to parse prompts.json: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n\n static savePromptsConfig(config: PromptsConfig): void {\n const configPath = this.getPromptsConfigPath();\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n }\n\n static initializePromptsConfig(): { created: boolean; path: string } {\n const configPath = this.getPromptsConfigPath();\n const existed = fs.existsSync(configPath);\n\n if (!existed) {\n const emptyConfig: PromptsConfig = { prompts: {} };\n this.savePromptsConfig(emptyConfig);\n return { created: true, path: configPath };\n }\n\n return { created: false, path: configPath };\n }\n\n static loadPromptsLock(): PromptsLock {\n const lockPath = this.getPromptsLockPath();\n\n if (!fs.existsSync(lockPath)) {\n return {\n lockfileVersion: 1,\n prompts: {}\n };\n }\n\n try {\n const content = fs.readFileSync(lockPath, \"utf-8\");\n return JSON.parse(content) as PromptsLock;\n } catch (error) {\n throw new Error(`Failed to parse prompts-lock.json: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n\n static savePromptsLock(lock: PromptsLock): void {\n const lockPath = this.getPromptsLockPath();\n fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + \"\\n\");\n }\n\n static initializePromptsLock(): { created: boolean; path: string } {\n const lockPath = this.getPromptsLockPath();\n const existed = fs.existsSync(lockPath);\n\n if (!existed) {\n const emptyLock: PromptsLock = {\n lockfileVersion: 1,\n prompts: {}\n };\n this.savePromptsLock(emptyLock);\n return { created: true, path: lockPath };\n }\n\n return { created: false, path: lockPath };\n }\n\n static loadLocalPrompt(filePath: string): LocalPromptConfig {\n const fullPath = path.resolve(filePath);\n\n if (!fs.existsSync(fullPath)) {\n throw new Error(`Local prompt file not found: ${filePath}`);\n }\n\n try {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n const rawData = yaml.load(content);\n\n // Validate with zod and provide nice error messages\n const result = localPromptConfigSchema.safeParse(rawData);\n\n if (!result.success) {\n // Format zod errors nicely (manually since z.prettifyError might not be available)\n const prettyError = result.error.issues\n .map(issue => `✖ ${issue.message}${issue.path.length > 0 ? `\\n → at ${issue.path.join('.')}` : ''}`)\n .join('\\n');\n\n throw new Error(\n `Invalid prompt configuration in ${chalk.yellow(filePath)}:\\n${prettyError}`\n );\n }\n\n return result.data;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Invalid prompt configuration\")) {\n throw error; // Re-throw zod validation errors as-is\n }\n throw new Error(`Failed to parse local prompt file ${filePath}: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n\n static saveMaterializedPrompt(name: string, prompt: MaterializedPrompt): string {\n const materializedDir = this.getMaterializedDir();\n const parts = name.split(\"/\");\n const fileName = `${parts[parts.length - 1]}.prompt.yaml`;\n\n // Create nested directories if needed\n if (parts.length > 1) {\n const subDir = path.join(materializedDir, ...parts.slice(0, -1));\n if (!fs.existsSync(subDir)) {\n fs.mkdirSync(subDir, { recursive: true });\n }\n }\n\n const filePath = path.join(materializedDir, ...parts.slice(0, -1), fileName);\n\n // Convert to YAML format using the converter\n const yamlContent = PromptConverter.fromMaterializedToYaml(prompt);\n\n const yamlString = yaml.dump(yamlContent, {\n lineWidth: -1,\n noRefs: true,\n sortKeys: false\n });\n\n fs.writeFileSync(filePath, yamlString);\n return filePath;\n }\n\n static getLocalPromptFiles(): string[] {\n const promptsDir = this.getPromptsDir();\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(promptsDir)) {\n return [];\n }\n\n const files: string[] = [];\n\n const walkDir = (dir: string, relativePath = \"\"): void => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativeFilePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n // Skip the .materialized directory\n if (fullPath === materializedDir) {\n continue;\n }\n walkDir(fullPath, relativeFilePath);\n } else if (entry.isFile() && entry.name.endsWith(\".prompt.yaml\")) {\n files.push(path.join(promptsDir, relativeFilePath));\n }\n }\n };\n\n walkDir(promptsDir);\n return files;\n }\n\n static promptNameFromPath(filePath: string): string {\n const promptsDir = this.getPromptsDir();\n const relativePath = path.relative(promptsDir, filePath);\n return relativePath.replace(/\\.prompt\\.yaml$/, \"\");\n }\n\n static cleanupOrphanedMaterializedFiles(currentDependencies: Set<string>): string[] {\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(materializedDir)) {\n return [];\n }\n\n const cleaned: string[] = [];\n\n const cleanupDir = (dir: string, relativePath = \"\"): void => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativeFilePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n cleanupDir(fullPath, relativeFilePath);\n\n // Remove empty directories\n try {\n const dirEntries = fs.readdirSync(fullPath);\n if (dirEntries.length === 0) {\n fs.rmdirSync(fullPath);\n }\n } catch {\n // Directory not empty or other error, ignore\n }\n } else if (entry.isFile() && entry.name.endsWith(\".prompt.yaml\")) {\n // Extract prompt name from materialized file path\n const promptName = relativeFilePath.replace(/\\.prompt\\.yaml$/, \"\");\n\n if (!currentDependencies.has(promptName)) {\n fs.unlinkSync(fullPath);\n cleaned.push(promptName);\n }\n }\n }\n };\n\n cleanupDir(materializedDir);\n return cleaned;\n }\n\n static updateLockEntry(lock: PromptsLock, name: string, prompt: MaterializedPrompt, materializedPath: string): void {\n const relativePath = path.relative(process.cwd(), materializedPath);\n\n lock.prompts[name] = {\n version: prompt.version,\n versionId: prompt.versionId,\n materialized: relativePath,\n };\n }\n\n static removeFromLock(lock: PromptsLock, names: string[]): void {\n for (const name of names) {\n delete lock.prompts[name];\n }\n }\n\n static addToGitignore(entry: string): { added: boolean; existed: boolean } {\n const gitignorePath = path.join(process.cwd(), \".gitignore\");\n\n // Check if .gitignore exists\n if (!fs.existsSync(gitignorePath)) {\n // Create new .gitignore with the entry\n fs.writeFileSync(gitignorePath, `${entry}\\n`);\n return { added: true, existed: false };\n }\n\n // Read existing .gitignore\n const content = fs.readFileSync(gitignorePath, \"utf-8\");\n const lines = content.split(\"\\n\").map(line => line.trim());\n\n // Check if entry already exists\n if (lines.includes(entry)) {\n return { added: false, existed: true };\n }\n\n // Add entry to .gitignore\n const newContent = content.endsWith(\"\\n\") ? `${content}${entry}\\n` : `${content}\\n${entry}\\n`;\n fs.writeFileSync(gitignorePath, newContent);\n\n return { added: true, existed: false };\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  PromptConverter
3
- } from "./chunk-LXVDGQA4.mjs";
3
+ } from "./chunk-V5M3HUBV.mjs";
4
4
  import {
5
5
  localPromptConfigSchema
6
- } from "./chunk-YQVVPMKH.mjs";
6
+ } from "./chunk-BTBSMJTY.mjs";
7
7
 
8
8
  // src/cli/utils/fileManager.ts
9
9
  import * as fs from "fs";
@@ -239,4 +239,4 @@ FileManager.MATERIALIZED_DIR = ".materialized";
239
239
  export {
240
240
  FileManager
241
241
  };
242
- //# sourceMappingURL=chunk-7ZRAJ52N.mjs.map
242
+ //# sourceMappingURL=chunk-CKVDNVFL.mjs.map