@chanl/eval-cli 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agent-loader.d.ts +39 -0
  3. package/dist/agent-loader.d.ts.map +1 -0
  4. package/dist/agent-loader.js +166 -0
  5. package/dist/agent-loader.js.map +1 -0
  6. package/dist/analytics.d.ts +15 -0
  7. package/dist/analytics.d.ts.map +1 -0
  8. package/dist/analytics.js +94 -0
  9. package/dist/analytics.js.map +1 -0
  10. package/dist/assertions.d.ts +73 -0
  11. package/dist/assertions.d.ts.map +1 -0
  12. package/dist/assertions.js +282 -0
  13. package/dist/assertions.js.map +1 -0
  14. package/dist/baseline.d.ts +100 -0
  15. package/dist/baseline.d.ts.map +1 -0
  16. package/dist/baseline.js +327 -0
  17. package/dist/baseline.js.map +1 -0
  18. package/dist/bin/chanl.d.ts +3 -0
  19. package/dist/bin/chanl.d.ts.map +1 -0
  20. package/dist/bin/chanl.js +11 -0
  21. package/dist/bin/chanl.js.map +1 -0
  22. package/dist/client.d.ts +40 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +99 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/commands/analytics.d.ts +3 -0
  27. package/dist/commands/analytics.d.ts.map +1 -0
  28. package/dist/commands/analytics.js +44 -0
  29. package/dist/commands/analytics.js.map +1 -0
  30. package/dist/commands/compare.d.ts +51 -0
  31. package/dist/commands/compare.d.ts.map +1 -0
  32. package/dist/commands/compare.js +429 -0
  33. package/dist/commands/compare.js.map +1 -0
  34. package/dist/commands/config.d.ts +3 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/config.js +94 -0
  37. package/dist/commands/config.js.map +1 -0
  38. package/dist/commands/dataset.d.ts +6 -0
  39. package/dist/commands/dataset.d.ts.map +1 -0
  40. package/dist/commands/dataset.js +225 -0
  41. package/dist/commands/dataset.js.map +1 -0
  42. package/dist/commands/executions.d.ts +3 -0
  43. package/dist/commands/executions.d.ts.map +1 -0
  44. package/dist/commands/executions.js +249 -0
  45. package/dist/commands/executions.js.map +1 -0
  46. package/dist/commands/generate.d.ts +3 -0
  47. package/dist/commands/generate.d.ts.map +1 -0
  48. package/dist/commands/generate.js +159 -0
  49. package/dist/commands/generate.js.map +1 -0
  50. package/dist/commands/init.d.ts +29 -0
  51. package/dist/commands/init.d.ts.map +1 -0
  52. package/dist/commands/init.js +545 -0
  53. package/dist/commands/init.js.map +1 -0
  54. package/dist/commands/login.d.ts +3 -0
  55. package/dist/commands/login.d.ts.map +1 -0
  56. package/dist/commands/login.js +65 -0
  57. package/dist/commands/login.js.map +1 -0
  58. package/dist/commands/personas.d.ts +3 -0
  59. package/dist/commands/personas.d.ts.map +1 -0
  60. package/dist/commands/personas.js +269 -0
  61. package/dist/commands/personas.js.map +1 -0
  62. package/dist/commands/scenarios.d.ts +16 -0
  63. package/dist/commands/scenarios.d.ts.map +1 -0
  64. package/dist/commands/scenarios.js +755 -0
  65. package/dist/commands/scenarios.js.map +1 -0
  66. package/dist/commands/scorecards.d.ts +3 -0
  67. package/dist/commands/scorecards.d.ts.map +1 -0
  68. package/dist/commands/scorecards.js +220 -0
  69. package/dist/commands/scorecards.js.map +1 -0
  70. package/dist/commands/server.d.ts +8 -0
  71. package/dist/commands/server.d.ts.map +1 -0
  72. package/dist/commands/server.js +357 -0
  73. package/dist/commands/server.js.map +1 -0
  74. package/dist/commands/test.d.ts +3 -0
  75. package/dist/commands/test.d.ts.map +1 -0
  76. package/dist/commands/test.js +410 -0
  77. package/dist/commands/test.js.map +1 -0
  78. package/dist/commands/tool-fixtures.d.ts +3 -0
  79. package/dist/commands/tool-fixtures.d.ts.map +1 -0
  80. package/dist/commands/tool-fixtures.js +324 -0
  81. package/dist/commands/tool-fixtures.js.map +1 -0
  82. package/dist/config.d.ts +32 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +132 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/index.d.ts +8 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +146 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/output.d.ts +30 -0
  91. package/dist/output.d.ts.map +1 -0
  92. package/dist/output.js +77 -0
  93. package/dist/output.js.map +1 -0
  94. package/dist/update-check.d.ts +6 -0
  95. package/dist/update-check.d.ts.map +1 -0
  96. package/dist/update-check.js +50 -0
  97. package/dist/update-check.js.map +1 -0
  98. package/package.json +42 -0
package/dist/index.js ADDED
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ensureServerRunning = exports.track = exports.initAnalytics = exports.printOutput = exports.printJson = exports.printTable = exports.formatError = exports.del = exports.patch = exports.put = exports.post = exports.get = exports.createClient = exports.setConfig = exports.getConfig = exports.saveConfig = exports.loadConfig = void 0;
37
+ exports.createProgram = createProgram;
38
+ const commander_1 = require("commander");
39
+ const config_1 = require("./commands/config");
40
+ const login_1 = require("./commands/login");
41
+ const scenarios_1 = require("./commands/scenarios");
42
+ const personas_1 = require("./commands/personas");
43
+ const scorecards_1 = require("./commands/scorecards");
44
+ const server_1 = require("./commands/server");
45
+ const init_1 = require("./commands/init");
46
+ const analytics_1 = require("./commands/analytics");
47
+ const test_1 = require("./commands/test");
48
+ const compare_1 = require("./commands/compare");
49
+ const executions_1 = require("./commands/executions");
50
+ const tool_fixtures_1 = require("./commands/tool-fixtures");
51
+ const dataset_1 = require("./commands/dataset");
52
+ const generate_1 = require("./commands/generate");
53
+ const analytics_2 = require("./analytics");
54
+ const VERSION = '0.1.0';
55
+ function createProgram() {
56
+ const program = new commander_1.Command();
57
+ program
58
+ .name('chanl-eval')
59
+ .description('CLI for chanl-eval: AI agent testing framework')
60
+ .version(VERSION, '-v, --version', 'Output the current version')
61
+ .option('-f, --format <format>', 'Output format: table or json', 'table')
62
+ .option('--json', 'Shorthand for --format json');
63
+ // --json is a shorthand for --format json
64
+ program.hook('preAction', (_thisCommand, _actionCommand) => {
65
+ const opts = program.opts();
66
+ if (opts.json) {
67
+ opts.format = 'json';
68
+ }
69
+ });
70
+ // Initialize analytics on startup
71
+ (0, analytics_2.initAnalytics)();
72
+ // Register all command groups
73
+ (0, init_1.registerInitCommand)(program);
74
+ (0, init_1.registerTemplatesCommand)(program);
75
+ (0, config_1.registerConfigCommand)(program);
76
+ (0, login_1.registerLoginCommand)(program);
77
+ (0, scenarios_1.registerScenariosCommand)(program);
78
+ (0, personas_1.registerPersonasCommand)(program);
79
+ (0, scorecards_1.registerScorecardsCommand)(program);
80
+ (0, server_1.registerServerCommand)(program);
81
+ (0, analytics_1.registerAnalyticsCommand)(program);
82
+ (0, test_1.registerTestCommand)(program);
83
+ (0, compare_1.registerCompareCommand)(program);
84
+ (0, executions_1.registerExecutionsCommand)(program);
85
+ (0, tool_fixtures_1.registerToolFixturesCommand)(program);
86
+ (0, dataset_1.registerDatasetCommand)(program);
87
+ (0, generate_1.registerGenerateCommand)(program);
88
+ // Top-level `run` shortcut → delegates to scenarios run
89
+ program
90
+ .command('run [scenario]')
91
+ .description('Run a scenario (shortcut for "chanl scenarios run")')
92
+ .option('--prompt-id <promptId>', 'Prompt entity ID (defines the agent under test)')
93
+ .option('--agent <path>', 'Path to agent YAML file (test prompts without deploying)')
94
+ .option('--agent-id <agentId>', 'Override agent ID')
95
+ .option('--persona-id <personaId>', 'Override persona ID')
96
+ .option('--scorecard-id <scorecardId>', 'Override scorecard ID')
97
+ .option('--tools <ids>', 'Comma-separated tool fixture IDs to attach')
98
+ .option('--mode <mode>', 'Execution mode: text or phone', 'text')
99
+ .option('--dry-run', 'Dry run without actually executing')
100
+ .option('--no-wait', 'Do not wait for completion')
101
+ .option('--all', 'Run all active scenarios')
102
+ .action(async (scenario, options) => {
103
+ try {
104
+ await (0, scenarios_1.runScenarioAction)(scenario, options, program.opts().format);
105
+ (0, analytics_2.track)('cli_run', { shortcut: true });
106
+ }
107
+ catch (err) {
108
+ const { printError, } = await Promise.resolve().then(() => __importStar(require('./output')));
109
+ const { formatError } = await Promise.resolve().then(() => __importStar(require('./client')));
110
+ printError(formatError(err));
111
+ process.exit(1);
112
+ }
113
+ });
114
+ return program;
115
+ }
116
+ // When this module is run directly (via bin/chanl), parse argv
117
+ if (require.main === module) {
118
+ const program = createProgram();
119
+ program.parseAsync(process.argv).catch((err) => {
120
+ console.error(err);
121
+ process.exit(1);
122
+ });
123
+ }
124
+ var config_2 = require("./config");
125
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_2.loadConfig; } });
126
+ Object.defineProperty(exports, "saveConfig", { enumerable: true, get: function () { return config_2.saveConfig; } });
127
+ Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return config_2.getConfig; } });
128
+ Object.defineProperty(exports, "setConfig", { enumerable: true, get: function () { return config_2.setConfig; } });
129
+ var client_1 = require("./client");
130
+ Object.defineProperty(exports, "createClient", { enumerable: true, get: function () { return client_1.createClient; } });
131
+ Object.defineProperty(exports, "get", { enumerable: true, get: function () { return client_1.get; } });
132
+ Object.defineProperty(exports, "post", { enumerable: true, get: function () { return client_1.post; } });
133
+ Object.defineProperty(exports, "put", { enumerable: true, get: function () { return client_1.put; } });
134
+ Object.defineProperty(exports, "patch", { enumerable: true, get: function () { return client_1.patch; } });
135
+ Object.defineProperty(exports, "del", { enumerable: true, get: function () { return client_1.del; } });
136
+ Object.defineProperty(exports, "formatError", { enumerable: true, get: function () { return client_1.formatError; } });
137
+ var output_1 = require("./output");
138
+ Object.defineProperty(exports, "printTable", { enumerable: true, get: function () { return output_1.printTable; } });
139
+ Object.defineProperty(exports, "printJson", { enumerable: true, get: function () { return output_1.printJson; } });
140
+ Object.defineProperty(exports, "printOutput", { enumerable: true, get: function () { return output_1.printOutput; } });
141
+ var analytics_3 = require("./analytics");
142
+ Object.defineProperty(exports, "initAnalytics", { enumerable: true, get: function () { return analytics_3.initAnalytics; } });
143
+ Object.defineProperty(exports, "track", { enumerable: true, get: function () { return analytics_3.track; } });
144
+ var server_2 = require("./commands/server");
145
+ Object.defineProperty(exports, "ensureServerRunning", { enumerable: true, get: function () { return server_2.ensureServerRunning; } });
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Print data as a formatted table.
3
+ */
4
+ export declare function printTable(headers: string[], rows: string[][]): void;
5
+ /**
6
+ * Print data as formatted JSON.
7
+ */
8
+ export declare function printJson(data: any): void;
9
+ /**
10
+ * Print output based on the --format flag.
11
+ * If format is 'json', prints JSON. Otherwise prints a table.
12
+ */
13
+ export declare function printOutput(format: string | undefined, headers: string[], rows: string[][], data: any): void;
14
+ /**
15
+ * Print a success message.
16
+ */
17
+ export declare function printSuccess(message: string): void;
18
+ /**
19
+ * Print an error message and exit.
20
+ */
21
+ export declare function printError(message: string): void;
22
+ /**
23
+ * Print a warning message.
24
+ */
25
+ export declare function printWarning(message: string): void;
26
+ /**
27
+ * Truncate a string to a max length, adding ellipsis if needed.
28
+ */
29
+ export declare function truncate(str: string, maxLen: number): string;
30
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAcpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAEzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,IAAI,EAAE,GAAG,GACR,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI5D"}
package/dist/output.js ADDED
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printTable = printTable;
7
+ exports.printJson = printJson;
8
+ exports.printOutput = printOutput;
9
+ exports.printSuccess = printSuccess;
10
+ exports.printError = printError;
11
+ exports.printWarning = printWarning;
12
+ exports.truncate = truncate;
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const cli_table3_1 = __importDefault(require("cli-table3"));
15
+ /**
16
+ * Print data as a formatted table.
17
+ */
18
+ function printTable(headers, rows) {
19
+ const table = new cli_table3_1.default({
20
+ head: headers.map((h) => chalk_1.default.cyan(h)),
21
+ style: {
22
+ head: [],
23
+ border: [],
24
+ },
25
+ });
26
+ for (const row of rows) {
27
+ table.push(row);
28
+ }
29
+ console.log(table.toString());
30
+ }
31
+ /**
32
+ * Print data as formatted JSON.
33
+ */
34
+ function printJson(data) {
35
+ console.log(JSON.stringify(data, null, 2));
36
+ }
37
+ /**
38
+ * Print output based on the --format flag.
39
+ * If format is 'json', prints JSON. Otherwise prints a table.
40
+ */
41
+ function printOutput(format, headers, rows, data) {
42
+ if (format === 'json') {
43
+ printJson(data);
44
+ }
45
+ else {
46
+ printTable(headers, rows);
47
+ }
48
+ }
49
+ /**
50
+ * Print a success message.
51
+ */
52
+ function printSuccess(message) {
53
+ console.log(chalk_1.default.green('OK') + ' ' + message);
54
+ }
55
+ /**
56
+ * Print an error message and exit.
57
+ */
58
+ function printError(message) {
59
+ console.error(chalk_1.default.red('Error:') + ' ' + message);
60
+ }
61
+ /**
62
+ * Print a warning message.
63
+ */
64
+ function printWarning(message) {
65
+ console.log(chalk_1.default.yellow('Warning:') + ' ' + message);
66
+ }
67
+ /**
68
+ * Truncate a string to a max length, adding ellipsis if needed.
69
+ */
70
+ function truncate(str, maxLen) {
71
+ if (!str)
72
+ return '';
73
+ if (str.length <= maxLen)
74
+ return str;
75
+ return str.slice(0, maxLen - 3) + '...';
76
+ }
77
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";;;;;AAMA,gCAcC;AAKD,8BAEC;AAMD,kCAWC;AAKD,oCAEC;AAKD,gCAEC;AAKD,oCAEC;AAKD,4BAIC;AA1ED,kDAA0B;AAC1B,4DAA+B;AAE/B;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAiB,EAAE,IAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,EAAE;YACL,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACX;KACF,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,IAAS;IACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CACzB,MAA0B,EAC1B,OAAiB,EACjB,IAAgB,EAChB,IAAS;IAET,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,GAAW,EAAE,MAAc;IAClD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check for updates and print a message if one is available.
3
+ * Does not throw — silently no-ops on any error.
4
+ */
5
+ export declare function checkForUpdate(currentVersion: string): Promise<void>;
6
+ //# sourceMappingURL=update-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B1E"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.checkForUpdate = checkForUpdate;
7
+ /**
8
+ * Lightweight update check against GitHub Releases API.
9
+ * Non-blocking — fires and forgets. Prints a message if a newer version exists.
10
+ */
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const GITHUB_RELEASES_URL = 'https://api.github.com/repos/chanl-ai/chanl-eval/releases/latest';
13
+ function isNewer(latest, current) {
14
+ const parse = (v) => v.replace(/^v/, '').split('.').map(Number);
15
+ const [la, lb, lc] = parse(latest);
16
+ const [ca, cb, cc] = parse(current);
17
+ if (la !== ca)
18
+ return la > ca;
19
+ if (lb !== cb)
20
+ return lb > cb;
21
+ return lc > cc;
22
+ }
23
+ /**
24
+ * Check for updates and print a message if one is available.
25
+ * Does not throw — silently no-ops on any error.
26
+ */
27
+ async function checkForUpdate(currentVersion) {
28
+ try {
29
+ const controller = new AbortController();
30
+ const timeout = setTimeout(() => controller.abort(), 3000);
31
+ const res = await fetch(GITHUB_RELEASES_URL, {
32
+ headers: { Accept: 'application/vnd.github.v3+json' },
33
+ signal: controller.signal,
34
+ });
35
+ clearTimeout(timeout);
36
+ if (!res.ok)
37
+ return;
38
+ const data = (await res.json());
39
+ const latest = data.tag_name?.replace(/^v/, '') ?? '';
40
+ if (latest && isNewer(latest, currentVersion)) {
41
+ console.log('');
42
+ console.log(chalk_1.default.yellow(` Update available: ${currentVersion} → ${latest}`));
43
+ console.log(chalk_1.default.dim(' Run: docker compose pull && docker compose up --build'));
44
+ }
45
+ }
46
+ catch {
47
+ // Network error, timeout, etc. — silently ignore.
48
+ }
49
+ }
50
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":";;;;;AAuBA,wCA4BC;AAnDD;;;GAGG;AACH,kDAA0B;AAE1B,MAAM,mBAAmB,GACvB,kEAAkE,CAAC;AAErE,SAAS,OAAO,CAAC,MAAc,EAAE,OAAe;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAC1B,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC9B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,cAAc,CAAC,cAAsB;IACzD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mBAAmB,EAAE;YAC3C,OAAO,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE;YACrD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC;QAEtB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO;QAEpB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0B,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,uBAAuB,cAAc,MAAM,MAAM,EAAE,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@chanl/eval-cli",
3
+ "version": "0.4.0",
4
+ "description": "CLI for chanl-eval: manage scenarios, personas, scorecards",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "chanl-eval": "./dist/bin/chanl.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "license": "MIT",
17
+ "dependencies": {
18
+ "axios": "^1.6.0",
19
+ "dotenv": "^16.4.5",
20
+ "commander": "^12.0.0",
21
+ "chalk": "^4.1.2",
22
+ "cli-table3": "^0.6.0",
23
+ "ora": "^5.4.1",
24
+ "inquirer": "^8.0.0",
25
+ "js-yaml": "^4.1.0",
26
+ "@chanl/eval-sdk": "0.4.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/inquirer": "^9.0.0",
30
+ "@types/jest": "^29.0.0",
31
+ "@types/js-yaml": "^4.0.0",
32
+ "jest": "^29.0.0",
33
+ "ts-jest": "^29.0.0",
34
+ "typescript": "^5.0.0"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "test": "jest --passWithNoTests",
39
+ "test:cov": "jest --coverage --passWithNoTests",
40
+ "clean": "rm -rf dist"
41
+ }
42
+ }