corgea-cli 1.8.7__tar.gz → 1.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. corgea_cli-1.9.0/.codex/hooks.json +14 -0
  2. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/.github/workflows/release.yml +35 -0
  3. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/.github/workflows/test.yml +10 -3
  4. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/.gitignore +4 -0
  5. corgea_cli-1.9.0/AGENTS.md +24 -0
  6. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/Cargo.lock +89 -6
  7. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/Cargo.toml +4 -1
  8. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/PKG-INFO +1 -1
  9. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/README.md +23 -0
  10. corgea_cli-1.9.0/examples/deps_skill.rs +31 -0
  11. corgea_cli-1.9.0/harness +357 -0
  12. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/skills/corgea/SKILL.md +22 -0
  13. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/authorize.rs +62 -57
  14. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/cicd.rs +3 -4
  15. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/config.rs +22 -8
  16. corgea_cli-1.9.0/src/deps/detect.rs +103 -0
  17. corgea_cli-1.9.0/src/deps/diff.rs +151 -0
  18. corgea_cli-1.9.0/src/deps/ecosystems/evaluate.rs +304 -0
  19. corgea_cli-1.9.0/src/deps/ecosystems/maven.rs +247 -0
  20. corgea_cli-1.9.0/src/deps/ecosystems/mod.rs +139 -0
  21. corgea_cli-1.9.0/src/deps/ecosystems/npm.rs +350 -0
  22. corgea_cli-1.9.0/src/deps/ecosystems/pypi.rs +471 -0
  23. corgea_cli-1.9.0/src/deps/explain.rs +82 -0
  24. corgea_cli-1.9.0/src/deps/findings.rs +38 -0
  25. corgea_cli-1.9.0/src/deps/mod.rs +95 -0
  26. corgea_cli-1.9.0/src/deps/model.rs +239 -0
  27. corgea_cli-1.9.0/src/deps/parse/mod.rs +4 -0
  28. corgea_cli-1.9.0/src/deps/parse/npm_lock.rs +10 -0
  29. corgea_cli-1.9.0/src/deps/parse/python_lock.rs +10 -0
  30. corgea_cli-1.9.0/src/deps/policy.rs +92 -0
  31. corgea_cli-1.9.0/src/deps/report.rs +172 -0
  32. corgea_cli-1.9.0/src/deps/run.rs +872 -0
  33. corgea_cli-1.9.0/src/deps/skill.rs +185 -0
  34. corgea_cli-1.9.0/src/deps/tests/common.rs +15 -0
  35. corgea_cli-1.9.0/src/deps/tests/correctness_tests.rs +46 -0
  36. corgea_cli-1.9.0/src/deps/tests/detect_tests.rs +50 -0
  37. corgea_cli-1.9.0/src/deps/tests/diff_tests.rs +132 -0
  38. corgea_cli-1.9.0/src/deps/tests/explain_tests.rs +20 -0
  39. corgea_cli-1.9.0/src/deps/tests/findings_tests.rs +25 -0
  40. corgea_cli-1.9.0/src/deps/tests/maven_tests.rs +129 -0
  41. corgea_cli-1.9.0/src/deps/tests/mod.rs +13 -0
  42. corgea_cli-1.9.0/src/deps/tests/npm_tests.rs +350 -0
  43. corgea_cli-1.9.0/src/deps/tests/policy_tests.rs +44 -0
  44. corgea_cli-1.9.0/src/deps/tests/pypi_tests.rs +183 -0
  45. corgea_cli-1.9.0/src/deps/tests/report_tests.rs +29 -0
  46. corgea_cli-1.9.0/src/deps/tests/robustness_tests.rs +105 -0
  47. corgea_cli-1.9.0/src/deps/tests/slice0_tests.rs +16 -0
  48. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/inspect.rs +51 -34
  49. corgea_cli-1.9.0/src/lib.rs +1 -0
  50. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/list.rs +117 -77
  51. corgea_cli-1.9.0/src/log.rs +8 -0
  52. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/main.rs +285 -69
  53. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scan.rs +178 -110
  54. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scanners/blast.rs +207 -153
  55. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scanners/fortify.rs +17 -8
  56. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scanners/parsers/checkmarx.rs +25 -16
  57. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scanners/parsers/coverity.rs +32 -12
  58. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scanners/parsers/mod.rs +7 -6
  59. corgea_cli-1.9.0/src/scanners/parsers/sarif.rs +121 -0
  60. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/scanners/parsers/semgrep.rs +7 -7
  61. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/setup_hooks.rs +25 -16
  62. corgea_cli-1.9.0/src/skill.rs +367 -0
  63. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/targets.rs +84 -83
  64. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/utils/api.rs +613 -188
  65. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/utils/generic.rs +91 -35
  66. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/utils/terminal.rs +65 -35
  67. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/src/wait.rs +27 -21
  68. corgea_cli-1.9.0/tests/cli_deps.rs +913 -0
  69. corgea_cli-1.9.0/tests/cli_deps_skill.rs +10 -0
  70. corgea_cli-1.9.0/tests/fixtures/README.md +23 -0
  71. corgea_cli-1.9.0/tests/fixtures/go-mod-smoke/go.mod +5 -0
  72. corgea_cli-1.9.0/tests/fixtures/go-mod-smoke/go.sum +2 -0
  73. corgea_cli-1.9.0/tests/fixtures/java-gradle/build.gradle +10 -0
  74. corgea_cli-1.9.0/tests/fixtures/java-gradle/gradle.lockfile +6 -0
  75. corgea_cli-1.9.0/tests/fixtures/java-maven/pom.xml +35 -0
  76. corgea_cli-1.9.0/tests/fixtures/malformed/not-xml-pom.xml +1 -0
  77. corgea_cli-1.9.0/tests/fixtures/malformed/package-lock.json +6 -0
  78. corgea_cli-1.9.0/tests/fixtures/malformed/package.json +4 -0
  79. corgea_cli-1.9.0/tests/fixtures/malformed/poetry.lock +3 -0
  80. corgea_cli-1.9.0/tests/fixtures/malformed/pyproject.toml +6 -0
  81. corgea_cli-1.9.0/tests/fixtures/malformed/truncated-poetry.lock +3 -0
  82. corgea_cli-1.9.0/tests/fixtures/node-app/.corgea/deps.yml +8 -0
  83. corgea_cli-1.9.0/tests/fixtures/node-app/package-lock.json +44 -0
  84. corgea_cli-1.9.0/tests/fixtures/node-app/package.json +13 -0
  85. corgea_cli-1.9.0/tests/fixtures/node-monorepo/package-lock.json +11 -0
  86. corgea_cli-1.9.0/tests/fixtures/node-monorepo/package.json +6 -0
  87. corgea_cli-1.9.0/tests/fixtures/node-monorepo/packages/a/package.json +1 -0
  88. corgea_cli-1.9.0/tests/fixtures/node-monorepo/packages/b/package.json +1 -0
  89. corgea_cli-1.9.0/tests/fixtures/node-pnpm/package.json +7 -0
  90. corgea_cli-1.9.0/tests/fixtures/node-pnpm/pnpm-lock.yaml +5 -0
  91. corgea_cli-1.9.0/tests/fixtures/node-stale/package-lock.json +15 -0
  92. corgea_cli-1.9.0/tests/fixtures/node-stale/package.json +5 -0
  93. corgea_cli-1.9.0/tests/fixtures/node-transitive/package-lock.json +34 -0
  94. corgea_cli-1.9.0/tests/fixtures/node-transitive/package.json +7 -0
  95. corgea_cli-1.9.0/tests/fixtures/node-yarn/package.json +7 -0
  96. corgea_cli-1.9.0/tests/fixtures/node-yarn/yarn.lock +4 -0
  97. corgea_cli-1.9.0/tests/fixtures/python-pip-nolock/requirements.txt +4 -0
  98. corgea_cli-1.9.0/tests/fixtures/python-poetry/poetry.lock +31 -0
  99. corgea_cli-1.9.0/tests/fixtures/python-poetry/pyproject.toml +11 -0
  100. corgea_cli-1.9.0/tests/fixtures/python-poetry-multi/poetry.lock +34 -0
  101. corgea_cli-1.9.0/tests/fixtures/python-poetry-multi/pyproject.toml +8 -0
  102. corgea_cli-1.9.0/tests/fixtures/python-uv-requirements/pyproject.toml +3 -0
  103. corgea_cli-1.9.0/tests/fixtures/python-uv-requirements/requirements.txt +1 -0
  104. corgea_cli-1.9.0/tests/fixtures/python-uv-requirements/uv.lock +2 -0
  105. corgea_cli-1.9.0/tests/logging_e2e.rs +103 -0
  106. corgea_cli-1.8.7/src/log.rs +0 -8
  107. corgea_cli-1.8.7/src/scanners/parsers/sarif.rs +0 -70
  108. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/.github/workflows/npm-publish.yml +0 -0
  109. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/.github/workflows/release-binaries.yml +0 -0
  110. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/.github/workflows/update_docs..yml +0 -0
  111. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/LICENSE +0 -0
  112. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/bin/corgea.js +0 -0
  113. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/build_release.sh +0 -0
  114. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/package.json +0 -0
  115. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/pyproject.toml +0 -0
  116. {corgea_cli-1.8.7 → corgea_cli-1.9.0}/scripts/npm/bundle-binaries.js +0 -0
@@ -0,0 +1,14 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "./harness post-edit codex"
9
+ }
10
+ ]
11
+ }
12
+ ]
13
+ }
14
+ }
@@ -22,6 +22,7 @@ jobs:
22
22
  linux-x86:
23
23
  runs-on: ${{ matrix.platform.runner }}
24
24
  strategy:
25
+ fail-fast: false
25
26
  matrix:
26
27
  platform:
27
28
  - runner: ubuntu-latest
@@ -31,12 +32,26 @@ jobs:
31
32
 
32
33
  steps:
33
34
  - uses: actions/checkout@v4
35
+ - name: Prepare resilient maturin download for manylinux Docker
36
+ run: |
37
+ bin_dir="${RUNNER_TEMP}/maturin-docker-bin"
38
+ mkdir -p "$bin_dir"
39
+ cat > "$bin_dir/curl" <<'EOF'
40
+ #!/bin/bash
41
+ set -euo pipefail
42
+ if [[ " $* " == *" PyO3/maturin/releases "* ]]; then
43
+ exec /usr/bin/curl --fail --retry 5 --retry-delay 3 --retry-all-errors "$@"
44
+ fi
45
+ exec /usr/bin/curl "$@"
46
+ EOF
47
+ chmod +x "$bin_dir/curl"
34
48
  - name: Build wheels
35
49
  uses: PyO3/maturin-action@v1
36
50
  with:
37
51
  target: ${{ matrix.platform.target }}
38
52
  args: --release --out dist
39
53
  manylinux: auto
54
+ docker-options: -v ${{ runner.temp }}/maturin-docker-bin/curl:/usr/local/bin/curl:ro
40
55
  before-script-linux: |
41
56
  # If we're running on rhel centos, install needed packages.
42
57
  if command -v yum &> /dev/null; then
@@ -45,6 +60,26 @@ jobs:
45
60
  # If we're running on debian-based system.
46
61
  apt update -y && apt-get install -y libssl-dev openssl pkg-config musl-tools
47
62
  fi
63
+ - name: Assert manylinux wheel compatibility tags
64
+ run: |
65
+ shopt -s nullglob
66
+ wheels=(dist/*.whl)
67
+ if ((${#wheels[@]} == 0)); then
68
+ echo "No wheels found in dist/"
69
+ exit 1
70
+ fi
71
+ for wheel in "${wheels[@]}"; do
72
+ base=$(basename "$wheel")
73
+ if [[ "$base" == *manylinux_2_3[0-9]* ]]; then
74
+ echo "Wheel tag too new for broad Linux support: $base"
75
+ exit 1
76
+ fi
77
+ if [[ ! "$base" =~ manylinux2014 ]]; then
78
+ echo "Expected manylinux2014 compatibility tag, got: $base"
79
+ exit 1
80
+ fi
81
+ echo "OK: $base"
82
+ done
48
83
  - name: Upload wheels
49
84
  uses: actions/upload-artifact@v4
50
85
  with:
@@ -17,10 +17,17 @@ jobs:
17
17
 
18
18
  - name: Setup Rust
19
19
  uses: dtolnay/rust-toolchain@stable
20
+ with:
21
+ components: llvm-tools-preview
22
+
23
+ - name: Install cargo-llvm-cov
24
+ uses: taiki-e/install-action@cargo-llvm-cov
25
+
26
+ - name: Install cargo-audit
27
+ uses: taiki-e/install-action@cargo-audit
20
28
 
21
29
  - name: Cache cargo
22
30
  uses: Swatinem/rust-cache@v2
23
31
 
24
-
25
- - name: Run unit tests
26
- run: cargo test
32
+ - name: CI gate
33
+ run: ./harness ci
@@ -3,5 +3,9 @@
3
3
  .DS_Store
4
4
  .dccache
5
5
  *.zip
6
+ *.profraw
6
7
  node_modules/
7
8
  /packages/*/vendor/
9
+
10
+ .claude/
11
+ CLAUDE.md
@@ -0,0 +1,24 @@
1
+ # AGENTS.md
2
+
3
+ This subproject is the Corgea developer CLI (Rust → npm + pip via maturin).
4
+
5
+ ## Commands
6
+
7
+ - After edits: `./harness check` — clippy fix, format, tests, suppression report
8
+ - Pre-commit: `./harness pre-commit` — staged Rust files only (auto via git hook)
9
+ - CI: `./harness ci` — strict clippy (`-D warnings`), format check, dep audit, tests + coverage gate (min 13%)
10
+ - Audit: `./harness audit` — `cargo audit` for known dep vulnerabilities
11
+ - Coverage: `./harness coverage [--min=N]` — cargo-llvm-cov; HTML report under `target/llvm-cov/`; fails if line coverage < N (default 13)
12
+ - Lint: `./harness lint` — clippy + format check, no fixes
13
+ - Test: `./harness test` — `cargo test`
14
+ - Fix: `./harness fix` — clippy fix + format
15
+ - Setup: `./harness setup-hooks` — install `.git/hooks/pre-commit`
16
+ - Auto-format: `./harness post-edit` — runs `cargo fmt` on changed Rust files (wire into your editor/agent's post-edit hook)
17
+
18
+ Add `--verbose` to stream raw command output instead of the quiet summary.
19
+
20
+ Coverage needs LLVM's `llvm-cov`/`llvm-profdata`. On a rustup toolchain, run
21
+ `rustup component add llvm-tools-preview`. On a non-rustup toolchain (e.g.
22
+ Homebrew Rust) those are missing, so point cargo-llvm-cov at a system LLVM:
23
+ `LLVM_COV="$(brew --prefix llvm)/bin/llvm-cov" LLVM_PROFDATA="$(brew --prefix llvm)/bin/llvm-profdata" ./harness coverage`.
24
+ CI uses its own toolchain and is unaffected.
@@ -340,11 +340,12 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
340
340
 
341
341
  [[package]]
342
342
  name = "corgea"
343
- version = "1.8.7"
343
+ version = "1.9.0"
344
344
  dependencies = [
345
345
  "chrono",
346
346
  "clap",
347
347
  "dirs",
348
+ "env_logger",
348
349
  "git2",
349
350
  "globset",
350
351
  "http",
@@ -352,6 +353,7 @@ dependencies = [
352
353
  "hyper",
353
354
  "hyper-util",
354
355
  "ignore",
356
+ "log",
355
357
  "open",
356
358
  "openssl",
357
359
  "quick-xml",
@@ -360,6 +362,7 @@ dependencies = [
360
362
  "serde",
361
363
  "serde_derive",
362
364
  "serde_json",
365
+ "serde_yaml_ng",
363
366
  "tempfile",
364
367
  "termcolor",
365
368
  "tokio",
@@ -523,6 +526,29 @@ version = "1.15.0"
523
526
  source = "registry+https://github.com/rust-lang/crates.io-index"
524
527
  checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
525
528
 
529
+ [[package]]
530
+ name = "env_filter"
531
+ version = "1.0.0"
532
+ source = "registry+https://github.com/rust-lang/crates.io-index"
533
+ checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f"
534
+ dependencies = [
535
+ "log",
536
+ "regex",
537
+ ]
538
+
539
+ [[package]]
540
+ name = "env_logger"
541
+ version = "0.11.9"
542
+ source = "registry+https://github.com/rust-lang/crates.io-index"
543
+ checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d"
544
+ dependencies = [
545
+ "anstream",
546
+ "anstyle",
547
+ "env_filter",
548
+ "jiff",
549
+ "log",
550
+ ]
551
+
526
552
  [[package]]
527
553
  name = "equivalent"
528
554
  version = "1.0.2"
@@ -1092,6 +1118,30 @@ version = "1.0.15"
1092
1118
  source = "registry+https://github.com/rust-lang/crates.io-index"
1093
1119
  checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1094
1120
 
1121
+ [[package]]
1122
+ name = "jiff"
1123
+ version = "0.2.28"
1124
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1125
+ checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102"
1126
+ dependencies = [
1127
+ "jiff-static",
1128
+ "log",
1129
+ "portable-atomic",
1130
+ "portable-atomic-util",
1131
+ "serde_core",
1132
+ ]
1133
+
1134
+ [[package]]
1135
+ name = "jiff-static"
1136
+ version = "0.2.28"
1137
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1138
+ checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47"
1139
+ dependencies = [
1140
+ "proc-macro2",
1141
+ "quote",
1142
+ "syn",
1143
+ ]
1144
+
1095
1145
  [[package]]
1096
1146
  name = "jobserver"
1097
1147
  version = "0.1.34"
@@ -1321,15 +1371,14 @@ dependencies = [
1321
1371
 
1322
1372
  [[package]]
1323
1373
  name = "openssl"
1324
- version = "0.10.73"
1374
+ version = "0.10.80"
1325
1375
  source = "registry+https://github.com/rust-lang/crates.io-index"
1326
- checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
1376
+ checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967"
1327
1377
  dependencies = [
1328
1378
  "bitflags",
1329
1379
  "cfg-if",
1330
1380
  "foreign-types",
1331
1381
  "libc",
1332
- "once_cell",
1333
1382
  "openssl-macros",
1334
1383
  "openssl-sys",
1335
1384
  ]
@@ -1362,9 +1411,9 @@ dependencies = [
1362
1411
 
1363
1412
  [[package]]
1364
1413
  name = "openssl-sys"
1365
- version = "0.9.109"
1414
+ version = "0.9.116"
1366
1415
  source = "registry+https://github.com/rust-lang/crates.io-index"
1367
- checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
1416
+ checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4"
1368
1417
  dependencies = [
1369
1418
  "cc",
1370
1419
  "libc",
@@ -1442,6 +1491,21 @@ version = "0.3.32"
1442
1491
  source = "registry+https://github.com/rust-lang/crates.io-index"
1443
1492
  checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
1444
1493
 
1494
+ [[package]]
1495
+ name = "portable-atomic"
1496
+ version = "1.13.1"
1497
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1498
+ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
1499
+
1500
+ [[package]]
1501
+ name = "portable-atomic-util"
1502
+ version = "0.2.7"
1503
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1504
+ checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
1505
+ dependencies = [
1506
+ "portable-atomic",
1507
+ ]
1508
+
1445
1509
  [[package]]
1446
1510
  name = "potential_utf"
1447
1511
  version = "0.1.3"
@@ -1760,6 +1824,19 @@ dependencies = [
1760
1824
  "serde",
1761
1825
  ]
1762
1826
 
1827
+ [[package]]
1828
+ name = "serde_yaml_ng"
1829
+ version = "0.10.0"
1830
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1831
+ checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f"
1832
+ dependencies = [
1833
+ "indexmap",
1834
+ "itoa",
1835
+ "ryu",
1836
+ "serde",
1837
+ "unsafe-libyaml",
1838
+ ]
1839
+
1763
1840
  [[package]]
1764
1841
  name = "sha1"
1765
1842
  version = "0.10.6"
@@ -2170,6 +2247,12 @@ version = "1.0.19"
2170
2247
  source = "registry+https://github.com/rust-lang/crates.io-index"
2171
2248
  checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
2172
2249
 
2250
+ [[package]]
2251
+ name = "unsafe-libyaml"
2252
+ version = "0.2.11"
2253
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2254
+ checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
2255
+
2173
2256
  [[package]]
2174
2257
  name = "url"
2175
2258
  version = "2.5.7"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "corgea"
3
- version = "1.8.7"
3
+ version = "1.9.0"
4
4
  edition = "2021"
5
5
  readme = "README.md"
6
6
 
@@ -18,6 +18,8 @@ reqwest = { version = "0.12.23", default-features = false, features = [
18
18
  "system-proxy",
19
19
  ] }
20
20
  toml = "0.8.8"
21
+ log = "0.4"
22
+ env_logger = "0.11"
21
23
  serde = { version = "1.0.195", features = ["derive"] }
22
24
  serde_json = "1.0.111"
23
25
  serde_derive = "1.0.195"
@@ -40,6 +42,7 @@ http-body-util = "0.1"
40
42
  url = "2.5"
41
43
  open = "5.0"
42
44
  urlencoding = "2.1"
45
+ serde_yaml_ng = "0.10"
43
46
 
44
47
  [target.'cfg(not(target_os = "windows"))'.dependencies]
45
48
  openssl = { version = "0.10", features = ["vendored"] }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: corgea-cli
3
- Version: 1.8.7
3
+ Version: 1.9.0
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -26,6 +26,29 @@ Once the binary is installed, login with your token from the Corgea app.
26
26
  corgea login <token>
27
27
  ```
28
28
 
29
+ ## Dependency Inventory (offline)
30
+
31
+ `corgea deps` builds a dependency inventory from npm, Python, and Java manifests
32
+ and lockfiles, then evaluates a pinning policy (DEP rules). Runs fully offline —
33
+ no token or network required.
34
+
35
+ ```bash
36
+ corgea deps scan # table report for the current directory
37
+ corgea deps scan --format agent # compact TSV for coding agents
38
+ corgea deps scan --format json # JSON inventory on stdout
39
+ corgea deps scan --format quiet # no stdout; exit code still applies
40
+ corgea deps scan --fail-on high # exit 1 if any finding is >= high
41
+ corgea deps scan --out-format json # machine-readable (json or sarif)
42
+ corgea deps graph --format json # print the resolved dependency graph
43
+ corgea deps explain <package> --format agent # show why a package is present
44
+ corgea deps diff --base origin/main --format json
45
+ corgea deps sbom --format cyclonedx # emit a CycloneDX SBOM
46
+ corgea deps policy init --exist-ok # write starter policy, or keep existing file
47
+ ```
48
+
49
+ `corgea deps` defaults to `--format agent` when an agent environment is detected (`AI_AGENT`, `CODEX_SANDBOX`, `CLAUDECODE`, and related agent variables). Use `--format human` to force the normal terminal output.
50
+
51
+ See [Dependency Scanning (CLI)](https://docs.corgea.app/cli/deps) for the full flag and exit-code reference.
29
52
 
30
53
  ## Development Setup
31
54
 
@@ -0,0 +1,31 @@
1
+ use std::path::Path;
2
+ use std::process::ExitCode;
3
+
4
+ use corgea::deps::skill::{check_skill_file, generated_marked_section, update_skill_file};
5
+
6
+ const SKILL_PATH: &str = "skills/corgea/SKILL.md";
7
+
8
+ fn main() -> ExitCode {
9
+ let mode = std::env::args()
10
+ .nth(1)
11
+ .unwrap_or_else(|| "print".to_string());
12
+ let skill_path = Path::new(SKILL_PATH);
13
+
14
+ let result = match mode.as_str() {
15
+ "print" => {
16
+ println!("{}", generated_marked_section());
17
+ Ok(())
18
+ }
19
+ "check" => check_skill_file(skill_path),
20
+ "update" => update_skill_file(skill_path),
21
+ _ => Err("usage: cargo run --example deps_skill -- [print|check|update]".to_string()),
22
+ };
23
+
24
+ match result {
25
+ Ok(()) => ExitCode::SUCCESS,
26
+ Err(message) => {
27
+ eprintln!("{message}");
28
+ ExitCode::FAILURE
29
+ }
30
+ }
31
+ }