langwatch 0.3.0 → 0.3.2

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 (134) hide show
  1. package/README.md +5 -2
  2. package/dist/add-LBBS4I3H.js +114 -0
  3. package/dist/add-LBBS4I3H.js.map +1 -0
  4. package/dist/add-RD3ZKFAT.mjs +114 -0
  5. package/dist/add-RD3ZKFAT.mjs.map +1 -0
  6. package/dist/chunk-2JU376G7.js +242 -0
  7. package/dist/chunk-2JU376G7.js.map +1 -0
  8. package/dist/chunk-2ODBGSBI.js +4 -0
  9. package/dist/{chunk-G3AUABT7.js.map → chunk-2ODBGSBI.js.map} +1 -1
  10. package/dist/chunk-3GKPQB4R.mjs +242 -0
  11. package/dist/chunk-3GKPQB4R.mjs.map +1 -0
  12. package/dist/chunk-4NRLVT2U.mjs +35 -0
  13. package/dist/chunk-4NRLVT2U.mjs.map +1 -0
  14. package/dist/{chunk-SVJ7SCGB.js → chunk-52GXX3MA.js} +33 -31
  15. package/dist/chunk-52GXX3MA.js.map +1 -0
  16. package/dist/chunk-5NC5ILKA.js +94 -0
  17. package/dist/chunk-5NC5ILKA.js.map +1 -0
  18. package/dist/chunk-AAROJADR.mjs +49 -0
  19. package/dist/chunk-AAROJADR.mjs.map +1 -0
  20. package/dist/chunk-DHJKJVY7.mjs +20 -0
  21. package/dist/chunk-DHJKJVY7.mjs.map +1 -0
  22. package/dist/{chunk-VJSOCNPA.js → chunk-DTEKFQ4U.js} +6 -28
  23. package/dist/chunk-DTEKFQ4U.js.map +1 -0
  24. package/dist/chunk-E7UE2MPD.mjs +93 -0
  25. package/dist/chunk-E7UE2MPD.mjs.map +1 -0
  26. package/dist/chunk-F6E4XQQU.js +20 -0
  27. package/dist/chunk-F6E4XQQU.js.map +1 -0
  28. package/dist/chunk-FJLK5CFL.js +37 -0
  29. package/dist/chunk-FJLK5CFL.js.map +1 -0
  30. package/dist/{chunk-Z5J5UI5E.mjs → chunk-GJSEBQXF.mjs} +139 -107
  31. package/dist/chunk-GJSEBQXF.mjs.map +1 -0
  32. package/dist/chunk-HA3LI5IK.js +35 -0
  33. package/dist/chunk-HA3LI5IK.js.map +1 -0
  34. package/dist/chunk-HJU67C7H.js +93 -0
  35. package/dist/chunk-HJU67C7H.js.map +1 -0
  36. package/dist/chunk-IGHXIIIK.js +49 -0
  37. package/dist/chunk-IGHXIIIK.js.map +1 -0
  38. package/dist/{chunk-PMBEK6YE.mjs → chunk-J7ICRUU4.mjs} +5 -3
  39. package/dist/{chunk-PMBEK6YE.mjs.map → chunk-J7ICRUU4.mjs.map} +1 -1
  40. package/dist/{chunk-HPC6Z7J4.js → chunk-PWZBLTHR.js} +3 -3
  41. package/dist/{chunk-HPC6Z7J4.js.map → chunk-PWZBLTHR.js.map} +1 -1
  42. package/dist/chunk-SMXXAVMB.js +100 -0
  43. package/dist/chunk-SMXXAVMB.js.map +1 -0
  44. package/dist/{chunk-CSC3CMIT.mjs → chunk-STV4ZVNA.mjs} +2 -2
  45. package/dist/chunk-T5AZMMVS.mjs +94 -0
  46. package/dist/chunk-T5AZMMVS.mjs.map +1 -0
  47. package/dist/{chunk-4BZATFKJ.mjs → chunk-UU33HCCZ.mjs} +4 -26
  48. package/dist/{chunk-4BZATFKJ.mjs.map → chunk-UU33HCCZ.mjs.map} +1 -1
  49. package/dist/{chunk-PTJ6AAI7.js → chunk-VGHLQXKB.js} +138 -106
  50. package/dist/chunk-VGHLQXKB.js.map +1 -0
  51. package/dist/chunk-W5ZEP3CI.mjs +100 -0
  52. package/dist/chunk-W5ZEP3CI.mjs.map +1 -0
  53. package/dist/chunk-Y666BJA5.mjs +4 -0
  54. package/dist/chunk-YN4436PK.mjs +37 -0
  55. package/dist/chunk-YN4436PK.mjs.map +1 -0
  56. package/dist/cli/index.d.mts +1 -0
  57. package/dist/cli/index.d.ts +1 -0
  58. package/dist/cli/index.js +106 -0
  59. package/dist/cli/index.js.map +1 -0
  60. package/dist/cli/index.mjs +106 -0
  61. package/dist/cli/index.mjs.map +1 -0
  62. package/dist/client-browser.js +15 -10
  63. package/dist/client-browser.js.map +1 -1
  64. package/dist/client-browser.mjs +9 -4
  65. package/dist/client-browser.mjs.map +1 -1
  66. package/dist/client-node.js +14 -9
  67. package/dist/client-node.js.map +1 -1
  68. package/dist/client-node.mjs +11 -6
  69. package/dist/client-node.mjs.map +1 -1
  70. package/dist/create-G5MTGOOH.js +70 -0
  71. package/dist/create-G5MTGOOH.js.map +1 -0
  72. package/dist/create-QUZYBMQB.mjs +70 -0
  73. package/dist/create-QUZYBMQB.mjs.map +1 -0
  74. package/dist/evaluation/index.js +5 -4
  75. package/dist/evaluation/index.js.map +1 -1
  76. package/dist/evaluation/index.mjs +4 -3
  77. package/dist/index.d.mts +21 -14
  78. package/dist/index.d.ts +21 -14
  79. package/dist/index.js +10 -7
  80. package/dist/index.js.map +1 -1
  81. package/dist/index.mjs +9 -6
  82. package/dist/init-H67RW22E.mjs +16 -0
  83. package/dist/init-H67RW22E.mjs.map +1 -0
  84. package/dist/init-XU2JFY6N.js +16 -0
  85. package/dist/init-XU2JFY6N.js.map +1 -0
  86. package/dist/list-7NPSX2E4.mjs +136 -0
  87. package/dist/list-7NPSX2E4.mjs.map +1 -0
  88. package/dist/list-ZXFLAF52.js +136 -0
  89. package/dist/list-ZXFLAF52.js.map +1 -0
  90. package/dist/login-76NQIHKR.js +110 -0
  91. package/dist/login-76NQIHKR.js.map +1 -0
  92. package/dist/login-EK4WVOI2.mjs +110 -0
  93. package/dist/login-EK4WVOI2.mjs.map +1 -0
  94. package/dist/observability/index.d.mts +3 -3
  95. package/dist/observability/index.d.ts +3 -3
  96. package/dist/observability/index.js +5 -4
  97. package/dist/observability/index.js.map +1 -1
  98. package/dist/observability/index.mjs +4 -3
  99. package/dist/observability/instrumentation/langchain/index.d.mts +2 -2
  100. package/dist/observability/instrumentation/langchain/index.d.ts +2 -2
  101. package/dist/observability/instrumentation/langchain/index.js +29 -27
  102. package/dist/observability/instrumentation/langchain/index.js.map +1 -1
  103. package/dist/observability/instrumentation/langchain/index.mjs +5 -3
  104. package/dist/observability/instrumentation/langchain/index.mjs.map +1 -1
  105. package/dist/prompt/index.d.mts +2 -2
  106. package/dist/prompt/index.d.ts +2 -2
  107. package/dist/prompt/index.js +8 -4
  108. package/dist/prompt/index.js.map +1 -1
  109. package/dist/prompt/index.mjs +10 -6
  110. package/dist/{prompt-BXJWdbQp.d.mts → prompt-D-jpMrLS.d.mts} +245 -0
  111. package/dist/{prompt-BXJWdbQp.d.ts → prompt-D-jpMrLS.d.ts} +245 -0
  112. package/dist/remove-SDJYEPAY.mjs +106 -0
  113. package/dist/remove-SDJYEPAY.mjs.map +1 -0
  114. package/dist/remove-XBNGIVMR.js +106 -0
  115. package/dist/remove-XBNGIVMR.js.map +1 -0
  116. package/dist/sync-EISKGPTL.js +403 -0
  117. package/dist/sync-EISKGPTL.js.map +1 -0
  118. package/dist/sync-ST2IWXSB.mjs +403 -0
  119. package/dist/sync-ST2IWXSB.mjs.map +1 -0
  120. package/dist/{trace-G2312klE.d.ts → trace-CqaKo0kZ.d.ts} +1 -1
  121. package/dist/{trace-D-bZOuqb.d.mts → trace-DtVc5GhF.d.mts} +1 -1
  122. package/package.json +23 -12
  123. package/dist/chunk-76KNOWLS.js +0 -39
  124. package/dist/chunk-76KNOWLS.js.map +0 -1
  125. package/dist/chunk-G3AUABT7.js +0 -4
  126. package/dist/chunk-OM7VY3XT.mjs +0 -4
  127. package/dist/chunk-PTJ6AAI7.js.map +0 -1
  128. package/dist/chunk-SVJ7SCGB.js.map +0 -1
  129. package/dist/chunk-VJSOCNPA.js.map +0 -1
  130. package/dist/chunk-X62YT4WB.mjs +0 -39
  131. package/dist/chunk-X62YT4WB.mjs.map +0 -1
  132. package/dist/chunk-Z5J5UI5E.mjs.map +0 -1
  133. /package/dist/{chunk-CSC3CMIT.mjs.map → chunk-STV4ZVNA.mjs.map} +0 -0
  134. /package/dist/{chunk-OM7VY3XT.mjs.map → chunk-Y666BJA5.mjs.map} +0 -0
@@ -0,0 +1,136 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkF6E4XQQUjs = require('./chunk-F6E4XQQU.js');
4
+
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/list.ts
13
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
14
+ var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
15
+ var stripAnsi = (str) => {
16
+ return str.replace(/\u001b\[[0-9;]*m/g, "");
17
+ };
18
+ var formatTable = (data, headers) => {
19
+ if (data.length === 0) {
20
+ console.log(_chalk2.default.gray("No prompts found"));
21
+ return;
22
+ }
23
+ const colWidths = {};
24
+ headers.forEach((header) => {
25
+ colWidths[header] = Math.max(
26
+ header.length,
27
+ ...data.map((row) => stripAnsi(row[header] || "").length)
28
+ );
29
+ });
30
+ const headerRow = headers.map((header) => _chalk2.default.bold(header.padEnd(colWidths[header]))).join(" ");
31
+ console.log(headerRow);
32
+ const separator = headers.map((header) => "\u2500".repeat(colWidths[header])).join(" ");
33
+ console.log(_chalk2.default.gray(separator));
34
+ data.forEach((row) => {
35
+ const dataRow = headers.map((header) => {
36
+ const value = row[header] || "";
37
+ const strippedLength = stripAnsi(value).length;
38
+ const paddingNeeded = colWidths[header] - strippedLength;
39
+ const paddedValue = value + " ".repeat(Math.max(0, paddingNeeded));
40
+ if (header === "Name") {
41
+ return _chalk2.default.cyan(paddedValue);
42
+ } else if (header === "Version") {
43
+ return _chalk2.default.green(paddedValue);
44
+ } else if (header === "Model") {
45
+ return _chalk2.default.yellow(paddedValue);
46
+ } else {
47
+ return _chalk2.default.gray(paddedValue);
48
+ }
49
+ }).join(" ");
50
+ console.log(dataRow);
51
+ });
52
+ };
53
+ var formatRelativeTime = (dateString) => {
54
+ const date = new Date(dateString);
55
+ const now = /* @__PURE__ */ new Date();
56
+ const diffMs = now.getTime() - date.getTime();
57
+ const seconds = Math.floor(diffMs / 1e3);
58
+ const minutes = Math.floor(seconds / 60);
59
+ const hours = Math.floor(minutes / 60);
60
+ const days = Math.floor(hours / 24);
61
+ const months = Math.floor(days / 30);
62
+ const years = Math.floor(days / 365);
63
+ if (years > 0) return `${years}y ago`;
64
+ if (months > 0) return `${months}mo ago`;
65
+ if (days > 0) return `${days}d ago`;
66
+ if (hours > 0) return `${hours}h ago`;
67
+ if (minutes > 0) return `${minutes}m ago`;
68
+ return `${seconds}s ago`;
69
+ };
70
+ var listCommand = async () => {
71
+ try {
72
+ _chunkF6E4XQQUjs.checkApiKey.call(void 0, );
73
+ const promptService = _chunkVGHLQXKBjs.PromptService.getInstance();
74
+ const spinner = _ora2.default.call(void 0, "Fetching prompts from server...").start();
75
+ try {
76
+ const allPrompts = await promptService.getAll();
77
+ const prompts = allPrompts.filter((prompt) => prompt.version);
78
+ const draftPrompts = allPrompts.filter((prompt) => !prompt.version);
79
+ spinner.succeed(
80
+ `Found ${prompts.length} published prompt${prompts.length !== 1 ? "s" : ""} ` + _chalk2.default.gray(
81
+ `(+${draftPrompts.length} draft${draftPrompts.length !== 1 ? "s" : ""})`
82
+ )
83
+ );
84
+ if (prompts.length === 0) {
85
+ console.log();
86
+ console.log(_chalk2.default.gray("No prompts found on the server."));
87
+ console.log(_chalk2.default.gray("Create your first prompt with:"));
88
+ console.log(_chalk2.default.cyan(" langwatch prompt init"));
89
+ return;
90
+ }
91
+ console.log();
92
+ const tableData = prompts.map((prompt) => ({
93
+ Name: prompt.handle || `${prompt.name} ` + _chalk2.default.gray(`(${prompt.id})`),
94
+ Version: prompt.version ? `${prompt.version}` : "N/A",
95
+ Model: prompt.model || "N/A",
96
+ Updated: formatRelativeTime(prompt.updatedAt)
97
+ }));
98
+ formatTable(tableData, ["Name", "Version", "Model", "Updated"]);
99
+ console.log();
100
+ console.log(
101
+ _chalk2.default.gray(
102
+ `Use ${_chalk2.default.cyan(
103
+ "langwatch prompt add <name>"
104
+ )} to add a prompt to your project`
105
+ )
106
+ );
107
+ } catch (error) {
108
+ spinner.fail();
109
+ if (error instanceof _chunkVGHLQXKBjs.PromptsError) {
110
+ console.error(_chalk2.default.red(`Error: ${error.message}`));
111
+ } else {
112
+ console.error(
113
+ _chalk2.default.red(
114
+ `Error fetching prompts: ${error instanceof Error ? error.message : "Unknown error"}`
115
+ )
116
+ );
117
+ }
118
+ process.exit(1);
119
+ }
120
+ } catch (error) {
121
+ if (error instanceof _chunkVGHLQXKBjs.PromptsError) {
122
+ console.error(_chalk2.default.red(`Error: ${error.message}`));
123
+ } else {
124
+ console.error(
125
+ _chalk2.default.red(
126
+ `Unexpected error: ${error instanceof Error ? error.message : "Unknown error"}`
127
+ )
128
+ );
129
+ }
130
+ process.exit(1);
131
+ }
132
+ };
133
+
134
+
135
+ exports.listCommand = listCommand;
136
+ //# sourceMappingURL=list-ZXFLAF52.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/list-ZXFLAF52.js","../src/cli/commands/list.ts"],"names":[],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/list-ZXFLAF52.js","sourcesContent":[null,"import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { PromptService, PromptsError } from \"../../prompt/service\";\nimport { checkApiKey } from \"../utils/apiKey\";\n\n// Helper to strip ANSI codes for length calculation\nconst stripAnsi = (str: string): string => {\n return str.replace(/\\u001b\\[[0-9;]*m/g, \"\");\n};\n\n// Simple table formatting helper\nconst formatTable = (\n data: Array<Record<string, string>>,\n headers: string[],\n): void => {\n if (data.length === 0) {\n console.log(chalk.gray(\"No prompts found\"));\n return;\n }\n\n // Calculate column widths (strip ANSI codes for accurate length calculation)\n const colWidths: Record<string, number> = {};\n headers.forEach((header) => {\n colWidths[header] = Math.max(\n header.length,\n ...data.map((row) => stripAnsi(row[header] || \"\").length),\n );\n });\n\n // Print header\n const headerRow = headers\n .map((header) => chalk.bold(header.padEnd(colWidths[header]!)))\n .join(\" \");\n console.log(headerRow);\n\n // Print separator\n const separator = headers\n .map((header) => \"─\".repeat(colWidths[header]!))\n .join(\" \");\n console.log(chalk.gray(separator));\n\n // Print data rows\n data.forEach((row) => {\n const dataRow = headers\n .map((header) => {\n const value = row[header] || \"\";\n const strippedLength = stripAnsi(value).length;\n const paddingNeeded = colWidths[header]! - strippedLength;\n const paddedValue = value + \" \".repeat(Math.max(0, paddingNeeded));\n\n // Color coding\n if (header === \"Name\") {\n return chalk.cyan(paddedValue);\n } else if (header === \"Version\") {\n return chalk.green(paddedValue);\n } else if (header === \"Model\") {\n return chalk.yellow(paddedValue);\n } else {\n return chalk.gray(paddedValue);\n }\n })\n .join(\" \");\n console.log(dataRow);\n });\n};\n\nconst formatRelativeTime = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n\n const seconds = Math.floor(diffMs / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const months = Math.floor(days / 30);\n const years = Math.floor(days / 365);\n\n if (years > 0) return `${years}y ago`;\n if (months > 0) return `${months}mo ago`;\n if (days > 0) return `${days}d ago`;\n if (hours > 0) return `${hours}h ago`;\n if (minutes > 0) return `${minutes}m ago`;\n return `${seconds}s ago`;\n};\n\nexport const listCommand = async (): Promise<void> => {\n try {\n // Check API key before doing anything else\n checkApiKey();\n\n // Get prompt service\n const promptService = PromptService.getInstance();\n\n const spinner = ora(\"Fetching prompts from server...\").start();\n\n try {\n // Fetch all prompts\n const allPrompts = await promptService.getAll();\n const prompts = allPrompts.filter((prompt) => prompt.version);\n const draftPrompts = allPrompts.filter((prompt) => !prompt.version);\n\n spinner.succeed(\n `Found ${prompts.length} published prompt${prompts.length !== 1 ? \"s\" : \"\"} ` +\n chalk.gray(\n `(+${draftPrompts.length} draft${\n draftPrompts.length !== 1 ? \"s\" : \"\"\n })`,\n ),\n );\n\n if (prompts.length === 0) {\n console.log();\n console.log(chalk.gray(\"No prompts found on the server.\"));\n console.log(chalk.gray(\"Create your first prompt with:\"));\n console.log(chalk.cyan(\" langwatch prompt init\"));\n return;\n }\n\n console.log();\n\n // Format prompts for table display\n const tableData = prompts.map((prompt) => ({\n Name: prompt.handle || `${prompt.name} ` + chalk.gray(`(${prompt.id})`),\n Version: prompt.version ? `${prompt.version}` : \"N/A\",\n Model: prompt.model || \"N/A\",\n Updated: formatRelativeTime(prompt.updatedAt),\n }));\n\n // Display table\n formatTable(tableData, [\"Name\", \"Version\", \"Model\", \"Updated\"]);\n\n console.log();\n console.log(\n chalk.gray(\n `Use ${chalk.cyan(\n \"langwatch prompt add <name>\",\n )} to add a prompt to your project`,\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 fetching prompts: ${\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"]}
@@ -0,0 +1,110 @@
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 _chunkPCQVQ7SBjs = require('./chunk-PCQVQ7SB.js');
4
+ require('./chunk-FJLK5CFL.js');
5
+
6
+ // src/cli/commands/login.ts
7
+ var _fs = require('fs'); var fs = _interopRequireWildcard(_fs);
8
+ var _path = require('path'); var path = _interopRequireWildcard(_path);
9
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
10
+ var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
11
+ var _prompts = require('prompts'); var _prompts2 = _interopRequireDefault(_prompts);
12
+ var updateEnvFile = (apiKey) => {
13
+ const envPath = path.join(process.cwd(), ".env");
14
+ if (!fs.existsSync(envPath)) {
15
+ fs.writeFileSync(envPath, `LANGWATCH_API_KEY=${apiKey}
16
+ `);
17
+ return { created: true, updated: false, path: envPath };
18
+ }
19
+ const content = fs.readFileSync(envPath, "utf-8");
20
+ const lines = content.split("\n");
21
+ let found = false;
22
+ const updatedLines = lines.map((line) => {
23
+ if (line.startsWith("LANGWATCH_API_KEY=")) {
24
+ found = true;
25
+ return `LANGWATCH_API_KEY=${apiKey}`;
26
+ }
27
+ return line;
28
+ });
29
+ if (!found) {
30
+ if (content.endsWith("\n") || content === "") {
31
+ updatedLines.push(`LANGWATCH_API_KEY=${apiKey}`);
32
+ } else {
33
+ updatedLines.push("", `LANGWATCH_API_KEY=${apiKey}`);
34
+ }
35
+ }
36
+ fs.writeFileSync(envPath, updatedLines.join("\n"));
37
+ return { created: false, updated: found, path: envPath };
38
+ };
39
+ var loginCommand = async () => {
40
+ try {
41
+ console.log(_chalk2.default.blue("\u{1F510} LangWatch Login"));
42
+ console.log(
43
+ _chalk2.default.gray(
44
+ "This will open your browser to get an API key from LangWatch."
45
+ )
46
+ );
47
+ console.log();
48
+ const endpoint = _chunkPCQVQ7SBjs.getEndpoint.call(void 0, );
49
+ const authUrl = `${endpoint}/authorize`;
50
+ console.log(_chalk2.default.cyan(`Opening: ${authUrl}`));
51
+ const spinner = _ora2.default.call(void 0, "Opening browser...").start();
52
+ try {
53
+ const open = (await Promise.resolve().then(() => _interopRequireWildcard(require("open")))).default;
54
+ await open(authUrl);
55
+ spinner.succeed("Browser opened");
56
+ } catch (error) {
57
+ spinner.fail("Failed to open browser");
58
+ console.log(_chalk2.default.yellow(`Please manually open: ${_chalk2.default.cyan(authUrl)}`));
59
+ }
60
+ console.log();
61
+ console.log(_chalk2.default.gray("1. Log in to LangWatch in your browser"));
62
+ console.log(_chalk2.default.gray("2. Copy your API key"));
63
+ console.log(_chalk2.default.gray("3. Come back here and paste it"));
64
+ console.log();
65
+ const response = await _prompts2.default.call(void 0, {
66
+ type: "password",
67
+ name: "apiKey",
68
+ message: "Paste your API key here:",
69
+ validate: (value) => {
70
+ if (!value || value.trim() === "") {
71
+ return "API key is required";
72
+ }
73
+ if (value.length < 10) {
74
+ return "API key seems too short. Please check and try again.";
75
+ }
76
+ return true;
77
+ }
78
+ });
79
+ if (!response.apiKey) {
80
+ console.log(_chalk2.default.yellow("Login cancelled"));
81
+ process.exit(0);
82
+ }
83
+ const apiKey = response.apiKey.trim();
84
+ const envResult = updateEnvFile(apiKey);
85
+ console.log();
86
+ console.log(_chalk2.default.green("\u2713 API key saved successfully!"));
87
+ if (envResult.created) {
88
+ console.log(_chalk2.default.gray(`\u2022 Created .env file with your API key`));
89
+ } else if (envResult.updated) {
90
+ console.log(_chalk2.default.gray(`\u2022 Updated existing API key in .env file`));
91
+ } else {
92
+ console.log(_chalk2.default.gray(`\u2022 Added API key to existing .env file`));
93
+ }
94
+ console.log();
95
+ console.log(_chalk2.default.green("\u{1F389} You're all set! You can now use:"));
96
+ console.log(_chalk2.default.cyan(" langwatch prompt add <name>"));
97
+ console.log(_chalk2.default.cyan(" langwatch prompt sync"));
98
+ } catch (error) {
99
+ console.error(
100
+ _chalk2.default.red(
101
+ `Error during login: ${error instanceof Error ? error.message : "Unknown error"}`
102
+ )
103
+ );
104
+ process.exit(1);
105
+ }
106
+ };
107
+
108
+
109
+ exports.loginCommand = loginCommand;
110
+ //# sourceMappingURL=login-76NQIHKR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/login-76NQIHKR.js","../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACA;ACLA,+DAAoB;AACpB,uEAAsB;AACtB,4EAAkB;AAClB,oEAAgB;AAChB,oFAAoB;AAGpB,IAAM,cAAA,EAAgB,CACpB,MAAA,EAAA,GACyD;AACzD,EAAA,MAAM,QAAA,EAAe,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA;AAG/C,EAAA,GAAA,CAAI,CAAI,EAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAE3B,IAAG,EAAA,CAAA,aAAA,CAAc,OAAA,EAAS,CAAA,kBAAA,EAAqB,MAAM,CAAA;AAAA,CAAI,CAAA;AACzD,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,QAAQ,CAAA;AAAA,EACxD;AAGA,EAAA,MAAM,QAAA,EAAa,EAAA,CAAA,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAChD,EAAA,MAAM,MAAA,EAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAGhC,EAAA,IAAI,MAAA,EAAQ,KAAA;AACZ,EAAA,MAAM,aAAA,EAAe,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS;AACvC,IAAA,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACzC,MAAA,MAAA,EAAQ,IAAA;AACR,MAAA,OAAO,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAA;AACpC,IAAA;AACO,IAAA;AACR,EAAA;AAEW,EAAA;AAEoB,IAAA;AACV,MAAA;AACb,IAAA;AACiB,MAAA;AACxB,IAAA;AACF,EAAA;AAEuC,EAAA;AACL,EAAA;AACpC;AAEuD;AACjD,EAAA;AACqB,IAAA;AACf,IAAA;AACA,MAAA;AACJ,QAAA;AACF,MAAA;AACF,IAAA;AACY,IAAA;AAGiB,IAAA;AACF,IAAA;AAEQ,IAAA;AAGf,IAAA;AAEhB,IAAA;AAC+B,MAAA;AACf,MAAA;AACc,MAAA;AAClB,IAAA;AACD,MAAA;AACY,MAAA;AAC3B,IAAA;AAEY,IAAA;AACW,IAAA;AACA,IAAA;AACA,IAAA;AACX,IAAA;AAGmB,IAAA;AACvB,MAAA;AACA,MAAA;AACG,MAAA;AACoB,MAAA;AACI,QAAA;AACtB,UAAA;AACT,QAAA;AACuB,QAAA;AACd,UAAA;AACT,QAAA;AACO,QAAA;AACT,MAAA;AACD,IAAA;AAEqB,IAAA;AACK,MAAA;AACX,MAAA;AAChB,IAAA;AAEoC,IAAA;AAGJ,IAAA;AAEpB,IAAA;AACY,IAAA;AAED,IAAA;AACE,MAAA;AACK,IAAA;AACL,MAAA;AAClB,IAAA;AACkB,MAAA;AACzB,IAAA;AAEY,IAAA;AACY,IAAA;AACD,IAAA;AACA,IAAA;AACT,EAAA;AACN,IAAA;AACA,MAAA;AAEF,QAAA;AAEJ,MAAA;AACF,IAAA;AACc,IAAA;AAChB,EAAA;AACF;ADzByC;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/login-76NQIHKR.js","sourcesContent":[null,"import * as fs from \"fs\";\nimport * as path from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\nimport { getEndpoint } from \"../../client\";\n\nconst updateEnvFile = (\n apiKey: string,\n): { created: boolean; updated: boolean; path: string } => {\n const envPath = path.join(process.cwd(), \".env\");\n\n // Check if .env exists\n if (!fs.existsSync(envPath)) {\n // Create new .env file\n fs.writeFileSync(envPath, `LANGWATCH_API_KEY=${apiKey}\\n`);\n return { created: true, updated: false, path: envPath };\n }\n\n // Read existing .env file\n const content = fs.readFileSync(envPath, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n // Check if LANGWATCH_API_KEY already exists and update it\n let found = false;\n const updatedLines = lines.map((line) => {\n if (line.startsWith(\"LANGWATCH_API_KEY=\")) {\n found = true;\n return `LANGWATCH_API_KEY=${apiKey}`;\n }\n return line;\n });\n\n if (!found) {\n // Add to end of file\n if (content.endsWith(\"\\n\") || content === \"\") {\n updatedLines.push(`LANGWATCH_API_KEY=${apiKey}`);\n } else {\n updatedLines.push(\"\", `LANGWATCH_API_KEY=${apiKey}`);\n }\n }\n\n fs.writeFileSync(envPath, updatedLines.join(\"\\n\"));\n return { created: false, updated: found, path: envPath };\n};\n\nexport const loginCommand = async (): Promise<void> => {\n try {\n console.log(chalk.blue(\"🔐 LangWatch Login\"));\n console.log(\n chalk.gray(\n \"This will open your browser to get an API key from LangWatch.\",\n ),\n );\n console.log();\n\n // Get the authorization URL\n const endpoint = getEndpoint();\n const authUrl = `${endpoint}/authorize`;\n\n console.log(chalk.cyan(`Opening: ${authUrl}`));\n\n // Open browser\n const spinner = ora(\"Opening browser...\").start();\n\n try {\n const open = (await import(\"open\")).default;\n await open(authUrl);\n spinner.succeed(\"Browser opened\");\n } catch (error) {\n spinner.fail(\"Failed to open browser\");\n console.log(chalk.yellow(`Please manually open: ${chalk.cyan(authUrl)}`));\n }\n\n console.log();\n console.log(chalk.gray(\"1. Log in to LangWatch in your browser\"));\n console.log(chalk.gray(\"2. Copy your API key\"));\n console.log(chalk.gray(\"3. Come back here and paste it\"));\n console.log();\n\n // Wait for user input using prompts library\n const response = await prompts({\n type: \"password\",\n name: \"apiKey\",\n message: \"Paste your API key here:\",\n validate: (value: string) => {\n if (!value || value.trim() === \"\") {\n return \"API key is required\";\n }\n if (value.length < 10) {\n return \"API key seems too short. Please check and try again.\";\n }\n return true;\n },\n });\n\n if (!response.apiKey) {\n console.log(chalk.yellow(\"Login cancelled\"));\n process.exit(0);\n }\n\n const apiKey = response.apiKey.trim();\n\n // Save to .env file\n const envResult = updateEnvFile(apiKey);\n\n console.log();\n console.log(chalk.green(\"✓ API key saved successfully!\"));\n\n if (envResult.created) {\n console.log(chalk.gray(`• Created .env file with your API key`));\n } else if (envResult.updated) {\n console.log(chalk.gray(`• Updated existing API key in .env file`));\n } else {\n console.log(chalk.gray(`• Added API key to existing .env file`));\n }\n\n console.log();\n console.log(chalk.green(\"🎉 You're all set! You can now use:\"));\n console.log(chalk.cyan(\" langwatch prompt add <name>\"));\n console.log(chalk.cyan(\" langwatch prompt sync\"));\n } catch (error) {\n console.error(\n chalk.red(\n `Error during login: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n ),\n );\n process.exit(1);\n }\n};\n"]}
@@ -0,0 +1,110 @@
1
+ import {
2
+ getEndpoint
3
+ } from "./chunk-QEWDG5QE.mjs";
4
+ import "./chunk-YN4436PK.mjs";
5
+
6
+ // src/cli/commands/login.ts
7
+ import * as fs from "fs";
8
+ import * as path from "path";
9
+ import chalk from "chalk";
10
+ import ora from "ora";
11
+ import prompts from "prompts";
12
+ var updateEnvFile = (apiKey) => {
13
+ const envPath = path.join(process.cwd(), ".env");
14
+ if (!fs.existsSync(envPath)) {
15
+ fs.writeFileSync(envPath, `LANGWATCH_API_KEY=${apiKey}
16
+ `);
17
+ return { created: true, updated: false, path: envPath };
18
+ }
19
+ const content = fs.readFileSync(envPath, "utf-8");
20
+ const lines = content.split("\n");
21
+ let found = false;
22
+ const updatedLines = lines.map((line) => {
23
+ if (line.startsWith("LANGWATCH_API_KEY=")) {
24
+ found = true;
25
+ return `LANGWATCH_API_KEY=${apiKey}`;
26
+ }
27
+ return line;
28
+ });
29
+ if (!found) {
30
+ if (content.endsWith("\n") || content === "") {
31
+ updatedLines.push(`LANGWATCH_API_KEY=${apiKey}`);
32
+ } else {
33
+ updatedLines.push("", `LANGWATCH_API_KEY=${apiKey}`);
34
+ }
35
+ }
36
+ fs.writeFileSync(envPath, updatedLines.join("\n"));
37
+ return { created: false, updated: found, path: envPath };
38
+ };
39
+ var loginCommand = async () => {
40
+ try {
41
+ console.log(chalk.blue("\u{1F510} LangWatch Login"));
42
+ console.log(
43
+ chalk.gray(
44
+ "This will open your browser to get an API key from LangWatch."
45
+ )
46
+ );
47
+ console.log();
48
+ const endpoint = getEndpoint();
49
+ const authUrl = `${endpoint}/authorize`;
50
+ console.log(chalk.cyan(`Opening: ${authUrl}`));
51
+ const spinner = ora("Opening browser...").start();
52
+ try {
53
+ const open = (await import("open")).default;
54
+ await open(authUrl);
55
+ spinner.succeed("Browser opened");
56
+ } catch (error) {
57
+ spinner.fail("Failed to open browser");
58
+ console.log(chalk.yellow(`Please manually open: ${chalk.cyan(authUrl)}`));
59
+ }
60
+ console.log();
61
+ console.log(chalk.gray("1. Log in to LangWatch in your browser"));
62
+ console.log(chalk.gray("2. Copy your API key"));
63
+ console.log(chalk.gray("3. Come back here and paste it"));
64
+ console.log();
65
+ const response = await prompts({
66
+ type: "password",
67
+ name: "apiKey",
68
+ message: "Paste your API key here:",
69
+ validate: (value) => {
70
+ if (!value || value.trim() === "") {
71
+ return "API key is required";
72
+ }
73
+ if (value.length < 10) {
74
+ return "API key seems too short. Please check and try again.";
75
+ }
76
+ return true;
77
+ }
78
+ });
79
+ if (!response.apiKey) {
80
+ console.log(chalk.yellow("Login cancelled"));
81
+ process.exit(0);
82
+ }
83
+ const apiKey = response.apiKey.trim();
84
+ const envResult = updateEnvFile(apiKey);
85
+ console.log();
86
+ console.log(chalk.green("\u2713 API key saved successfully!"));
87
+ if (envResult.created) {
88
+ console.log(chalk.gray(`\u2022 Created .env file with your API key`));
89
+ } else if (envResult.updated) {
90
+ console.log(chalk.gray(`\u2022 Updated existing API key in .env file`));
91
+ } else {
92
+ console.log(chalk.gray(`\u2022 Added API key to existing .env file`));
93
+ }
94
+ console.log();
95
+ console.log(chalk.green("\u{1F389} You're all set! You can now use:"));
96
+ console.log(chalk.cyan(" langwatch prompt add <name>"));
97
+ console.log(chalk.cyan(" langwatch prompt sync"));
98
+ } catch (error) {
99
+ console.error(
100
+ chalk.red(
101
+ `Error during login: ${error instanceof Error ? error.message : "Unknown error"}`
102
+ )
103
+ );
104
+ process.exit(1);
105
+ }
106
+ };
107
+ export {
108
+ loginCommand
109
+ };
110
+ //# sourceMappingURL=login-EK4WVOI2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/login.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\nimport { getEndpoint } from \"../../client\";\n\nconst updateEnvFile = (\n apiKey: string,\n): { created: boolean; updated: boolean; path: string } => {\n const envPath = path.join(process.cwd(), \".env\");\n\n // Check if .env exists\n if (!fs.existsSync(envPath)) {\n // Create new .env file\n fs.writeFileSync(envPath, `LANGWATCH_API_KEY=${apiKey}\\n`);\n return { created: true, updated: false, path: envPath };\n }\n\n // Read existing .env file\n const content = fs.readFileSync(envPath, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n // Check if LANGWATCH_API_KEY already exists and update it\n let found = false;\n const updatedLines = lines.map((line) => {\n if (line.startsWith(\"LANGWATCH_API_KEY=\")) {\n found = true;\n return `LANGWATCH_API_KEY=${apiKey}`;\n }\n return line;\n });\n\n if (!found) {\n // Add to end of file\n if (content.endsWith(\"\\n\") || content === \"\") {\n updatedLines.push(`LANGWATCH_API_KEY=${apiKey}`);\n } else {\n updatedLines.push(\"\", `LANGWATCH_API_KEY=${apiKey}`);\n }\n }\n\n fs.writeFileSync(envPath, updatedLines.join(\"\\n\"));\n return { created: false, updated: found, path: envPath };\n};\n\nexport const loginCommand = async (): Promise<void> => {\n try {\n console.log(chalk.blue(\"🔐 LangWatch Login\"));\n console.log(\n chalk.gray(\n \"This will open your browser to get an API key from LangWatch.\",\n ),\n );\n console.log();\n\n // Get the authorization URL\n const endpoint = getEndpoint();\n const authUrl = `${endpoint}/authorize`;\n\n console.log(chalk.cyan(`Opening: ${authUrl}`));\n\n // Open browser\n const spinner = ora(\"Opening browser...\").start();\n\n try {\n const open = (await import(\"open\")).default;\n await open(authUrl);\n spinner.succeed(\"Browser opened\");\n } catch (error) {\n spinner.fail(\"Failed to open browser\");\n console.log(chalk.yellow(`Please manually open: ${chalk.cyan(authUrl)}`));\n }\n\n console.log();\n console.log(chalk.gray(\"1. Log in to LangWatch in your browser\"));\n console.log(chalk.gray(\"2. Copy your API key\"));\n console.log(chalk.gray(\"3. Come back here and paste it\"));\n console.log();\n\n // Wait for user input using prompts library\n const response = await prompts({\n type: \"password\",\n name: \"apiKey\",\n message: \"Paste your API key here:\",\n validate: (value: string) => {\n if (!value || value.trim() === \"\") {\n return \"API key is required\";\n }\n if (value.length < 10) {\n return \"API key seems too short. Please check and try again.\";\n }\n return true;\n },\n });\n\n if (!response.apiKey) {\n console.log(chalk.yellow(\"Login cancelled\"));\n process.exit(0);\n }\n\n const apiKey = response.apiKey.trim();\n\n // Save to .env file\n const envResult = updateEnvFile(apiKey);\n\n console.log();\n console.log(chalk.green(\"✓ API key saved successfully!\"));\n\n if (envResult.created) {\n console.log(chalk.gray(`• Created .env file with your API key`));\n } else if (envResult.updated) {\n console.log(chalk.gray(`• Updated existing API key in .env file`));\n } else {\n console.log(chalk.gray(`• Added API key to existing .env file`));\n }\n\n console.log();\n console.log(chalk.green(\"🎉 You're all set! You can now use:\"));\n console.log(chalk.cyan(\" langwatch prompt add <name>\"));\n console.log(chalk.cyan(\" langwatch prompt sync\"));\n } catch (error) {\n console.error(\n chalk.red(\n `Error during login: ${\n error instanceof Error ? error.message : \"Unknown error\"\n }`,\n ),\n );\n process.exit(1);\n }\n};\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
- import { V as VAL_GEN_AI_FINISH_REASONS, b as VAL_GEN_AI_FINISH_REASON_CONTENT_FILTER, c as VAL_GEN_AI_FINISH_REASON_ERROR, d as VAL_GEN_AI_FINISH_REASON_LENGTH, e as VAL_GEN_AI_FINISH_REASON_STOP, f as VAL_GEN_AI_FINISH_REASON_TOOL_CALLS, h as VAL_GEN_AI_SYSTEMS, i as VAL_GEN_AI_SYSTEM_ANTHROPIC, j as VAL_GEN_AI_SYSTEM_AWS_BEDROCK, k as VAL_GEN_AI_SYSTEM_AZURE_AI_INFERENCE, l as VAL_GEN_AI_SYSTEM_AZURE_AI_OPENAI, m as VAL_GEN_AI_SYSTEM_COHERE, n as VAL_GEN_AI_SYSTEM_DEEPSEEK, o as VAL_GEN_AI_SYSTEM_GCP_GEMINI, p as VAL_GEN_AI_SYSTEM_GCP_GEN_AI, q as VAL_GEN_AI_SYSTEM_GCP_VERTEX_AI, r as VAL_GEN_AI_SYSTEM_GROQ, s as VAL_GEN_AI_SYSTEM_IBM_WATSONX_AI, t as VAL_GEN_AI_SYSTEM_MISTRAL_AI, u as VAL_GEN_AI_SYSTEM_OPENAI, v as VAL_GEN_AI_SYSTEM_PERPLEXITY, w as VAL_GEN_AI_SYSTEM_XAI } from '../trace-D-bZOuqb.mjs';
2
- export { L as LangWatchSpan, C as LangWatchSpanGenAIAssistantMessageEventBody, E as LangWatchSpanGenAIChoiceEventBody, A as LangWatchSpanGenAISystemMessageEventBody, D as LangWatchSpanGenAIToolMessageEventBody, B as LangWatchSpanGenAIUserMessageEventBody, z as LangWatchSpanMetrics, y as LangWatchSpanRAGContext, a as LangWatchTracer, S as SpanType, F as createLangWatchSpan, g as getLangWatchTracer, x as spanTypes } from '../trace-D-bZOuqb.mjs';
1
+ import { V as VAL_GEN_AI_FINISH_REASONS, b as VAL_GEN_AI_FINISH_REASON_CONTENT_FILTER, c as VAL_GEN_AI_FINISH_REASON_ERROR, d as VAL_GEN_AI_FINISH_REASON_LENGTH, e as VAL_GEN_AI_FINISH_REASON_STOP, f as VAL_GEN_AI_FINISH_REASON_TOOL_CALLS, h as VAL_GEN_AI_SYSTEMS, i as VAL_GEN_AI_SYSTEM_ANTHROPIC, j as VAL_GEN_AI_SYSTEM_AWS_BEDROCK, k as VAL_GEN_AI_SYSTEM_AZURE_AI_INFERENCE, l as VAL_GEN_AI_SYSTEM_AZURE_AI_OPENAI, m as VAL_GEN_AI_SYSTEM_COHERE, n as VAL_GEN_AI_SYSTEM_DEEPSEEK, o as VAL_GEN_AI_SYSTEM_GCP_GEMINI, p as VAL_GEN_AI_SYSTEM_GCP_GEN_AI, q as VAL_GEN_AI_SYSTEM_GCP_VERTEX_AI, r as VAL_GEN_AI_SYSTEM_GROQ, s as VAL_GEN_AI_SYSTEM_IBM_WATSONX_AI, t as VAL_GEN_AI_SYSTEM_MISTRAL_AI, u as VAL_GEN_AI_SYSTEM_OPENAI, v as VAL_GEN_AI_SYSTEM_PERPLEXITY, w as VAL_GEN_AI_SYSTEM_XAI } from '../trace-DtVc5GhF.mjs';
2
+ export { L as LangWatchSpan, C as LangWatchSpanGenAIAssistantMessageEventBody, E as LangWatchSpanGenAIChoiceEventBody, A as LangWatchSpanGenAISystemMessageEventBody, D as LangWatchSpanGenAIToolMessageEventBody, B as LangWatchSpanGenAIUserMessageEventBody, z as LangWatchSpanMetrics, y as LangWatchSpanRAGContext, a as LangWatchTracer, S as SpanType, F as createLangWatchSpan, g as getLangWatchTracer, x as spanTypes } from '../trace-DtVc5GhF.mjs';
3
3
  export { F as FilterableBatchSpanProcessor, S as SpanProcessingExcludeRule } from '../filterable-batch-span-processor-zO5kcjBY.mjs';
4
4
  import '@opentelemetry/api';
5
5
  import '../record-evaluation-CmxMXa-3.mjs';
6
- import '../prompt-BXJWdbQp.mjs';
6
+ import '../prompt-D-jpMrLS.mjs';
7
7
  import '@opentelemetry/sdk-trace-base';
8
8
 
9
9
  /**
@@ -1,9 +1,9 @@
1
- import { V as VAL_GEN_AI_FINISH_REASONS, b as VAL_GEN_AI_FINISH_REASON_CONTENT_FILTER, c as VAL_GEN_AI_FINISH_REASON_ERROR, d as VAL_GEN_AI_FINISH_REASON_LENGTH, e as VAL_GEN_AI_FINISH_REASON_STOP, f as VAL_GEN_AI_FINISH_REASON_TOOL_CALLS, h as VAL_GEN_AI_SYSTEMS, i as VAL_GEN_AI_SYSTEM_ANTHROPIC, j as VAL_GEN_AI_SYSTEM_AWS_BEDROCK, k as VAL_GEN_AI_SYSTEM_AZURE_AI_INFERENCE, l as VAL_GEN_AI_SYSTEM_AZURE_AI_OPENAI, m as VAL_GEN_AI_SYSTEM_COHERE, n as VAL_GEN_AI_SYSTEM_DEEPSEEK, o as VAL_GEN_AI_SYSTEM_GCP_GEMINI, p as VAL_GEN_AI_SYSTEM_GCP_GEN_AI, q as VAL_GEN_AI_SYSTEM_GCP_VERTEX_AI, r as VAL_GEN_AI_SYSTEM_GROQ, s as VAL_GEN_AI_SYSTEM_IBM_WATSONX_AI, t as VAL_GEN_AI_SYSTEM_MISTRAL_AI, u as VAL_GEN_AI_SYSTEM_OPENAI, v as VAL_GEN_AI_SYSTEM_PERPLEXITY, w as VAL_GEN_AI_SYSTEM_XAI } from '../trace-G2312klE.js';
2
- export { L as LangWatchSpan, C as LangWatchSpanGenAIAssistantMessageEventBody, E as LangWatchSpanGenAIChoiceEventBody, A as LangWatchSpanGenAISystemMessageEventBody, D as LangWatchSpanGenAIToolMessageEventBody, B as LangWatchSpanGenAIUserMessageEventBody, z as LangWatchSpanMetrics, y as LangWatchSpanRAGContext, a as LangWatchTracer, S as SpanType, F as createLangWatchSpan, g as getLangWatchTracer, x as spanTypes } from '../trace-G2312klE.js';
1
+ import { V as VAL_GEN_AI_FINISH_REASONS, b as VAL_GEN_AI_FINISH_REASON_CONTENT_FILTER, c as VAL_GEN_AI_FINISH_REASON_ERROR, d as VAL_GEN_AI_FINISH_REASON_LENGTH, e as VAL_GEN_AI_FINISH_REASON_STOP, f as VAL_GEN_AI_FINISH_REASON_TOOL_CALLS, h as VAL_GEN_AI_SYSTEMS, i as VAL_GEN_AI_SYSTEM_ANTHROPIC, j as VAL_GEN_AI_SYSTEM_AWS_BEDROCK, k as VAL_GEN_AI_SYSTEM_AZURE_AI_INFERENCE, l as VAL_GEN_AI_SYSTEM_AZURE_AI_OPENAI, m as VAL_GEN_AI_SYSTEM_COHERE, n as VAL_GEN_AI_SYSTEM_DEEPSEEK, o as VAL_GEN_AI_SYSTEM_GCP_GEMINI, p as VAL_GEN_AI_SYSTEM_GCP_GEN_AI, q as VAL_GEN_AI_SYSTEM_GCP_VERTEX_AI, r as VAL_GEN_AI_SYSTEM_GROQ, s as VAL_GEN_AI_SYSTEM_IBM_WATSONX_AI, t as VAL_GEN_AI_SYSTEM_MISTRAL_AI, u as VAL_GEN_AI_SYSTEM_OPENAI, v as VAL_GEN_AI_SYSTEM_PERPLEXITY, w as VAL_GEN_AI_SYSTEM_XAI } from '../trace-CqaKo0kZ.js';
2
+ export { L as LangWatchSpan, C as LangWatchSpanGenAIAssistantMessageEventBody, E as LangWatchSpanGenAIChoiceEventBody, A as LangWatchSpanGenAISystemMessageEventBody, D as LangWatchSpanGenAIToolMessageEventBody, B as LangWatchSpanGenAIUserMessageEventBody, z as LangWatchSpanMetrics, y as LangWatchSpanRAGContext, a as LangWatchTracer, S as SpanType, F as createLangWatchSpan, g as getLangWatchTracer, x as spanTypes } from '../trace-CqaKo0kZ.js';
3
3
  export { F as FilterableBatchSpanProcessor, S as SpanProcessingExcludeRule } from '../filterable-batch-span-processor-zO5kcjBY.js';
4
4
  import '@opentelemetry/api';
5
5
  import '../record-evaluation-CmxMXa-3.js';
6
- import '../prompt-BXJWdbQp.js';
6
+ import '../prompt-D-jpMrLS.js';
7
7
  import '@opentelemetry/sdk-trace-base';
8
8
 
9
9
  /**
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-G3AUABT7.js');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-2ODBGSBI.js');
2
2
 
3
3
 
4
4
  var _chunkKGDAENGDjs = require('../chunk-KGDAENGD.js');
@@ -6,15 +6,16 @@ var _chunkKGDAENGDjs = require('../chunk-KGDAENGD.js');
6
6
 
7
7
 
8
8
 
9
- var _chunkSVJ7SCGBjs = require('../chunk-SVJ7SCGB.js');
9
+ var _chunk52GXX3MAjs = require('../chunk-52GXX3MA.js');
10
10
 
11
11
 
12
- var _chunkVJSOCNPAjs = require('../chunk-VJSOCNPA.js');
12
+ var _chunkDTEKFQ4Ujs = require('../chunk-DTEKFQ4U.js');
13
+ require('../chunk-FJLK5CFL.js');
13
14
 
14
15
 
15
16
 
16
17
 
17
18
 
18
19
 
19
- exports.FilterableBatchSpanProcessor = _chunkKGDAENGDjs.FilterableBatchSpanProcessor; exports.createLangWatchSpan = _chunkSVJ7SCGBjs.createLangWatchSpan; exports.getLangWatchTracer = _chunkSVJ7SCGBjs.getLangWatchTracer; exports.semconv = _chunkVJSOCNPAjs.semconv_exports; exports.spanTypes = _chunkSVJ7SCGBjs.spanTypes;
20
+ exports.FilterableBatchSpanProcessor = _chunkKGDAENGDjs.FilterableBatchSpanProcessor; exports.createLangWatchSpan = _chunk52GXX3MAjs.createLangWatchSpan; exports.getLangWatchTracer = _chunk52GXX3MAjs.getLangWatchTracer; exports.semconv = _chunkDTEKFQ4Ujs.semconv_exports; exports.spanTypes = _chunk52GXX3MAjs.spanTypes;
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/observability/index.js"],"names":[],"mappings":"AAAA,yGAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,+TAAC","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/observability/index.js"}
1
+ {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/observability/index.js"],"names":[],"mappings":"AAAA,yGAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,+TAAC","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/observability/index.js"}
@@ -1,4 +1,4 @@
1
- import "../chunk-OM7VY3XT.mjs";
1
+ import "../chunk-Y666BJA5.mjs";
2
2
  import {
3
3
  FilterableBatchSpanProcessor
4
4
  } from "../chunk-PR3JDWC3.mjs";
@@ -6,10 +6,11 @@ import {
6
6
  createLangWatchSpan,
7
7
  getLangWatchTracer,
8
8
  spanTypes
9
- } from "../chunk-PMBEK6YE.mjs";
9
+ } from "../chunk-J7ICRUU4.mjs";
10
10
  import {
11
11
  semconv_exports
12
- } from "../chunk-4BZATFKJ.mjs";
12
+ } from "../chunk-UU33HCCZ.mjs";
13
+ import "../chunk-YN4436PK.mjs";
13
14
  export {
14
15
  FilterableBatchSpanProcessor,
15
16
  createLangWatchSpan,
@@ -1,4 +1,4 @@
1
- import { a as LangWatchTracer, L as LangWatchSpan } from '../../../trace-D-bZOuqb.mjs';
1
+ import { a as LangWatchTracer, L as LangWatchSpan } from '../../../trace-DtVc5GhF.mjs';
2
2
  import { AgentAction, AgentFinish } from '@langchain/core/agents';
3
3
  import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
4
4
  import { DocumentInterface } from '@langchain/core/documents';
@@ -8,7 +8,7 @@ import { LLMResult } from '@langchain/core/outputs';
8
8
  import { ChainValues } from '@langchain/core/utils/types';
9
9
  import '@opentelemetry/api';
10
10
  import '../../../record-evaluation-CmxMXa-3.mjs';
11
- import '../../../prompt-BXJWdbQp.mjs';
11
+ import '../../../prompt-D-jpMrLS.mjs';
12
12
 
13
13
  declare class LangWatchCallbackHandler extends BaseCallbackHandler {
14
14
  name: string;
@@ -1,4 +1,4 @@
1
- import { a as LangWatchTracer, L as LangWatchSpan } from '../../../trace-G2312klE.js';
1
+ import { a as LangWatchTracer, L as LangWatchSpan } from '../../../trace-CqaKo0kZ.js';
2
2
  import { AgentAction, AgentFinish } from '@langchain/core/agents';
3
3
  import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
4
4
  import { DocumentInterface } from '@langchain/core/documents';
@@ -8,7 +8,7 @@ import { LLMResult } from '@langchain/core/outputs';
8
8
  import { ChainValues } from '@langchain/core/utils/types';
9
9
  import '@opentelemetry/api';
10
10
  import '../../../record-evaluation-CmxMXa-3.js';
11
- import '../../../prompt-BXJWdbQp.js';
11
+ import '../../../prompt-D-jpMrLS.js';
12
12
 
13
13
  declare class LangWatchCallbackHandler extends BaseCallbackHandler {
14
14
  name: string;