cgraphx 1.2.0 → 1.3.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.
- package/dist/.claude-template/hooks/precommit-check/precommit-check.cjs +90 -0
- package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +99 -78
- package/dist/.claude-template/skills/precommit-review/SKILL.md +50 -0
- package/dist/.claude-template/skills/run-api-test/SKILL.md +187 -0
- package/dist/.claude-template/skills/run-api-test/assets/template-test-report.md +103 -0
- package/dist/.claude-template/skills/run-api-test/assets/template-test-verify.jsonl +5 -0
- package/dist/.claude-template/skills/run-api-test/references/bru-run.md +60 -0
- package/dist/.claude-template/skills/run-api-test/references/db-verification.md +81 -0
- package/dist/.claude-template/skills/run-api-test/references/report-format.md +104 -0
- package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +61 -0
- package/dist/.claude-template/skills/run-api-test/references/test-scope.md +64 -0
- package/dist/.claude-template/skills/write-api/SKILL.md +150 -0
- package/dist/.claude-template/skills/write-api/assets/template-api-spec.md +112 -0
- package/dist/.claude-template/skills/write-api/assets/template-request.bru +75 -0
- package/dist/.claude-template/skills/write-api/references/ai-prompts.md +133 -0
- package/dist/.claude-template/skills/write-api/references/api-spec-format.md +108 -0
- package/dist/.claude-template/skills/write-api/references/bru-format.md +144 -0
- package/dist/.claude-template/skills/write-api/references/collection-layout.md +81 -0
- package/dist/.claude-template/skills/write-api/references/environment-setup.md +105 -0
- package/dist/.claude-template/skills/write-api/references/interface-scope.md +74 -0
- package/dist/api-test/ai-fields.d.ts +37 -0
- package/dist/api-test/ai-fields.d.ts.map +1 -0
- package/dist/api-test/ai-fields.js +114 -0
- package/dist/api-test/ai-fields.js.map +1 -0
- package/dist/api-test/assemble.d.ts +76 -0
- package/dist/api-test/assemble.d.ts.map +1 -0
- package/dist/api-test/assemble.js +185 -0
- package/dist/api-test/assemble.js.map +1 -0
- package/dist/api-test/bru-cli-invoker.d.ts +72 -0
- package/dist/api-test/bru-cli-invoker.d.ts.map +1 -0
- package/dist/api-test/bru-cli-invoker.js +169 -0
- package/dist/api-test/bru-cli-invoker.js.map +1 -0
- package/dist/api-test/bru-report-parser.d.ts +24 -0
- package/dist/api-test/bru-report-parser.d.ts.map +1 -0
- package/dist/api-test/bru-report-parser.js +110 -0
- package/dist/api-test/bru-report-parser.js.map +1 -0
- package/dist/api-test/bru-runner.d.ts +101 -0
- package/dist/api-test/bru-runner.d.ts.map +1 -0
- package/dist/api-test/bru-runner.js +316 -0
- package/dist/api-test/bru-runner.js.map +1 -0
- package/dist/api-test/bru-writer.d.ts +52 -0
- package/dist/api-test/bru-writer.d.ts.map +1 -0
- package/dist/api-test/bru-writer.js +159 -0
- package/dist/api-test/bru-writer.js.map +1 -0
- package/dist/api-test/call-chain-extractor.d.ts +80 -0
- package/dist/api-test/call-chain-extractor.d.ts.map +1 -0
- package/dist/api-test/call-chain-extractor.js +179 -0
- package/dist/api-test/call-chain-extractor.js.map +1 -0
- package/dist/api-test/cli.d.ts +133 -0
- package/dist/api-test/cli.d.ts.map +1 -0
- package/dist/api-test/cli.js +1009 -0
- package/dist/api-test/cli.js.map +1 -0
- package/dist/api-test/config.d.ts +75 -0
- package/dist/api-test/config.d.ts.map +1 -0
- package/dist/api-test/config.js +406 -0
- package/dist/api-test/config.js.map +1 -0
- package/dist/api-test/db-query-cli.d.ts +51 -0
- package/dist/api-test/db-query-cli.d.ts.map +1 -0
- package/dist/api-test/db-query-cli.js +119 -0
- package/dist/api-test/db-query-cli.js.map +1 -0
- package/dist/api-test/enhance-prepare.d.ts +111 -0
- package/dist/api-test/enhance-prepare.d.ts.map +1 -0
- package/dist/api-test/enhance-prepare.js +425 -0
- package/dist/api-test/enhance-prepare.js.map +1 -0
- package/dist/api-test/enhance-write.d.ts +28 -0
- package/dist/api-test/enhance-write.d.ts.map +1 -0
- package/dist/api-test/enhance-write.js +145 -0
- package/dist/api-test/enhance-write.js.map +1 -0
- package/dist/api-test/errors.d.ts +48 -0
- package/dist/api-test/errors.d.ts.map +1 -0
- package/dist/api-test/errors.js +76 -0
- package/dist/api-test/errors.js.map +1 -0
- package/dist/api-test/field-extractor.d.ts +98 -0
- package/dist/api-test/field-extractor.d.ts.map +1 -0
- package/dist/api-test/field-extractor.js +327 -0
- package/dist/api-test/field-extractor.js.map +1 -0
- package/dist/api-test/impl-finder.d.ts +37 -0
- package/dist/api-test/impl-finder.d.ts.map +1 -0
- package/dist/api-test/impl-finder.js +54 -0
- package/dist/api-test/impl-finder.js.map +1 -0
- package/dist/api-test/index.d.ts +41 -0
- package/dist/api-test/index.d.ts.map +1 -0
- package/dist/api-test/index.js +124 -0
- package/dist/api-test/index.js.map +1 -0
- package/dist/api-test/java-parser.d.ts +89 -0
- package/dist/api-test/java-parser.d.ts.map +1 -0
- package/dist/api-test/java-parser.js +508 -0
- package/dist/api-test/java-parser.js.map +1 -0
- package/dist/api-test/md-writer.d.ts +49 -0
- package/dist/api-test/md-writer.d.ts.map +1 -0
- package/dist/api-test/md-writer.js +202 -0
- package/dist/api-test/md-writer.js.map +1 -0
- package/dist/api-test/parser-httpservice.d.ts +91 -0
- package/dist/api-test/parser-httpservice.d.ts.map +1 -0
- package/dist/api-test/parser-httpservice.js +271 -0
- package/dist/api-test/parser-httpservice.js.map +1 -0
- package/dist/api-test/report.d.ts +188 -0
- package/dist/api-test/report.d.ts.map +1 -0
- package/dist/api-test/report.js +522 -0
- package/dist/api-test/report.js.map +1 -0
- package/dist/api-test/snapshot.d.ts +26 -0
- package/dist/api-test/snapshot.d.ts.map +1 -0
- package/dist/api-test/snapshot.js +150 -0
- package/dist/api-test/snapshot.js.map +1 -0
- package/dist/api-test/test-history.d.ts +48 -0
- package/dist/api-test/test-history.d.ts.map +1 -0
- package/dist/api-test/test-history.js +122 -0
- package/dist/api-test/test-history.js.map +1 -0
- package/dist/api-test/types.d.ts +174 -0
- package/dist/api-test/types.d.ts.map +1 -0
- package/dist/api-test/types.js +13 -0
- package/dist/api-test/types.js.map +1 -0
- package/dist/api-test/verify-prepare.d.ts +30 -0
- package/dist/api-test/verify-prepare.d.ts.map +1 -0
- package/dist/api-test/verify-prepare.js +150 -0
- package/dist/api-test/verify-prepare.js.map +1 -0
- package/dist/api-test/verify-write.d.ts +31 -0
- package/dist/api-test/verify-write.d.ts.map +1 -0
- package/dist/api-test/verify-write.js +159 -0
- package/dist/api-test/verify-write.js.map +1 -0
- package/dist/dbquery/dump-schema.d.ts +46 -0
- package/dist/dbquery/dump-schema.d.ts.map +1 -0
- package/dist/dbquery/dump-schema.js +379 -0
- package/dist/dbquery/dump-schema.js.map +1 -0
- package/dist/installer/targets/claude.d.ts +15 -0
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +53 -0
- package/dist/installer/targets/claude.js.map +1 -1
- package/package.json +1 -1
- package/scripts/agent-eval/block-cgraphx-and-gitnexus-cli-hook.sh +0 -43
- package/scripts/agent-eval/block-cgraphx-cli-hook.sh +0 -32
- package/scripts/agent-eval/block-cgraphx-cli-settings.json +0 -16
- package/scripts/agent-eval/cli-vs-mcp-3arm.sh +0 -121
- package/scripts/agent-eval/multi-tool-eval.sh +0 -171
- package/scripts/agent-eval/parse-cli-vs-mcp.mjs +0 -232
- package/scripts/agent-eval/parse-multi-tool.mjs +0 -242
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report + list phase — Phase 6 of the api-test pipeline (T-60).
|
|
3
|
+
*
|
|
4
|
+
* Spec contract:
|
|
5
|
+
* - `generateReport(projectRoot, date)` aggregates the day's JSONL run
|
|
6
|
+
* history + the static `.md` catalog into a Markdown report written to
|
|
7
|
+
* `docs/api-test/report-YYYY-MM-DD.md`.
|
|
8
|
+
* - `listEndpoints(projectRoot, filters)` renders a terminal table of every
|
|
9
|
+
* endpoint discovered from the `.md` catalog, with the most recent run
|
|
10
|
+
* result joined from JSONL history.
|
|
11
|
+
*
|
|
12
|
+
* Aggregation rules (spec §5.6):
|
|
13
|
+
* - total endpoints = number of `.md` files (the catalog is the source of
|
|
14
|
+
* truth for "what interfaces exist").
|
|
15
|
+
* - passed / failed = count of JSONL lines with `passed: true` / `false`.
|
|
16
|
+
* - skip count = number of `.md` files whose frontmatter `status` is
|
|
17
|
+
* `skip`.
|
|
18
|
+
* - per-service rate = group JSONL runs by `service`, passed/total.
|
|
19
|
+
* - failure list = JSONL lines with `passed: false` (endpoint + error).
|
|
20
|
+
* - skip list = `.md` files with `status: skip` (endpoint + skip_reason).
|
|
21
|
+
* - avg duration = mean of `duration_ms` across all JSONL lines for the date.
|
|
22
|
+
* - p99 duration = nearest-rank 99th percentile of `duration_ms` (degenerates
|
|
23
|
+
* to max for small N — that's expected, not a bug).
|
|
24
|
+
*
|
|
25
|
+
* JSONL missing for the requested date → `ReportError` (CLI exit code 2).
|
|
26
|
+
*
|
|
27
|
+
* Independent subsystem — only depends on `node:fs` / `node:path` and the
|
|
28
|
+
* subsystem's own `test-history.ts` / `errors.ts` / `types.ts`. No imports
|
|
29
|
+
* from `src/extraction/` / `src/resolution/` / `src/db/`, and no third-party
|
|
30
|
+
* YAML / table libraries (frontmatter is parsed with a hand-rolled scalar
|
|
31
|
+
* parser; the terminal table is rendered with manual padding).
|
|
32
|
+
*/
|
|
33
|
+
import type { TestRun } from './types';
|
|
34
|
+
/** Parsed frontmatter for a catalog `.md` file. */
|
|
35
|
+
export interface EndpointMd {
|
|
36
|
+
/** `<svc_id>_<methodName>` — the endpoint identifier used in JSONL `endpoint`. */
|
|
37
|
+
endpoint: string;
|
|
38
|
+
svcId: string;
|
|
39
|
+
service: string;
|
|
40
|
+
method: string;
|
|
41
|
+
status: 'active' | 'skip';
|
|
42
|
+
skipReason: string | null;
|
|
43
|
+
/** Absolute path to the `.md` file. */
|
|
44
|
+
mdPath: string;
|
|
45
|
+
}
|
|
46
|
+
/** Aggregated report data — rendered into Markdown by `renderReport`. */
|
|
47
|
+
export interface ReportData {
|
|
48
|
+
date: string;
|
|
49
|
+
totalEndpoints: number;
|
|
50
|
+
passedCount: number;
|
|
51
|
+
failedCount: number;
|
|
52
|
+
skipCount: number;
|
|
53
|
+
perService: Array<{
|
|
54
|
+
service: string;
|
|
55
|
+
total: number;
|
|
56
|
+
passed: number;
|
|
57
|
+
passRate: number;
|
|
58
|
+
}>;
|
|
59
|
+
failures: Array<{
|
|
60
|
+
endpoint: string;
|
|
61
|
+
service: string;
|
|
62
|
+
error: string | null;
|
|
63
|
+
}>;
|
|
64
|
+
skips: Array<{
|
|
65
|
+
endpoint: string;
|
|
66
|
+
service: string;
|
|
67
|
+
skipReason: string | null;
|
|
68
|
+
}>;
|
|
69
|
+
avgDurationMs: number;
|
|
70
|
+
p99DurationMs: number;
|
|
71
|
+
}
|
|
72
|
+
/** Filters applied by the `list` subcommand. */
|
|
73
|
+
export interface ListFilters {
|
|
74
|
+
service?: string;
|
|
75
|
+
status?: 'active' | 'skip';
|
|
76
|
+
svcId?: string;
|
|
77
|
+
}
|
|
78
|
+
/** A row in the `list` terminal table. */
|
|
79
|
+
export interface ListRow {
|
|
80
|
+
endpoint: string;
|
|
81
|
+
service: string;
|
|
82
|
+
svcId: string;
|
|
83
|
+
status: 'active' | 'skip';
|
|
84
|
+
/** 'true' / 'false' / '—' when no run history exists. */
|
|
85
|
+
lastRunResult: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate the Markdown report for a single day.
|
|
89
|
+
*
|
|
90
|
+
* Reads `<projectRoot>/.cgraphx/api-test/runs/<date>.jsonl` and every
|
|
91
|
+
* `docs/api-test/<service>/*.md` catalog file, aggregates statistics, and
|
|
92
|
+
* returns the Markdown content. Throws `ReportError` when the JSONL file
|
|
93
|
+
* for the requested date doesn't exist (the report has no run data to
|
|
94
|
+
* summarize — that's a hard error, not an empty report).
|
|
95
|
+
*/
|
|
96
|
+
export declare function generateReport(projectRoot: string, date: string): Promise<string>;
|
|
97
|
+
/**
|
|
98
|
+
* Resolve the report output path: `<projectRoot>/docs/api-test/report-<date>.md`.
|
|
99
|
+
*/
|
|
100
|
+
export declare function reportFilePath(projectRoot: string, date: string): string;
|
|
101
|
+
/**
|
|
102
|
+
* List every catalog endpoint with its most recent run result, after filters.
|
|
103
|
+
*
|
|
104
|
+
* The "most recent run" is found by scanning every `*.jsonl` file in the runs
|
|
105
|
+
* directory and picking the entry with the largest `ran_at` for each endpoint.
|
|
106
|
+
* Endpoints with no run history get `lastRunResult = '—'`.
|
|
107
|
+
*/
|
|
108
|
+
export declare function listEndpoints(projectRoot: string, filters?: ListFilters): ListRow[];
|
|
109
|
+
/**
|
|
110
|
+
* Render `listEndpoints` output as a fixed-width terminal table with a header
|
|
111
|
+
* row and a separator line. Returns the empty string when there are no rows
|
|
112
|
+
* (the CLI prints a "no endpoints" notice instead).
|
|
113
|
+
*/
|
|
114
|
+
export declare function renderListTable(rows: ListRow[]): string;
|
|
115
|
+
/**
|
|
116
|
+
* Read every `TestRun` from `<runsDir>/<date>.jsonl`. Throws `ReportError`
|
|
117
|
+
* when the file doesn't exist (the report cannot be summarized without run
|
|
118
|
+
* data — the spec says "选抛错,exit code 2").
|
|
119
|
+
*/
|
|
120
|
+
export declare function readRunsForDate(projectRoot: string, date: string): TestRun[];
|
|
121
|
+
/**
|
|
122
|
+
* Parse a JSONL string into `TestRun[]`. Blank lines are skipped; malformed
|
|
123
|
+
* lines throw `ReportError` (a corrupted history file shouldn't silently
|
|
124
|
+
* produce wrong stats).
|
|
125
|
+
*/
|
|
126
|
+
export declare function parseJsonl(content: string): TestRun[];
|
|
127
|
+
/** Convert a parsed JSONL object (snake_case keys) back into a `TestRun`. */
|
|
128
|
+
declare function deserializeRun(obj: Record<string, unknown>): TestRun;
|
|
129
|
+
/**
|
|
130
|
+
* Build a map of `endpoint → most recent TestRun` by scanning every JSONL
|
|
131
|
+
* file in the runs directory. Returns an empty map when the runs directory
|
|
132
|
+
* doesn't exist (a fresh project with no run history — `list` still works,
|
|
133
|
+
* every endpoint just shows `—`).
|
|
134
|
+
*/
|
|
135
|
+
export declare function readLatestRunByEndpoint(projectRoot: string): Map<string, TestRun>;
|
|
136
|
+
/**
|
|
137
|
+
* Walk `docs/api-test/<service>/*.md` and parse each file's frontmatter into
|
|
138
|
+
* an `EndpointMd` record. Skips `report-*.md` files at the api-test root
|
|
139
|
+
* (those are this subsystem's own output, not catalog entries).
|
|
140
|
+
*/
|
|
141
|
+
export declare function readAllEndpoints(projectRoot: string): EndpointMd[];
|
|
142
|
+
/**
|
|
143
|
+
* Parse the YAML frontmatter block (the text between `---` lines at the top
|
|
144
|
+
* of a `.md` file) into a string-keyed map.
|
|
145
|
+
*
|
|
146
|
+
* Scalar `key: value` pairs are extracted. Quoted scalars (`"..."` / `'...'`)
|
|
147
|
+
* are unquoted. The literal `null` becomes `null` in the map. Block scalars
|
|
148
|
+
* (`|-` followed by indented lines) and nested lists (`key:` + `- item`) are
|
|
149
|
+
* NOT parsed — the report/list phase only needs scalar fields (`svc_id`,
|
|
150
|
+
* `service`, `method`, `status`, `skip_reason`). Lines that look like list
|
|
151
|
+
* items or continuation lines (leading whitespace) are skipped.
|
|
152
|
+
*/
|
|
153
|
+
export declare function parseFrontmatter(content: string): Record<string, string | null>;
|
|
154
|
+
/** Aggregate JSONL runs + `.md` catalog into `ReportData` for rendering. */
|
|
155
|
+
export declare function aggregateReport(date: string, runs: TestRun[], endpoints: EndpointMd[]): ReportData;
|
|
156
|
+
/**
|
|
157
|
+
* Nearest-rank percentile. For a sample of size N, the P-th percentile (where
|
|
158
|
+
* `p` is a fraction in [0, 1]) is the value at the 1-indexed position
|
|
159
|
+
* `ceil(p * N)` of the sorted (ascending) sample. For N=0 returns 0. For
|
|
160
|
+
* small N this degenerates to the max — that's the documented behavior, not
|
|
161
|
+
* a bug.
|
|
162
|
+
*/
|
|
163
|
+
export declare function percentile(values: number[], p: number): number;
|
|
164
|
+
/** Render `ReportData` as a Markdown document. */
|
|
165
|
+
export declare function renderReport(data: ReportData): string;
|
|
166
|
+
/**
|
|
167
|
+
* Render a 2D string matrix as a fixed-width terminal table. The first row
|
|
168
|
+
* is treated as the header and separated from the body by a `---` divider
|
|
169
|
+
* line. Column widths are the max cell width in each column. Empty matrix
|
|
170
|
+
* returns the empty string.
|
|
171
|
+
*/
|
|
172
|
+
export declare function renderTable(rows: string[][]): string;
|
|
173
|
+
/** Internal helpers re-exported for tests. */
|
|
174
|
+
export declare const __INTERNAL_REPORT: {
|
|
175
|
+
DEFAULT_OUTPUT_DIR: string;
|
|
176
|
+
reportFilePath: typeof reportFilePath;
|
|
177
|
+
parseJsonl: typeof parseJsonl;
|
|
178
|
+
deserializeRun: typeof deserializeRun;
|
|
179
|
+
readLatestRunByEndpoint: typeof readLatestRunByEndpoint;
|
|
180
|
+
readAllEndpoints: typeof readAllEndpoints;
|
|
181
|
+
parseFrontmatter: typeof parseFrontmatter;
|
|
182
|
+
aggregateReport: typeof aggregateReport;
|
|
183
|
+
percentile: typeof percentile;
|
|
184
|
+
renderReport: typeof renderReport;
|
|
185
|
+
renderTable: typeof renderTable;
|
|
186
|
+
};
|
|
187
|
+
export {};
|
|
188
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/api-test/report.ts"],"names":[],"mappings":"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"}
|