@cejel/cejel 0.4.4 → 0.4.6
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 +38 -6
- package/dist/calibration/llm-detector.js +5 -5
- package/dist/{chunk-EW6NAHE4.js → chunk-2IBG5OBF.js} +1 -1
- package/dist/{chunk-EPK7UTIK.js → chunk-BZXBLDCJ.js} +1 -1
- package/dist/{chunk-R4DPQLS2.js → chunk-H55KECVT.js} +17 -0
- package/dist/{chunk-RW6YJVHZ.js → chunk-QRWLHTGR.js} +2 -2
- package/dist/{chunk-PJEKYFVM.js → chunk-VEJLHO5F.js} +981 -282
- package/dist/{chunk-KGFGX3TP.js → chunk-Y6NO5HAI.js} +1 -1
- package/dist/index.js +58 -8
- package/dist/mcp/index.js +4 -4
- package/dist/packs/d-series/index.js +4 -4
- package/dist/packs/decision-contracts/index.js +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ if (-not $expected -or $actual -ne $expected.ToLowerInvariant()) {
|
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
> **Windows signing status:** `cejel-Windows-x86_64.exe` is intentionally unsigned in
|
|
82
|
-
> 0.4.
|
|
82
|
+
> 0.4.6 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
|
|
83
83
|
> signature before SEA injection and fails unless Windows reports the result as `NotSigned`;
|
|
84
84
|
> it does not ship an invalid signature. Before running it, verify `SHA256SUMS` and the
|
|
85
85
|
> GitHub build-provenance attestation. Each binary also has an attached SPDX SBOM and an
|
|
@@ -102,7 +102,7 @@ docker run --rm --network=none -v "$PWD:/w" -w /w -v "$PWD/cejel:/cejel:ro" debi
|
|
|
102
102
|
npx @cejel/cejel@latest .
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
> **Distribution note:** Cejel `0.4.
|
|
105
|
+
> **Distribution note:** Cejel `0.4.6` is the coordinated release version for npm,
|
|
106
106
|
> standalone binaries, Docker/OCI, GitHub Action, Homebrew, and MCP Registry.
|
|
107
107
|
|
|
108
108
|
`npx` can reuse a stale cached package. Force the current npm release with the `@latest`
|
|
@@ -119,6 +119,16 @@ name while keeping the repository-derived stable slug:
|
|
|
119
119
|
npx @cejel/cejel@latest . --name "Customer Portal"
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
+
From 0.4.5, use `--product-name` when two checkout directories must emit the
|
|
123
|
+
same identity fields. The supplied value sets both the display name and its slugified stable ID:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npx @cejel/cejel@latest . --product-name "Customer Portal"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Product identity is caller context, not scored repository evidence, and is excluded from
|
|
130
|
+
certificate byte-comparison claims.
|
|
131
|
+
|
|
122
132
|
The npm package is scoped as `@cejel/cejel`; its executable remains the short command `cejel`.
|
|
123
133
|
|
|
124
134
|
**GitHub Action** — score every PR and publish the badge:
|
|
@@ -129,6 +139,9 @@ The npm package is scoped as `@cejel/cejel`; its executable remains the short co
|
|
|
129
139
|
min-score: "2.5" # optional: fail the build below this
|
|
130
140
|
```
|
|
131
141
|
|
|
142
|
+
For an executed public example that binds a release artifact to the same commit named by its
|
|
143
|
+
Cejel certificate, see [Certified releases with GitHub build provenance](./docs/certified-release-example.md).
|
|
144
|
+
|
|
132
145
|
**From source** — it is AGPL and it runs offline, so reading it is rather the point:
|
|
133
146
|
|
|
134
147
|
```bash
|
|
@@ -151,16 +164,16 @@ gh attestation verify ./cejel-Windows-x86_64.exe -R BargLabs/cejel
|
|
|
151
164
|
This is cryptographically signed provenance. It is distinct from Apple Developer ID or
|
|
152
165
|
Microsoft Authenticode code-signing.
|
|
153
166
|
|
|
154
|
-
**Docker / OCI.** The current container release is `0.4.
|
|
167
|
+
**Docker / OCI.** The current container release is `0.4.6`:
|
|
155
168
|
|
|
156
169
|
```bash
|
|
157
|
-
docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.
|
|
170
|
+
docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.6
|
|
158
171
|
```
|
|
159
172
|
|
|
160
173
|
The image defaults to `cejel-mcp` over stdio. To use the CLI instead:
|
|
161
174
|
|
|
162
175
|
```bash
|
|
163
|
-
docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.
|
|
176
|
+
docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.6 .
|
|
164
177
|
```
|
|
165
178
|
|
|
166
179
|
The OCI image carries an SBOM, maximum-mode build provenance, and a signed registry
|
|
@@ -253,9 +266,21 @@ prints that boundary on every successful verification.
|
|
|
253
266
|
- `--min-score <n>` — exit non-zero if the overall score is below `n` (0–4), or if Cejel
|
|
254
267
|
abstains and therefore cannot evaluate the threshold; used by the GitHub Action's optional
|
|
255
268
|
threshold gate
|
|
269
|
+
- `--product-name <name>` — Set both the caller-context
|
|
270
|
+
display name and slugified product ID so differently named checkouts can emit identical
|
|
271
|
+
certificates.
|
|
272
|
+
- `--name <display>` — override only the displayed project name while leaving the derived slug
|
|
273
|
+
unchanged; retained for compatibility
|
|
256
274
|
- `--ingest <file|glob>` — fold another scanner's output into the score (repeatable). Accepts
|
|
257
275
|
SARIF, OpenSSF Scorecard JSON, or the generic Cejel external-signal shape — format is
|
|
258
276
|
auto-detected. See "Aggregate your scanners" below.
|
|
277
|
+
- `--rubric-pin <version>` — Explicit opt-in only: pin an alternate rubric instead of the
|
|
278
|
+
calibrated public default. It
|
|
279
|
+
accepts the calibrated version or any published prospective rubric
|
|
280
|
+
(`witan-rubric-v18-prospective-*` through `v22`) and fails closed, naming what was accepted, on
|
|
281
|
+
anything else. Omit this flag for the calibrated result every default scan produces — a
|
|
282
|
+
prospective pin carries no precision/recall claim, and the terminal certificate, HTML
|
|
283
|
+
certificate, and Markdown report all state that plainly whenever one is used.
|
|
259
284
|
- `--quiet` — suppress the terminal certificate (files are still written)
|
|
260
285
|
- `-h`, `--help` — print usage and exit successfully
|
|
261
286
|
- `-v`, `--version` — print the version derived from the package manifest and exit successfully
|
|
@@ -326,6 +351,7 @@ Three ways a scanner's output gets ingested:
|
|
|
326
351
|
|
|
327
352
|
```json
|
|
328
353
|
{
|
|
354
|
+
"version": "1.0",
|
|
329
355
|
"tool": "my-scanner",
|
|
330
356
|
"signals": [
|
|
331
357
|
{
|
|
@@ -348,6 +374,12 @@ Three ways a scanner's output gets ingested:
|
|
|
348
374
|
(0–1, default `0.5`) bounds how much this signal can move that dimension; `severity` is
|
|
349
375
|
`critical` | `warning` | `info`; `location` is optional.
|
|
350
376
|
|
|
377
|
+
The version field is required. Cejel rejects unversioned generic documents and unknown major
|
|
378
|
+
versions rather than guessing. See the [generic ingest contract](docs/ingest-contract.md), its
|
|
379
|
+
[published JSON Schema](docs/schemas/cejel-ingest-v1.schema.json), and the
|
|
380
|
+
[synthetic CI heal-log mapping](docs/heal-log-mapping.md). Output-field stability and version
|
|
381
|
+
routing are documented in [format stability](docs/format-stability.md).
|
|
382
|
+
|
|
351
383
|
## Displaying the trust badge
|
|
352
384
|
|
|
353
385
|
Endpoint JSON (host `badge.json` anywhere static — a repo file, a gist, GitHub Pages — and
|
|
@@ -463,7 +495,7 @@ The OCI image is an alternative when Docker is the preferred execution boundary.
|
|
|
463
495
|
the host path with the repository OpenClaw should allow Cejel to read:
|
|
464
496
|
|
|
465
497
|
```bash
|
|
466
|
-
npx -y openclaw@latest mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.
|
|
498
|
+
npx -y openclaw@latest mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.6"]}'
|
|
467
499
|
npx -y openclaw@latest mcp doctor cejel-oci --probe
|
|
468
500
|
```
|
|
469
501
|
|
|
@@ -5,20 +5,20 @@ import {
|
|
|
5
5
|
deriveProductIdentity,
|
|
6
6
|
runCejelScan,
|
|
7
7
|
serializeWitanReport
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-VEJLHO5F.js";
|
|
9
9
|
import {
|
|
10
10
|
listCejelLlmPackFiles
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
} from "../chunk-QRWLHTGR.js";
|
|
12
|
+
import "../chunk-BZXBLDCJ.js";
|
|
13
13
|
import {
|
|
14
14
|
external_exports
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-Y6NO5HAI.js";
|
|
16
16
|
import {
|
|
17
17
|
init_esm_shims,
|
|
18
18
|
readRepoText,
|
|
19
19
|
recordContentSkip,
|
|
20
20
|
recordFilesystemSkip
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-H55KECVT.js";
|
|
22
22
|
|
|
23
23
|
// src/calibration/llm-detector.ts
|
|
24
24
|
init_esm_shims();
|
|
@@ -54,6 +54,10 @@ var init_esm_shims = __esm({
|
|
|
54
54
|
}
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
+
// src/filesystem-limits.ts
|
|
58
|
+
init_esm_shims();
|
|
59
|
+
var MAX_REPOSITORY_CONTENT_BYTES = 512e3;
|
|
60
|
+
|
|
57
61
|
// src/witan/content-reads.ts
|
|
58
62
|
init_esm_shims();
|
|
59
63
|
import { closeSync, lstatSync, openSync, readFileSync, readSync } from "fs";
|
|
@@ -145,6 +149,13 @@ function withContentReadCriterion(criterion, collect) {
|
|
|
145
149
|
function recordContentSkip(path2, reason, deduplicate = false) {
|
|
146
150
|
recordSkip(path2, reason, void 0, false, deduplicate);
|
|
147
151
|
}
|
|
152
|
+
function recordContentSkipForCriteria(path2, reason, criteria, deduplicate = false) {
|
|
153
|
+
const session = activeSession;
|
|
154
|
+
if (session) {
|
|
155
|
+
for (const criterion of criteria) session.affectedCriteria.add(criterion);
|
|
156
|
+
}
|
|
157
|
+
recordSkip(path2, reason, void 0, false, deduplicate);
|
|
158
|
+
}
|
|
148
159
|
function recordFilesystemSkip(path2, error, deniedContext = false, deduplicate = true) {
|
|
149
160
|
const errno = errnoClass(error);
|
|
150
161
|
if (!errno) throw error;
|
|
@@ -161,6 +172,10 @@ function readRepoText(path2, encoding = "utf8") {
|
|
|
161
172
|
recordSkip(path2, "non_regular_file", void 0, true, true);
|
|
162
173
|
return "";
|
|
163
174
|
}
|
|
175
|
+
if (stat.size > MAX_REPOSITORY_CONTENT_BYTES) {
|
|
176
|
+
recordSkip(path2, "too_large", void 0, true, true);
|
|
177
|
+
return "";
|
|
178
|
+
}
|
|
164
179
|
} catch (error) {
|
|
165
180
|
recordFilesystemSkip(path2, error);
|
|
166
181
|
return "";
|
|
@@ -211,9 +226,11 @@ export {
|
|
|
211
226
|
__dirname,
|
|
212
227
|
__filename,
|
|
213
228
|
init_esm_shims,
|
|
229
|
+
MAX_REPOSITORY_CONTENT_BYTES,
|
|
214
230
|
trackContentReads,
|
|
215
231
|
withContentReadCriterion,
|
|
216
232
|
recordContentSkip,
|
|
233
|
+
recordContentSkipForCriteria,
|
|
217
234
|
recordFilesystemSkip,
|
|
218
235
|
readRepoText,
|
|
219
236
|
readRepoTextPrefix
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
describeGitFailure,
|
|
6
6
|
execGit,
|
|
7
7
|
isExpectedGitAbsence
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-BZXBLDCJ.js";
|
|
9
9
|
import {
|
|
10
10
|
init_esm_shims
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-H55KECVT.js";
|
|
12
12
|
|
|
13
13
|
// src/packs/llm/files.ts
|
|
14
14
|
init_esm_shims();
|