cxgrd 0.1.44 → 1.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.
- package/README.md +45 -151
- package/dist/commands/input.d.ts.map +1 -1
- package/dist/commands/input.js +7 -7
- package/dist/commands/input.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +15 -30
- package/dist/commands/prompt.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/prompt/generator.d.ts +3 -0
- package/dist/prompt/generator.d.ts.map +1 -0
- package/dist/prompt/generator.js +76 -0
- package/dist/prompt/generator.js.map +1 -0
- package/dist/prompt/generator.test.d.ts +2 -0
- package/dist/prompt/generator.test.d.ts.map +1 -0
- package/dist/prompt/generator.test.js +56 -0
- package/dist/prompt/generator.test.js.map +1 -0
- package/dist/prompt/subgraph.d.ts +2 -7
- package/dist/prompt/subgraph.d.ts.map +1 -1
- package/dist/prompt/subgraph.js +3 -44
- package/dist/prompt/subgraph.js.map +1 -1
- package/dist/utils/change-detector.d.ts +1 -0
- package/dist/utils/change-detector.d.ts.map +1 -1
- package/dist/utils/change-detector.js +5 -0
- package/dist/utils/change-detector.js.map +1 -1
- package/dist/utils/change-detector.test.d.ts +2 -0
- package/dist/utils/change-detector.test.d.ts.map +1 -0
- package/dist/utils/change-detector.test.js +18 -0
- package/dist/utils/change-detector.test.js.map +1 -0
- package/dist/utils/git-hook-manager.js +2 -2
- package/package.json +1 -1
- package/dist/prompt/llm-client.d.ts +0 -8
- package/dist/prompt/llm-client.d.ts.map +0 -1
- package/dist/prompt/llm-client.js +0 -106
- package/dist/prompt/llm-client.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,180 +1,74 @@
|
|
|
1
|
-
|
|
1
|
+
<table align="center">
|
|
2
|
+
<tr>
|
|
3
|
+
<td><img src="https://www.cxgrd.com/cxgrdlogo.png" width="88" alt="CXGRD logo" /></td>
|
|
4
|
+
<td><h1> CXGRD </h1></td>
|
|
5
|
+
</tr>
|
|
6
|
+
</table>
|
|
2
7
|
|
|
3
|
-
>
|
|
4
|
-
|
|
8
|
+
<p align="center">
|
|
9
|
+
<img alt="License" src="https://img.shields.io/badge/License-MIT%20-4f5d75?style=flat-square" />
|
|
10
|
+
<img alt="Release" src="https://img.shields.io/badge/release-v1.0.0-8b5cf6?style=flat-square" />
|
|
11
|
+
</p>
|
|
5
12
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
## What is CXGRD?
|
|
13
|
+
<h1 align="center">Architectural Guardrail for AI-native development</h1>
|
|
9
14
|
|
|
10
|
-
|
|
15
|
+
<p align="center">CXGRD maps blast radius across your codebase, so AI tools know what they will break - before they write a line</p>
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
<div align="center">
|
|
18
|
+
<img src=".github/profile/assets/example-flow.png" width="500" alt="example workflow"/>
|
|
19
|
+
</div>
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
- **Enrich your AI prompts** with architectural context so the AI makes safer, smarter suggestions
|
|
16
|
-
- **Validate your code** for circular dependencies, orphaned files, and layer violations — both structurally and with compiler-backed checks
|
|
21
|
+
**CXGRD** scans your project, builds a dependency graph, and gives AI assistants the architectural context they need to make safer changes.
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
- **Tell you exactly what will break** before a change lands.
|
|
24
|
+
- **Enrich AI prompts** with project structure, dependencies, and blast-radius analysis.
|
|
25
|
+
- **Validate architecture** with circular dependency checks, orphan detection, and compiler-backed validation.
|
|
26
|
+
- **Enforce merge policies** in GitHub Actions to protect your team from risky changes.
|
|
19
27
|
|
|
20
28
|
---
|
|
21
29
|
|
|
22
|
-
|
|
30
|
+
### Typical workflow
|
|
23
31
|
|
|
24
32
|
```bash
|
|
33
|
+
# 1. Install
|
|
25
34
|
npm install -g cxgrd
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
---
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
### `cxgrd auth login`
|
|
33
|
-
**Authenticate with CXGRD before first use.**
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
+
# 2. Authenticate
|
|
36
37
|
cxgrd auth login
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
### `cxgrd scan [path]`
|
|
42
|
-
**Build a complete dependency graph of your project.**
|
|
43
|
-
|
|
44
|
-
This is the first command to run. It recursively analyzes your source files and produces a `.cg/` directory containing the full dependency graph, exported symbols, architectural layers, and metadata.
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
cxgrd scan # scan current directory
|
|
48
|
-
cxgrd scan /path/to/myapp # scan a specific project
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**What gets created in `.cg/`:**
|
|
52
|
-
|
|
53
|
-
| File | Description |
|
|
54
|
-
|---|---|
|
|
55
|
-
| `graph.json` | Full dependency graph |
|
|
56
|
-
| `symbols.json` | Exported symbols per file |
|
|
57
|
-
| `arch.json` | Inferred architectural layers |
|
|
58
|
-
| `meta.json` | Scan metadata |
|
|
59
|
-
| `history.json` | Operation history |
|
|
60
|
-
| `patterns.json` | Pattern analysis |
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
### `cxgrd input "<description>"`
|
|
65
|
-
**Analyze the blast radius of a planned change.**
|
|
66
|
-
|
|
67
|
-
Before touching any code, describe what you're planning to change. CXGRD will tell you every file that will be affected, why it's affected, and how severe the impact is.
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
cxgrd input "rename AuthService to AuthController" --path /myapp
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Output includes:**
|
|
74
|
-
- List of affected files
|
|
75
|
-
- Severity levels (high / medium / low)
|
|
76
|
-
- Reason each file is impacted
|
|
77
|
-
- Total downstream impact count
|
|
78
|
-
|
|
79
|
-
Use this before making any significant refactor or before handing a task off to an AI assistant.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
### `cxgrd prompt "<description>"`
|
|
84
|
-
**Generate an architecturally-aware prompt for your AI assistant.**
|
|
85
|
-
|
|
86
|
-
Instead of giving your AI a vague instruction, CXGRD generates an enriched prompt that includes the relevant modules, symbols, dependencies, and architectural constraints. Your AI gets the full picture — not just your words.
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
cxgrd prompt "add OAuth2 authentication" --path /myapp
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
**The generated prompt includes:**
|
|
93
|
-
- Your original request
|
|
94
|
-
- Affected modules and files
|
|
95
|
-
- Architectural considerations
|
|
96
|
-
- Related symbols to be aware of
|
|
97
|
-
- Key dependencies
|
|
98
|
-
- AI-friendly recommendations
|
|
38
|
+
# Required for Pro, Team, and Enterprise plans
|
|
99
39
|
|
|
100
|
-
|
|
40
|
+
# 3. Scan your project
|
|
41
|
+
cxgrd scan
|
|
101
42
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
## Additional Commands
|
|
105
|
-
|
|
106
|
-
### `cxgrd check [path]`
|
|
107
|
-
Validates your project structurally and with compiler-backed checks. Catches circular dependencies, orphaned files, layer violations, and type/syntax errors.
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
cxgrd check .
|
|
111
|
-
cxgrd check . --staged # only staged files (great for pre-commit hooks)
|
|
112
|
-
cxgrd check . --strict # fail if compiler tools are missing (recommended for CI)
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Supports TypeScript, Python (Pyright), and Rust (cargo check) out of the box.
|
|
116
|
-
|
|
117
|
-
### `cxgrd doctor [path]`
|
|
118
|
-
Verifies your toolchain is ready before enabling strict checks.
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
cxgrd doctor # check global toolchain
|
|
122
|
-
cxgrd doctor . # check project-specific readiness
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### `cxgrd init-hooks`
|
|
126
|
-
Sets up a pre-commit hook so CXGRD checks run automatically before every commit.
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
cxgrd init-hooks
|
|
130
|
-
cxgrd init-hooks --threshold 80 --block-critical
|
|
131
|
-
cxgrd init-hooks --uninstall
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### `cxgrd watch`
|
|
135
|
-
Runs in the background and monitors your project for dependency changes in real time.
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
cxgrd watch
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Typical Workflow
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# 1. Authenticate
|
|
147
|
-
cxgrd auth login
|
|
148
|
-
|
|
149
|
-
# 2. Scan your project
|
|
150
|
-
cxgrd scan .
|
|
151
|
-
|
|
152
|
-
# 3. Before making a change — check the blast radius
|
|
43
|
+
# 4. Check blast radius before a change
|
|
153
44
|
cxgrd input "extract UserService into a separate module"
|
|
154
45
|
|
|
155
|
-
#
|
|
46
|
+
# 5. Generate an enriched prompt for your AI
|
|
156
47
|
cxgrd prompt "extract UserService into a separate module"
|
|
157
48
|
|
|
158
|
-
# 5. Paste the prompt into your AI tool, make the changes
|
|
159
|
-
|
|
160
49
|
# 6. Validate the result
|
|
161
|
-
cxgrd check
|
|
50
|
+
cxgrd check
|
|
162
51
|
```
|
|
163
52
|
|
|
164
|
-
|
|
53
|
+
### See it in action
|
|
165
54
|
|
|
166
|
-
|
|
55
|
+
[![CXGRD Demo]](https://github.com/user-attachments/assets/7ea3ff22-d187-4166-9a84-1395bf7a625a)
|
|
167
56
|
|
|
168
|
-
|
|
169
|
-
npm install
|
|
170
|
-
npm run build
|
|
57
|
+
---
|
|
171
58
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
59
|
+
### Core commands
|
|
60
|
+
|
|
61
|
+
- `cxgrd scan` → writes .cg/ from scratch or diffs it
|
|
62
|
+
- `cxgrd input` → reads graph + architecture + history, writes to history.json
|
|
63
|
+
- `cxgrd prompt` → builds a deterministic coding prompt from the request and blast-radius results
|
|
64
|
+
- `cxgrd check` → reads graph + compiler output, writes result to history.json
|
|
65
|
+
- `cxgrd auth login` → log in for Pro, Team, and Enterprise users
|
|
66
|
+
- `cxgrd doctor` → verifies toolchain readiness before strict checks
|
|
67
|
+
- `cxgrd watch` → monitors dependency changes in real time
|
|
68
|
+
- `cxgrd init-hooks` → installs pre-commit checks automatically
|
|
177
69
|
|
|
178
70
|
---
|
|
179
71
|
|
|
180
|
-
|
|
72
|
+
For more information, visit the [official website](https://www.cxgrd.com) or read the docs [here](https://docs.cxgrd.com).
|
|
73
|
+
|
|
74
|
+
[Report Bug](https://github.com/cxgrd/cli/issues/new/choose) · [Request Feature](https://github.com/cxgrd/cli/issues/new/choose)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAcxF,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5B,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAcxF,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CA4J5B"}
|
package/dist/commands/input.js
CHANGED
|
@@ -78,12 +78,12 @@ async function inputCommand(description, projectPath, opts = {}) {
|
|
|
78
78
|
const changeDetector = new change_detector_1.ChangeDetector(rootPath);
|
|
79
79
|
const gitChanges = changeDetector.getChangedFiles();
|
|
80
80
|
const descriptionMatch = changeDetector.parseDescription(description, allFiles);
|
|
81
|
-
//
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
// Prefer files identified from this request; unrelated working-tree edits
|
|
82
|
+
// should only be used when the request itself resolves no target files.
|
|
83
|
+
const uniqueFiles = (0, change_detector_1.selectChangeTargets)(descriptionMatch.files, symbolMatches, gitChanges.files);
|
|
84
|
+
if (!json && uniqueFiles.length > 0 && descriptionMatch.files.length + symbolMatches.length === 0) {
|
|
85
|
+
cli_formatter_1.RichOutput.info('No request-specific files matched; using changed Git files.');
|
|
86
|
+
}
|
|
87
87
|
if (!json) {
|
|
88
88
|
if (uniqueFiles.length === 0) {
|
|
89
89
|
cli_formatter_1.RichOutput.warning('Could not identify changed files. Using heuristics based on description.');
|
|
@@ -126,7 +126,7 @@ async function inputCommand(description, projectPath, opts = {}) {
|
|
|
126
126
|
});
|
|
127
127
|
if (!json)
|
|
128
128
|
cli_formatter_1.RichOutput.success('Blast radius analysis saved to history');
|
|
129
|
-
console.log(chalk_1.default.gray(' Tip: run `cxgrd prompt "same description"` to
|
|
129
|
+
console.log(chalk_1.default.gray(' Tip: run `cxgrd prompt "same description"` to generate a coding prompt targeting these files.'));
|
|
130
130
|
if (!session || session.plan === 'free') {
|
|
131
131
|
await (0, audit_usage_1.incrementAuditCount)();
|
|
132
132
|
await (0, audit_usage_1.printAuditUsageStatus)(json);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":";;;;;AAgBA,
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAWA,wBAAsB,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAWA,wBAAsB,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFlG"}
|
package/dist/commands/prompt.js
CHANGED
|
@@ -13,18 +13,17 @@ const env_1 = require("../config/env");
|
|
|
13
13
|
const entitlements_1 = require("../auth/entitlements");
|
|
14
14
|
const repo_memory_1 = require("../memory/repo-memory");
|
|
15
15
|
const subgraph_1 = require("../prompt/subgraph");
|
|
16
|
-
const
|
|
16
|
+
const generator_1 = require("../prompt/generator");
|
|
17
17
|
async function promptCommand(changeDescription, projectPath) {
|
|
18
18
|
await (0, env_1.loadCxgrdEnv)();
|
|
19
19
|
const rootPath = (0, path_1.resolve)(projectPath || process.cwd());
|
|
20
|
-
console.log(chalk_1.default.blue('Generating
|
|
20
|
+
console.log(chalk_1.default.blue('Generating deterministic coding prompt (Pro)...'));
|
|
21
21
|
console.log(chalk_1.default.gray(` Input: ${changeDescription}`));
|
|
22
22
|
try {
|
|
23
23
|
const session = await (0, entitlements_1.requireProFeature)('prompt');
|
|
24
24
|
const cgDir = new cg_directory_1.CgDirectory(rootPath);
|
|
25
25
|
const graph = await cgDir.readGraph();
|
|
26
26
|
const arch = await cgDir.readArch();
|
|
27
|
-
const meta = await cgDir.readMeta();
|
|
28
27
|
const symbols = await cgDir.readSymbols();
|
|
29
28
|
const patterns = await cgDir.readPatterns();
|
|
30
29
|
const err_code = 'NO_GRAPH';
|
|
@@ -32,38 +31,24 @@ async function promptCommand(changeDescription, projectPath) {
|
|
|
32
31
|
console.error(chalk_1.default.red('✗ No dependency graph found. Run "cxgrd scan" first.'), err_code);
|
|
33
32
|
process.exit(1);
|
|
34
33
|
}
|
|
35
|
-
// Read the last blast radius result from history — produced by `cxgrd input`
|
|
36
|
-
// These are already resolved, cwd-filtered files so we pass them directly
|
|
37
|
-
// to the subgraph builder instead of re-resolving from scratch.
|
|
38
|
-
const history = await cgDir.readHistory();
|
|
39
|
-
const lastInput = [...history]
|
|
40
|
-
.reverse()
|
|
41
|
-
.find((h) => h.type === 'input' || h.description);
|
|
42
34
|
const preSolvedFiles = [];
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (typeof f === 'string')
|
|
51
|
-
preSolvedFiles.push(f);
|
|
52
|
-
else if (f?.path)
|
|
53
|
-
preSolvedFiles.push(f.path);
|
|
54
|
-
}
|
|
35
|
+
const lastBlast = await cgDir.readLastBlast();
|
|
36
|
+
if (typeof lastBlast?.description === 'string' &&
|
|
37
|
+
lastBlast.description.trim().toLowerCase() === changeDescription.trim().toLowerCase() &&
|
|
38
|
+
Array.isArray(lastBlast.seedFiles)) {
|
|
39
|
+
for (const file of lastBlast.seedFiles) {
|
|
40
|
+
if (typeof file === 'string')
|
|
41
|
+
preSolvedFiles.push(file);
|
|
55
42
|
}
|
|
56
43
|
}
|
|
57
44
|
const memory = await (0, repo_memory_1.readRepoMemory)(cgDir);
|
|
58
45
|
const repoMemoryBlock = (0, repo_memory_1.formatMemoryForPrompt)(memory, patterns);
|
|
59
46
|
// Pass pre-solved files so subgraph builder skips broad re-resolution
|
|
60
47
|
const subgraph = (0, subgraph_1.buildPromptSubgraph)(changeDescription, graph, symbols, arch, rootPath, preSolvedFiles.length > 0 ? preSolvedFiles : undefined);
|
|
61
|
-
const
|
|
62
|
-
console.log(chalk_1.default.
|
|
63
|
-
const { prompt, provider, model } = await (0, llm_client_1.generatePromptWithLlm)(contextPayload, session);
|
|
64
|
-
console.log(chalk_1.default.green('\n✓ Enriched prompt\n'));
|
|
48
|
+
const prompt = (0, generator_1.generateDeterministicPrompt)(subgraph, repoMemoryBlock);
|
|
49
|
+
console.log(chalk_1.default.green('\n✓ Generated prompt\n'));
|
|
65
50
|
console.log(chalk_1.default.yellow(prompt));
|
|
66
|
-
console.log(chalk_1.default.gray(`\n
|
|
51
|
+
console.log(chalk_1.default.gray(`\n deterministic engine · plan: ${session.plan}`));
|
|
67
52
|
const outPath = (0, path_2.join)(cgDir.getPath(), 'last-prompt.md');
|
|
68
53
|
await (0, promises_1.writeFile)(outPath, prompt, 'utf-8');
|
|
69
54
|
console.log(chalk_1.default.gray(` Saved to ${outPath}`));
|
|
@@ -71,19 +56,19 @@ async function promptCommand(changeDescription, projectPath) {
|
|
|
71
56
|
type: 'prompt',
|
|
72
57
|
summary: changeDescription.slice(0, 120),
|
|
73
58
|
metadata: {
|
|
74
|
-
|
|
75
|
-
model,
|
|
59
|
+
generator: 'deterministic',
|
|
76
60
|
affectedCount: subgraph.affectedFiles.length,
|
|
77
61
|
riskLevel: subgraph.riskLevel,
|
|
78
62
|
usedPreSolvedFiles: preSolvedFiles.length > 0,
|
|
79
63
|
},
|
|
80
64
|
});
|
|
65
|
+
const history = await cgDir.readHistory();
|
|
81
66
|
history.push({
|
|
82
67
|
timestamp: Date.now(),
|
|
83
68
|
type: 'prompt',
|
|
84
69
|
input: changeDescription,
|
|
85
70
|
status: 'completed',
|
|
86
|
-
|
|
71
|
+
generator: 'deterministic',
|
|
87
72
|
});
|
|
88
73
|
await cgDir.writeHistory(history);
|
|
89
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":";;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -38,7 +38,7 @@ async function main() {
|
|
|
38
38
|
(0, telemetry_1.trackEvent)('cli_input');
|
|
39
39
|
await (0, input_1.inputCommand)(argv.description, argv.path, { json: argv.json });
|
|
40
40
|
})
|
|
41
|
-
.command('prompt <description>', 'Generate
|
|
41
|
+
.command('prompt <description>', 'Generate a deterministic architecture-aware prompt (Pro / Team)', (y) => y
|
|
42
42
|
.positional('description', { describe: 'Description of the change', type: 'string' })
|
|
43
43
|
.option('path', { describe: 'Project path (default: current directory)', type: 'string', alias: 'p' }), async (argv) => {
|
|
44
44
|
(0, telemetry_1.trackEvent)('cli_prompt');
|
|
@@ -110,7 +110,7 @@ async function main() {
|
|
|
110
110
|
.command('watch [path]', 'Monitor project for real-time architecture analysis', (y) => y
|
|
111
111
|
.positional('path', { describe: 'Project path (default: current directory)', type: 'string' })
|
|
112
112
|
.option('debounce', { type: 'number', default: 500 }), async (argv) => { (0, telemetry_1.trackEvent)('cli_watch'); await (0, watch_1.watchCommand)(argv.path, { debounce: argv.debounce }); })
|
|
113
|
-
.version('
|
|
113
|
+
.version('1.1.0')
|
|
114
114
|
.help()
|
|
115
115
|
.alias('h', 'help')
|
|
116
116
|
.epilogue(chalk_1.default.gray('For more information, visit: https://www.cxgrd.com'))
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,kDAA0B;AAC1B,2CAAwC;AACxC,kDAA0B;AAC1B,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,4CAAgD;AAChD,sDAAyD;AACzD,4CAAgD;AAChD,8CAAkD;AAClD,0CAAyF;AACzF,sCAA4C;AAC5C,2CAAyF;AAEzF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAA,kBAAY,GAAE,CAAC;IACrB,IAAA,+BAAmB,GAAE,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/B,OAAO,CACN,aAAa,EACb,yCAAyC,EACzC,CAAC,CAAM,EAAE,EAAE,CACT,CAAC;aACE,UAAU,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,2CAA2C,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aAC7F,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,gCAAgC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAC/F,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,uCAAuC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;aACrG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,gEAAgE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAC/H,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,+BAA+B,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACnG,KAAK,EAAE,IAAS,EAAE,EAAE;YAClB,IAAA,sBAAU,EAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;YACnF,MAAM,IAAA,kBAAW,EAAC,IAAI,CAAC,IAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjH,CAAC,CACF;aACA,OAAO,CACN,qBAAqB,EACrB,kCAAkC,EAClC,CAAC,CAAM,EAAE,EAAE,CACT,CAAC;aACE,UAAU,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aACpF,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,2CAA2C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aACrG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,+BAA+B,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACnG,KAAK,EAAE,IAAS,EAAE,EAAE;YAClB,IAAA,sBAAU,EAAC,WAAW,CAAC,CAAC;YACxB,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,WAAqB,EAAE,IAAI,CAAC,IAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC,CACF;aACA,OAAO,CACN,sBAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/prompt/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,EACxB,eAAe,SAAK,GACnB,MAAM,CAiFR"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDeterministicPrompt = generateDeterministicPrompt;
|
|
4
|
+
function generateDeterministicPrompt(subgraph, repoMemoryBlock = '') {
|
|
5
|
+
const changeRequest = formatChangeRequest(subgraph.changeDescription);
|
|
6
|
+
const lines = [
|
|
7
|
+
changeRequest,
|
|
8
|
+
'',
|
|
9
|
+
'Refactor/change focus:',
|
|
10
|
+
];
|
|
11
|
+
const layerByFile = new Map();
|
|
12
|
+
for (const [layer, files] of Object.entries(subgraph.architectureLayers)) {
|
|
13
|
+
for (const file of files) {
|
|
14
|
+
const layers = layerByFile.get(file) || [];
|
|
15
|
+
layers.push(layer);
|
|
16
|
+
layerByFile.set(file, layers);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (subgraph.seedFiles.length === 0 && subgraph.affectedFiles.length === 0) {
|
|
20
|
+
lines.push('- No files were resolved by the blast-radius analysis. Inspect the repository and identify the correct files before editing; do not assume a file scope.');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
for (const file of subgraph.seedFiles) {
|
|
24
|
+
const layers = layerByFile.get(file);
|
|
25
|
+
const layerNote = layers?.length ? `; architecture layer: ${layers.join(', ')}` : '';
|
|
26
|
+
lines.push(`- \`${file}\` — direct change target identified from the request${layerNote}.`);
|
|
27
|
+
}
|
|
28
|
+
for (const file of subgraph.affectedFiles) {
|
|
29
|
+
if (subgraph.seedFiles.includes(file.path))
|
|
30
|
+
continue;
|
|
31
|
+
const distance = file.distance === 1 ? 'direct dependent' : `transitive dependent, depth ${file.distance}`;
|
|
32
|
+
const required = file.changeRequired ? 'review and update if the change requires it' : 'review for compatibility';
|
|
33
|
+
const layers = layerByFile.get(file.path);
|
|
34
|
+
const layerNote = layers?.length ? `; architecture layer: ${layers.join(', ')}` : '';
|
|
35
|
+
lines.push(`- \`${file.path}\` — ${file.severity} risk, ${distance}; ${file.reason}; ${required}${layerNote}.`);
|
|
36
|
+
if (file.suggestedFix)
|
|
37
|
+
lines.push(` Suggested action: ${file.suggestedFix}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
lines.push('', `Blast-radius summary: ${subgraph.riskLevel} overall risk; ${subgraph.seedFiles.length} direct target(s), ${subgraph.affectedFiles.length} affected dependent(s).`);
|
|
41
|
+
const hasResolvedFiles = subgraph.seedFiles.length > 0 || subgraph.affectedFiles.length > 0;
|
|
42
|
+
if (hasResolvedFiles && subgraph.dependencies.length > 0) {
|
|
43
|
+
lines.push('', 'Relevant dependency edges:');
|
|
44
|
+
for (const dependency of subgraph.dependencies.slice(0, 25)) {
|
|
45
|
+
lines.push(`- \`${dependency.from}\` → \`${dependency.to}\` (${dependency.type})`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const symbolEntries = hasResolvedFiles ? Object.entries(subgraph.symbols) : [];
|
|
49
|
+
if (symbolEntries.length > 0) {
|
|
50
|
+
lines.push('', 'Relevant symbols to inspect:');
|
|
51
|
+
for (const [file, symbols] of symbolEntries) {
|
|
52
|
+
lines.push(`- \`${file}\`: ${symbols.join(', ')}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (subgraph.recommendations.length > 0) {
|
|
56
|
+
lines.push('', 'Analyzer recommendations:');
|
|
57
|
+
for (const recommendation of subgraph.recommendations) {
|
|
58
|
+
lines.push(`- ${recommendation}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
lines.push('', 'Actionable steps:', '1. Inspect the direct targets and their listed dependents; preserve existing public interfaces and dependency direction unless the request requires changing them.', '2. Make the requested change in the focused files, updating dependent files only where the blast-radius notes indicate compatibility work is needed.', '3. Run the targeted unit and integration tests for the affected files. Include relevant boundary, error-handling, and regression cases, then run the project test suite.', '4. Run `cxgrd check --changed` and review any new architecture or dependency issues.');
|
|
62
|
+
if (repoMemoryBlock.trim()) {
|
|
63
|
+
lines.push('', 'Repository context:', repoMemoryBlock.trim());
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
function formatChangeRequest(description) {
|
|
68
|
+
const trimmed = description.trim();
|
|
69
|
+
const actionMatch = trimmed.match(/^(implement|change|modify)\b(.*)$/i);
|
|
70
|
+
if (actionMatch) {
|
|
71
|
+
const action = actionMatch[1][0].toUpperCase() + actionMatch[1].slice(1).toLowerCase();
|
|
72
|
+
return `${action}${actionMatch[2]}`;
|
|
73
|
+
}
|
|
74
|
+
return `Implement ${trimmed}`;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/prompt/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../src/prompt/generator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const generator_1 = require("./generator");
|
|
9
|
+
function createSubgraph(overrides = {}) {
|
|
10
|
+
return {
|
|
11
|
+
changeDescription: 'rename the exported helper',
|
|
12
|
+
seedFiles: ['src/helper.ts'],
|
|
13
|
+
affectedFiles: [{
|
|
14
|
+
path: 'src/consumer.ts',
|
|
15
|
+
severity: 'high',
|
|
16
|
+
reason: 'Depends on helper.ts',
|
|
17
|
+
distance: 1,
|
|
18
|
+
impactType: 'direct',
|
|
19
|
+
changeRequired: true,
|
|
20
|
+
suggestedFix: 'Update the imported symbol name',
|
|
21
|
+
}],
|
|
22
|
+
dependencies: [{ from: 'src/consumer.ts', to: './helper', type: 'import' }],
|
|
23
|
+
symbols: { 'src/helper.ts': ['helper', 'HelperOptions'] },
|
|
24
|
+
architectureLayers: { service: ['src/helper.ts'], application: ['src/consumer.ts'] },
|
|
25
|
+
riskLevel: 'high',
|
|
26
|
+
recommendations: ['Review all import sites.'],
|
|
27
|
+
...overrides,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
(0, node_test_1.test)('generates a deterministic prompt with request, per-file impact, and verification steps', () => {
|
|
31
|
+
const subgraph = createSubgraph();
|
|
32
|
+
const first = (0, generator_1.generateDeterministicPrompt)(subgraph);
|
|
33
|
+
const second = (0, generator_1.generateDeterministicPrompt)(subgraph);
|
|
34
|
+
strict_1.default.equal(first, second);
|
|
35
|
+
strict_1.default.match(first, /^Implement rename the exported helper/);
|
|
36
|
+
strict_1.default.match(first, /`src\/helper\.ts` — direct change target/);
|
|
37
|
+
strict_1.default.match(first, /`src\/consumer\.ts` — high risk, direct dependent/);
|
|
38
|
+
strict_1.default.match(first, /Suggested action: Update the imported symbol name/);
|
|
39
|
+
strict_1.default.match(first, /Run the targeted unit and integration tests/);
|
|
40
|
+
strict_1.default.match(first, /cxgrd check --changed/);
|
|
41
|
+
});
|
|
42
|
+
(0, node_test_1.test)('preserves an explicit change action and identifies unresolved file scope', () => {
|
|
43
|
+
const prompt = (0, generator_1.generateDeterministicPrompt)(createSubgraph({
|
|
44
|
+
changeDescription: 'Modify the cache invalidation behavior',
|
|
45
|
+
seedFiles: [],
|
|
46
|
+
affectedFiles: [],
|
|
47
|
+
}));
|
|
48
|
+
strict_1.default.match(prompt, /^Modify the cache invalidation behavior/);
|
|
49
|
+
strict_1.default.match(prompt, /No files were resolved by the blast-radius analysis/);
|
|
50
|
+
strict_1.default.doesNotMatch(prompt, /`src\/helper\.ts`/);
|
|
51
|
+
});
|
|
52
|
+
(0, node_test_1.test)('adds repository memory only when provided', () => {
|
|
53
|
+
const prompt = (0, generator_1.generateDeterministicPrompt)(createSubgraph(), '## Repository context\n- Keep adapters thin');
|
|
54
|
+
strict_1.default.match(prompt, /Repository context:\n## Repository context\n- Keep adapters thin/);
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=generator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../src/prompt/generator.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAiC;AACjC,gEAAwC;AACxC,2CAA0D;AAG1D,SAAS,cAAc,CAAC,YAAqC,EAAE;IAC7D,OAAO;QACL,iBAAiB,EAAE,4BAA4B;QAC/C,SAAS,EAAE,CAAC,eAAe,CAAC;QAC5B,aAAa,EAAE,CAAC;gBACd,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,sBAAsB;gBAC9B,QAAQ,EAAE,CAAC;gBACX,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,iCAAiC;aAChD,CAAC;QACF,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;QACzD,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC,iBAAiB,CAAC,EAAE;QACpF,SAAS,EAAE,MAAM;QACjB,eAAe,EAAE,CAAC,0BAA0B,CAAC;QAC7C,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,IAAA,gBAAI,EAAC,wFAAwF,EAAE,GAAG,EAAE;IAClG,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAA,uCAA2B,EAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAA,uCAA2B,EAAC,QAAQ,CAAC,CAAC;IAErD,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5B,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;IAC7D,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,0CAA0C,CAAC,CAAC;IAChE,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;IACzE,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;IACzE,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;IACnE,gBAAM,CAAC,KAAK,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,MAAM,GAAG,IAAA,uCAA2B,EAAC,cAAc,CAAC;QACxD,iBAAiB,EAAE,wCAAwC;QAC3D,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,EAAE;KAClB,CAAC,CAAC,CAAC;IAEJ,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;IAChE,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,qDAAqD,CAAC,CAAC;IAC5E,gBAAM,CAAC,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,MAAM,GAAG,IAAA,uCAA2B,EAAC,cAAc,EAAE,EAAE,6CAA6C,CAAC,CAAC;IAC5G,gBAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kEAAkE,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
+
import type { ImpactedFile } from '../utils/blast-radius-analyzer';
|
|
1
2
|
export interface PromptSubgraph {
|
|
2
3
|
changeDescription: string;
|
|
3
4
|
seedFiles: string[];
|
|
4
|
-
affectedFiles: Array<
|
|
5
|
-
path: string;
|
|
6
|
-
severity: string;
|
|
7
|
-
reason: string;
|
|
8
|
-
distance: number;
|
|
9
|
-
}>;
|
|
5
|
+
affectedFiles: Array<Pick<ImpactedFile, 'path' | 'severity' | 'reason' | 'distance' | 'impactType' | 'changeRequired' | 'suggestedFix'>>;
|
|
10
6
|
dependencies: Array<{
|
|
11
7
|
from: string;
|
|
12
8
|
to: string;
|
|
@@ -22,5 +18,4 @@ export declare function buildPromptSubgraph(changeDescription: string, graph: {
|
|
|
22
18
|
}, symbols: Record<string, string[]>, arch: {
|
|
23
19
|
layers?: Record<string, string[]>;
|
|
24
20
|
} | null, projectRoot: string, preSolvedFiles?: string[]): PromptSubgraph;
|
|
25
|
-
export declare function serializeSubgraphForLlm(subgraph: PromptSubgraph, repoMemoryBlock: string): string;
|
|
26
21
|
//# sourceMappingURL=subgraph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subgraph.d.ts","sourceRoot":"","sources":["../../src/prompt/subgraph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subgraph.d.ts","sourceRoot":"","sources":["../../src/prompt/subgraph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EACpC,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,gBAAgB,GAAG,cAAc,CAC/F,CAAC,CAAC;IACH,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACjC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,GAAG,IAAI,EAClD,WAAW,EAAE,MAAM,EAEnB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,cAAc,CAqFhB"}
|
package/dist/prompt/subgraph.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildPromptSubgraph = buildPromptSubgraph;
|
|
4
|
-
exports.serializeSubgraphForLlm = serializeSubgraphForLlm;
|
|
5
4
|
const blast_radius_analyzer_1 = require("../utils/blast-radius-analyzer");
|
|
6
5
|
const change_detector_1 = require("../utils/change-detector");
|
|
7
6
|
function buildPromptSubgraph(changeDescription, graph, symbols, arch, projectRoot,
|
|
@@ -70,6 +69,9 @@ preSolvedFiles) {
|
|
|
70
69
|
severity: f.severity,
|
|
71
70
|
reason: f.reason,
|
|
72
71
|
distance: f.distance,
|
|
72
|
+
impactType: f.impactType,
|
|
73
|
+
changeRequired: f.changeRequired,
|
|
74
|
+
suggestedFix: f.suggestedFix,
|
|
73
75
|
})),
|
|
74
76
|
dependencies: dependencies.slice(0, 40),
|
|
75
77
|
symbols: relevantSymbols,
|
|
@@ -78,47 +80,4 @@ preSolvedFiles) {
|
|
|
78
80
|
recommendations: blast.recommendations.slice(0, 6),
|
|
79
81
|
};
|
|
80
82
|
}
|
|
81
|
-
function serializeSubgraphForLlm(subgraph, repoMemoryBlock) {
|
|
82
|
-
const parts = [
|
|
83
|
-
`# Change request\n${subgraph.changeDescription}`,
|
|
84
|
-
`\n## Blast radius (${subgraph.riskLevel} risk)`,
|
|
85
|
-
`Seed files: ${subgraph.seedFiles.length ? subgraph.seedFiles.join(', ') : '(inferred from description)'}`,
|
|
86
|
-
];
|
|
87
|
-
if (subgraph.affectedFiles.length) {
|
|
88
|
-
parts.push('\n### Affected files');
|
|
89
|
-
for (const f of subgraph.affectedFiles) {
|
|
90
|
-
parts.push(`- [${f.severity}] ${f.path} — ${f.reason} (depth ${f.distance})`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (subgraph.dependencies.length) {
|
|
94
|
-
parts.push('\n### Dependency edges (subgraph)');
|
|
95
|
-
for (const d of subgraph.dependencies.slice(0, 25)) {
|
|
96
|
-
parts.push(`- ${d.from} → ${d.to} (${d.type})`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
const symbolEntries = Object.entries(subgraph.symbols);
|
|
100
|
-
if (symbolEntries.length) {
|
|
101
|
-
parts.push('\n### Symbols in affected modules');
|
|
102
|
-
for (const [file, syms] of symbolEntries.slice(0, 12)) {
|
|
103
|
-
parts.push(`- ${file}: ${syms.join(', ')}`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
const layers = Object.entries(subgraph.architectureLayers);
|
|
107
|
-
if (layers.length) {
|
|
108
|
-
parts.push('\n### Architecture layers');
|
|
109
|
-
for (const [layer, files] of layers) {
|
|
110
|
-
parts.push(`- ${layer}: ${files.length} files`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (subgraph.recommendations.length) {
|
|
114
|
-
parts.push('\n### Analyzer recommendations');
|
|
115
|
-
for (const r of subgraph.recommendations) {
|
|
116
|
-
parts.push(`- ${r}`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (repoMemoryBlock.trim()) {
|
|
120
|
-
parts.push('\n' + repoMemoryBlock);
|
|
121
|
-
}
|
|
122
|
-
return parts.join('\n');
|
|
123
|
-
}
|
|
124
83
|
//# sourceMappingURL=subgraph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../src/prompt/subgraph.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../src/prompt/subgraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export interface IntentMatch {
|
|
|
14
14
|
confidence: number;
|
|
15
15
|
intent: string;
|
|
16
16
|
}
|
|
17
|
+
export declare function selectChangeTargets(descriptionMatches: string[], symbolMatches: string[], gitChanges: string[]): string[];
|
|
17
18
|
export declare class ChangeDetector {
|
|
18
19
|
private projectRoot;
|
|
19
20
|
constructor(projectRoot: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-detector.d.ts","sourceRoot":"","sources":["../../src/utils/change-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEvC;;OAEG;IACH,eAAe,IAAI,gBAAgB;IAsBnC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,WAAW;IA0D5E;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,mBAAmB,CACjB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,GAAE,MAAU,GACzB,MAAM,EAAE;IAgCX,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;CAmB5B"}
|
|
1
|
+
{"version":3,"file":"change-detector.d.ts","sourceRoot":"","sources":["../../src/utils/change-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,aAAa,EAAE,MAAM,EAAE,EACvB,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,EAAE,CAGV;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEvC;;OAEG;IACH,eAAe,IAAI,gBAAgB;IAsBnC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,WAAW;IA0D5E;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,mBAAmB,CACjB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,GAAE,MAAU,GACzB,MAAM,EAAE;IAgCX,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;CAmB5B"}
|
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.ChangeDetector = void 0;
|
|
9
|
+
exports.selectChangeTargets = selectChangeTargets;
|
|
9
10
|
const child_process_1 = require("child_process");
|
|
11
|
+
function selectChangeTargets(descriptionMatches, symbolMatches, gitChanges) {
|
|
12
|
+
const explicitMatches = [...new Set([...descriptionMatches, ...symbolMatches])];
|
|
13
|
+
return explicitMatches.length > 0 ? explicitMatches : [...new Set(gitChanges)];
|
|
14
|
+
}
|
|
10
15
|
class ChangeDetector {
|
|
11
16
|
projectRoot;
|
|
12
17
|
constructor(projectRoot) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-detector.js","sourceRoot":"","sources":["../../src/utils/change-detector.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"change-detector.js","sourceRoot":"","sources":["../../src/utils/change-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-detector.test.d.ts","sourceRoot":"","sources":["../../src/utils/change-detector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const change_detector_1 = require("./change-detector");
|
|
9
|
+
(0, node_test_1.test)('uses request-matched files instead of unrelated Git changes', () => {
|
|
10
|
+
strict_1.default.deepEqual((0, change_detector_1.selectChangeTargets)([], ['src/prompt/generator.ts'], ['src/commands/input.ts', 'src/commands/prompt.ts']), ['src/prompt/generator.ts']);
|
|
11
|
+
});
|
|
12
|
+
(0, node_test_1.test)('combines and deduplicates explicit description and symbol matches', () => {
|
|
13
|
+
strict_1.default.deepEqual((0, change_detector_1.selectChangeTargets)(['src/prompt/generator.ts'], ['src/prompt/generator.ts', 'src/prompt/subgraph.ts'], ['src/commands/input.ts']), ['src/prompt/generator.ts', 'src/prompt/subgraph.ts']);
|
|
14
|
+
});
|
|
15
|
+
(0, node_test_1.test)('falls back to unique Git changes when the request identifies no files', () => {
|
|
16
|
+
strict_1.default.deepEqual((0, change_detector_1.selectChangeTargets)([], [], ['src/commands/input.ts', 'src/commands/input.ts']), ['src/commands/input.ts']);
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=change-detector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-detector.test.js","sourceRoot":"","sources":["../../src/utils/change-detector.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAiC;AACjC,gEAAwC;AACxC,uDAAwD;AAExD,IAAA,gBAAI,EAAC,6DAA6D,EAAE,GAAG,EAAE;IACvE,gBAAM,CAAC,SAAS,CACd,IAAA,qCAAmB,EACjB,EAAE,EACF,CAAC,yBAAyB,CAAC,EAC3B,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CACpD,EACD,CAAC,yBAAyB,CAAC,CAC5B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,mEAAmE,EAAE,GAAG,EAAE;IAC7E,gBAAM,CAAC,SAAS,CACd,IAAA,qCAAmB,EACjB,CAAC,yBAAyB,CAAC,EAC3B,CAAC,yBAAyB,EAAE,wBAAwB,CAAC,EACrD,CAAC,uBAAuB,CAAC,CAC1B,EACD,CAAC,yBAAyB,EAAE,wBAAwB,CAAC,CACtD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,uEAAuE,EAAE,GAAG,EAAE;IACjF,gBAAM,CAAC,SAAS,CACd,IAAA,qCAAmB,EAAC,EAAE,EAAE,EAAE,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAC,EAC/E,CAAC,uBAAuB,CAAC,CAC1B,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -99,8 +99,8 @@ exit 0
|
|
|
99
99
|
const batScript = `@echo off
|
|
100
100
|
git diff --cached --name-only --diff-filter=ACMRUX > nul 2>&1
|
|
101
101
|
if %errorlevel% neq 0 exit /b 0
|
|
102
|
-
echo Running cxgrd
|
|
103
|
-
cxgrd
|
|
102
|
+
echo Running cxgrd check...
|
|
103
|
+
cxgrd check
|
|
104
104
|
if %errorlevel% neq 0 (
|
|
105
105
|
echo Architecture check failed. Commit blocked.
|
|
106
106
|
exit /b 1
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ActiveSession } from '../auth/auth-session';
|
|
2
|
-
export interface LlmResult {
|
|
3
|
-
prompt: string;
|
|
4
|
-
provider: string;
|
|
5
|
-
model: string;
|
|
6
|
-
}
|
|
7
|
-
export declare function generatePromptWithLlm(contextPayload: string, session: ActiveSession): Promise<LlmResult>;
|
|
8
|
-
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/prompt/llm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAc1D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,qBAAqB,CACzC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,CAAC,CAuBpB"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generatePromptWithLlm = generatePromptWithLlm;
|
|
4
|
-
const env_1 = require("../config/env");
|
|
5
|
-
const SYSTEM_PROMPT = `You are an expert software architect helping a developer write a precise prompt for their AI coding assistant (Cursor, Copilot, etc.).
|
|
6
|
-
|
|
7
|
-
Given dependency graph context, blast radius, symbols, and repo memory from the cxgrd tool, produce ONE markdown prompt the developer can paste into their AI assistant.
|
|
8
|
-
|
|
9
|
-
Requirements:
|
|
10
|
-
- Preserve the developer's original intent
|
|
11
|
-
- List concrete files/modules to touch and why
|
|
12
|
-
- Mention architectural layers and dependency constraints
|
|
13
|
-
- Include verification steps (tests, cxgrd check)
|
|
14
|
-
- Be actionable and concise (under 800 words)
|
|
15
|
-
- Do not invent files not mentioned in the context`;
|
|
16
|
-
async function generatePromptWithLlm(contextPayload, session) {
|
|
17
|
-
const apiKey = (0, env_1.envString)('CXGRD_LLM_API_KEY');
|
|
18
|
-
const cloudUrl = (0, env_1.envString)('CXGRD_PROMPT_API_URL', 'https://www.cxgrd.com/api/prompt');
|
|
19
|
-
if (session.source === 'auth_file') {
|
|
20
|
-
try {
|
|
21
|
-
return await callCloudPromptApi(cloudUrl, contextPayload, session.token);
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
25
|
-
if (apiKey && message.includes('not deployed')) {
|
|
26
|
-
return callDirectLlm(contextPayload, apiKey);
|
|
27
|
-
}
|
|
28
|
-
throw err;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (apiKey) {
|
|
32
|
-
return callDirectLlm(contextPayload, apiKey);
|
|
33
|
-
}
|
|
34
|
-
throw new Error('No LLM configured. Run cxgrd auth login to use the cloud API, or set CXGRD_LLM_API_KEY in .env for local dev.');
|
|
35
|
-
}
|
|
36
|
-
async function callCloudPromptApi(url, context, token) {
|
|
37
|
-
const response = await fetch(url.replace(/\/$/, ''), {
|
|
38
|
-
method: 'POST',
|
|
39
|
-
headers: {
|
|
40
|
-
'Content-Type': 'application/json',
|
|
41
|
-
// Send token in both headers — some proxies strip Authorization on POST
|
|
42
|
-
'Authorization': `Bearer ${token}`,
|
|
43
|
-
},
|
|
44
|
-
body: JSON.stringify({ context }),
|
|
45
|
-
});
|
|
46
|
-
if (response.status === 404 || response.status === 501) {
|
|
47
|
-
throw new Error('Cloud prompt API is not deployed yet.');
|
|
48
|
-
}
|
|
49
|
-
if (response.status === 401) {
|
|
50
|
-
throw new Error('Session expired. Run cxgrd auth login again.');
|
|
51
|
-
}
|
|
52
|
-
if (response.status === 403) {
|
|
53
|
-
throw new Error('This feature requires a Pro plan. Visit https://www.cxgrd.com/pricing to upgrade.');
|
|
54
|
-
}
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
const body = await response.text().catch(() => '');
|
|
57
|
-
throw new Error(`Prompt API error (${response.status}): ${body || response.statusText}`);
|
|
58
|
-
}
|
|
59
|
-
const data = (await response.json());
|
|
60
|
-
if (!data.prompt) {
|
|
61
|
-
throw new Error('Prompt API returned an empty response');
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
prompt: data.prompt,
|
|
65
|
-
provider: data.provider || 'cxgrd-cloud',
|
|
66
|
-
model: data.model || 'default',
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
async function callDirectLlm(context, apiKey) {
|
|
70
|
-
const provider = (0, env_1.envString)('CXGRD_LLM_PROVIDER', 'groq').toLowerCase();
|
|
71
|
-
const model = (0, env_1.envString)('CXGRD_LLM_MODEL', 'gpt-oss-120b');
|
|
72
|
-
const baseUrl = (0, env_1.envString)('CXGRD_LLM_BASE_URL') ||
|
|
73
|
-
(provider === 'openai'
|
|
74
|
-
? 'https://api.openai.com/v1'
|
|
75
|
-
: 'https://api.groq.com/openai/v1');
|
|
76
|
-
const response = await fetch(`${baseUrl.replace(/\/$/, '')}/chat/completions`, {
|
|
77
|
-
method: 'POST',
|
|
78
|
-
headers: {
|
|
79
|
-
'Content-Type': 'application/json',
|
|
80
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
81
|
-
},
|
|
82
|
-
body: JSON.stringify({
|
|
83
|
-
model,
|
|
84
|
-
temperature: 0.3,
|
|
85
|
-
max_tokens: 2048,
|
|
86
|
-
messages: [
|
|
87
|
-
{ role: 'system', content: SYSTEM_PROMPT },
|
|
88
|
-
{
|
|
89
|
-
role: 'user',
|
|
90
|
-
content: `Generate the enriched AI coding prompt from this cxgrd context:\n\n${context}`,
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
}),
|
|
94
|
-
});
|
|
95
|
-
if (!response.ok) {
|
|
96
|
-
const body = await response.text().catch(() => '');
|
|
97
|
-
throw new Error(`LLM request failed (${response.status}): ${body || response.statusText}`);
|
|
98
|
-
}
|
|
99
|
-
const data = (await response.json());
|
|
100
|
-
const content = data.choices?.[0]?.message?.content?.trim();
|
|
101
|
-
if (!content) {
|
|
102
|
-
throw new Error('LLM returned an empty response');
|
|
103
|
-
}
|
|
104
|
-
return { prompt: content, provider, model };
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=llm-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/prompt/llm-client.ts"],"names":[],"mappings":"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"}
|