@probelabs/visor 0.1.33 → 0.1.34
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 +116 -5
- package/defaults/.visor.yaml +10 -19
- package/dist/ai-review-service.d.ts +1 -1
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/defaults/.visor.yaml +10 -19
- package/dist/index.js +411 -99
- package/dist/pr-analyzer.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1229,28 +1229,139 @@ When checks return the structured format above:
|
|
|
1229
1229
|
## 🧠 Advanced AI Features
|
|
1230
1230
|
|
|
1231
1231
|
### XML-Formatted Analysis
|
|
1232
|
-
Visor
|
|
1232
|
+
Visor uses structured XML formatting when sending data to AI providers, enabling precise and context-aware analysis for both pull requests and issues.
|
|
1233
|
+
|
|
1234
|
+
#### Pull Request Context
|
|
1235
|
+
For PR events, Visor provides comprehensive code review context:
|
|
1233
1236
|
|
|
1234
1237
|
```xml
|
|
1235
1238
|
<pull_request>
|
|
1236
1239
|
<metadata>
|
|
1237
|
-
<
|
|
1238
|
-
<
|
|
1239
|
-
<
|
|
1240
|
+
<number>123</number> <!-- PR number -->
|
|
1241
|
+
<title>Add user authentication</title> <!-- PR title -->
|
|
1242
|
+
<author>developer</author> <!-- PR author username -->
|
|
1243
|
+
<base_branch>main</base_branch> <!-- Target branch (where changes will be merged) -->
|
|
1244
|
+
<target_branch>feature-auth</target_branch> <!-- Source branch (contains the changes) -->
|
|
1245
|
+
<total_additions>250</total_additions> <!-- Total lines added across all files -->
|
|
1246
|
+
<total_deletions>50</total_deletions> <!-- Total lines removed across all files -->
|
|
1247
|
+
<files_changed_count>3</files_changed_count> <!-- Number of files modified -->
|
|
1240
1248
|
</metadata>
|
|
1249
|
+
|
|
1241
1250
|
<description>
|
|
1242
|
-
|
|
1251
|
+
<!-- PR description/body text provided by the author -->
|
|
1252
|
+
This PR implements JWT-based authentication with refresh token support
|
|
1243
1253
|
</description>
|
|
1254
|
+
|
|
1244
1255
|
<full_diff>
|
|
1256
|
+
<!-- Complete unified diff of all changes (present for all PR analyses) -->
|
|
1245
1257
|
--- src/auth.ts
|
|
1246
1258
|
+++ src/auth.ts
|
|
1247
1259
|
@@ -1,3 +1,10 @@
|
|
1248
1260
|
+import jwt from 'jsonwebtoken';
|
|
1249
1261
|
...
|
|
1250
1262
|
</full_diff>
|
|
1263
|
+
|
|
1264
|
+
<commit_diff>
|
|
1265
|
+
<!-- Only present for incremental analysis (pr_updated events) -->
|
|
1266
|
+
<!-- Contains diff of just the latest commit pushed -->
|
|
1267
|
+
</commit_diff>
|
|
1268
|
+
|
|
1269
|
+
<files_summary>
|
|
1270
|
+
<!-- List of all modified files with change statistics -->
|
|
1271
|
+
<file index="1">
|
|
1272
|
+
<filename>src/auth.ts</filename>
|
|
1273
|
+
<status>modified</status> <!-- added/modified/removed/renamed -->
|
|
1274
|
+
<additions>120</additions> <!-- Lines added in this file -->
|
|
1275
|
+
<deletions>10</deletions> <!-- Lines removed from this file -->
|
|
1276
|
+
</file>
|
|
1277
|
+
</files_summary>
|
|
1278
|
+
|
|
1279
|
+
<!-- Only present for issue_comment events on PRs -->
|
|
1280
|
+
<triggering_comment>
|
|
1281
|
+
<author>reviewer1</author>
|
|
1282
|
+
<created_at>2024-01-16T15:30:00Z</created_at>
|
|
1283
|
+
<body>/review --check security</body>
|
|
1284
|
+
</triggering_comment>
|
|
1285
|
+
|
|
1286
|
+
<!-- Historical comments on the PR (excludes triggering comment) -->
|
|
1287
|
+
<comment_history>
|
|
1288
|
+
<comment index="1">
|
|
1289
|
+
<author>reviewer2</author>
|
|
1290
|
+
<created_at>2024-01-15T11:00:00Z</created_at>
|
|
1291
|
+
<body>Please add unit tests for the authentication logic</body>
|
|
1292
|
+
</comment>
|
|
1293
|
+
<comment index="2">
|
|
1294
|
+
<author>developer</author>
|
|
1295
|
+
<created_at>2024-01-15T14:30:00Z</created_at>
|
|
1296
|
+
<body>Tests added in latest commit</body>
|
|
1297
|
+
</comment>
|
|
1298
|
+
</comment_history>
|
|
1251
1299
|
</pull_request>
|
|
1252
1300
|
```
|
|
1253
1301
|
|
|
1302
|
+
#### Issue Context
|
|
1303
|
+
For issue events, Visor provides issue-specific context for intelligent assistance:
|
|
1304
|
+
|
|
1305
|
+
```xml
|
|
1306
|
+
<issue>
|
|
1307
|
+
<metadata>
|
|
1308
|
+
<number>456</number> <!-- Issue number -->
|
|
1309
|
+
<title>Feature request: Add dark mode</title> <!-- Issue title -->
|
|
1310
|
+
<author>user123</author> <!-- Issue author username -->
|
|
1311
|
+
<state>open</state> <!-- Issue state: open/closed -->
|
|
1312
|
+
<created_at>2024-01-15T10:30:00Z</created_at> <!-- When issue was created -->
|
|
1313
|
+
<updated_at>2024-01-16T14:20:00Z</updated_at> <!-- Last update timestamp -->
|
|
1314
|
+
<comments_count>5</comments_count> <!-- Total number of comments -->
|
|
1315
|
+
</metadata>
|
|
1316
|
+
|
|
1317
|
+
<description>
|
|
1318
|
+
<!-- Issue body/description text provided by the author -->
|
|
1319
|
+
I would like to request a dark mode feature for better accessibility...
|
|
1320
|
+
</description>
|
|
1321
|
+
|
|
1322
|
+
<labels>
|
|
1323
|
+
<!-- GitHub labels applied to categorize the issue -->
|
|
1324
|
+
<label>enhancement</label>
|
|
1325
|
+
<label>good first issue</label>
|
|
1326
|
+
<label>ui/ux</label>
|
|
1327
|
+
</labels>
|
|
1328
|
+
|
|
1329
|
+
<assignees>
|
|
1330
|
+
<!-- Users assigned to work on this issue -->
|
|
1331
|
+
<assignee>developer1</assignee>
|
|
1332
|
+
<assignee>developer2</assignee>
|
|
1333
|
+
</assignees>
|
|
1334
|
+
|
|
1335
|
+
<milestone>
|
|
1336
|
+
<!-- Project milestone this issue is part of (if any) -->
|
|
1337
|
+
<title>v2.0 Release</title>
|
|
1338
|
+
<state>open</state> <!-- Milestone state: open/closed -->
|
|
1339
|
+
<due_on>2024-03-01T00:00:00Z</due_on> <!-- Milestone due date -->
|
|
1340
|
+
</milestone>
|
|
1341
|
+
|
|
1342
|
+
<!-- Only present for issue_comment events -->
|
|
1343
|
+
<triggering_comment>
|
|
1344
|
+
<author>user456</author> <!-- User who posted the triggering comment -->
|
|
1345
|
+
<created_at>2024-01-16T15:30:00Z</created_at> <!-- When comment was posted -->
|
|
1346
|
+
<body>/review security --focus authentication</body> <!-- The comment text -->
|
|
1347
|
+
</triggering_comment>
|
|
1348
|
+
|
|
1349
|
+
<!-- Historical comments on the issue (excludes triggering comment) -->
|
|
1350
|
+
<comment_history>
|
|
1351
|
+
<comment index="1"> <!-- Comments ordered by creation time -->
|
|
1352
|
+
<author>developer1</author>
|
|
1353
|
+
<created_at>2024-01-15T11:00:00Z</created_at>
|
|
1354
|
+
<body>This is a great idea! I'll start working on it.</body>
|
|
1355
|
+
</comment>
|
|
1356
|
+
<comment index="2">
|
|
1357
|
+
<author>user123</author>
|
|
1358
|
+
<created_at>2024-01-15T14:30:00Z</created_at>
|
|
1359
|
+
<body>Thanks! Please consider accessibility standards.</body>
|
|
1360
|
+
</comment>
|
|
1361
|
+
</comment_history>
|
|
1362
|
+
</issue>
|
|
1363
|
+
```
|
|
1364
|
+
|
|
1254
1365
|
### Incremental Commit Analysis
|
|
1255
1366
|
When new commits are pushed to a PR, Visor performs incremental analysis:
|
|
1256
1367
|
- **Full Analysis**: Reviews the entire PR on initial creation
|
package/defaults/.visor.yaml
CHANGED
|
@@ -79,11 +79,7 @@ checks:
|
|
|
79
79
|
|
|
80
80
|
## Files Changed Analysis
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|------|------|--------|---------|--------|
|
|
84
|
-
{% for file in files %}
|
|
85
|
-
| `{{ file.filename }}` | {{ file.filename | split: "." | last | upcase }} | {{ file.status | capitalize }} | +{{ file.additions }}/-{{ file.deletions }} | {% if file.changes > 50 %}High{% elsif file.changes > 20 %}Medium{% else %}Low{% endif %} |
|
|
86
|
-
{% endfor %}
|
|
82
|
+
Analyze the files listed in the `<files_summary>` section, which provides a structured overview of all changes including filenames, status, additions, and deletions.
|
|
87
83
|
|
|
88
84
|
## Architecture & Impact Assessment
|
|
89
85
|
|
|
@@ -117,15 +113,11 @@ checks:
|
|
|
117
113
|
group: review
|
|
118
114
|
schema: code-review
|
|
119
115
|
prompt: |
|
|
120
|
-
Based on our overview discussion, please perform a comprehensive security analysis of the code changes
|
|
116
|
+
Based on our overview discussion, please perform a comprehensive security analysis of the code changes.
|
|
121
117
|
|
|
122
|
-
|
|
123
|
-
{% for file in files %}
|
|
124
|
-
- `{{ file.filename }}` - {{ file.status }}, +{{ file.additions }}/-{{ file.deletions }} ({{ file.changes }} total changes)
|
|
125
|
-
{% endfor %}
|
|
118
|
+
Analyze the files listed in the `<files_summary>` section and focus on the code changes shown in the diff sections.
|
|
126
119
|
|
|
127
|
-
##
|
|
128
|
-
Analyze the code for security vulnerabilities including:
|
|
120
|
+
## Security Analysis Areas
|
|
129
121
|
|
|
130
122
|
**Input Validation & Injection:**
|
|
131
123
|
- SQL injection in database queries
|
|
@@ -162,14 +154,11 @@ checks:
|
|
|
162
154
|
group: review
|
|
163
155
|
schema: code-review
|
|
164
156
|
prompt: |
|
|
165
|
-
Building on our overview and security analysis, now review the code changes for performance issues
|
|
157
|
+
Building on our overview and security analysis, now review the code changes for performance issues.
|
|
166
158
|
|
|
167
|
-
|
|
168
|
-
{% for file in files %}
|
|
169
|
-
- `{{ file.filename }}` ({{ file.changes }} changes, {{ file.status }})
|
|
170
|
-
{% endfor %}
|
|
159
|
+
Focus on the files listed in `<files_summary>` and analyze the code changes shown in the `<full_diff>` or `<commit_diff>` sections.
|
|
171
160
|
|
|
172
|
-
## Analysis Areas
|
|
161
|
+
## Performance Analysis Areas
|
|
173
162
|
**Algorithm & Data Structure Efficiency:**
|
|
174
163
|
- Time complexity analysis (O(n), O(n²), etc.)
|
|
175
164
|
- Space complexity and memory usage
|
|
@@ -204,7 +193,9 @@ checks:
|
|
|
204
193
|
group: review
|
|
205
194
|
schema: code-review
|
|
206
195
|
prompt: |
|
|
207
|
-
Building on our overview, security, and performance discussions, evaluate the code quality and maintainability
|
|
196
|
+
Building on our overview, security, and performance discussions, evaluate the code quality and maintainability.
|
|
197
|
+
|
|
198
|
+
Review the code changes shown in the `<full_diff>` or `<commit_diff>` sections, considering the files listed in `<files_summary>`.
|
|
208
199
|
|
|
209
200
|
## Quality Assessment Areas
|
|
210
201
|
**Code Structure & Design:**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;AAcxD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,qCAAqC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ;AAoBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,GAAE,cAAmB;IA4BvC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAmHzB;;OAEG;IACG,6BAA6B,CACjC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAyFzB;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAI3D;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;YACW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;AAcxD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,qCAAqC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ;AAoBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,GAAE,cAAmB;IA4BvC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAmHzB;;OAEG;IACG,6BAA6B,CACjC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAyFzB;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAI3D;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;YACW,iBAAiB;IAsE/B;;OAEG;IACH,OAAO,CAAC,eAAe;IA6NvB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;YACW,iCAAiC;IAuE/C;;OAEG;YACW,cAAc;IAgK5B;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmMvB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAqDnC;;OAEG;YACW,oBAAoB;IAgDlC;;OAEG;IACH,OAAO,CAAC,eAAe;CAYxB"}
|
|
@@ -79,11 +79,7 @@ checks:
|
|
|
79
79
|
|
|
80
80
|
## Files Changed Analysis
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|------|------|--------|---------|--------|
|
|
84
|
-
{% for file in files %}
|
|
85
|
-
| `{{ file.filename }}` | {{ file.filename | split: "." | last | upcase }} | {{ file.status | capitalize }} | +{{ file.additions }}/-{{ file.deletions }} | {% if file.changes > 50 %}High{% elsif file.changes > 20 %}Medium{% else %}Low{% endif %} |
|
|
86
|
-
{% endfor %}
|
|
82
|
+
Analyze the files listed in the `<files_summary>` section, which provides a structured overview of all changes including filenames, status, additions, and deletions.
|
|
87
83
|
|
|
88
84
|
## Architecture & Impact Assessment
|
|
89
85
|
|
|
@@ -117,15 +113,11 @@ checks:
|
|
|
117
113
|
group: review
|
|
118
114
|
schema: code-review
|
|
119
115
|
prompt: |
|
|
120
|
-
Based on our overview discussion, please perform a comprehensive security analysis of the code changes
|
|
116
|
+
Based on our overview discussion, please perform a comprehensive security analysis of the code changes.
|
|
121
117
|
|
|
122
|
-
|
|
123
|
-
{% for file in files %}
|
|
124
|
-
- `{{ file.filename }}` - {{ file.status }}, +{{ file.additions }}/-{{ file.deletions }} ({{ file.changes }} total changes)
|
|
125
|
-
{% endfor %}
|
|
118
|
+
Analyze the files listed in the `<files_summary>` section and focus on the code changes shown in the diff sections.
|
|
126
119
|
|
|
127
|
-
##
|
|
128
|
-
Analyze the code for security vulnerabilities including:
|
|
120
|
+
## Security Analysis Areas
|
|
129
121
|
|
|
130
122
|
**Input Validation & Injection:**
|
|
131
123
|
- SQL injection in database queries
|
|
@@ -162,14 +154,11 @@ checks:
|
|
|
162
154
|
group: review
|
|
163
155
|
schema: code-review
|
|
164
156
|
prompt: |
|
|
165
|
-
Building on our overview and security analysis, now review the code changes for performance issues
|
|
157
|
+
Building on our overview and security analysis, now review the code changes for performance issues.
|
|
166
158
|
|
|
167
|
-
|
|
168
|
-
{% for file in files %}
|
|
169
|
-
- `{{ file.filename }}` ({{ file.changes }} changes, {{ file.status }})
|
|
170
|
-
{% endfor %}
|
|
159
|
+
Focus on the files listed in `<files_summary>` and analyze the code changes shown in the `<full_diff>` or `<commit_diff>` sections.
|
|
171
160
|
|
|
172
|
-
## Analysis Areas
|
|
161
|
+
## Performance Analysis Areas
|
|
173
162
|
**Algorithm & Data Structure Efficiency:**
|
|
174
163
|
- Time complexity analysis (O(n), O(n²), etc.)
|
|
175
164
|
- Space complexity and memory usage
|
|
@@ -204,7 +193,9 @@ checks:
|
|
|
204
193
|
group: review
|
|
205
194
|
schema: code-review
|
|
206
195
|
prompt: |
|
|
207
|
-
Building on our overview, security, and performance discussions, evaluate the code quality and maintainability
|
|
196
|
+
Building on our overview, security, and performance discussions, evaluate the code quality and maintainability.
|
|
197
|
+
|
|
198
|
+
Review the code changes shown in the `<full_diff>` or `<commit_diff>` sections, considering the files listed in `<files_summary>`.
|
|
208
199
|
|
|
209
200
|
## Quality Assessment Areas
|
|
210
201
|
**Code Structure & Design:**
|
package/dist/index.js
CHANGED
|
@@ -80893,45 +80893,168 @@ class AIReviewService {
|
|
|
80893
80893
|
*/
|
|
80894
80894
|
async buildCustomPrompt(prInfo, customInstructions, _schema) {
|
|
80895
80895
|
const prContext = this.formatPRContext(prInfo);
|
|
80896
|
+
const isIssue = prInfo.isIssue === true;
|
|
80897
|
+
if (isIssue) {
|
|
80898
|
+
// Issue context - no code analysis needed
|
|
80899
|
+
return `<review_request>
|
|
80900
|
+
<instructions>
|
|
80901
|
+
${customInstructions}
|
|
80902
|
+
</instructions>
|
|
80903
|
+
|
|
80904
|
+
<context>
|
|
80905
|
+
${prContext}
|
|
80906
|
+
</context>
|
|
80907
|
+
|
|
80908
|
+
<rules>
|
|
80909
|
+
<rule>Understand the issue context and requirements from the XML data structure</rule>
|
|
80910
|
+
<rule>Provide helpful, actionable guidance based on the issue details</rule>
|
|
80911
|
+
<rule>Be constructive and supportive in your analysis</rule>
|
|
80912
|
+
<rule>Consider project conventions and patterns when making recommendations</rule>
|
|
80913
|
+
<rule>Suggest practical solutions or next steps that address the specific concern</rule>
|
|
80914
|
+
<rule>Focus on addressing the specific concern raised in the issue</rule>
|
|
80915
|
+
<rule>Reference relevant XML elements like metadata, description, labels, assignees when providing context</rule>
|
|
80916
|
+
</rules>
|
|
80917
|
+
</review_request>`;
|
|
80918
|
+
}
|
|
80919
|
+
// PR context - structured XML format
|
|
80896
80920
|
const analysisType = prInfo.isIncremental ? 'INCREMENTAL' : 'FULL';
|
|
80897
|
-
return
|
|
80921
|
+
return `<review_request>
|
|
80922
|
+
<analysis_type>${analysisType}</analysis_type>
|
|
80898
80923
|
|
|
80899
|
-
|
|
80900
|
-
${analysisType === 'INCREMENTAL'
|
|
80901
|
-
? '
|
|
80902
|
-
: '
|
|
80924
|
+
<analysis_focus>
|
|
80925
|
+
${analysisType === 'INCREMENTAL'
|
|
80926
|
+
? 'You are analyzing a NEW COMMIT added to an existing PR. Focus on the changes in the commit_diff section for this specific commit.'
|
|
80927
|
+
: 'You are analyzing the COMPLETE PR. Review all changes in the full_diff section.'}
|
|
80928
|
+
</analysis_focus>
|
|
80903
80929
|
|
|
80904
|
-
|
|
80930
|
+
<instructions>
|
|
80905
80931
|
${customInstructions}
|
|
80932
|
+
</instructions>
|
|
80906
80933
|
|
|
80907
|
-
|
|
80908
|
-
|
|
80934
|
+
<context>
|
|
80909
80935
|
${prContext}
|
|
80910
|
-
|
|
80911
|
-
|
|
80912
|
-
|
|
80913
|
-
|
|
80914
|
-
|
|
80915
|
-
|
|
80916
|
-
|
|
80917
|
-
|
|
80918
|
-
|
|
80919
|
-
|
|
80920
|
-
|
|
80921
|
-
|
|
80922
|
-
|
|
80923
|
-
4. Focus on real issues, not nitpicks
|
|
80924
|
-
5. Provide actionable, specific feedback
|
|
80925
|
-
6. For INCREMENTAL analysis, ONLY review changes in <commit_diff>
|
|
80926
|
-
7. For FULL analysis, review all changes in <full_diff>`;
|
|
80936
|
+
</context>
|
|
80937
|
+
|
|
80938
|
+
<rules>
|
|
80939
|
+
<rule>Only analyze code that appears with + (additions) or - (deletions) in the diff sections</rule>
|
|
80940
|
+
<rule>Ignore unchanged code unless directly relevant to understanding a change</rule>
|
|
80941
|
+
<rule>Line numbers in your response should match actual file line numbers from the diff</rule>
|
|
80942
|
+
<rule>Focus on real issues, not nitpicks or cosmetic concerns</rule>
|
|
80943
|
+
<rule>Provide actionable, specific feedback with clear remediation steps</rule>
|
|
80944
|
+
<rule>For INCREMENTAL analysis, ONLY review changes in commit_diff section</rule>
|
|
80945
|
+
<rule>For FULL analysis, review all changes in full_diff section</rule>
|
|
80946
|
+
<rule>Reference specific XML elements like files_summary, metadata when providing context</rule>
|
|
80947
|
+
</rules>
|
|
80948
|
+
</review_request>`;
|
|
80927
80949
|
}
|
|
80928
80950
|
// REMOVED: Built-in prompts - only use custom prompts from .visor.yaml
|
|
80929
80951
|
// REMOVED: getFocusInstructions - only use custom prompts from .visor.yaml
|
|
80930
80952
|
/**
|
|
80931
|
-
* Format PR context for the AI using XML structure
|
|
80953
|
+
* Format PR or Issue context for the AI using XML structure
|
|
80932
80954
|
*/
|
|
80933
80955
|
formatPRContext(prInfo) {
|
|
80956
|
+
// Check if this is an issue (not a PR)
|
|
80957
|
+
const isIssue = prInfo.isIssue === true;
|
|
80958
|
+
if (isIssue) {
|
|
80959
|
+
// Format as issue context
|
|
80960
|
+
let context = `<issue>
|
|
80961
|
+
<!-- Core issue metadata including identification, status, and timeline information -->
|
|
80962
|
+
<metadata>
|
|
80963
|
+
<number>${prInfo.number}</number>
|
|
80964
|
+
<title>${this.escapeXml(prInfo.title)}</title>
|
|
80965
|
+
<author>${prInfo.author}</author>
|
|
80966
|
+
<state>${prInfo.eventContext?.issue?.state || 'open'}</state>
|
|
80967
|
+
<created_at>${prInfo.eventContext?.issue?.created_at || ''}</created_at>
|
|
80968
|
+
<updated_at>${prInfo.eventContext?.issue?.updated_at || ''}</updated_at>
|
|
80969
|
+
<comments_count>${prInfo.eventContext?.issue?.comments || 0}</comments_count>
|
|
80970
|
+
</metadata>`;
|
|
80971
|
+
// Add issue body/description if available
|
|
80972
|
+
if (prInfo.body) {
|
|
80973
|
+
context += `
|
|
80974
|
+
<!-- Full issue description and body text provided by the issue author -->
|
|
80975
|
+
<description>
|
|
80976
|
+
${this.escapeXml(prInfo.body)}
|
|
80977
|
+
</description>`;
|
|
80978
|
+
}
|
|
80979
|
+
// Add labels if available
|
|
80980
|
+
const labels = prInfo.eventContext?.issue?.labels;
|
|
80981
|
+
if (labels && labels.length > 0) {
|
|
80982
|
+
context += `
|
|
80983
|
+
<!-- Applied labels for issue categorization and organization -->
|
|
80984
|
+
<labels>`;
|
|
80985
|
+
labels.forEach((label) => {
|
|
80986
|
+
context += `
|
|
80987
|
+
<label>${this.escapeXml(label.name || label)}</label>`;
|
|
80988
|
+
});
|
|
80989
|
+
context += `
|
|
80990
|
+
</labels>`;
|
|
80991
|
+
}
|
|
80992
|
+
// Add assignees if available
|
|
80993
|
+
const assignees = prInfo.eventContext?.issue?.assignees;
|
|
80994
|
+
if (assignees && assignees.length > 0) {
|
|
80995
|
+
context += `
|
|
80996
|
+
<!-- Users assigned to work on this issue -->
|
|
80997
|
+
<assignees>`;
|
|
80998
|
+
assignees.forEach((assignee) => {
|
|
80999
|
+
context += `
|
|
81000
|
+
<assignee>${this.escapeXml(assignee.login || assignee)}</assignee>`;
|
|
81001
|
+
});
|
|
81002
|
+
context += `
|
|
81003
|
+
</assignees>`;
|
|
81004
|
+
}
|
|
81005
|
+
// Add milestone if available
|
|
81006
|
+
const milestone = prInfo.eventContext?.issue?.milestone;
|
|
81007
|
+
if (milestone) {
|
|
81008
|
+
context += `
|
|
81009
|
+
<!-- Associated project milestone information -->
|
|
81010
|
+
<milestone>
|
|
81011
|
+
<title>${this.escapeXml(milestone.title || '')}</title>
|
|
81012
|
+
<state>${milestone.state || 'open'}</state>
|
|
81013
|
+
<due_on>${milestone.due_on || ''}</due_on>
|
|
81014
|
+
</milestone>`;
|
|
81015
|
+
}
|
|
81016
|
+
// Add current/triggering comment if this is a comment event
|
|
81017
|
+
const triggeringComment = prInfo.eventContext?.comment;
|
|
81018
|
+
if (triggeringComment) {
|
|
81019
|
+
context += `
|
|
81020
|
+
<!-- The comment that triggered this analysis -->
|
|
81021
|
+
<triggering_comment>
|
|
81022
|
+
<author>${this.escapeXml(triggeringComment.user?.login || 'unknown')}</author>
|
|
81023
|
+
<created_at>${triggeringComment.created_at || ''}</created_at>
|
|
81024
|
+
<body>${this.escapeXml(triggeringComment.body || '')}</body>
|
|
81025
|
+
</triggering_comment>`;
|
|
81026
|
+
}
|
|
81027
|
+
// Add comment history (excluding the current comment if it exists)
|
|
81028
|
+
const issueComments = prInfo.comments;
|
|
81029
|
+
if (issueComments && issueComments.length > 0) {
|
|
81030
|
+
// Filter out the triggering comment from history if present
|
|
81031
|
+
const historicalComments = triggeringComment
|
|
81032
|
+
? issueComments.filter((c) => c.id !== triggeringComment.id)
|
|
81033
|
+
: issueComments;
|
|
81034
|
+
if (historicalComments.length > 0) {
|
|
81035
|
+
context += `
|
|
81036
|
+
<!-- Previous comments in chronological order (excluding triggering comment) -->
|
|
81037
|
+
<comment_history>`;
|
|
81038
|
+
historicalComments.forEach((comment) => {
|
|
81039
|
+
context += `
|
|
81040
|
+
<comment>
|
|
81041
|
+
<author>${this.escapeXml(comment.author || 'unknown')}</author>
|
|
81042
|
+
<created_at>${comment.createdAt || ''}</created_at>
|
|
81043
|
+
<body>${this.escapeXml(comment.body || '')}</body>
|
|
81044
|
+
</comment>`;
|
|
81045
|
+
});
|
|
81046
|
+
context += `
|
|
81047
|
+
</comment_history>`;
|
|
81048
|
+
}
|
|
81049
|
+
}
|
|
81050
|
+
// Close the issue tag
|
|
81051
|
+
context += `
|
|
81052
|
+
</issue>`;
|
|
81053
|
+
return context;
|
|
81054
|
+
}
|
|
81055
|
+
// Original PR context formatting
|
|
80934
81056
|
let context = `<pull_request>
|
|
81057
|
+
<!-- Core pull request metadata including identification, branches, and change statistics -->
|
|
80935
81058
|
<metadata>
|
|
80936
81059
|
<number>${prInfo.number}</number>
|
|
80937
81060
|
<title>${this.escapeXml(prInfo.title)}</title>
|
|
@@ -80945,6 +81068,7 @@ IMPORTANT RULES:
|
|
|
80945
81068
|
// Add PR description if available
|
|
80946
81069
|
if (prInfo.body) {
|
|
80947
81070
|
context += `
|
|
81071
|
+
<!-- Full pull request description provided by the author -->
|
|
80948
81072
|
<description>
|
|
80949
81073
|
${this.escapeXml(prInfo.body)}
|
|
80950
81074
|
</description>`;
|
|
@@ -80952,6 +81076,7 @@ ${this.escapeXml(prInfo.body)}
|
|
|
80952
81076
|
// Add full diff if available (for complete PR review)
|
|
80953
81077
|
if (prInfo.fullDiff) {
|
|
80954
81078
|
context += `
|
|
81079
|
+
<!-- Complete unified diff showing all changes in the pull request -->
|
|
80955
81080
|
<full_diff>
|
|
80956
81081
|
${this.escapeXml(prInfo.fullDiff)}
|
|
80957
81082
|
</full_diff>`;
|
|
@@ -80960,14 +81085,15 @@ ${this.escapeXml(prInfo.fullDiff)}
|
|
|
80960
81085
|
if (prInfo.isIncremental) {
|
|
80961
81086
|
if (prInfo.commitDiff && prInfo.commitDiff.length > 0) {
|
|
80962
81087
|
context += `
|
|
81088
|
+
<!-- Diff of only the latest commit for incremental analysis -->
|
|
80963
81089
|
<commit_diff>
|
|
80964
81090
|
${this.escapeXml(prInfo.commitDiff)}
|
|
80965
81091
|
</commit_diff>`;
|
|
80966
81092
|
}
|
|
80967
81093
|
else {
|
|
80968
81094
|
context += `
|
|
81095
|
+
<!-- Commit diff could not be retrieved - falling back to full diff analysis -->
|
|
80969
81096
|
<commit_diff>
|
|
80970
|
-
<!-- Commit diff could not be retrieved - falling back to full diff analysis -->
|
|
80971
81097
|
${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
|
|
80972
81098
|
</commit_diff>`;
|
|
80973
81099
|
}
|
|
@@ -80975,10 +81101,11 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
|
|
|
80975
81101
|
// Add file summary for context
|
|
80976
81102
|
if (prInfo.files.length > 0) {
|
|
80977
81103
|
context += `
|
|
81104
|
+
<!-- Summary of all files changed with statistics -->
|
|
80978
81105
|
<files_summary>`;
|
|
80979
|
-
prInfo.files.forEach(
|
|
81106
|
+
prInfo.files.forEach(file => {
|
|
80980
81107
|
context += `
|
|
80981
|
-
<file
|
|
81108
|
+
<file>
|
|
80982
81109
|
<filename>${this.escapeXml(file.filename)}</filename>
|
|
80983
81110
|
<status>${file.status}</status>
|
|
80984
81111
|
<additions>${file.additions}</additions>
|
|
@@ -80988,6 +81115,40 @@ ${prInfo.fullDiff ? this.escapeXml(prInfo.fullDiff) : ''}
|
|
|
80988
81115
|
context += `
|
|
80989
81116
|
</files_summary>`;
|
|
80990
81117
|
}
|
|
81118
|
+
// Add current/triggering comment if this is a comment event
|
|
81119
|
+
const triggeringComment = prInfo.eventContext?.comment;
|
|
81120
|
+
if (triggeringComment) {
|
|
81121
|
+
context += `
|
|
81122
|
+
<!-- The comment that triggered this analysis -->
|
|
81123
|
+
<triggering_comment>
|
|
81124
|
+
<author>${this.escapeXml(triggeringComment.user?.login || 'unknown')}</author>
|
|
81125
|
+
<created_at>${triggeringComment.created_at || ''}</created_at>
|
|
81126
|
+
<body>${this.escapeXml(triggeringComment.body || '')}</body>
|
|
81127
|
+
</triggering_comment>`;
|
|
81128
|
+
}
|
|
81129
|
+
// Add comment history (excluding the current comment if it exists)
|
|
81130
|
+
const prComments = prInfo.comments;
|
|
81131
|
+
if (prComments && prComments.length > 0) {
|
|
81132
|
+
// Filter out the triggering comment from history if present
|
|
81133
|
+
const historicalComments = triggeringComment
|
|
81134
|
+
? prComments.filter((c) => c.id !== triggeringComment.id)
|
|
81135
|
+
: prComments;
|
|
81136
|
+
if (historicalComments.length > 0) {
|
|
81137
|
+
context += `
|
|
81138
|
+
<!-- Previous PR comments in chronological order (excluding triggering comment) -->
|
|
81139
|
+
<comment_history>`;
|
|
81140
|
+
historicalComments.forEach((comment) => {
|
|
81141
|
+
context += `
|
|
81142
|
+
<comment>
|
|
81143
|
+
<author>${this.escapeXml(comment.author || 'unknown')}</author>
|
|
81144
|
+
<created_at>${comment.createdAt || ''}</created_at>
|
|
81145
|
+
<body>${this.escapeXml(comment.body || '')}</body>
|
|
81146
|
+
</comment>`;
|
|
81147
|
+
});
|
|
81148
|
+
context += `
|
|
81149
|
+
</comment_history>`;
|
|
81150
|
+
}
|
|
81151
|
+
}
|
|
80991
81152
|
context += `
|
|
80992
81153
|
</pull_request>`;
|
|
80993
81154
|
return context;
|
|
@@ -86349,6 +86510,18 @@ async function handleIssueEvent(octokit, owner, repo, context, inputs, config, c
|
|
|
86349
86510
|
isIssue: true, // Flag to indicate this is an issue, not a PR
|
|
86350
86511
|
eventContext: context.event, // Pass the full event context for templates
|
|
86351
86512
|
};
|
|
86513
|
+
// Fetch comment history for issues
|
|
86514
|
+
try {
|
|
86515
|
+
console.log(`💬 Fetching comment history for issue #${issue.number}`);
|
|
86516
|
+
const analyzer = new pr_analyzer_1.PRAnalyzer(octokit);
|
|
86517
|
+
const comments = await analyzer.fetchPRComments(owner, repo, issue.number);
|
|
86518
|
+
prInfo.comments = comments;
|
|
86519
|
+
console.log(`✅ Retrieved ${comments.length} comments for issue`);
|
|
86520
|
+
}
|
|
86521
|
+
catch (error) {
|
|
86522
|
+
console.warn(`⚠️ Could not fetch issue comments: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
86523
|
+
prInfo.comments = [];
|
|
86524
|
+
}
|
|
86352
86525
|
// Run the checks using CheckExecutionEngine
|
|
86353
86526
|
const { CheckExecutionEngine } = await Promise.resolve().then(() => __importStar(__nccwpck_require__(80299)));
|
|
86354
86527
|
const engine = new CheckExecutionEngine();
|
|
@@ -86520,7 +86693,7 @@ async function handleIssueComment(octokit, owner, repo, context, inputs, actionC
|
|
|
86520
86693
|
if (isPullRequest) {
|
|
86521
86694
|
// It's a PR comment - fetch the PR diff
|
|
86522
86695
|
prInfo = await analyzer.fetchPRDiff(owner, repo, prNumber, undefined, 'issue_comment');
|
|
86523
|
-
// Add event context for templates
|
|
86696
|
+
// Add event context for templates and XML generation
|
|
86524
86697
|
prInfo.eventContext = context.event;
|
|
86525
86698
|
}
|
|
86526
86699
|
else {
|
|
@@ -86538,8 +86711,19 @@ async function handleIssueComment(octokit, owner, repo, context, inputs, actionC
|
|
|
86538
86711
|
fullDiff: '',
|
|
86539
86712
|
eventType: 'issue_comment',
|
|
86540
86713
|
isIssue: true, // Flag to indicate this is an issue, not a PR
|
|
86541
|
-
eventContext: context.event, // Pass the full event context
|
|
86714
|
+
eventContext: context.event, // Pass the full event context
|
|
86542
86715
|
};
|
|
86716
|
+
// Fetch comment history for the issue
|
|
86717
|
+
try {
|
|
86718
|
+
console.log(`💬 Fetching comment history for issue #${issue.number}`);
|
|
86719
|
+
const comments = await analyzer.fetchPRComments(owner, repo, issue.number);
|
|
86720
|
+
prInfo.comments = comments;
|
|
86721
|
+
console.log(`✅ Retrieved ${comments.length} comments for issue`);
|
|
86722
|
+
}
|
|
86723
|
+
catch (error) {
|
|
86724
|
+
console.warn(`⚠️ Could not fetch issue comments: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
86725
|
+
prInfo.comments = [];
|
|
86726
|
+
}
|
|
86543
86727
|
}
|
|
86544
86728
|
// Extract common arguments
|
|
86545
86729
|
const focus = command.args?.find(arg => arg.startsWith('--focus='))?.split('=')[1];
|
|
@@ -86619,7 +86803,7 @@ async function handlePullRequestWithConfig(octokit, owner, repo, inputs, config,
|
|
|
86619
86803
|
let prInfo;
|
|
86620
86804
|
try {
|
|
86621
86805
|
prInfo = await analyzer.fetchPRDiff(owner, repo, prNumber, undefined, eventType);
|
|
86622
|
-
// Add event context for templates
|
|
86806
|
+
// Add event context for templates and XML generation
|
|
86623
86807
|
prInfo.eventContext = context.event;
|
|
86624
86808
|
}
|
|
86625
86809
|
catch (error) {
|
|
@@ -87840,6 +88024,17 @@ class PRAnalyzer {
|
|
|
87840
88024
|
fullDiff: this.generateFullDiff(validFiles),
|
|
87841
88025
|
eventType,
|
|
87842
88026
|
};
|
|
88027
|
+
// Fetch comment history for better context
|
|
88028
|
+
try {
|
|
88029
|
+
console.log(`💬 Fetching comment history for PR #${prInfo.number}`);
|
|
88030
|
+
const comments = await this.fetchPRComments(owner, repo, prInfo.number);
|
|
88031
|
+
prInfo.comments = comments;
|
|
88032
|
+
console.log(`✅ Retrieved ${comments.length} comments`);
|
|
88033
|
+
}
|
|
88034
|
+
catch (error) {
|
|
88035
|
+
console.warn(`⚠️ Could not fetch comments: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
88036
|
+
prInfo.comments = [];
|
|
88037
|
+
}
|
|
87843
88038
|
// Add commit diff for incremental analysis
|
|
87844
88039
|
if (commitSha) {
|
|
87845
88040
|
console.log(`🔧 Fetching incremental diff for commit: ${commitSha}`);
|
|
@@ -110291,6 +110486,103 @@ ${decodedContent}
|
|
|
110291
110486
|
};
|
|
110292
110487
|
}
|
|
110293
110488
|
}
|
|
110489
|
+
let proactiveFixesApplied = false;
|
|
110490
|
+
const { diagrams: currentDiagrams } = extractMermaidFromMarkdown(fixedResponse);
|
|
110491
|
+
for (let diagramIndex = currentDiagrams.length - 1; diagramIndex >= 0; diagramIndex--) {
|
|
110492
|
+
const diagram = currentDiagrams[diagramIndex];
|
|
110493
|
+
const originalContent = diagram.content;
|
|
110494
|
+
const lines = originalContent.split("\n");
|
|
110495
|
+
let wasFixed = false;
|
|
110496
|
+
const fixedLines = lines.map((line) => {
|
|
110497
|
+
const trimmedLine = line.trim();
|
|
110498
|
+
let modifiedLine = line;
|
|
110499
|
+
if (trimmedLine.match(/\[[^\]]*\]/)) {
|
|
110500
|
+
modifiedLine = modifiedLine.replace(/\[([^\]]*)\]/g, (match, content) => {
|
|
110501
|
+
if (content.trim().startsWith('"') && content.trim().endsWith('"')) {
|
|
110502
|
+
return match;
|
|
110503
|
+
}
|
|
110504
|
+
const needsQuoting = /[()'"<>&]/.test(content) || // Core problematic characters
|
|
110505
|
+
content.includes("e.g.") || content.includes("i.e.") || content.includes("src/") || content.includes("defaults/") || content.includes(".ts") || content.includes(".js") || content.includes(".yaml") || content.includes(".json") || content.includes(".md") || content.includes(".html") || content.includes(".css");
|
|
110506
|
+
if (needsQuoting) {
|
|
110507
|
+
wasFixed = true;
|
|
110508
|
+
const safeContent = content.replace(/"/g, "'");
|
|
110509
|
+
return `["${safeContent}"]`;
|
|
110510
|
+
}
|
|
110511
|
+
return match;
|
|
110512
|
+
});
|
|
110513
|
+
}
|
|
110514
|
+
if (trimmedLine.match(/\{[^{}]*\}/)) {
|
|
110515
|
+
modifiedLine = modifiedLine.replace(/\{([^{}]*)\}/g, (match, content) => {
|
|
110516
|
+
if (content.trim().startsWith('"') && content.trim().endsWith('"')) {
|
|
110517
|
+
return match;
|
|
110518
|
+
}
|
|
110519
|
+
const needsQuoting = /[()'"<>&]/.test(content) || // Core problematic characters
|
|
110520
|
+
content.includes("e.g.") || content.includes("i.e.") || content.includes("src/") || content.includes("defaults/") || content.includes(".ts") || content.includes(".js") || content.includes(".yaml") || content.includes(".json") || content.includes(".md") || content.includes(".html") || content.includes(".css");
|
|
110521
|
+
if (needsQuoting) {
|
|
110522
|
+
wasFixed = true;
|
|
110523
|
+
const safeContent = content.replace(/"/g, "'");
|
|
110524
|
+
return `{"${safeContent}"}`;
|
|
110525
|
+
}
|
|
110526
|
+
return match;
|
|
110527
|
+
});
|
|
110528
|
+
}
|
|
110529
|
+
return modifiedLine;
|
|
110530
|
+
});
|
|
110531
|
+
if (wasFixed) {
|
|
110532
|
+
const fixedContent = fixedLines.join("\n");
|
|
110533
|
+
const attributesStr = diagram.attributes ? ` ${diagram.attributes}` : "";
|
|
110534
|
+
const newCodeBlock = `\`\`\`mermaid${attributesStr}
|
|
110535
|
+
${fixedContent}
|
|
110536
|
+
\`\`\``;
|
|
110537
|
+
fixedResponse = fixedResponse.slice(0, diagram.startIndex) + newCodeBlock + fixedResponse.slice(diagram.endIndex);
|
|
110538
|
+
fixingResults.push({
|
|
110539
|
+
diagramIndex,
|
|
110540
|
+
wasFixed: true,
|
|
110541
|
+
originalContent,
|
|
110542
|
+
fixedContent,
|
|
110543
|
+
originalError: "Proactive node label quoting",
|
|
110544
|
+
fixMethod: "node_label_quote_wrapping",
|
|
110545
|
+
fixedWithProactiveQuoting: true
|
|
110546
|
+
});
|
|
110547
|
+
proactiveFixesApplied = true;
|
|
110548
|
+
if (debug) {
|
|
110549
|
+
console.log(`[DEBUG] Mermaid validation: Proactively fixed diagram ${diagramIndex + 1} with node label quoting`);
|
|
110550
|
+
console.log(`[DEBUG] Mermaid validation: Applied automatic quoting to special characters`);
|
|
110551
|
+
}
|
|
110552
|
+
}
|
|
110553
|
+
}
|
|
110554
|
+
if (proactiveFixesApplied) {
|
|
110555
|
+
const revalidation = await validateMermaidResponse(fixedResponse);
|
|
110556
|
+
if (revalidation.isValid) {
|
|
110557
|
+
const totalTime2 = Date.now() - startTime;
|
|
110558
|
+
if (debug) {
|
|
110559
|
+
console.log(`[DEBUG] Mermaid validation: All diagrams fixed with proactive quoting in ${totalTime2}ms, no AI needed`);
|
|
110560
|
+
console.log(`[DEBUG] Mermaid validation: Applied ${fixingResults.length} proactive fixes`);
|
|
110561
|
+
}
|
|
110562
|
+
if (tracer) {
|
|
110563
|
+
tracer.recordMermaidValidationEvent("proactive_fix_completed", {
|
|
110564
|
+
"mermaid_validation.success": true,
|
|
110565
|
+
"mermaid_validation.fix_method": "node_label_quote_wrapping",
|
|
110566
|
+
"mermaid_validation.diagrams_fixed": fixingResults.length,
|
|
110567
|
+
"mermaid_validation.duration_ms": totalTime2
|
|
110568
|
+
});
|
|
110569
|
+
}
|
|
110570
|
+
return {
|
|
110571
|
+
...revalidation,
|
|
110572
|
+
wasFixed: true,
|
|
110573
|
+
originalResponse: response,
|
|
110574
|
+
fixedResponse,
|
|
110575
|
+
fixingResults,
|
|
110576
|
+
performanceMetrics: {
|
|
110577
|
+
totalTimeMs: totalTime2,
|
|
110578
|
+
aiFixingTimeMs: 0,
|
|
110579
|
+
finalValidationTimeMs: 0,
|
|
110580
|
+
diagramsProcessed: fixingResults.length,
|
|
110581
|
+
diagramsFixed: fixingResults.length
|
|
110582
|
+
}
|
|
110583
|
+
};
|
|
110584
|
+
}
|
|
110585
|
+
}
|
|
110294
110586
|
let subgraphFixesApplied = false;
|
|
110295
110587
|
const { diagrams: postHtmlDiagrams } = extractMermaidFromMarkdown(fixedResponse);
|
|
110296
110588
|
const postHtmlValidation = await validateMermaidResponse(fixedResponse);
|
|
@@ -110384,16 +110676,21 @@ ${fixedContent}
|
|
|
110384
110676
|
const postSubgraphValidation = await validateMermaidResponse(fixedResponse);
|
|
110385
110677
|
const stillInvalidAfterSubgraph = postSubgraphValidation.diagrams.map((result, index) => ({ ...result, originalIndex: index })).filter((result) => !result.isValid).reverse();
|
|
110386
110678
|
for (const invalidDiagram of stillInvalidAfterSubgraph) {
|
|
110387
|
-
if (invalidDiagram.error && (invalidDiagram.error.includes("Parentheses in node label") || invalidDiagram.error.includes("Complex expression in diamond node"))) {
|
|
110679
|
+
if (invalidDiagram.error && (invalidDiagram.error.includes("Parentheses in node label") || invalidDiagram.error.includes("Complex expression in diamond node") || invalidDiagram.error.includes("Single quotes in node label"))) {
|
|
110388
110680
|
const originalContent = invalidDiagram.content;
|
|
110389
110681
|
const lines = originalContent.split("\n");
|
|
110390
110682
|
let wasFixed = false;
|
|
110391
110683
|
const fixedLines = lines.map((line) => {
|
|
110392
110684
|
const trimmedLine = line.trim();
|
|
110393
110685
|
let modifiedLine = line;
|
|
110394
|
-
if (trimmedLine.match(/\[[^\]
|
|
110395
|
-
modifiedLine = modifiedLine.replace(/\[([^\]
|
|
110396
|
-
if (
|
|
110686
|
+
if (trimmedLine.match(/\[[^\]]*\]/)) {
|
|
110687
|
+
modifiedLine = modifiedLine.replace(/\[([^\]]*)\]/g, (match, content) => {
|
|
110688
|
+
if (content.trim().startsWith('"') && content.trim().endsWith('"')) {
|
|
110689
|
+
return match;
|
|
110690
|
+
}
|
|
110691
|
+
const needsQuoting = /[()'"<>&]/.test(content) || // Core problematic characters
|
|
110692
|
+
content.includes("e.g.") || content.includes("i.e.") || content.includes("src/") || content.includes("defaults/") || content.includes(".ts") || content.includes(".js") || content.includes(".yaml") || content.includes(".json");
|
|
110693
|
+
if (needsQuoting) {
|
|
110397
110694
|
wasFixed = true;
|
|
110398
110695
|
const safeContent = content.replace(/"/g, "'");
|
|
110399
110696
|
return `["${safeContent}"]`;
|
|
@@ -110401,9 +110698,14 @@ ${fixedContent}
|
|
|
110401
110698
|
return match;
|
|
110402
110699
|
});
|
|
110403
110700
|
}
|
|
110404
|
-
if (trimmedLine.match(/\{[^{}
|
|
110405
|
-
modifiedLine = modifiedLine.replace(/\{([^{}
|
|
110406
|
-
if (
|
|
110701
|
+
if (trimmedLine.match(/\{[^{}]*\}/)) {
|
|
110702
|
+
modifiedLine = modifiedLine.replace(/\{([^{}]*)\}/g, (match, content) => {
|
|
110703
|
+
if (content.trim().startsWith('"') && content.trim().endsWith('"')) {
|
|
110704
|
+
return match;
|
|
110705
|
+
}
|
|
110706
|
+
const needsQuoting = /[()'"<>&]/.test(content) || // Core problematic characters
|
|
110707
|
+
content.includes("e.g.") || content.includes("i.e.") || content.includes("src/") || content.includes("defaults/") || content.includes(".ts") || content.includes(".js") || content.includes(".yaml") || content.includes(".json");
|
|
110708
|
+
if (needsQuoting) {
|
|
110407
110709
|
wasFixed = true;
|
|
110408
110710
|
const safeContent = content.replace(/"/g, "'");
|
|
110409
110711
|
return `{"${safeContent}"}`;
|
|
@@ -110837,6 +111139,7 @@ var init_ProbeAgent = __esm({
|
|
|
110837
111139
|
* @param {boolean} [options.debug] - Enable debug mode
|
|
110838
111140
|
* @param {boolean} [options.outline] - Enable outline-xml format for search results
|
|
110839
111141
|
* @param {number} [options.maxResponseTokens] - Maximum tokens for AI responses
|
|
111142
|
+
* @param {boolean} [options.disableMermaidValidation=false] - Disable automatic mermaid diagram validation and fixing
|
|
110840
111143
|
*/
|
|
110841
111144
|
constructor(options = {}) {
|
|
110842
111145
|
this.sessionId = options.sessionId || (0, import_crypto5.randomUUID)();
|
|
@@ -110848,6 +111151,7 @@ var init_ProbeAgent = __esm({
|
|
|
110848
111151
|
this.tracer = options.tracer || null;
|
|
110849
111152
|
this.outline = !!options.outline;
|
|
110850
111153
|
this.maxResponseTokens = options.maxResponseTokens || parseInt(process.env.MAX_RESPONSE_TOKENS || "0", 10) || null;
|
|
111154
|
+
this.disableMermaidValidation = !!options.disableMermaidValidation;
|
|
110851
111155
|
this.allowedFolders = options.path ? [options.path] : [process.cwd()];
|
|
110852
111156
|
this.clientApiProvider = options.provider || null;
|
|
110853
111157
|
this.clientApiKey = null;
|
|
@@ -111541,56 +111845,60 @@ Convert your previous response content into actual JSON data that follows this s
|
|
|
111541
111845
|
_schemaFormatted: true
|
|
111542
111846
|
});
|
|
111543
111847
|
finalResult = cleanSchemaResponse(finalResult);
|
|
111544
|
-
|
|
111545
|
-
|
|
111546
|
-
console.log(`[DEBUG] Mermaid validation: Starting enhanced mermaid validation...`);
|
|
111547
|
-
}
|
|
111548
|
-
if (this.tracer) {
|
|
111549
|
-
this.tracer.recordMermaidValidationEvent("schema_processing_started", {
|
|
111550
|
-
"mermaid_validation.context": "schema_processing",
|
|
111551
|
-
"mermaid_validation.response_length": finalResult.length
|
|
111552
|
-
});
|
|
111553
|
-
}
|
|
111554
|
-
const mermaidValidation = await validateAndFixMermaidResponse(finalResult, {
|
|
111555
|
-
debug: this.debug,
|
|
111556
|
-
path: this.allowedFolders[0],
|
|
111557
|
-
provider: this.clientApiProvider,
|
|
111558
|
-
model: this.model,
|
|
111559
|
-
tracer: this.tracer
|
|
111560
|
-
});
|
|
111561
|
-
if (mermaidValidation.wasFixed) {
|
|
111562
|
-
finalResult = mermaidValidation.fixedResponse;
|
|
111848
|
+
if (!this.disableMermaidValidation) {
|
|
111849
|
+
try {
|
|
111563
111850
|
if (this.debug) {
|
|
111564
|
-
console.log(`[DEBUG] Mermaid validation:
|
|
111565
|
-
|
|
111566
|
-
|
|
111567
|
-
|
|
111568
|
-
|
|
111851
|
+
console.log(`[DEBUG] Mermaid validation: Starting enhanced mermaid validation...`);
|
|
111852
|
+
}
|
|
111853
|
+
if (this.tracer) {
|
|
111854
|
+
this.tracer.recordMermaidValidationEvent("schema_processing_started", {
|
|
111855
|
+
"mermaid_validation.context": "schema_processing",
|
|
111856
|
+
"mermaid_validation.response_length": finalResult.length
|
|
111857
|
+
});
|
|
111858
|
+
}
|
|
111859
|
+
const mermaidValidation = await validateAndFixMermaidResponse(finalResult, {
|
|
111860
|
+
debug: this.debug,
|
|
111861
|
+
path: this.allowedFolders[0],
|
|
111862
|
+
provider: this.clientApiProvider,
|
|
111863
|
+
model: this.model,
|
|
111864
|
+
tracer: this.tracer
|
|
111865
|
+
});
|
|
111866
|
+
if (mermaidValidation.wasFixed) {
|
|
111867
|
+
finalResult = mermaidValidation.fixedResponse;
|
|
111868
|
+
if (this.debug) {
|
|
111869
|
+
console.log(`[DEBUG] Mermaid validation: Diagrams successfully fixed`);
|
|
111870
|
+
if (mermaidValidation.performanceMetrics) {
|
|
111871
|
+
const metrics = mermaidValidation.performanceMetrics;
|
|
111872
|
+
console.log(`[DEBUG] Mermaid validation: Performance - total: ${metrics.totalTimeMs}ms, AI fixing: ${metrics.aiFixingTimeMs}ms`);
|
|
111873
|
+
console.log(`[DEBUG] Mermaid validation: Results - ${metrics.diagramsFixed}/${metrics.diagramsProcessed} diagrams fixed`);
|
|
111874
|
+
}
|
|
111875
|
+
if (mermaidValidation.fixingResults) {
|
|
111876
|
+
mermaidValidation.fixingResults.forEach((fixResult, index) => {
|
|
111877
|
+
if (fixResult.wasFixed) {
|
|
111878
|
+
const method = fixResult.fixedWithHtmlDecoding ? "HTML entity decoding" : "AI correction";
|
|
111879
|
+
const time = fixResult.aiFixingTimeMs ? ` in ${fixResult.aiFixingTimeMs}ms` : "";
|
|
111880
|
+
console.log(`[DEBUG] Mermaid validation: Fixed diagram ${fixResult.diagramIndex + 1} with ${method}${time}`);
|
|
111881
|
+
console.log(`[DEBUG] Mermaid validation: Original error: ${fixResult.originalError}`);
|
|
111882
|
+
} else {
|
|
111883
|
+
console.log(`[DEBUG] Mermaid validation: Failed to fix diagram ${fixResult.diagramIndex + 1}: ${fixResult.fixingError}`);
|
|
111884
|
+
}
|
|
111885
|
+
});
|
|
111886
|
+
}
|
|
111569
111887
|
}
|
|
111570
|
-
|
|
111571
|
-
|
|
111572
|
-
|
|
111573
|
-
|
|
111574
|
-
const time = fixResult.aiFixingTimeMs ? ` in ${fixResult.aiFixingTimeMs}ms` : "";
|
|
111575
|
-
console.log(`[DEBUG] Mermaid validation: Fixed diagram ${fixResult.diagramIndex + 1} with ${method}${time}`);
|
|
111576
|
-
console.log(`[DEBUG] Mermaid validation: Original error: ${fixResult.originalError}`);
|
|
111577
|
-
} else {
|
|
111578
|
-
console.log(`[DEBUG] Mermaid validation: Failed to fix diagram ${fixResult.diagramIndex + 1}: ${fixResult.fixingError}`);
|
|
111579
|
-
}
|
|
111580
|
-
});
|
|
111888
|
+
} else if (this.debug) {
|
|
111889
|
+
console.log(`[DEBUG] Mermaid validation: No fixes needed or fixes unsuccessful`);
|
|
111890
|
+
if (mermaidValidation.diagrams?.length > 0) {
|
|
111891
|
+
console.log(`[DEBUG] Mermaid validation: Found ${mermaidValidation.diagrams.length} diagrams, all valid: ${mermaidValidation.isValid}`);
|
|
111581
111892
|
}
|
|
111582
111893
|
}
|
|
111583
|
-
}
|
|
111584
|
-
|
|
111585
|
-
|
|
111586
|
-
console.log(`[DEBUG] Mermaid validation:
|
|
111894
|
+
} catch (error) {
|
|
111895
|
+
if (this.debug) {
|
|
111896
|
+
console.log(`[DEBUG] Mermaid validation: Process failed with error: ${error.message}`);
|
|
111897
|
+
console.log(`[DEBUG] Mermaid validation: Stack trace: ${error.stack}`);
|
|
111587
111898
|
}
|
|
111588
111899
|
}
|
|
111589
|
-
}
|
|
111590
|
-
|
|
111591
|
-
console.log(`[DEBUG] Mermaid validation: Process failed with error: ${error.message}`);
|
|
111592
|
-
console.log(`[DEBUG] Mermaid validation: Stack trace: ${error.stack}`);
|
|
111593
|
-
}
|
|
111900
|
+
} else if (this.debug) {
|
|
111901
|
+
console.log(`[DEBUG] Mermaid validation: Skipped due to disableMermaidValidation option`);
|
|
111594
111902
|
}
|
|
111595
111903
|
if (isJsonSchema(options.schema)) {
|
|
111596
111904
|
if (this.debug) {
|
|
@@ -111695,26 +112003,30 @@ Convert your previous response content into actual JSON data that follows this s
|
|
|
111695
112003
|
} else if (completionAttempted && options.schema) {
|
|
111696
112004
|
try {
|
|
111697
112005
|
finalResult = cleanSchemaResponse(finalResult);
|
|
111698
|
-
if (this.
|
|
111699
|
-
console.log(`[DEBUG] Mermaid validation: Validating attempt_completion result...`);
|
|
111700
|
-
}
|
|
111701
|
-
const mermaidValidation = await validateAndFixMermaidResponse(finalResult, {
|
|
111702
|
-
debug: this.debug,
|
|
111703
|
-
path: this.allowedFolders[0],
|
|
111704
|
-
provider: this.clientApiProvider,
|
|
111705
|
-
model: this.model,
|
|
111706
|
-
tracer: this.tracer
|
|
111707
|
-
});
|
|
111708
|
-
if (mermaidValidation.wasFixed) {
|
|
111709
|
-
finalResult = mermaidValidation.fixedResponse;
|
|
112006
|
+
if (!this.disableMermaidValidation) {
|
|
111710
112007
|
if (this.debug) {
|
|
111711
|
-
console.log(`[DEBUG] Mermaid validation: attempt_completion
|
|
111712
|
-
|
|
111713
|
-
|
|
112008
|
+
console.log(`[DEBUG] Mermaid validation: Validating attempt_completion result...`);
|
|
112009
|
+
}
|
|
112010
|
+
const mermaidValidation = await validateAndFixMermaidResponse(finalResult, {
|
|
112011
|
+
debug: this.debug,
|
|
112012
|
+
path: this.allowedFolders[0],
|
|
112013
|
+
provider: this.clientApiProvider,
|
|
112014
|
+
model: this.model,
|
|
112015
|
+
tracer: this.tracer
|
|
112016
|
+
});
|
|
112017
|
+
if (mermaidValidation.wasFixed) {
|
|
112018
|
+
finalResult = mermaidValidation.fixedResponse;
|
|
112019
|
+
if (this.debug) {
|
|
112020
|
+
console.log(`[DEBUG] Mermaid validation: attempt_completion diagrams fixed`);
|
|
112021
|
+
if (mermaidValidation.performanceMetrics) {
|
|
112022
|
+
console.log(`[DEBUG] Mermaid validation: Fixed in ${mermaidValidation.performanceMetrics.totalTimeMs}ms`);
|
|
112023
|
+
}
|
|
111714
112024
|
}
|
|
112025
|
+
} else if (this.debug) {
|
|
112026
|
+
console.log(`[DEBUG] Mermaid validation: attempt_completion result validation completed (no fixes needed)`);
|
|
111715
112027
|
}
|
|
111716
112028
|
} else if (this.debug) {
|
|
111717
|
-
console.log(`[DEBUG] Mermaid validation: attempt_completion result
|
|
112029
|
+
console.log(`[DEBUG] Mermaid validation: Skipped for attempt_completion result due to disableMermaidValidation option`);
|
|
111718
112030
|
}
|
|
111719
112031
|
if (isJsonSchema(options.schema)) {
|
|
111720
112032
|
if (this.debug) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/pr-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAQD,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,MAAU;IAGhC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,GAChD,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/pr-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAQD,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,MAAU;IAGhC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,OAAO,gBAAgB,EAAE,YAAY,GAChD,OAAO,CAAC,MAAM,CAAC;IAkHZ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;YAkBrD,SAAS;IAwCvB,OAAO,CAAC,gBAAgB;CAkBzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@probelabs/visor",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"bin": {
|
|
6
6
|
"visor": "./dist/index.js"
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@octokit/auth-app": "^8.1.0",
|
|
67
67
|
"@octokit/core": "^7.0.3",
|
|
68
68
|
"@octokit/rest": "^22.0.0",
|
|
69
|
-
"@probelabs/probe": "^0.6.0-
|
|
69
|
+
"@probelabs/probe": "^0.6.0-rc86",
|
|
70
70
|
"@types/commander": "^2.12.0",
|
|
71
71
|
"@types/uuid": "^10.0.0",
|
|
72
72
|
"cli-table3": "^0.6.5",
|