weavatrix 0.2.14 → 0.2.16
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 +69 -13
- package/SECURITY.md +2 -2
- package/docs/releases/v0.2.16.md +53 -0
- package/package.json +6 -2
- package/src/analysis/cargo-dependency-evidence.js +111 -0
- package/src/analysis/cargo-manifests.js +74 -0
- package/src/analysis/dep-check-ecosystems.js +3 -0
- package/src/analysis/dep-check.js +8 -18
- package/src/analysis/dependency/conventions.js +16 -0
- package/src/analysis/dependency/scoped-dependencies.js +7 -2
- package/src/analysis/dependency/source-references.js +21 -0
- package/src/analysis/duplicates.tokenize.js +12 -2
- package/src/analysis/endpoints-java.js +2 -5
- package/src/analysis/findings.js +12 -0
- package/src/analysis/go-dependency-evidence.js +68 -0
- package/src/analysis/health-capabilities.js +1 -1
- package/src/analysis/http-contracts/analysis.js +2 -0
- package/src/analysis/http-contracts/client-call-detection.js +1 -0
- package/src/analysis/http-contracts/client-call-parser.js +18 -4
- package/src/analysis/internal-audit/dependency-health.js +15 -13
- package/src/analysis/internal-audit/python-manifests.js +18 -5
- package/src/analysis/internal-audit/supply-chain.js +2 -0
- package/src/analysis/internal-audit.reach.js +20 -0
- package/src/analysis/internal-audit.run.js +13 -7
- package/src/analysis/jvm-dependency-evidence.js +102 -56
- package/src/analysis/jvm-manifests.js +114 -0
- package/src/analysis/source-correctness.js +2 -5
- package/src/analysis/task-retrieval.js +3 -14
- package/src/analysis/transport-contracts.js +157 -0
- package/src/graph/builder/lang-go.js +4 -2
- package/src/graph/builder/lang-java.js +12 -3
- package/src/graph/builder/lang-rust.js +22 -3
- package/src/graph/freshness-probe.js +1 -1
- package/src/graph/internal-builder.build.js +2 -2
- package/src/graph/internal-builder.resolvers.js +18 -8
- package/src/mcp/actions/advisories.mjs +2 -3
- package/src/mcp/catalog.mjs +7 -4
- package/src/mcp/company-contract-verdict.mjs +42 -0
- package/src/mcp/evidence/duplicate-member-order.mjs +8 -0
- package/src/mcp/evidence-snapshot.duplicates.mjs +3 -7
- package/src/mcp/git-output.mjs +10 -0
- package/src/mcp/graph/context-seeds.mjs +3 -14
- package/src/mcp/graph/reverse-reach.mjs +42 -0
- package/src/mcp/sync/evidence-duplicates.mjs +1 -4
- package/src/mcp/tools-company.mjs +28 -53
- package/src/mcp/tools-impact-change.mjs +2 -38
- package/src/mcp/tools-impact-precision.mjs +89 -0
- package/src/mcp/tools-impact.mjs +53 -136
- package/src/path-classification.js +14 -0
- package/src/precision/lsp-overlay/build.js +10 -0
- package/src/precision/lsp-overlay/contract.js +1 -1
- package/src/precision/symbol-query.js +39 -0
- package/src/precision/typescript-provider/client.js +16 -3
- package/src/precision/typescript-provider/discovery.js +1 -1
- package/src/precision/typescript-provider/isolated-runtime.js +39 -0
- package/src/precision/typescript-provider/project-host.js +11 -6
- package/src/precision/typescript-provider/project-safety.js +5 -0
- package/src/security/advisory-store.js +2 -2
- package/src/security/installed-jvm-rust.js +46 -0
- package/src/security/installed.js +21 -1
- package/src/security/malware-heuristics.sweep.js +1 -1
- package/src/security/registry-sig.classify.js +2 -1
- package/src/security/registry-sig.rules.js +3 -3
- package/src/util.js +8 -0
- package/docs/releases/v0.2.14.md +0 -93
|
@@ -14,7 +14,7 @@ export const MALWARE_ALLOWLIST = new Set([
|
|
|
14
14
|
// webhook.site / oast.* / canarytokens / dnslog.cn: Shai-Hulud-era exfil + OOB-callback services.
|
|
15
15
|
const EXFIL_HOSTS = "discord(app)?\\.com/api/webhooks|hooks\\.slack\\.com/services|api\\.telegram\\.org/bot|pastebin\\.com/raw|burpcollaborator|oastify\\.com|oast\\.(pro|live|fun|me|site|online)|interact\\.sh|pipedream\\.net|requestbin|webhook\\.site|canarytokens\\.(com|org)|dnslog\\.cn";
|
|
16
16
|
// external URL that is NOT an exfil endpoint (owned by exfil-url) and NOT a raw IP (owned by exfil-ip)
|
|
17
|
-
const PLAIN_EXTERNAL_URL = `https?://(?!(${EXFIL_HOSTS})|[0-9]{1,3}\\.|localhost\\b|127\\.|0\\.0\\.0\\.0|10\\.|192\\.168\\.|169\\.254\\.|172\\.(1[6-9]|2\\d|3[01])\\.)[^'"\`\\s)\\\\]+`;
|
|
17
|
+
const PLAIN_EXTERNAL_URL = `https?://(?!(${EXFIL_HOSTS})|[0-9]{1,3}\\.|localhost\\b|127\\.|0\\.0\\.0\\.0|10\\.|192\\.168\\.|169\\.254\\.|172\\.(1[6-9]|2\\d|3[01])\\.)[a-z0-9][^'"\`\\s)\\\\]+`;
|
|
18
18
|
|
|
19
19
|
// ---- content rules (scanned over node_modules file text; `pattern` is ripgrep-safe ERE, `re` is the
|
|
20
20
|
// JS validator used both to classify rg hits and by the no-rg fallback) ----
|
|
@@ -181,8 +181,8 @@ export const CONTENT_RULES = [
|
|
|
181
181
|
severity: "low", // minified/legit code look-alikes — only escalates with a second signal
|
|
182
182
|
nearZeroFp: false,
|
|
183
183
|
noisy: true,
|
|
184
|
-
pattern: "eval\\(atob\\(|eval\\(Buffer\\.from\\(
|
|
185
|
-
re: /eval\(atob\(|eval\(Buffer\.from\([^)]*base64
|
|
184
|
+
pattern: "eval\\(atob\\(|eval\\(Buffer\\.from\\(|\\b_0x[a-f0-9]{4,}\\b",
|
|
185
|
+
re: /eval\(atob\(|eval\(Buffer\.from\([^)]*base64|\b_0x[a-f0-9]{4,}\b/,
|
|
186
186
|
what: "obfuscation marker (eval-of-decoded payload / string-array obfuscator)",
|
|
187
187
|
},
|
|
188
188
|
];
|
package/src/util.js
CHANGED
|
@@ -16,6 +16,14 @@ export function uniqueBy(list, keyFn) {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export function lineNumberAt(text, index) {
|
|
20
|
+
let line = 1;
|
|
21
|
+
for (let offset = 0; offset < index && offset < text.length; offset++) {
|
|
22
|
+
if (text[offset] === "\n") line++;
|
|
23
|
+
}
|
|
24
|
+
return line;
|
|
25
|
+
}
|
|
26
|
+
|
|
19
27
|
export function safeRead(path) {
|
|
20
28
|
try {
|
|
21
29
|
const st = statSync(path);
|
package/docs/releases/v0.2.14.md
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# Weavatrix 0.2.14
|
|
2
|
-
|
|
3
|
-
0.2.14 is a trust and maintainability release found by dogfooding the MCP on a Go BGP service and a
|
|
4
|
-
Java event-driven application. It keeps the 38-tool surface and the local-first/Hosted wire boundary,
|
|
5
|
-
while closing false dead-code, false clean-health, noisy flow, weak architecture-bootstrap, and stale
|
|
6
|
-
daemon failure modes.
|
|
7
|
-
|
|
8
|
-
## Go receiver-aware call flow
|
|
9
|
-
|
|
10
|
-
- Go call resolution now carries receiver types from function parameters, explicit and inferred
|
|
11
|
-
locals, constructor return types (including the first value of `value, err := pkg.New()`), imported
|
|
12
|
-
package types, and struct fields.
|
|
13
|
-
- Calls such as `bgpSpeaker.RemoveMitigator(update)` resolve to
|
|
14
|
-
`(*Speaker).RemoveMitigator` instead of leaving the method falsely test-only.
|
|
15
|
-
- Unknown or ambiguous same-name receivers still fail closed rather than inventing a call edge.
|
|
16
|
-
|
|
17
|
-
## Focused generic flows
|
|
18
|
-
|
|
19
|
-
- `query_graph` accepts exact `seed_symbols`, a `relation_filter`, and
|
|
20
|
-
`flow_direction: forward|backward|both`. The same bounded graph can now trace Kafka listeners,
|
|
21
|
-
queues, workers, cron jobs, CLI entry points, and other event/data flows without one tool per
|
|
22
|
-
framework.
|
|
23
|
-
- Exact seeds remain exclusive unless `augment_seeds:true` is requested. CamelCase identifiers such
|
|
24
|
-
as `FlowSpec` no longer opt tests into production traversal merely because they contain `spec`.
|
|
25
|
-
- `context_bundle` ranks production callers before classified test callers and uses diverse,
|
|
26
|
-
non-overlapping excerpts around decisive call sites.
|
|
27
|
-
|
|
28
|
-
## Honest Health and endpoint state
|
|
29
|
-
|
|
30
|
-
- `run_audit` returns an explicit capability matrix for structure, dependencies, runtime correctness,
|
|
31
|
-
concurrency, advisories, malware scanning, and measured coverage. Each row has independent status
|
|
32
|
-
and completeness.
|
|
33
|
-
- Maven and Gradle manifests are detected and inventoried, but unsupported import-to-artifact
|
|
34
|
-
verification returns `NOT_SUPPORTED`/`PARTIAL` instead of a misleading complete zero.
|
|
35
|
-
- Conservative source checks can flag selected Go fixed-index slice/discriminator hazards and Java
|
|
36
|
-
interruption/retry candidates, including conditional `while` and `do/while` loops with failure plus
|
|
37
|
-
wait behavior but no visible attempt/deadline/cancellation policy. The result explicitly does not
|
|
38
|
-
claim compiler, runtime, CFG, race, or full concurrency proof.
|
|
39
|
-
- Ordinary Go grouped imports (`import (...)`) no longer trigger the JavaScript dynamic-import caveat;
|
|
40
|
-
real Go reflection evidence remains visible independently.
|
|
41
|
-
- Spring endpoint inventory includes conditional activation evidence and whether a controller is
|
|
42
|
-
inactive by default.
|
|
43
|
-
|
|
44
|
-
## Safe target-architecture bootstrap
|
|
45
|
-
|
|
46
|
-
- The starter discovers adaptive Maven/Gradle source roots and nested monorepo product territories
|
|
47
|
-
instead of grouping an entire Java application under its first directory. Oversized Java package
|
|
48
|
-
branches split recursively at real child packages, while a large flat package remains an honest
|
|
49
|
-
size hotspot instead of being divided into invented components.
|
|
50
|
-
- Observed dependency directions are proposed separately as `OBSERVED_NOT_ENFORCED`; inventory is not
|
|
51
|
-
silently promoted to intended architecture.
|
|
52
|
-
- Only universal starter guards (`runtimeCycles=0`, `maxFileLoc=300`) are active. Generic function,
|
|
53
|
-
complexity, cohesion, and boundary thresholds are returned as `CANDIDATE_NOT_ENFORCED` so a first
|
|
54
|
-
preview does not manufacture hundreds of policy violations.
|
|
55
|
-
- `maxFileLoc` now reads physical file LOC stored on file nodes, not the last declaration's end line;
|
|
56
|
-
older graphs rebuild before this budget can report a pass.
|
|
57
|
-
- `get_architecture_contract action=preview` returns the materialized candidate, verification, exact
|
|
58
|
-
file content/hash, and a short-lived token without writing. `action=approve` rechecks repository and
|
|
59
|
-
graph identity, then creates only a missing `.weavatrix/architecture.json` with the exact reviewed
|
|
60
|
-
content. Existing policy is never overwritten.
|
|
61
|
-
- `baseline_mode=accept-current` is an explicit owner action for ratcheting accepted current debt; the
|
|
62
|
-
default records no baseline findings.
|
|
63
|
-
|
|
64
|
-
## Runtime and codebase integrity
|
|
65
|
-
|
|
66
|
-
- The MCP compares its running version with the package version on disk. A mismatch blocks
|
|
67
|
-
`initialize`, `tools/list`, and tool calls with `STALE_RUNTIME` until the client reconnects. The
|
|
68
|
-
environment override is reserved for deliberate source development.
|
|
69
|
-
- Large MCP, graph, analysis, precision, and test modules were split into owner-focused folders with
|
|
70
|
-
stable hot-reload facades. The watcher and cache-busting chain include the new graph, Health,
|
|
71
|
-
action, and architecture owner modules, so supported tool edits still go live without reconnecting.
|
|
72
|
-
- The public page keeps the same design and continuous canvas graph animation while CSS and animation
|
|
73
|
-
code move into focused assets. A release test enforces a physical 300-line ceiling for
|
|
74
|
-
JavaScript/TypeScript under `src`, `bin`, `scripts`, and `test`, plus site HTML/CSS/JavaScript.
|
|
75
|
-
- The 38-tool catalog and profile counts remain unchanged: 31 pinned, 34 offline, 35 OSV, and 38
|
|
76
|
-
hosted/full.
|
|
77
|
-
|
|
78
|
-
## Compatibility and security
|
|
79
|
-
|
|
80
|
-
- Hosted payload v2/v3, `preview_sync` confirmation, and architecture-contract transport are
|
|
81
|
-
unchanged. This release does not modify the separate Hosted frontend/backend application.
|
|
82
|
-
- Local architecture approval writes only inside the active repository boundary, uses an exclusive
|
|
83
|
-
create, expires and consumes tokens, rejects repository/graph drift, and refuses an existing target.
|
|
84
|
-
- Source bodies, snippets, absolute paths, credentials, environment values, and Git remotes remain
|
|
85
|
-
excluded from Hosted sync payloads.
|
|
86
|
-
|
|
87
|
-
## Verification
|
|
88
|
-
|
|
89
|
-
The release is gated by the full Node suite (538 tests: 535 passed and three platform skips), the
|
|
90
|
-
six-language fixture benchmark, a 6/6 real-repository semantic-regression gate, zero npm audit
|
|
91
|
-
vulnerabilities, packed npm and MCPB stdio checks, plus direct Go and Java dogfooding. Cold timings
|
|
92
|
-
vary with machine load and repository snapshots; the public README keeps a dated representative
|
|
93
|
-
run instead of presenting one release machine's timing as a universal result.
|