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.
Files changed (65) hide show
  1. package/README.md +69 -13
  2. package/SECURITY.md +2 -2
  3. package/docs/releases/v0.2.16.md +53 -0
  4. package/package.json +6 -2
  5. package/src/analysis/cargo-dependency-evidence.js +111 -0
  6. package/src/analysis/cargo-manifests.js +74 -0
  7. package/src/analysis/dep-check-ecosystems.js +3 -0
  8. package/src/analysis/dep-check.js +8 -18
  9. package/src/analysis/dependency/conventions.js +16 -0
  10. package/src/analysis/dependency/scoped-dependencies.js +7 -2
  11. package/src/analysis/dependency/source-references.js +21 -0
  12. package/src/analysis/duplicates.tokenize.js +12 -2
  13. package/src/analysis/endpoints-java.js +2 -5
  14. package/src/analysis/findings.js +12 -0
  15. package/src/analysis/go-dependency-evidence.js +68 -0
  16. package/src/analysis/health-capabilities.js +1 -1
  17. package/src/analysis/http-contracts/analysis.js +2 -0
  18. package/src/analysis/http-contracts/client-call-detection.js +1 -0
  19. package/src/analysis/http-contracts/client-call-parser.js +18 -4
  20. package/src/analysis/internal-audit/dependency-health.js +15 -13
  21. package/src/analysis/internal-audit/python-manifests.js +18 -5
  22. package/src/analysis/internal-audit/supply-chain.js +2 -0
  23. package/src/analysis/internal-audit.reach.js +20 -0
  24. package/src/analysis/internal-audit.run.js +13 -7
  25. package/src/analysis/jvm-dependency-evidence.js +102 -56
  26. package/src/analysis/jvm-manifests.js +114 -0
  27. package/src/analysis/source-correctness.js +2 -5
  28. package/src/analysis/task-retrieval.js +3 -14
  29. package/src/analysis/transport-contracts.js +157 -0
  30. package/src/graph/builder/lang-go.js +4 -2
  31. package/src/graph/builder/lang-java.js +12 -3
  32. package/src/graph/builder/lang-rust.js +22 -3
  33. package/src/graph/freshness-probe.js +1 -1
  34. package/src/graph/internal-builder.build.js +2 -2
  35. package/src/graph/internal-builder.resolvers.js +18 -8
  36. package/src/mcp/actions/advisories.mjs +2 -3
  37. package/src/mcp/catalog.mjs +7 -4
  38. package/src/mcp/company-contract-verdict.mjs +42 -0
  39. package/src/mcp/evidence/duplicate-member-order.mjs +8 -0
  40. package/src/mcp/evidence-snapshot.duplicates.mjs +3 -7
  41. package/src/mcp/git-output.mjs +10 -0
  42. package/src/mcp/graph/context-seeds.mjs +3 -14
  43. package/src/mcp/graph/reverse-reach.mjs +42 -0
  44. package/src/mcp/sync/evidence-duplicates.mjs +1 -4
  45. package/src/mcp/tools-company.mjs +28 -53
  46. package/src/mcp/tools-impact-change.mjs +2 -38
  47. package/src/mcp/tools-impact-precision.mjs +89 -0
  48. package/src/mcp/tools-impact.mjs +53 -136
  49. package/src/path-classification.js +14 -0
  50. package/src/precision/lsp-overlay/build.js +10 -0
  51. package/src/precision/lsp-overlay/contract.js +1 -1
  52. package/src/precision/symbol-query.js +39 -0
  53. package/src/precision/typescript-provider/client.js +16 -3
  54. package/src/precision/typescript-provider/discovery.js +1 -1
  55. package/src/precision/typescript-provider/isolated-runtime.js +39 -0
  56. package/src/precision/typescript-provider/project-host.js +11 -6
  57. package/src/precision/typescript-provider/project-safety.js +5 -0
  58. package/src/security/advisory-store.js +2 -2
  59. package/src/security/installed-jvm-rust.js +46 -0
  60. package/src/security/installed.js +21 -1
  61. package/src/security/malware-heuristics.sweep.js +1 -1
  62. package/src/security/registry-sig.classify.js +2 -1
  63. package/src/security/registry-sig.rules.js +3 -3
  64. package/src/util.js +8 -0
  65. 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\\(|_0x[a-f0-9]{4}",
185
- re: /eval\(atob\(|eval\(Buffer\.from\([^)]*base64|_0x[a-f0-9]{4,}/,
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);
@@ -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.