@cejel/cejel 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/{chunk-XB65L6WE.js → chunk-PSYXFAVU.js} +48 -12
- package/dist/index.js +1 -1
- package/dist/mcp/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ if (-not $expected -or $actual -ne $expected.ToLowerInvariant()) {
|
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
> **Windows signing status:** `cejel-Windows-x86_64.exe` is intentionally unsigned in
|
|
71
|
-
> 0.
|
|
71
|
+
> 0.4.0 and may trigger Microsoft SmartScreen. The release build removes Node's inherited
|
|
72
72
|
> signature before SEA injection and fails unless Windows reports the result as `NotSigned`;
|
|
73
73
|
> it does not ship an invalid signature. Before running it, verify `SHA256SUMS` and the
|
|
74
74
|
> GitHub build-provenance attestation. Each binary also has an attached SPDX SBOM and an
|
|
@@ -91,7 +91,7 @@ docker run --rm --network=none -v "$PWD:/w" -w /w -v "$PWD/cejel:/cejel:ro" debi
|
|
|
91
91
|
npx @cejel/cejel@latest .
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
> **Distribution note:** Cejel `0.
|
|
94
|
+
> **Distribution note:** Cejel `0.4.0` is the coordinated release version for npm,
|
|
95
95
|
> standalone binaries, Docker/OCI, GitHub Action, Homebrew, and MCP Registry.
|
|
96
96
|
|
|
97
97
|
`npx` can reuse a stale cached package. Force the current npm release with the `@latest`
|
|
@@ -140,16 +140,16 @@ gh attestation verify ./cejel-Windows-x86_64.exe -R BargLabs/cejel
|
|
|
140
140
|
This is cryptographically signed provenance. It is distinct from Apple Developer ID or
|
|
141
141
|
Microsoft Authenticode code-signing.
|
|
142
142
|
|
|
143
|
-
**Docker / OCI.** The current container release is `0.
|
|
143
|
+
**Docker / OCI.** The current container release is `0.4.0`:
|
|
144
144
|
|
|
145
145
|
```bash
|
|
146
|
-
docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.
|
|
146
|
+
docker run --rm -i -v "$PWD:/workspace:ro" ghcr.io/barglabs/cejel:0.4.0
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
The image defaults to `cejel-mcp` over stdio. To use the CLI instead:
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
|
-
docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.
|
|
152
|
+
docker run --rm -v "$PWD:/workspace:ro" --entrypoint cejel ghcr.io/barglabs/cejel:0.4.0 .
|
|
153
153
|
```
|
|
154
154
|
|
|
155
155
|
The OCI image carries an SBOM, maximum-mode build provenance, and a signed registry
|
|
@@ -426,7 +426,7 @@ The OCI image is an alternative when Docker is the preferred execution boundary.
|
|
|
426
426
|
the host path with the repository OpenClaw should allow Cejel to read:
|
|
427
427
|
|
|
428
428
|
```bash
|
|
429
|
-
openclaw mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.
|
|
429
|
+
openclaw mcp set cejel-oci '{"command":"docker","args":["run","--rm","-i","-v","/absolute/path/to/repo:/workspace:ro","ghcr.io/barglabs/cejel:0.4.0"]}'
|
|
430
430
|
openclaw mcp doctor cejel-oci --probe
|
|
431
431
|
```
|
|
432
432
|
|
|
@@ -5269,10 +5269,11 @@ var WITAN_RUBRIC_VERSION_V15 = "witan-rubric-v15-2026-07-24";
|
|
|
5269
5269
|
var WITAN_RUBRIC_VERSION_V16 = "witan-rubric-v16-2026-07-24";
|
|
5270
5270
|
var WITAN_RUBRIC_VERSION_V17 = "witan-rubric-v17-2026-07-24";
|
|
5271
5271
|
var WITAN_RUBRIC_VERSION_V18 = "witan-rubric-v18-prospective-2026-07-25";
|
|
5272
|
+
var WITAN_RUBRIC_VERSION_V19 = "witan-rubric-v19-prospective-2026-08-09";
|
|
5272
5273
|
|
|
5273
5274
|
// src/witan/repo-signals.ts
|
|
5274
5275
|
function usesV17DetectorClosure(rubricVersion) {
|
|
5275
|
-
return rubricVersion === WITAN_RUBRIC_VERSION_V17 || rubricVersion === WITAN_RUBRIC_VERSION_V18;
|
|
5276
|
+
return rubricVersion === WITAN_RUBRIC_VERSION_V17 || rubricVersion === WITAN_RUBRIC_VERSION_V18 || rubricVersion === WITAN_RUBRIC_VERSION_V19;
|
|
5276
5277
|
}
|
|
5277
5278
|
function buildWitanInputFromRepo(options) {
|
|
5278
5279
|
const tracked = trackContentReads(options.repoPath, () => buildWitanInputFromRepoUntracked(options));
|
|
@@ -5312,7 +5313,8 @@ function buildWitanInputFromRepoUntracked(options) {
|
|
|
5312
5313
|
const inventoryFiles = fileInventory.inventoryFiles;
|
|
5313
5314
|
const ignoredTargetReason = repoFiles.length === 0 ? explainIgnoredScanTarget(options.repoPath) : void 0;
|
|
5314
5315
|
const usesV17Detectors = usesV17DetectorClosure(rubricVersion);
|
|
5315
|
-
const usesV18NativeRls = rubricVersion === WITAN_RUBRIC_VERSION_V18;
|
|
5316
|
+
const usesV18NativeRls = rubricVersion === WITAN_RUBRIC_VERSION_V18 || rubricVersion === WITAN_RUBRIC_VERSION_V19;
|
|
5317
|
+
const usesV19CommitYear = rubricVersion === WITAN_RUBRIC_VERSION_V19;
|
|
5316
5318
|
const structuralArchetype = classifyRepoArchetype(inventoryFiles, rubricVersion);
|
|
5317
5319
|
const readableArchetype = rubricVersion === WITAN_RUBRIC_VERSION_V13 || rubricVersion === WITAN_RUBRIC_VERSION_V14 || rubricVersion === WITAN_RUBRIC_VERSION_V15 || rubricVersion === WITAN_RUBRIC_VERSION_V16 || usesV17DetectorClosure(rubricVersion) ? applyReadableSourceRepresentationGate(
|
|
5318
5320
|
options.repoPath,
|
|
@@ -5344,6 +5346,7 @@ function buildWitanInputFromRepoUntracked(options) {
|
|
|
5344
5346
|
usesV39Detectors,
|
|
5345
5347
|
usesV47Detectors,
|
|
5346
5348
|
usesV18NativeRls,
|
|
5349
|
+
usesV19CommitYear,
|
|
5347
5350
|
reviewableSourceProof,
|
|
5348
5351
|
scanLimitations
|
|
5349
5352
|
);
|
|
@@ -5952,7 +5955,7 @@ function buildNotApplicableSignal(criterionId, reason) {
|
|
|
5952
5955
|
notApplicable: true
|
|
5953
5956
|
};
|
|
5954
5957
|
}
|
|
5955
|
-
function collectRepoSignals(repoPath, generatedAt, repoFiles, useV27Detectors, useV33Detectors, useV36Detectors, useV39Detectors, useV47Detectors, useV18NativeRls, reviewableSourceProof, scanLimitations = /* @__PURE__ */ new Set()) {
|
|
5958
|
+
function collectRepoSignals(repoPath, generatedAt, repoFiles, useV27Detectors, useV33Detectors, useV36Detectors, useV39Detectors, useV47Detectors, useV18NativeRls, useV19CommitYear, reviewableSourceProof, scanLimitations = /* @__PURE__ */ new Set()) {
|
|
5956
5959
|
const signals = [];
|
|
5957
5960
|
const mono = resolveMonorepoContext(repoPath, scanLimitations);
|
|
5958
5961
|
const collectCriterion = (criterionId, collect) => withContentReadCriterion(criterionId, collect);
|
|
@@ -6010,7 +6013,13 @@ function collectRepoSignals(repoPath, generatedAt, repoFiles, useV27Detectors, u
|
|
|
6010
6013
|
);
|
|
6011
6014
|
const b4Signal = collectCriterion(
|
|
6012
6015
|
"B4",
|
|
6013
|
-
() => collectB4AuditEvidence(
|
|
6016
|
+
() => collectB4AuditEvidence(
|
|
6017
|
+
repoPath,
|
|
6018
|
+
repoFiles,
|
|
6019
|
+
generatedAt,
|
|
6020
|
+
useV19CommitYear,
|
|
6021
|
+
scanLimitations
|
|
6022
|
+
)
|
|
6014
6023
|
);
|
|
6015
6024
|
const b5Signal = buildNotApplicableSignal(
|
|
6016
6025
|
"B5",
|
|
@@ -7214,7 +7223,31 @@ function collectB3CiDisciplineEvidence(repoPath, repoFiles, mono) {
|
|
|
7214
7223
|
]
|
|
7215
7224
|
};
|
|
7216
7225
|
}
|
|
7217
|
-
function
|
|
7226
|
+
function auditFreshnessCommitterYearFromGitResult(result, scanLimitations) {
|
|
7227
|
+
if (!result.ok) {
|
|
7228
|
+
if (!isExpectedGitAbsence(result)) {
|
|
7229
|
+
scanLimitations.add(
|
|
7230
|
+
`${describeGitFailure(result.reason, "HEAD committer-date discovery")} Cejel omitted the numeric B4 freshness year and retained only static freshness markers.`
|
|
7231
|
+
);
|
|
7232
|
+
}
|
|
7233
|
+
return null;
|
|
7234
|
+
}
|
|
7235
|
+
const year = /^([0-9]{4})-/.exec(result.stdout.trim())?.[1];
|
|
7236
|
+
if (!year) {
|
|
7237
|
+
scanLimitations.add(
|
|
7238
|
+
"Cejel: local git HEAD committer-date discovery returned a malformed date. Cejel omitted the numeric B4 freshness year and retained only static freshness markers."
|
|
7239
|
+
);
|
|
7240
|
+
return null;
|
|
7241
|
+
}
|
|
7242
|
+
return year;
|
|
7243
|
+
}
|
|
7244
|
+
function readAuditFreshnessCommitterYear(repoPath, scanLimitations) {
|
|
7245
|
+
return auditFreshnessCommitterYearFromGitResult(
|
|
7246
|
+
execGit(["show", "-s", "--format=%cI", "HEAD"], { cwd: repoPath }),
|
|
7247
|
+
scanLimitations
|
|
7248
|
+
);
|
|
7249
|
+
}
|
|
7250
|
+
function collectB4AuditEvidence(repoPath, repoFiles, generatedAt, useV19CommitYear = false, scanLimitations = /* @__PURE__ */ new Set()) {
|
|
7218
7251
|
const evidence = [];
|
|
7219
7252
|
const auditFiles = repoFiles.filter(isAuditFile);
|
|
7220
7253
|
for (const file of auditFiles.slice(0, 5)) {
|
|
@@ -7233,8 +7266,11 @@ function collectB4AuditEvidence(repoPath, repoFiles, generatedAt) {
|
|
|
7233
7266
|
"Only a static security-policy artifact (e.g. SECURITY.md) was detected \u2014 no committed CHANGELOG/CHANGES/HISTORY/NEWS/AUDIT/STATUS/release-notes/runbook/provenance file to rate for an audit trail. The project may publish release history outside the repository (e.g. GitHub Releases). B4 has no ratable surface here; it is excluded rather than scored."
|
|
7234
7267
|
);
|
|
7235
7268
|
}
|
|
7236
|
-
const
|
|
7237
|
-
const freshnessPattern = new RegExp(
|
|
7269
|
+
const referenceYear = useV19CommitYear ? readAuditFreshnessCommitterYear(repoPath, scanLimitations) : String(new Date(generatedAt).getFullYear());
|
|
7270
|
+
const freshnessPattern = new RegExp(
|
|
7271
|
+
`${referenceYear ? `${referenceYear}|` : ""}recent|latest|current`,
|
|
7272
|
+
"i"
|
|
7273
|
+
);
|
|
7238
7274
|
return {
|
|
7239
7275
|
criterionId: "B4",
|
|
7240
7276
|
positiveEvidence: evidence,
|
|
@@ -7265,7 +7301,7 @@ function collectB4AuditEvidence(repoPath, repoFiles, generatedAt) {
|
|
|
7265
7301
|
Math.max(auditFiles.length, 1),
|
|
7266
7302
|
0.2,
|
|
7267
7303
|
"ratio",
|
|
7268
|
-
"Credits audit artifacts that carry freshness/current-state markers."
|
|
7304
|
+
useV19CommitYear ? "Credits audit artifacts that carry the scanned HEAD committer year or static freshness/current-state markers." : "Credits audit artifacts that carry freshness/current-state markers."
|
|
7269
7305
|
)
|
|
7270
7306
|
]
|
|
7271
7307
|
};
|
|
@@ -10192,7 +10228,7 @@ var WITAN_RUBRIC = [
|
|
|
10192
10228
|
|
|
10193
10229
|
// src/witan/scoring.ts
|
|
10194
10230
|
function usesV17DetectorClosure2(rubricVersion) {
|
|
10195
|
-
return rubricVersion === WITAN_RUBRIC_VERSION_V17 || rubricVersion === WITAN_RUBRIC_VERSION_V18;
|
|
10231
|
+
return rubricVersion === WITAN_RUBRIC_VERSION_V17 || rubricVersion === WITAN_RUBRIC_VERSION_V18 || rubricVersion === WITAN_RUBRIC_VERSION_V19;
|
|
10196
10232
|
}
|
|
10197
10233
|
var MAX_SIGNAL_ADJUSTMENT = 0.8;
|
|
10198
10234
|
function createWitanReport(input, inputSignals, rubric = WITAN_RUBRIC) {
|
|
@@ -10351,7 +10387,7 @@ function statusForScore(score) {
|
|
|
10351
10387
|
}
|
|
10352
10388
|
function statusAfterInputAdjustment(nativeStatus, nativeScore, adjustment, rubricVersion) {
|
|
10353
10389
|
if (adjustment === 0) return nativeStatus;
|
|
10354
|
-
if (rubricVersion !== WITAN_RUBRIC_VERSION_V8 && rubricVersion !== WITAN_RUBRIC_VERSION_V9 && rubricVersion !== WITAN_RUBRIC_VERSION_V10 && rubricVersion !== WITAN_RUBRIC_VERSION_V11 && rubricVersion !== WITAN_RUBRIC_VERSION_V12 && rubricVersion !== WITAN_RUBRIC_VERSION_V13 && rubricVersion !== WITAN_RUBRIC_VERSION_V14 && rubricVersion !== WITAN_RUBRIC_VERSION_V15 && rubricVersion !== WITAN_RUBRIC_VERSION_V16 && rubricVersion !== WITAN_RUBRIC_VERSION_V17 && rubricVersion !== WITAN_RUBRIC_VERSION_V18) {
|
|
10390
|
+
if (rubricVersion !== WITAN_RUBRIC_VERSION_V8 && rubricVersion !== WITAN_RUBRIC_VERSION_V9 && rubricVersion !== WITAN_RUBRIC_VERSION_V10 && rubricVersion !== WITAN_RUBRIC_VERSION_V11 && rubricVersion !== WITAN_RUBRIC_VERSION_V12 && rubricVersion !== WITAN_RUBRIC_VERSION_V13 && rubricVersion !== WITAN_RUBRIC_VERSION_V14 && rubricVersion !== WITAN_RUBRIC_VERSION_V15 && rubricVersion !== WITAN_RUBRIC_VERSION_V16 && rubricVersion !== WITAN_RUBRIC_VERSION_V17 && rubricVersion !== WITAN_RUBRIC_VERSION_V18 && rubricVersion !== WITAN_RUBRIC_VERSION_V19) {
|
|
10355
10391
|
return statusForScore(roundScore(Math.max(0, nativeScore - adjustment)));
|
|
10356
10392
|
}
|
|
10357
10393
|
const statusFloor = {
|
|
@@ -10396,7 +10432,7 @@ function mergeSignalsByCriterion(signals) {
|
|
|
10396
10432
|
return merged;
|
|
10397
10433
|
}
|
|
10398
10434
|
function usesMetricScoring(rubricVersion) {
|
|
10399
|
-
return rubricVersion === WITAN_RUBRIC_VERSION_V1 || rubricVersion === WITAN_RUBRIC_VERSION_V2 || rubricVersion === WITAN_RUBRIC_VERSION_V3 || rubricVersion === WITAN_RUBRIC_VERSION_V4 || rubricVersion === WITAN_RUBRIC_VERSION_V5 || rubricVersion === WITAN_RUBRIC_VERSION_V6 || rubricVersion === WITAN_RUBRIC_VERSION_V7 || rubricVersion === WITAN_RUBRIC_VERSION_V8 || rubricVersion === WITAN_RUBRIC_VERSION_V9 || rubricVersion === WITAN_RUBRIC_VERSION_V10 || rubricVersion === WITAN_RUBRIC_VERSION_V11 || rubricVersion === WITAN_RUBRIC_VERSION_V12 || rubricVersion === WITAN_RUBRIC_VERSION_V13 || rubricVersion === WITAN_RUBRIC_VERSION_V14 || rubricVersion === WITAN_RUBRIC_VERSION_V15 || rubricVersion === WITAN_RUBRIC_VERSION_V16 || rubricVersion === WITAN_RUBRIC_VERSION_V17 || rubricVersion === WITAN_RUBRIC_VERSION_V18 || rubricVersion === WITAN_TRADING_RUBRIC_VERSION_V0;
|
|
10435
|
+
return rubricVersion === WITAN_RUBRIC_VERSION_V1 || rubricVersion === WITAN_RUBRIC_VERSION_V2 || rubricVersion === WITAN_RUBRIC_VERSION_V3 || rubricVersion === WITAN_RUBRIC_VERSION_V4 || rubricVersion === WITAN_RUBRIC_VERSION_V5 || rubricVersion === WITAN_RUBRIC_VERSION_V6 || rubricVersion === WITAN_RUBRIC_VERSION_V7 || rubricVersion === WITAN_RUBRIC_VERSION_V8 || rubricVersion === WITAN_RUBRIC_VERSION_V9 || rubricVersion === WITAN_RUBRIC_VERSION_V10 || rubricVersion === WITAN_RUBRIC_VERSION_V11 || rubricVersion === WITAN_RUBRIC_VERSION_V12 || rubricVersion === WITAN_RUBRIC_VERSION_V13 || rubricVersion === WITAN_RUBRIC_VERSION_V14 || rubricVersion === WITAN_RUBRIC_VERSION_V15 || rubricVersion === WITAN_RUBRIC_VERSION_V16 || rubricVersion === WITAN_RUBRIC_VERSION_V17 || rubricVersion === WITAN_RUBRIC_VERSION_V18 || rubricVersion === WITAN_RUBRIC_VERSION_V19 || rubricVersion === WITAN_TRADING_RUBRIC_VERSION_V0;
|
|
10400
10436
|
}
|
|
10401
10437
|
function unmeasuredStatus(rubricVersion) {
|
|
10402
10438
|
return rubricVersion === WITAN_TRADING_RUBRIC_VERSION_V0 ? "unverified" : "insufficient_data";
|
|
@@ -10772,7 +10808,7 @@ function calibratedCriterionStateV11(criterionId, metrics) {
|
|
|
10772
10808
|
return void 0;
|
|
10773
10809
|
}
|
|
10774
10810
|
function ensureFindingsExplainStatus(criterionId, score, status, findings, evidence, rubricVersion) {
|
|
10775
|
-
if (rubricVersion !== WITAN_RUBRIC_VERSION_V8 && rubricVersion !== WITAN_RUBRIC_VERSION_V9 && rubricVersion !== WITAN_RUBRIC_VERSION_V10 && rubricVersion !== WITAN_RUBRIC_VERSION_V11 && rubricVersion !== WITAN_RUBRIC_VERSION_V12 && rubricVersion !== WITAN_RUBRIC_VERSION_V13 && rubricVersion !== WITAN_RUBRIC_VERSION_V14 && rubricVersion !== WITAN_RUBRIC_VERSION_V15 && rubricVersion !== WITAN_RUBRIC_VERSION_V16 && rubricVersion !== WITAN_RUBRIC_VERSION_V17 && rubricVersion !== WITAN_RUBRIC_VERSION_V18 && findings.length > 0) {
|
|
10811
|
+
if (rubricVersion !== WITAN_RUBRIC_VERSION_V8 && rubricVersion !== WITAN_RUBRIC_VERSION_V9 && rubricVersion !== WITAN_RUBRIC_VERSION_V10 && rubricVersion !== WITAN_RUBRIC_VERSION_V11 && rubricVersion !== WITAN_RUBRIC_VERSION_V12 && rubricVersion !== WITAN_RUBRIC_VERSION_V13 && rubricVersion !== WITAN_RUBRIC_VERSION_V14 && rubricVersion !== WITAN_RUBRIC_VERSION_V15 && rubricVersion !== WITAN_RUBRIC_VERSION_V16 && rubricVersion !== WITAN_RUBRIC_VERSION_V17 && rubricVersion !== WITAN_RUBRIC_VERSION_V18 && rubricVersion !== WITAN_RUBRIC_VERSION_V19 && findings.length > 0) {
|
|
10776
10812
|
return [...findings];
|
|
10777
10813
|
}
|
|
10778
10814
|
if (status !== "critical" && status !== "warning") return [...findings];
|
package/dist/index.js
CHANGED
package/dist/mcp/index.js
CHANGED