@chatcops/cli 0.0.0-stage → 0.1.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -2
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +4 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/config.d.ts +53 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +55 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +8 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +7 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/main.d.ts +53 -0
  16. package/dist/main.d.ts.map +1 -0
  17. package/dist/main.js +247 -0
  18. package/dist/main.js.map +1 -0
  19. package/dist/test/assertions/index.d.ts +18 -0
  20. package/dist/test/assertions/index.d.ts.map +1 -0
  21. package/dist/test/assertions/index.js +50 -0
  22. package/dist/test/assertions/index.js.map +1 -0
  23. package/dist/test/assertions/javascript.d.ts +10 -0
  24. package/dist/test/assertions/javascript.d.ts.map +1 -0
  25. package/dist/test/assertions/javascript.js +51 -0
  26. package/dist/test/assertions/javascript.js.map +1 -0
  27. package/dist/test/assertions/judge.d.ts +8 -0
  28. package/dist/test/assertions/judge.d.ts.map +1 -0
  29. package/dist/test/assertions/judge.js +33 -0
  30. package/dist/test/assertions/judge.js.map +1 -0
  31. package/dist/test/assertions/parts.d.ts +12 -0
  32. package/dist/test/assertions/parts.d.ts.map +1 -0
  33. package/dist/test/assertions/parts.js +39 -0
  34. package/dist/test/assertions/parts.js.map +1 -0
  35. package/dist/test/assertions/text.d.ts +4 -0
  36. package/dist/test/assertions/text.d.ts.map +1 -0
  37. package/dist/test/assertions/text.js +10 -0
  38. package/dist/test/assertions/text.js.map +1 -0
  39. package/dist/test/assertions/tools.d.ts +13 -0
  40. package/dist/test/assertions/tools.d.ts.map +1 -0
  41. package/dist/test/assertions/tools.js +82 -0
  42. package/dist/test/assertions/tools.js.map +1 -0
  43. package/dist/test/assertions/usage.d.ts +8 -0
  44. package/dist/test/assertions/usage.d.ts.map +1 -0
  45. package/dist/test/assertions/usage.js +52 -0
  46. package/dist/test/assertions/usage.js.map +1 -0
  47. package/dist/test/assertions/values.d.ts +8 -0
  48. package/dist/test/assertions/values.d.ts.map +1 -0
  49. package/dist/test/assertions/values.js +19 -0
  50. package/dist/test/assertions/values.js.map +1 -0
  51. package/dist/test/cassette.d.ts +77 -0
  52. package/dist/test/cassette.d.ts.map +1 -0
  53. package/dist/test/cassette.js +236 -0
  54. package/dist/test/cassette.js.map +1 -0
  55. package/dist/test/command.d.ts +9 -0
  56. package/dist/test/command.d.ts.map +1 -0
  57. package/dist/test/command.js +139 -0
  58. package/dist/test/command.js.map +1 -0
  59. package/dist/test/cost.d.ts +26 -0
  60. package/dist/test/cost.d.ts.map +1 -0
  61. package/dist/test/cost.js +33 -0
  62. package/dist/test/cost.js.map +1 -0
  63. package/dist/test/judge.d.ts +32 -0
  64. package/dist/test/judge.d.ts.map +1 -0
  65. package/dist/test/judge.js +109 -0
  66. package/dist/test/judge.js.map +1 -0
  67. package/dist/test/load.d.ts +9 -0
  68. package/dist/test/load.d.ts.map +1 -0
  69. package/dist/test/load.js +98 -0
  70. package/dist/test/load.js.map +1 -0
  71. package/dist/test/reporters/index.d.ts +35 -0
  72. package/dist/test/reporters/index.d.ts.map +1 -0
  73. package/dist/test/reporters/index.js +11 -0
  74. package/dist/test/reporters/index.js.map +1 -0
  75. package/dist/test/reporters/json.d.ts +4 -0
  76. package/dist/test/reporters/json.d.ts.map +1 -0
  77. package/dist/test/reporters/json.js +8 -0
  78. package/dist/test/reporters/json.js.map +1 -0
  79. package/dist/test/reporters/pretty.d.ts +3 -0
  80. package/dist/test/reporters/pretty.d.ts.map +1 -0
  81. package/dist/test/reporters/pretty.js +119 -0
  82. package/dist/test/reporters/pretty.js.map +1 -0
  83. package/dist/test/run.d.ts +46 -0
  84. package/dist/test/run.d.ts.map +1 -0
  85. package/dist/test/run.js +157 -0
  86. package/dist/test/run.js.map +1 -0
  87. package/dist/test/types.d.ts +116 -0
  88. package/dist/test/types.d.ts.map +1 -0
  89. package/dist/test/types.js +2 -0
  90. package/dist/test/types.js.map +1 -0
  91. package/package.json +60 -3
@@ -0,0 +1,116 @@
1
+ import type { ToolResult } from '@chatcops/core';
2
+ /** One assertion, as written in a fixture: `{ contains: "$19" }`. */
3
+ export type Assertion = Record<string, unknown>;
4
+ export interface PageContext {
5
+ url: string;
6
+ title: string;
7
+ description?: string;
8
+ contentSnippet?: string;
9
+ }
10
+ export interface Turn {
11
+ user: string;
12
+ expect?: Assertion[];
13
+ }
14
+ export interface TestCase {
15
+ name: string;
16
+ tags?: string[];
17
+ locale?: string;
18
+ pageContext?: PageContext;
19
+ userData?: Record<string, string>;
20
+ /** Server tools answered with a fixed result instead of running. */
21
+ mocks?: {
22
+ tools?: Record<string, ToolResult>;
23
+ };
24
+ turns: Turn[];
25
+ /** Run the test this many times. Default 1. */
26
+ repeat?: number;
27
+ /** Share of repeats that must pass. Default 1 (all of them). */
28
+ passRate?: number;
29
+ }
30
+ export interface Fixture {
31
+ version: 1;
32
+ name: string;
33
+ /** Test defaults; a test's own values win, and `mocks.tools` are merged. */
34
+ defaults?: Partial<Omit<TestCase, 'name' | 'turns'>>;
35
+ tests: TestCase[];
36
+ }
37
+ /** What a turn produced, as the assertions see it. */
38
+ export interface TurnResult {
39
+ user: string;
40
+ /** The reply's text, streamed parts joined. */
41
+ text: string;
42
+ toolCalls: Array<{
43
+ name: string;
44
+ input: unknown;
45
+ }>;
46
+ sources: Array<{
47
+ url: string;
48
+ title?: string;
49
+ }>;
50
+ leads: Array<Record<string, unknown>>;
51
+ finishReason?: string;
52
+ usage?: {
53
+ inputTokens: number;
54
+ outputTokens: number;
55
+ };
56
+ /** From the request to the `finish` part. */
57
+ latencyMs: number;
58
+ /** An `error` part's code, when the reply failed. */
59
+ error?: string;
60
+ /** The bot's model id, when the provider says. */
61
+ model?: string;
62
+ /** What the turn cost in US dollars, from `prices` in the config. Unset when the model has no price. */
63
+ costUsd?: number;
64
+ }
65
+ export interface AssertionResult {
66
+ assertion: Assertion;
67
+ pass: boolean;
68
+ score?: number;
69
+ reason?: string;
70
+ /** What checking cost (a judge's call), in US dollars. */
71
+ costUsd?: number;
72
+ }
73
+ /** What an assertion can use besides the turn. */
74
+ export interface AssertionContext {
75
+ /** The eval file, on disk. */
76
+ fixture: string;
77
+ /** The judge, when the run uses `judge` assertions. */
78
+ judge?: Judge;
79
+ }
80
+ /** Grades a reply against a rubric with a model. */
81
+ export interface Judge {
82
+ /** `provider:model`, printed with every run that uses it. */
83
+ id: string;
84
+ model?: string;
85
+ grade(rubric: string, conversation: TurnResult[]): Promise<{
86
+ score: number;
87
+ reason: string;
88
+ costUsd?: number;
89
+ }>;
90
+ }
91
+ type CheckResult = AssertionResult | Omit<AssertionResult, 'assertion'>;
92
+ /** Checks one turn. Registered by the assertion's key (`contains`). */
93
+ export type AssertionCheck = (value: unknown, turn: TurnResult, conversation: TurnResult[], context: AssertionContext) => Promise<CheckResult> | CheckResult;
94
+ export interface TestRunResult {
95
+ fixture: string;
96
+ test: string;
97
+ /** 1-based, when the test repeats. */
98
+ run: number;
99
+ pass: boolean;
100
+ turns: Array<{
101
+ turn: TurnResult;
102
+ results: AssertionResult[];
103
+ }>;
104
+ /** When the run couldn't finish: config or provider problems. */
105
+ error?: string;
106
+ }
107
+ export interface TestResult {
108
+ fixture: string;
109
+ test: string;
110
+ runs: TestRunResult[];
111
+ passRate: number;
112
+ pass: boolean;
113
+ durationMs?: number;
114
+ }
115
+ export {};
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/test/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/test/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,63 @@
1
1
  {
2
2
  "name": "@chatcops/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "The chatcops command: build a knowledge index from your site and search it",
5
+ "keywords": [
6
+ "chatcops",
7
+ "cli",
8
+ "rag",
9
+ "ingest"
10
+ ],
11
+ "homepage": "https://chat.codercops.com",
12
+ "bugs": "https://github.com/codercops/chatcops/issues",
13
+ "type": "module",
14
+ "main": "dist/index.js",
15
+ "types": "dist/index.d.ts",
16
+ "bin": {
17
+ "chatcops": "dist/bin.js"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "sideEffects": false,
29
+ "dependencies": {
30
+ "yaml": "^2.6.0",
31
+ "zod": "^3.24.0",
32
+ "@chatcops/ingest": "^0.1.0",
33
+ "@chatcops/server": "^0.7.0"
34
+ },
35
+ "peerDependencies": {
36
+ "@chatcops/core": "^0.6.0"
37
+ },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/codercops/chatcops.git",
41
+ "directory": "packages/cli"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "license": "MIT",
47
+ "engines": {
48
+ "node": ">=22.13"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^22",
52
+ "typescript": "^5.7.0",
53
+ "vitest": "^4.1.11",
54
+ "@chatcops/core": "^0.6.0"
55
+ },
56
+ "scripts": {
57
+ "build": "tsc",
58
+ "typecheck": "tsc -p tsconfig.test.json --noEmit",
59
+ "test": "vitest run",
60
+ "test:watch": "vitest",
61
+ "clean": "rm -rf dist *.tsbuildinfo"
62
+ }
6
63
  }