
Research
/Security News
Malicious Chrome and Firefox Extensions Steal Crypto Traders’ Session and Wallet Data
Malicious Chrome and Firefox extensions target Axiom Trade and Padre users, stealing session tokens and wallet data.
@opena2a/check-core
Advanced tools
Data-shape and orchestration primitives for the `check` command across OpenA2A CLIs. One implementation of input classification, registry → scan-on-miss flow, download-error translation, and canonical CheckOutput schema — consumed by hackmyagent, opena2a-
Data-shape and orchestration primitives for the check command across
OpenA2A CLIs (hackmyagent, opena2a, ai-trust).
One implementation of:
CheckOutput + NotFoundOutput JSON shapeRendering stays in @opena2a/cli-ui. This package is data only.
Three CLIs emit check --json. Before 0.18.3 their outputs disagreed on
five load-bearing fields (trustLevel, verdict, packageType, scanStatus,
name). M2 closed that by convention; M3 closes it by construction — there
is exactly one implementation, and every CLI imports it.
Parent design: briefs/cli-consolidation.md.
Milestone: [CA-034] M3.
import {
checkPackage,
buildCheckOutput,
buildNotFoundOutput,
translateDownloadError,
mapScanStatusForMeter,
parseCheckInput,
} from "@opena2a/check-core";
const res = await checkPackage({
target: "@modelcontextprotocol/server-filesystem",
mode: "scan-on-miss",
registry: (name, type) => client.checkTrust(name, type),
scan: (name) => runLocalScan(name),
skillFallback: (name) => resolveSkill(name),
});
if (res.kind === "found") {
console.log(JSON.stringify(res.output, null, 2));
} else {
console.log(JSON.stringify(res.output, null, 2));
process.exitCode = 2;
}
const output = buildCheckOutput({
name: "express",
type: "npm-package",
scan: { score: 100, maxScore: 100, findings: [] },
registry: trustAnswer,
});
const hint = translateDownloadError("anthropic/code-review", "code 128");
// { errorHint: "Looks like a git-style name. npm packages use ...", suggestions: [...] }
The emission order of buildCheckOutput is load-bearing: the
opena2a-parity harness compares JSON byte-for-byte across CLIs. Do not
reorder fields without bumping to a new minor — consumers rely on stable
shape.
check --json score fields — which one do I gate CI on?A found result can carry up to three score-shaped numbers on different
scales from two sources. They are orthogonal, not contradictory.
CHECK_FIELD_GUIDE and checkJsonSchema are the exported, machine-readable
documentation of this (one entry per field, with source, scale, and
gating); check-json-schema.test.ts keeps them consistent with the emitter.
| Field(s) | Source | Scale | What it answers |
|---|---|---|---|
score / maxScore / findings | local-scan | 0..100 | "Did my local static checks pass on this artifact?" |
trustLevel | registry | 0..4 ordinal | "Does the registry trust this package?" (gate here) |
trustScore | registry | 0..1 | continuous input to trustLevel — not a standalone gate |
verdict | registry | string | the word label of trustLevel ("blocked".."verified") |
scanStatus | registry | enum | has the registry's server-side scan run yet |
score: 100 means "the local scan found nothing" — not a registry
trust verdict. A package the registry has never scanned can still read
score: 100, with scanStatus: "pending". That is not a contradiction:
the local scan ran; the registry's has not.trustLevel (0..4: Blocked, Warning, Listed, Scanned, Verified) is
derived from trustScore plus hard gates — a critical finding forces
Blocked, Verified additionally needs SLSA L2+, 30+ days observation, and a
verified signature. So a package can have trustScore: 0.9 and still
trustLevel: 0. Gate on trustLevel, not a raw trustScore cutoff —
the cutoff would miss those hard gates. verdict is the same signal as
trustLevel, in words.score against a 0..1 trustScore.import { CHECK_FIELD_GUIDE, checkJsonSchema } from "@opena2a/check-core";
CHECK_FIELD_GUIDE.score.gating; // "Gate on this for 'did my local static checks pass'..."
CHECK_FIELD_GUIDE.trustLevel.source; // "registry"
1.0.0 (deferred breaking change, CHIEF-CA + CHIEF-CPO): the flat object
namespaces the two layers — { localScan: { score, maxScore, findings }, registry: { trustScore, trustLevel, verdict, scanStatus } }. Whether to keep
both verdict and trustLevel is a separate 1.0.0 decision. Until then the
wire shape is frozen for the parity contract and CHECK_FIELD_GUIDE is the
contract.
Apache-2.0
FAQs
Data-shape and orchestration primitives for the `check` command across OpenA2A CLIs. One implementation of input classification, registry → scan-on-miss flow, download-error translation, and canonical CheckOutput schema — consumed by hackmyagent, opena2a-
The npm package @opena2a/check-core receives a total of 185 weekly downloads. As such, @opena2a/check-core popularity was classified as not popular.
We found that @opena2a/check-core demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Research
/Security News
Malicious Chrome and Firefox extensions target Axiom Trade and Padre users, stealing session tokens and wallet data.

Security News
GPT-6 Astra hits 100% on ExploitBench and finds zero-days autonomously, while independent tests reveal scope violations and monitoring gaps.

Product
Socket can now send alerts and supply chain attack notifications to Microsoft Teams, with filters that route the right updates to each channel.