ghagga 2.8.1 → 3.0.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/LICENSE +21 -0
- package/dist/commands/__tests__/review-tui.test.js +2 -2
- package/dist/commands/__tests__/review-tui.test.js.map +1 -1
- package/dist/commands/audit.d.ts +23 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +282 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/audit.test.d.ts +10 -0
- package/dist/commands/audit.test.d.ts.map +1 -0
- package/dist/commands/audit.test.js +110 -0
- package/dist/commands/audit.test.js.map +1 -0
- package/dist/commands/dismiss.d.ts +14 -0
- package/dist/commands/dismiss.d.ts.map +1 -0
- package/dist/commands/dismiss.js +98 -0
- package/dist/commands/dismiss.js.map +1 -0
- package/dist/commands/feedback.d.ts +18 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +122 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/login.js +3 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/login.test.js +3 -2
- package/dist/commands/login.test.js.map +1 -1
- package/dist/commands/review-commit-msg.test.js +2 -2
- package/dist/commands/review-commit-msg.test.js.map +1 -1
- package/dist/commands/review-output.test.js +2 -2
- package/dist/commands/review-output.test.js.map +1 -1
- package/dist/commands/review.d.ts +4 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +14 -0
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/review.test.js +44 -33
- package/dist/commands/review.test.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +15 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/status.test.js +31 -10
- package/dist/commands/status.test.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +79 -23
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +5 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +22 -3
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/github-api.d.ts.map +1 -1
- package/dist/lib/github-api.js +15 -6
- package/dist/lib/github-api.js.map +1 -1
- package/dist/lib/github-api.test.js +24 -1
- package/dist/lib/github-api.test.js.map +1 -1
- package/dist/lib/providers.d.ts +29 -0
- package/dist/lib/providers.d.ts.map +1 -0
- package/dist/lib/providers.js +41 -0
- package/dist/lib/providers.js.map +1 -0
- package/dist/lib/providers.test.d.ts +9 -0
- package/dist/lib/providers.test.d.ts.map +1 -0
- package/dist/lib/providers.test.js +60 -0
- package/dist/lib/providers.test.js.map +1 -0
- package/dist/ui/__tests__/format.test.js +2 -2
- package/dist/ui/__tests__/format.test.js.map +1 -1
- package/dist/ui/__tests__/theme.test.js +3 -2
- package/dist/ui/__tests__/theme.test.js.map +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +1 -0
- package/dist/ui/theme.js.map +1 -1
- package/package.json +17 -18
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 JNZader & Gentleman Programming Community
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -24,7 +24,7 @@ function mockResult(overrides) {
|
|
|
24
24
|
metadata: {
|
|
25
25
|
mode: 'simple',
|
|
26
26
|
model: 'gpt-4o-mini',
|
|
27
|
-
provider: '
|
|
27
|
+
provider: 'gateway',
|
|
28
28
|
executionTimeMs: 2500,
|
|
29
29
|
tokensUsed: 150,
|
|
30
30
|
toolsRun: ['semgrep', 'trivy'],
|
|
@@ -80,7 +80,7 @@ describe('formatBoxSummary', () => {
|
|
|
80
80
|
metadata: {
|
|
81
81
|
mode: 'simple',
|
|
82
82
|
model: 'gpt-4o-mini',
|
|
83
|
-
provider: '
|
|
83
|
+
provider: 'gateway',
|
|
84
84
|
executionTimeMs: 1000,
|
|
85
85
|
tokensUsed: 50,
|
|
86
86
|
toolsRun: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-tui.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/review-tui.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,mEAAmE;AAEnE,SAAS,UAAU,CAAC,SAAiC;IACnD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE;YACd,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;YAChE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;YAC9D,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;SAC7D;QACD,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"review-tui.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/review-tui.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE/F,mEAAmE;AAEnE,SAAS,UAAU,CAAC,SAAiC;IACnD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE;YACd,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;YAChE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;YAC9D,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;SAC7D;QACD,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,SAAS;YACnB,eAAe,EAAE,IAAI;YACrB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YAC9B,YAAY,EAAE,CAAC,KAAK,CAAC;SACtB;QACD,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEnE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC1F,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;gBACtF,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;aAC3F;SACF,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,SAAS;gBACnB,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;gBACZ,YAAY,EAAE,EAAE;aACjB;SACF,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;gBACnF,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC/E,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;gBACjF,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC9E,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;aAChF;SACF,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;QAEtD,6CAA6C;QAC7C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAEnD,wCAAwC;QACxC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACxD,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;gBACzF,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;aAC3F;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC5C,mDAAmD;QACnD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9B,iCAAiC;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,6BAA6B;oBACtC,MAAM,EAAE,SAAS;iBAClB;aACF;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,YAAY;oBACrB,UAAU,EAAE,cAAc;oBAC1B,MAAM,EAAE,IAAI;iBACb;aACF;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;gBACtF;oBACE,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,aAAa;oBACtB,MAAM,EAAE,OAAO;iBAChB;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,eAAe;oBACxB,MAAM,EAAE,SAAS;iBAClB;aACF;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit command — full-project security and code-quality audit.
|
|
3
|
+
*
|
|
4
|
+
* Runs static analysis tools against a project directory and optionally
|
|
5
|
+
* calls an LLM to produce an executive audit report. Use --quick to
|
|
6
|
+
* skip the LLM and get static findings only.
|
|
7
|
+
*/
|
|
8
|
+
export interface AuditOptions {
|
|
9
|
+
/** Skip LLM call — static analysis only */
|
|
10
|
+
quick?: boolean;
|
|
11
|
+
/** LLM provider (overrides config) */
|
|
12
|
+
provider?: string;
|
|
13
|
+
/** LLM model (overrides config) */
|
|
14
|
+
model?: string;
|
|
15
|
+
/** API key (overrides config/env) */
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
/** Output format: 'text' (default) or 'json' */
|
|
18
|
+
output?: string;
|
|
19
|
+
/** Persist audit result to history file */
|
|
20
|
+
save?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function auditCommand(targetPath: string, options: AuditOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0O3F"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit command — full-project security and code-quality audit.
|
|
3
|
+
*
|
|
4
|
+
* Runs static analysis tools against a project directory and optionally
|
|
5
|
+
* calls an LLM to produce an executive audit report. Use --quick to
|
|
6
|
+
* skip the LLM and get static findings only.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { join, resolve } from 'node:path';
|
|
10
|
+
import { createNodeExecutionContext, DEFAULT_MODELS, formatStaticAnalysisContext, initializeDefaultTools, resolveActivatedTools, runAuditReport, runTools, toolRegistry, } from 'ghagga-core';
|
|
11
|
+
import { getConfigDir, getStoredToken, loadConfig } from '../lib/config.js';
|
|
12
|
+
import { resolveProjectId } from '../lib/git.js';
|
|
13
|
+
import { isLegacyProvider, remapLegacyStoredProvider } from '../lib/providers.js';
|
|
14
|
+
import { formatSeverityLine } from '../ui/format.js';
|
|
15
|
+
import * as tui from '../ui/tui.js';
|
|
16
|
+
// ─── Main Command ───────────────────────────────────────────────
|
|
17
|
+
export async function auditCommand(targetPath, options) {
|
|
18
|
+
const repoPath = resolve(targetPath);
|
|
19
|
+
try {
|
|
20
|
+
// Step 1: Validate path
|
|
21
|
+
if (!existsSync(repoPath)) {
|
|
22
|
+
tui.log.error(`❌ Path does not exist: ${repoPath}`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (!statSync(repoPath).isDirectory()) {
|
|
26
|
+
tui.log.error(`❌ Path is not a directory: ${repoPath}`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
// Step 2: Resolve auth (if not --quick)
|
|
30
|
+
let provider = options.provider;
|
|
31
|
+
let model = options.model;
|
|
32
|
+
let apiKey = options.apiKey;
|
|
33
|
+
if (!options.quick) {
|
|
34
|
+
const config = loadConfig();
|
|
35
|
+
// Explicit legacy values (--provider flag / env var) are a hard error —
|
|
36
|
+
// same behavior as "ghagga review". Only STORED CONFIG values are
|
|
37
|
+
// remapped (read-time migration below).
|
|
38
|
+
if (isLegacyProvider(provider)) {
|
|
39
|
+
tui.log.error(`\n❌ Provider '${provider}' is no longer supported directly.\n` +
|
|
40
|
+
` → Set --provider gateway and configure credentials in mcp-llm-bridge.\n` +
|
|
41
|
+
` → See: https://github.com/JNZader/mcp-llm-bridge\n\n` +
|
|
42
|
+
` Or use --provider cli-bridge for local CLI tools (Claude Code, OpenCode, Copilot).\n`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
let providerRemapped = false;
|
|
46
|
+
if (!provider) {
|
|
47
|
+
provider = config.defaultProvider ?? 'gateway';
|
|
48
|
+
// Read-time migration: legacy provider stored by an old "ghagga login"
|
|
49
|
+
const remap = remapLegacyStoredProvider(provider);
|
|
50
|
+
if (remap.remapped) {
|
|
51
|
+
tui.log.warn(`⚠️ Stored provider '${provider}' is no longer supported — using 'gateway' instead.\n` +
|
|
52
|
+
` Run "ghagga login" again to refresh your saved config.`);
|
|
53
|
+
provider = remap.provider;
|
|
54
|
+
providerRemapped = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!model) {
|
|
58
|
+
// A stored model belongs to the legacy provider — ignore it after remap
|
|
59
|
+
model =
|
|
60
|
+
(providerRemapped ? undefined : config.defaultModel) ??
|
|
61
|
+
DEFAULT_MODELS[provider];
|
|
62
|
+
}
|
|
63
|
+
if (!apiKey) {
|
|
64
|
+
apiKey = process.env.GHAGGA_API_KEY ?? undefined;
|
|
65
|
+
// gateway / cli-bridge can use the stored GitHub token (same as review)
|
|
66
|
+
if (!apiKey && (provider === 'gateway' || provider === 'cli-bridge')) {
|
|
67
|
+
apiKey = getStoredToken() ?? undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ollama, cli-bridge, and gateway (when self-hosted) don't require a key
|
|
71
|
+
const noKeyRequired = provider === 'ollama' || provider === 'cli-bridge' || provider === 'gateway';
|
|
72
|
+
if (!apiKey && !noKeyRequired) {
|
|
73
|
+
tui.log.error('❌ No API key available.\n');
|
|
74
|
+
tui.log.error(' Quick fix: run "ghagga login" to authenticate.');
|
|
75
|
+
tui.log.error(' Or pass --api-key <key> or set GHAGGA_API_KEY.');
|
|
76
|
+
tui.log.error(' Or use --provider ollama for local models (no key needed).');
|
|
77
|
+
tui.log.error(' Or use --quick to run static analysis only.\n');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
// Ollama doesn't need an API key — use a placeholder
|
|
81
|
+
if (provider === 'ollama' && !apiKey) {
|
|
82
|
+
apiKey = 'ollama';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Step 3: Initialize tool registry
|
|
86
|
+
initializeDefaultTools();
|
|
87
|
+
if (!options.output) {
|
|
88
|
+
tui.intro('🔍 GHAGGA Audit');
|
|
89
|
+
}
|
|
90
|
+
// Step 4: Run static analysis (all tools)
|
|
91
|
+
if (!options.output) {
|
|
92
|
+
tui.log.step('Running static analysis...');
|
|
93
|
+
}
|
|
94
|
+
const allTools = resolveActivatedTools({
|
|
95
|
+
registry: toolRegistry,
|
|
96
|
+
files: [],
|
|
97
|
+
enabledTools: toolRegistry.getAll().map((t) => t.name),
|
|
98
|
+
});
|
|
99
|
+
if (allTools.length === 0) {
|
|
100
|
+
tui.log.warn('⚠️ No static analysis tools available. Exiting.');
|
|
101
|
+
process.exit(0);
|
|
102
|
+
}
|
|
103
|
+
const ctx = createNodeExecutionContext();
|
|
104
|
+
const staticResult = (await runTools(ctx, allTools, repoPath, []));
|
|
105
|
+
// Step 5: Format static context
|
|
106
|
+
const staticContext = formatStaticAnalysisContext(staticResult);
|
|
107
|
+
// Collect raw findings for output/save
|
|
108
|
+
const allFindings = [];
|
|
109
|
+
for (const toolResult of Object.values(staticResult)) {
|
|
110
|
+
if (toolResult && typeof toolResult === 'object' && 'findings' in toolResult) {
|
|
111
|
+
allFindings.push(...toolResult.findings);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Step 6: --quick path — print findings and exit
|
|
115
|
+
if (options.quick) {
|
|
116
|
+
if (options.output === 'json') {
|
|
117
|
+
console.log(JSON.stringify({
|
|
118
|
+
mode: 'quick',
|
|
119
|
+
findings: allFindings,
|
|
120
|
+
timestamp: new Date().toISOString(),
|
|
121
|
+
}, null, 2));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
renderStaticFindings(allFindings, staticContext);
|
|
125
|
+
}
|
|
126
|
+
if (!options.output) {
|
|
127
|
+
tui.outro('Audit complete (static only)');
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Step 7: LLM audit report
|
|
132
|
+
if (!options.output) {
|
|
133
|
+
tui.log.step('Running LLM audit...');
|
|
134
|
+
}
|
|
135
|
+
let auditResult;
|
|
136
|
+
try {
|
|
137
|
+
auditResult = await runAuditReport({
|
|
138
|
+
repoPath,
|
|
139
|
+
staticContext,
|
|
140
|
+
provider: provider ?? 'gateway',
|
|
141
|
+
model: model ?? DEFAULT_MODELS[(provider ?? 'gateway')],
|
|
142
|
+
apiKey: apiKey ?? '',
|
|
143
|
+
onProgress: options.output
|
|
144
|
+
? undefined
|
|
145
|
+
: (event) => {
|
|
146
|
+
tui.log.step(` ${event.message}`);
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
152
|
+
tui.log.warn(`⚠️ LLM audit failed: ${message}`);
|
|
153
|
+
tui.log.warn(' Falling back to static findings only.');
|
|
154
|
+
if (options.output === 'json') {
|
|
155
|
+
console.log(JSON.stringify({
|
|
156
|
+
mode: 'quick',
|
|
157
|
+
error: message,
|
|
158
|
+
findings: allFindings,
|
|
159
|
+
timestamp: new Date().toISOString(),
|
|
160
|
+
}, null, 2));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
renderStaticFindings(allFindings, staticContext);
|
|
164
|
+
}
|
|
165
|
+
if (!options.output) {
|
|
166
|
+
tui.outro('Audit complete (static only — LLM unavailable)');
|
|
167
|
+
}
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// Step 8: Output
|
|
171
|
+
if (options.output === 'json') {
|
|
172
|
+
console.log(JSON.stringify({
|
|
173
|
+
status: auditResult.status,
|
|
174
|
+
report: auditResult.report,
|
|
175
|
+
findings: allFindings,
|
|
176
|
+
timestamp: auditResult.timestamp,
|
|
177
|
+
...(auditResult.error ? { error: auditResult.error } : {}),
|
|
178
|
+
}, null, 2));
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
renderAuditReport(auditResult, allFindings);
|
|
182
|
+
}
|
|
183
|
+
// Step 9: Save to history if --save flag is set
|
|
184
|
+
if (options.save) {
|
|
185
|
+
const projectPath = resolveProjectId(repoPath);
|
|
186
|
+
const configDir = getConfigDir();
|
|
187
|
+
persistAuditEntry(configDir, projectPath, auditResult, allFindings);
|
|
188
|
+
}
|
|
189
|
+
if (!options.output) {
|
|
190
|
+
tui.outro('Audit complete');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
195
|
+
tui.log.error(`\n❌ Audit failed: ${message}`);
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ─── Styled Output ──────────────────────────────────────────────
|
|
200
|
+
function renderStaticFindings(findings, staticContext) {
|
|
201
|
+
if (findings.length === 0) {
|
|
202
|
+
tui.log.message(tui.box('Audit Results', ['✅ No static analysis findings.']));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const boxLines = [
|
|
206
|
+
`Total findings: ${findings.length}`,
|
|
207
|
+
'',
|
|
208
|
+
`Critical: ${findings.filter((f) => f.severity === 'critical').length}`,
|
|
209
|
+
`High: ${findings.filter((f) => f.severity === 'high').length}`,
|
|
210
|
+
`Medium: ${findings.filter((f) => f.severity === 'medium').length}`,
|
|
211
|
+
`Low: ${findings.filter((f) => f.severity === 'low').length}`,
|
|
212
|
+
`Info: ${findings.filter((f) => f.severity === 'info').length}`,
|
|
213
|
+
];
|
|
214
|
+
tui.log.message(tui.box('Static Analysis Results', boxLines));
|
|
215
|
+
if (staticContext.length > 0) {
|
|
216
|
+
tui.log.message('');
|
|
217
|
+
tui.log.message(tui.divider('Findings'));
|
|
218
|
+
const topFindings = findings.slice(0, 20);
|
|
219
|
+
for (const finding of topFindings) {
|
|
220
|
+
tui.log.message(` ${formatSeverityLine(finding)}`);
|
|
221
|
+
}
|
|
222
|
+
if (findings.length > 20) {
|
|
223
|
+
tui.log.message(` ... and ${findings.length - 20} more findings`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function renderAuditReport(auditResult, allFindings) {
|
|
228
|
+
const statusIcon = auditResult.status === 'completed' ? '✅' : auditResult.status === 'no-findings' ? '✅' : '⚠️';
|
|
229
|
+
const summaryLines = [
|
|
230
|
+
`Status: ${auditResult.status}`,
|
|
231
|
+
`Findings: ${allFindings.length} total`,
|
|
232
|
+
`Timestamp: ${auditResult.timestamp}`,
|
|
233
|
+
];
|
|
234
|
+
tui.log.message(tui.box(`${statusIcon} Audit Report`, summaryLines));
|
|
235
|
+
if (auditResult.report) {
|
|
236
|
+
tui.log.message('');
|
|
237
|
+
tui.log.message(tui.divider('Executive Report'));
|
|
238
|
+
tui.log.message(auditResult.report);
|
|
239
|
+
}
|
|
240
|
+
if (auditResult.error) {
|
|
241
|
+
tui.log.message('');
|
|
242
|
+
tui.log.warn(`⚠️ Error: ${auditResult.error}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const AUDIT_HISTORY_FILE = 'audit-history.json';
|
|
246
|
+
const MAX_AUDIT_ENTRIES = 20;
|
|
247
|
+
function persistAuditEntry(configDir, projectPath, auditResult, findings) {
|
|
248
|
+
try {
|
|
249
|
+
if (!existsSync(configDir)) {
|
|
250
|
+
mkdirSync(configDir, { recursive: true });
|
|
251
|
+
}
|
|
252
|
+
const historyPath = join(configDir, AUDIT_HISTORY_FILE);
|
|
253
|
+
let entries = [];
|
|
254
|
+
if (existsSync(historyPath)) {
|
|
255
|
+
try {
|
|
256
|
+
entries = JSON.parse(readFileSync(historyPath, 'utf-8'));
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
entries = [];
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const newEntry = {
|
|
263
|
+
timestamp: auditResult.timestamp,
|
|
264
|
+
status: auditResult.status,
|
|
265
|
+
findingCount: findings.length,
|
|
266
|
+
projectPath,
|
|
267
|
+
report: auditResult.report || undefined,
|
|
268
|
+
};
|
|
269
|
+
entries.push(newEntry);
|
|
270
|
+
// Prune oldest entries beyond max (keep newest)
|
|
271
|
+
if (entries.length > MAX_AUDIT_ENTRIES) {
|
|
272
|
+
entries = entries.slice(entries.length - MAX_AUDIT_ENTRIES);
|
|
273
|
+
}
|
|
274
|
+
writeFileSync(historyPath, `${JSON.stringify(entries, null, 2)}\n`, 'utf-8');
|
|
275
|
+
tui.log.success('✅ Audit saved to history');
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
279
|
+
tui.log.warn(`⚠️ Could not save audit history: ${message}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit command tests — provider resolution.
|
|
3
|
+
*
|
|
4
|
+
* Verifies the legacy-provider handling mirrors "ghagga review":
|
|
5
|
+
* explicit legacy values (--provider flag / env var) are a hard error,
|
|
6
|
+
* while legacy values loaded from stored config are remapped to
|
|
7
|
+
* 'gateway' at read time and the audit proceeds.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=audit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.test.d.ts","sourceRoot":"","sources":["../../src/commands/audit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit command tests — provider resolution.
|
|
3
|
+
*
|
|
4
|
+
* Verifies the legacy-provider handling mirrors "ghagga review":
|
|
5
|
+
* explicit legacy values (--provider flag / env var) are a hard error,
|
|
6
|
+
* while legacy values loaded from stored config are remapped to
|
|
7
|
+
* 'gateway' at read time and the audit proceeds.
|
|
8
|
+
*/
|
|
9
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
10
|
+
// ─── Mocks ─────────────────────────────────────────────────────
|
|
11
|
+
vi.mock('node:fs', () => ({
|
|
12
|
+
existsSync: vi.fn().mockReturnValue(true),
|
|
13
|
+
statSync: vi.fn().mockReturnValue({ isDirectory: () => true }),
|
|
14
|
+
mkdirSync: vi.fn(),
|
|
15
|
+
readFileSync: vi.fn(),
|
|
16
|
+
writeFileSync: vi.fn(),
|
|
17
|
+
}));
|
|
18
|
+
const mockRunAuditReport = vi.fn();
|
|
19
|
+
const mockRunTools = vi.fn();
|
|
20
|
+
vi.mock('ghagga-core', () => ({
|
|
21
|
+
DEFAULT_MODELS: {
|
|
22
|
+
gateway: 'auto',
|
|
23
|
+
'cli-bridge': 'auto',
|
|
24
|
+
ollama: 'llama3',
|
|
25
|
+
},
|
|
26
|
+
createNodeExecutionContext: vi.fn().mockReturnValue({}),
|
|
27
|
+
formatStaticAnalysisContext: vi.fn().mockReturnValue(''),
|
|
28
|
+
initializeDefaultTools: vi.fn(),
|
|
29
|
+
resolveActivatedTools: vi.fn().mockReturnValue([{ name: 'semgrep' }]),
|
|
30
|
+
runAuditReport: (...args) => mockRunAuditReport(...args),
|
|
31
|
+
runTools: (...args) => mockRunTools(...args),
|
|
32
|
+
toolRegistry: {
|
|
33
|
+
getAll: vi.fn().mockReturnValue([{ name: 'semgrep' }]),
|
|
34
|
+
},
|
|
35
|
+
}));
|
|
36
|
+
vi.mock('../lib/config.js', () => ({
|
|
37
|
+
getConfigDir: vi.fn().mockReturnValue('/mock-home/.config/ghagga'),
|
|
38
|
+
getStoredToken: vi.fn().mockReturnValue('gho_storedtoken'),
|
|
39
|
+
loadConfig: vi.fn(),
|
|
40
|
+
}));
|
|
41
|
+
vi.mock('../lib/git.js', () => ({
|
|
42
|
+
resolveProjectId: vi.fn().mockReturnValue('mock/project'),
|
|
43
|
+
}));
|
|
44
|
+
vi.mock('../ui/tui.js', () => ({
|
|
45
|
+
intro: vi.fn(),
|
|
46
|
+
outro: vi.fn(),
|
|
47
|
+
box: vi.fn().mockReturnValue(''),
|
|
48
|
+
divider: vi.fn().mockReturnValue(''),
|
|
49
|
+
log: {
|
|
50
|
+
info: vi.fn(),
|
|
51
|
+
message: vi.fn(),
|
|
52
|
+
success: vi.fn(),
|
|
53
|
+
warn: vi.fn(),
|
|
54
|
+
error: vi.fn(),
|
|
55
|
+
step: vi.fn(),
|
|
56
|
+
},
|
|
57
|
+
}));
|
|
58
|
+
vi.mock('../ui/format.js', () => ({
|
|
59
|
+
formatSeverityLine: vi.fn().mockReturnValue(''),
|
|
60
|
+
}));
|
|
61
|
+
import { loadConfig } from '../lib/config.js';
|
|
62
|
+
import * as tui from '../ui/tui.js';
|
|
63
|
+
import { auditCommand } from './audit.js';
|
|
64
|
+
const mockLoadConfig = vi.mocked(loadConfig);
|
|
65
|
+
// ─── Setup ─────────────────────────────────────────────────────
|
|
66
|
+
const exitSpy = vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
67
|
+
throw new Error(`process.exit:${code}`);
|
|
68
|
+
});
|
|
69
|
+
beforeEach(() => {
|
|
70
|
+
vi.clearAllMocks();
|
|
71
|
+
mockLoadConfig.mockReturnValue({});
|
|
72
|
+
mockRunTools.mockResolvedValue({});
|
|
73
|
+
mockRunAuditReport.mockResolvedValue({
|
|
74
|
+
status: 'completed',
|
|
75
|
+
report: 'All good.',
|
|
76
|
+
timestamp: '2026-06-10T00:00:00.000Z',
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// ─── Tests ─────────────────────────────────────────────────────
|
|
80
|
+
describe('auditCommand provider resolution', () => {
|
|
81
|
+
it('explicit legacy provider (--provider flag / env var) is a hard error', async () => {
|
|
82
|
+
await expect(auditCommand('.', { provider: 'github' })).rejects.toThrow('process.exit');
|
|
83
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
84
|
+
expect(tui.log.error).toHaveBeenCalledWith(expect.stringContaining("Provider 'github' is no longer supported directly"));
|
|
85
|
+
expect(mockRunAuditReport).not.toHaveBeenCalled();
|
|
86
|
+
});
|
|
87
|
+
it('stored legacy provider is remapped to gateway and the audit proceeds', async () => {
|
|
88
|
+
mockLoadConfig.mockReturnValue({
|
|
89
|
+
githubToken: 'gho_storedtoken',
|
|
90
|
+
defaultProvider: 'github',
|
|
91
|
+
defaultModel: 'gpt-4o-mini',
|
|
92
|
+
});
|
|
93
|
+
await auditCommand('.', {});
|
|
94
|
+
// Read-time migration warned but did NOT hard-fail
|
|
95
|
+
expect(tui.log.warn).toHaveBeenCalledWith(expect.stringContaining("Stored provider 'github' is no longer supported"));
|
|
96
|
+
expect(exitSpy).not.toHaveBeenCalled();
|
|
97
|
+
expect(tui.log.error).not.toHaveBeenCalled();
|
|
98
|
+
// The stored model belongs to the legacy provider — gateway default applies
|
|
99
|
+
expect(mockRunAuditReport).toHaveBeenCalledWith(expect.objectContaining({
|
|
100
|
+
provider: 'gateway',
|
|
101
|
+
model: 'auto',
|
|
102
|
+
}));
|
|
103
|
+
});
|
|
104
|
+
it('explicit current provider passes through unchanged', async () => {
|
|
105
|
+
await auditCommand('.', { provider: 'gateway' });
|
|
106
|
+
expect(exitSpy).not.toHaveBeenCalled();
|
|
107
|
+
expect(mockRunAuditReport).toHaveBeenCalledWith(expect.objectContaining({ provider: 'gateway', model: 'auto' }));
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=audit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.test.js","sourceRoot":"","sources":["../../src/commands/audit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,kEAAkE;AAElE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;IACzC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9D,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;IAClB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;IACrB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAC;AAEJ,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACnC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAE7B,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,cAAc,EAAE;QACd,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,QAAQ;KACjB;IACD,0BAA0B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IACvD,2BAA2B,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IACxD,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE;IAC/B,qBAAqB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,cAAc,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IACnE,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IACvD,YAAY,EAAE;QACZ,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;KACvD;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,2BAA2B,CAAC;IAClE,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC;IAC1D,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;CACpB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC;CAC1D,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IAChC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;IACpC,GAAG,EAAE;QACH,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;KACd;CACF,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAE7C,kEAAkE;AAElE,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE;IACpE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,aAAa,EAAE,CAAC;IAEnB,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACnC,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACnC,kBAAkB,CAAC,iBAAiB,CAAC;QACnC,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,0BAA0B;KACtC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kEAAkE;AAElE,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC,mDAAmD,CAAC,CAC7E,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,cAAc,CAAC,eAAe,CAAC;YAC7B,WAAW,EAAE,iBAAiB;YAC9B,eAAe,EAAE,QAAQ;YACzB,YAAY,EAAE,aAAa;SAC5B,CAAC,CAAC;QAEH,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE5B,mDAAmD;QACnD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,MAAM,CAAC,gBAAgB,CAAC,iDAAiD,CAAC,CAC3E,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAE7C,4EAA4E;QAC5E,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAC7C,MAAM,CAAC,gBAAgB,CAAC;YACtB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,MAAM;SACd,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAC7C,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAChE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ghagga dismiss` command.
|
|
3
|
+
*
|
|
4
|
+
* Saves a dismissed finding as a negative example in the memory database
|
|
5
|
+
* so the review pipeline will suppress it in future reviews.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ghagga dismiss <finding-hash> --category <name> [--file <path>] [--reason <text>]
|
|
9
|
+
* ghagga dismiss list
|
|
10
|
+
* ghagga dismiss remove <finding-hash>
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare const dismissCommand: Command;
|
|
14
|
+
//# sourceMappingURL=dismiss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss.d.ts","sourceRoot":"","sources":["../../src/commands/dismiss.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,cAAc,SA6CxB,CAAC"}
|