@neurcode-ai/cli 0.9.64 → 0.9.65
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/LICENSE +201 -0
- package/dist/commands/brain.d.ts.map +1 -1
- package/dist/commands/brain.js +273 -0
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/pilot-report.d.ts +9 -0
- package/dist/commands/pilot-report.d.ts.map +1 -0
- package/dist/commands/pilot-report.js +176 -0
- package/dist/commands/pilot-report.js.map +1 -0
- package/dist/commands/remediate-governance.d.ts +54 -0
- package/dist/commands/remediate-governance.d.ts.map +1 -0
- package/dist/commands/remediate-governance.js +375 -0
- package/dist/commands/remediate-governance.js.map +1 -0
- package/dist/commands/remediate.d.ts.map +1 -1
- package/dist/commands/remediate.js.map +1 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +30 -0
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +307 -24
- package/dist/commands/verify.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +1078 -0
- package/dist/daemon/server.js.map +1 -1
- package/dist/explainability/DeterminismClassifier.d.ts +34 -0
- package/dist/explainability/DeterminismClassifier.d.ts.map +1 -0
- package/dist/explainability/DeterminismClassifier.js +104 -0
- package/dist/explainability/DeterminismClassifier.js.map +1 -0
- package/dist/explainability/ViolationFormatter.d.ts +32 -0
- package/dist/explainability/ViolationFormatter.d.ts.map +1 -0
- package/dist/explainability/ViolationFormatter.js +252 -0
- package/dist/explainability/ViolationFormatter.js.map +1 -0
- package/dist/explainability/index.d.ts +15 -0
- package/dist/explainability/index.d.ts.map +1 -0
- package/dist/explainability/index.js +94 -0
- package/dist/explainability/index.js.map +1 -0
- package/dist/explainability/types.d.ts +37 -0
- package/dist/explainability/types.d.ts.map +1 -0
- package/dist/explainability/types.js +3 -0
- package/dist/explainability/types.js.map +1 -0
- package/dist/governance/canonical-pipeline.d.ts +38 -0
- package/dist/governance/canonical-pipeline.d.ts.map +1 -0
- package/dist/governance/canonical-pipeline.js +448 -0
- package/dist/governance/canonical-pipeline.js.map +1 -0
- package/dist/governance/structural-on-diff.d.ts +13 -0
- package/dist/governance/structural-on-diff.d.ts.map +1 -0
- package/dist/governance/structural-on-diff.js +35 -0
- package/dist/governance/structural-on-diff.js.map +1 -0
- package/dist/governance/structural-policy-merge.d.ts +14 -0
- package/dist/governance/structural-policy-merge.d.ts.map +1 -0
- package/dist/governance/structural-policy-merge.js +25 -0
- package/dist/governance/structural-policy-merge.js.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/review-compression/index.d.ts +50 -0
- package/dist/integrations/review-compression/index.d.ts.map +1 -0
- package/dist/integrations/review-compression/index.js +158 -0
- package/dist/integrations/review-compression/index.js.map +1 -0
- package/dist/intent-engine/domain-taxonomy.d.ts +42 -0
- package/dist/intent-engine/domain-taxonomy.d.ts.map +1 -0
- package/dist/intent-engine/domain-taxonomy.js +534 -0
- package/dist/intent-engine/domain-taxonomy.js.map +1 -0
- package/dist/intent-engine/index.d.ts +1 -0
- package/dist/intent-engine/index.d.ts.map +1 -1
- package/dist/intent-engine/index.js +6 -1
- package/dist/intent-engine/index.js.map +1 -1
- package/dist/intent-engine/parser.d.ts.map +1 -1
- package/dist/intent-engine/parser.js +47 -0
- package/dist/intent-engine/parser.js.map +1 -1
- package/dist/intent-engine/semantic-expander.d.ts +104 -0
- package/dist/intent-engine/semantic-expander.d.ts.map +1 -0
- package/dist/intent-engine/semantic-expander.js +480 -0
- package/dist/intent-engine/semantic-expander.js.map +1 -0
- package/dist/patch-engine/patterns.d.ts.map +1 -1
- package/dist/patch-engine/patterns.js +8 -4
- package/dist/patch-engine/patterns.js.map +1 -1
- package/dist/semantic/index.d.ts +14 -0
- package/dist/semantic/index.d.ts.map +1 -0
- package/dist/semantic/index.js +30 -0
- package/dist/semantic/index.js.map +1 -0
- package/dist/semantic/tfidf-engine.d.ts +81 -0
- package/dist/semantic/tfidf-engine.d.ts.map +1 -0
- package/dist/semantic/tfidf-engine.js +278 -0
- package/dist/semantic/tfidf-engine.js.map +1 -0
- package/dist/semantic/vector-store.d.ts +108 -0
- package/dist/semantic/vector-store.d.ts.map +1 -0
- package/dist/semantic/vector-store.js +321 -0
- package/dist/semantic/vector-store.js.map +1 -0
- package/dist/structural-rules/context-severity.d.ts +46 -0
- package/dist/structural-rules/context-severity.d.ts.map +1 -0
- package/dist/structural-rules/context-severity.js +115 -0
- package/dist/structural-rules/context-severity.js.map +1 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts +11 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts.map +1 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js +212 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js.map +1 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts +11 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts.map +1 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.js +213 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.js.map +1 -0
- package/dist/structural-rules/distributed/index.d.ts +3 -0
- package/dist/structural-rules/distributed/index.d.ts.map +1 -0
- package/dist/structural-rules/distributed/index.js +8 -0
- package/dist/structural-rules/distributed/index.js.map +1 -0
- package/dist/structural-rules/engine.d.ts +25 -0
- package/dist/structural-rules/engine.d.ts.map +1 -0
- package/dist/structural-rules/engine.js +90 -0
- package/dist/structural-rules/engine.js.map +1 -0
- package/dist/structural-rules/index.d.ts +41 -0
- package/dist/structural-rules/index.d.ts.map +1 -0
- package/dist/structural-rules/index.js +141 -0
- package/dist/structural-rules/index.js.map +1 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts +11 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts.map +1 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js +66 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js.map +1 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts +11 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts.map +1 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js +135 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js.map +1 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +11 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.js +86 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts +11 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts.map +1 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.js +167 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.js.map +1 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts +11 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts.map +1 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js +154 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js.map +1 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts +11 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts.map +1 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.js +130 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.js.map +1 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts +11 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts.map +1 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js +93 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js.map +1 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts +11 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts.map +1 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.js +154 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.js.map +1 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts +11 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts.map +1 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js +133 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js.map +1 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts +11 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts.map +1 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js +80 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js.map +1 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts +11 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js +145 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js.map +1 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts +11 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.js +196 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.js.map +1 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts +11 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.js +148 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.js.map +1 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts +11 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js +162 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js.map +1 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts +11 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js +150 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js.map +1 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts +11 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js +161 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js.map +1 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.d.ts +11 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.js +175 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.js.map +1 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts +11 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.js +176 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.js.map +1 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts +11 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.js +168 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.js.map +1 -0
- package/dist/structural-rules/rules/SR010-retry-storm.d.ts +11 -0
- package/dist/structural-rules/rules/SR010-retry-storm.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR010-retry-storm.js +181 -0
- package/dist/structural-rules/rules/SR010-retry-storm.js.map +1 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts +11 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.js +208 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.js.map +1 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts +11 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.js +191 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.js.map +1 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts +11 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.js +219 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.js.map +1 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts +11 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.js +208 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.js.map +1 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts +11 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.js +190 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.js.map +1 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts +11 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.js +187 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.js.map +1 -0
- package/dist/structural-rules/suppressions.d.ts +43 -0
- package/dist/structural-rules/suppressions.d.ts.map +1 -0
- package/dist/structural-rules/suppressions.js +115 -0
- package/dist/structural-rules/suppressions.js.map +1 -0
- package/dist/structural-rules/types.d.ts +43 -0
- package/dist/structural-rules/types.d.ts.map +1 -0
- package/dist/structural-rules/types.js +3 -0
- package/dist/structural-rules/types.js.map +1 -0
- package/dist/utils/brain-cache.d.ts +100 -0
- package/dist/utils/brain-cache.d.ts.map +1 -0
- package/dist/utils/brain-cache.js +346 -0
- package/dist/utils/brain-cache.js.map +1 -0
- package/dist/utils/governance-provenance.d.ts +95 -0
- package/dist/utils/governance-provenance.d.ts.map +1 -0
- package/dist/utils/governance-provenance.js +187 -0
- package/dist/utils/governance-provenance.js.map +1 -0
- package/dist/utils/pilot-metrics.d.ts +46 -0
- package/dist/utils/pilot-metrics.d.ts.map +1 -0
- package/dist/utils/pilot-metrics.js +240 -0
- package/dist/utils/pilot-metrics.js.map +1 -0
- package/dist/utils/replay-runtime.d.ts +34 -0
- package/dist/utils/replay-runtime.d.ts.map +1 -1
- package/dist/utils/replay-runtime.js +207 -0
- package/dist/utils/replay-runtime.js.map +1 -1
- package/dist/workspace/cross-repo-graph.d.ts +111 -0
- package/dist/workspace/cross-repo-graph.d.ts.map +1 -0
- package/dist/workspace/cross-repo-graph.js +450 -0
- package/dist/workspace/cross-repo-graph.js.map +1 -0
- package/dist/workspace/federated-context.d.ts +144 -0
- package/dist/workspace/federated-context.d.ts.map +1 -0
- package/dist/workspace/federated-context.js +347 -0
- package/dist/workspace/federated-context.js.map +1 -0
- package/dist/workspace/index.d.ts +38 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +48 -0
- package/dist/workspace/index.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Persistent Semantic Vector Store
|
|
4
|
+
*
|
|
5
|
+
* Manages a TF-IDF index over the project's brain-context file entries.
|
|
6
|
+
* Stored at: .neurcode/semantic-index.json
|
|
7
|
+
*
|
|
8
|
+
* Design principles:
|
|
9
|
+
* - Built FROM the existing brain-context.json — no new scanning required
|
|
10
|
+
* - Incremental updates on file changes (watch events)
|
|
11
|
+
* - Atomic writes (tmp → rename) to prevent corruption
|
|
12
|
+
* - Schema versioned for safe migrations
|
|
13
|
+
* - Completely offline, zero API calls, zero latency cost
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* buildSemanticIndex(cwd, scope) — full rebuild from brain context
|
|
17
|
+
* semanticSearch(cwd, scope, query) — search the index
|
|
18
|
+
* upsertFileInIndex(cwd, scope, filePath, content) — incremental update
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.buildSemanticIndex = buildSemanticIndex;
|
|
22
|
+
exports.semanticSearch = semanticSearch;
|
|
23
|
+
exports.upsertFileInIndex = upsertFileInIndex;
|
|
24
|
+
exports.removeFileFromIndex = removeFileFromIndex;
|
|
25
|
+
exports.getSemanticIndexStats = getSemanticIndexStats;
|
|
26
|
+
exports.clearSemanticIndex = clearSemanticIndex;
|
|
27
|
+
exports.explainQuery = explainQuery;
|
|
28
|
+
const crypto_1 = require("crypto");
|
|
29
|
+
const fs_1 = require("fs");
|
|
30
|
+
const path_1 = require("path");
|
|
31
|
+
const tfidf_engine_1 = require("./tfidf-engine");
|
|
32
|
+
// ── Constants ──────────────────────────────────────────────────────────────────
|
|
33
|
+
const SEMANTIC_INDEX_FILE = 'semantic-index.json';
|
|
34
|
+
const NEURCODE_DIR = '.neurcode';
|
|
35
|
+
const SEMANTIC_SCHEMA_VER = 1;
|
|
36
|
+
/** Maximum number of documents to index (mirrors brain-context limit). */
|
|
37
|
+
const MAX_INDEX_DOCS = 2000;
|
|
38
|
+
// ── Path helpers ───────────────────────────────────────────────────────────────
|
|
39
|
+
function indexPath(cwd) {
|
|
40
|
+
return (0, path_1.join)(cwd, NEURCODE_DIR, SEMANTIC_INDEX_FILE);
|
|
41
|
+
}
|
|
42
|
+
function neurcodeDir(cwd) {
|
|
43
|
+
return (0, path_1.join)(cwd, NEURCODE_DIR);
|
|
44
|
+
}
|
|
45
|
+
function brainContextPath(cwd) {
|
|
46
|
+
return (0, path_1.join)(cwd, NEURCODE_DIR, 'brain-context.json');
|
|
47
|
+
}
|
|
48
|
+
function scopeKey(scope) {
|
|
49
|
+
return `${scope.orgId ?? 'anon'}::${scope.projectId ?? 'default'}`;
|
|
50
|
+
}
|
|
51
|
+
// ── Persistence ────────────────────────────────────────────────────────────────
|
|
52
|
+
function readIndex(cwd, scope) {
|
|
53
|
+
const path = indexPath(cwd);
|
|
54
|
+
if (!(0, fs_1.existsSync)(path))
|
|
55
|
+
return null;
|
|
56
|
+
try {
|
|
57
|
+
const raw = (0, fs_1.readFileSync)(path, 'utf-8');
|
|
58
|
+
const parsed = JSON.parse(raw);
|
|
59
|
+
if (parsed.schemaVersion !== SEMANTIC_SCHEMA_VER ||
|
|
60
|
+
parsed.scopeKey !== scopeKey(scope) ||
|
|
61
|
+
!parsed.corpus) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function writeIndex(cwd, index) {
|
|
71
|
+
const dir = neurcodeDir(cwd);
|
|
72
|
+
if (!(0, fs_1.existsSync)(dir))
|
|
73
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
74
|
+
const path = indexPath(cwd);
|
|
75
|
+
const tmp = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
76
|
+
(0, fs_1.writeFileSync)(tmp, JSON.stringify(index), 'utf-8');
|
|
77
|
+
(0, fs_1.renameSync)(tmp, path);
|
|
78
|
+
}
|
|
79
|
+
function readBrainContextEntries(cwd, scope) {
|
|
80
|
+
const path = brainContextPath(cwd);
|
|
81
|
+
if (!(0, fs_1.existsSync)(path))
|
|
82
|
+
return [];
|
|
83
|
+
try {
|
|
84
|
+
const raw = (0, fs_1.readFileSync)(path, 'utf-8');
|
|
85
|
+
const parsed = JSON.parse(raw);
|
|
86
|
+
if (!parsed?.scopes)
|
|
87
|
+
return [];
|
|
88
|
+
const key = scopeKey(scope);
|
|
89
|
+
const scoped = parsed.scopes[key];
|
|
90
|
+
if (scoped?.files) {
|
|
91
|
+
return Object.values(scoped.files);
|
|
92
|
+
}
|
|
93
|
+
// Fallback: merge all scopes when scope not initialized
|
|
94
|
+
if (!scope.orgId || !scope.projectId) {
|
|
95
|
+
const merged = {};
|
|
96
|
+
for (const s of Object.values(parsed.scopes)) {
|
|
97
|
+
for (const [p, entry] of Object.entries(s.files || {})) {
|
|
98
|
+
const existing = merged[p];
|
|
99
|
+
const existTs = Date.parse(existing?.lastSeenAt || '') || 0;
|
|
100
|
+
const incomingTs = Date.parse(entry?.lastSeenAt || '') || 0;
|
|
101
|
+
if (!existing || incomingTs >= existTs)
|
|
102
|
+
merged[p] = entry;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return Object.values(merged);
|
|
106
|
+
}
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function entryToDocument(entry) {
|
|
114
|
+
// Build rich text from all indexed signals
|
|
115
|
+
const text = [
|
|
116
|
+
entry.path,
|
|
117
|
+
entry.language,
|
|
118
|
+
entry.summary,
|
|
119
|
+
entry.symbols.join(' '),
|
|
120
|
+
// Expand file path segments (e.g. src/auth/middleware → src auth middleware)
|
|
121
|
+
entry.path.replace(/[/\\._-]/g, ' '),
|
|
122
|
+
].join(' ');
|
|
123
|
+
return {
|
|
124
|
+
id: entry.path,
|
|
125
|
+
text,
|
|
126
|
+
metadata: {
|
|
127
|
+
language: entry.language,
|
|
128
|
+
summary: entry.summary,
|
|
129
|
+
symbols: entry.symbols,
|
|
130
|
+
contentHash: entry.contentHash,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function sha256(input) {
|
|
135
|
+
return (0, crypto_1.createHash)('sha256').update(input, 'utf-8').digest('hex');
|
|
136
|
+
}
|
|
137
|
+
// ── Public API ─────────────────────────────────────────────────────────────────
|
|
138
|
+
/**
|
|
139
|
+
* Builds a full semantic index from the current brain-context entries.
|
|
140
|
+
* Should be called after `neurcode brain build` or equivalent full refresh.
|
|
141
|
+
*
|
|
142
|
+
* Returns: number of documents indexed.
|
|
143
|
+
*/
|
|
144
|
+
function buildSemanticIndex(cwd, scope) {
|
|
145
|
+
const entries = readBrainContextEntries(cwd, scope).slice(0, MAX_INDEX_DOCS);
|
|
146
|
+
if (entries.length === 0)
|
|
147
|
+
return 0;
|
|
148
|
+
const docs = entries.map(entryToDocument);
|
|
149
|
+
const corpus = (0, tfidf_engine_1.buildCorpus)(docs);
|
|
150
|
+
const contentHashes = {};
|
|
151
|
+
for (const entry of entries) {
|
|
152
|
+
contentHashes[entry.path] = entry.contentHash;
|
|
153
|
+
}
|
|
154
|
+
writeIndex(cwd, {
|
|
155
|
+
schemaVersion: SEMANTIC_SCHEMA_VER,
|
|
156
|
+
scopeKey: scopeKey(scope),
|
|
157
|
+
corpus,
|
|
158
|
+
contentHashes,
|
|
159
|
+
});
|
|
160
|
+
return entries.length;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Searches the semantic index.
|
|
164
|
+
*
|
|
165
|
+
* Falls back gracefully to an empty result if no index exists (never throws).
|
|
166
|
+
*/
|
|
167
|
+
function semanticSearch(cwd, scope, query, options = {}) {
|
|
168
|
+
if (!query?.trim())
|
|
169
|
+
return [];
|
|
170
|
+
const stored = readIndex(cwd, scope);
|
|
171
|
+
if (!stored)
|
|
172
|
+
return [];
|
|
173
|
+
const raw = (0, tfidf_engine_1.searchCorpus)(query, stored.corpus, {
|
|
174
|
+
limit: options.limit ?? 20,
|
|
175
|
+
minScore: options.minScore ?? 0.01,
|
|
176
|
+
});
|
|
177
|
+
const docCount = stored.corpus.documentCount ?? stored.corpus.entries.length;
|
|
178
|
+
const indexTruncated = docCount >= MAX_INDEX_DOCS;
|
|
179
|
+
const entries = readBrainContextEntries(cwd, scope);
|
|
180
|
+
const eligibleDocs = Math.min(entries.length, MAX_INDEX_DOCS);
|
|
181
|
+
const corpusCoverageRatio = entries.length === 0 ? 1 : Math.min(1, eligibleDocs / entries.length);
|
|
182
|
+
const queryTerms = (0, tfidf_engine_1.tokenize)(query).slice(0, 24);
|
|
183
|
+
return raw.map((r) => ({
|
|
184
|
+
filePath: r.id,
|
|
185
|
+
score: r.score,
|
|
186
|
+
id: r.id,
|
|
187
|
+
language: r.metadata?.language || '',
|
|
188
|
+
summary: r.metadata?.summary || '',
|
|
189
|
+
symbols: r.metadata?.symbols || [],
|
|
190
|
+
contentHash: r.metadata?.contentHash || '',
|
|
191
|
+
confidence: {
|
|
192
|
+
retrievalScore: r.score,
|
|
193
|
+
corpusCoverageRatio,
|
|
194
|
+
indexTruncated,
|
|
195
|
+
documentsIndexed: docCount,
|
|
196
|
+
documentsCap: MAX_INDEX_DOCS,
|
|
197
|
+
retrievalMethod: 'deterministic-tfidf',
|
|
198
|
+
},
|
|
199
|
+
explainability: {
|
|
200
|
+
retrievalCategory: 'deterministic-semantic',
|
|
201
|
+
includedBecause: `TF-IDF rank ${r.score.toFixed(4)} for query "${query.trim()}"`,
|
|
202
|
+
matchedTerms: queryTerms.filter((term) => {
|
|
203
|
+
const haystack = `${r.id} ${r.metadata?.summary || ''} ${(r.metadata?.symbols || []).join(' ')}`.toLowerCase();
|
|
204
|
+
return haystack.includes(term.toLowerCase());
|
|
205
|
+
}).slice(0, 8),
|
|
206
|
+
retrievalPath: [r.id],
|
|
207
|
+
federationSource: 'local-repo-index',
|
|
208
|
+
truncationStatus: indexTruncated ? 'index-truncated' : 'none',
|
|
209
|
+
},
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Incrementally adds or updates a single file in the semantic index.
|
|
214
|
+
* Called by the watch daemon on file changes.
|
|
215
|
+
*
|
|
216
|
+
* `content` is the raw file content to vectorize.
|
|
217
|
+
* If the content hash matches what's already indexed, this is a no-op.
|
|
218
|
+
*/
|
|
219
|
+
function upsertFileInIndex(cwd, scope, filePath, content, metadata) {
|
|
220
|
+
const stored = readIndex(cwd, scope);
|
|
221
|
+
if (!stored)
|
|
222
|
+
return false; // Index must exist before incremental updates
|
|
223
|
+
const hash = sha256(content);
|
|
224
|
+
if (stored.contentHashes[filePath] === hash)
|
|
225
|
+
return false; // No change
|
|
226
|
+
const text = [
|
|
227
|
+
filePath,
|
|
228
|
+
metadata?.language || '',
|
|
229
|
+
metadata?.summary || '',
|
|
230
|
+
(metadata?.symbols || []).join(' '),
|
|
231
|
+
filePath.replace(/[/\\._-]/g, ' '),
|
|
232
|
+
content.slice(0, 4000), // First 4KB of content for extra signal
|
|
233
|
+
].join(' ');
|
|
234
|
+
const doc = {
|
|
235
|
+
id: filePath,
|
|
236
|
+
text,
|
|
237
|
+
metadata: {
|
|
238
|
+
language: metadata?.language || '',
|
|
239
|
+
summary: metadata?.summary || '',
|
|
240
|
+
symbols: metadata?.symbols || [],
|
|
241
|
+
contentHash: hash,
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
const updatedCorpus = (0, tfidf_engine_1.upsertDocumentInCorpus)(stored.corpus, doc);
|
|
245
|
+
const updatedHashes = { ...stored.contentHashes, [filePath]: hash };
|
|
246
|
+
writeIndex(cwd, {
|
|
247
|
+
...stored,
|
|
248
|
+
corpus: updatedCorpus,
|
|
249
|
+
contentHashes: updatedHashes,
|
|
250
|
+
});
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Removes a file from the semantic index.
|
|
255
|
+
* Called by the watch daemon on file deletions.
|
|
256
|
+
*/
|
|
257
|
+
function removeFileFromIndex(cwd, scope, filePath) {
|
|
258
|
+
const stored = readIndex(cwd, scope);
|
|
259
|
+
if (!stored)
|
|
260
|
+
return false;
|
|
261
|
+
if (!stored.contentHashes[filePath])
|
|
262
|
+
return false;
|
|
263
|
+
const updatedCorpus = (0, tfidf_engine_1.removeDocumentFromCorpus)(stored.corpus, filePath);
|
|
264
|
+
const updatedHashes = { ...stored.contentHashes };
|
|
265
|
+
delete updatedHashes[filePath];
|
|
266
|
+
writeIndex(cwd, {
|
|
267
|
+
...stored,
|
|
268
|
+
corpus: updatedCorpus,
|
|
269
|
+
contentHashes: updatedHashes,
|
|
270
|
+
});
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Returns metadata about the current index without loading the full corpus.
|
|
275
|
+
*/
|
|
276
|
+
function getSemanticIndexStats(cwd, scope) {
|
|
277
|
+
const path = indexPath(cwd);
|
|
278
|
+
if (!(0, fs_1.existsSync)(path)) {
|
|
279
|
+
return { exists: false, documentCount: 0, builtAt: null, schemaVersion: null, sizeBytes: null };
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
const { statSync } = require('fs');
|
|
283
|
+
const sizeBytes = statSync(path).size;
|
|
284
|
+
const stored = readIndex(cwd, scope);
|
|
285
|
+
return {
|
|
286
|
+
exists: true,
|
|
287
|
+
documentCount: stored?.corpus?.documentCount ?? 0,
|
|
288
|
+
builtAt: stored?.corpus?.builtAt ?? null,
|
|
289
|
+
schemaVersion: stored?.schemaVersion ?? null,
|
|
290
|
+
sizeBytes,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return { exists: true, documentCount: 0, builtAt: null, schemaVersion: null, sizeBytes: null };
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Deletes the semantic index file for this workspace.
|
|
299
|
+
* Called by `neurcode brain clear`.
|
|
300
|
+
*/
|
|
301
|
+
function clearSemanticIndex(cwd) {
|
|
302
|
+
const path = indexPath(cwd);
|
|
303
|
+
if (!(0, fs_1.existsSync)(path))
|
|
304
|
+
return false;
|
|
305
|
+
try {
|
|
306
|
+
const { renameSync: mv } = require('fs');
|
|
307
|
+
mv(path, path.replace(/\.json$/, `.cleared-${Date.now()}.json`));
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Returns the query's tokenized representation for debugging/transparency.
|
|
316
|
+
*/
|
|
317
|
+
function explainQuery(query) {
|
|
318
|
+
const tokens = (0, tfidf_engine_1.tokenize)(query);
|
|
319
|
+
return { tokens, termCount: tokens.length };
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=vector-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../src/semantic/vector-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-aware severity adjustment.
|
|
3
|
+
*
|
|
4
|
+
* The same structural violation has different operational risk depending
|
|
5
|
+
* on where it appears in the codebase:
|
|
6
|
+
* - SR001 in src/auth/middleware.ts → BLOCKING (auth path is critical)
|
|
7
|
+
* - SR001 in test/helpers.ts → ADVISORY (tests are not production code)
|
|
8
|
+
* - SR004 in src/api/routes.ts → BLOCKING (request boundary)
|
|
9
|
+
* - SR004 in scripts/seed.ts → ADVISORY (internal tooling)
|
|
10
|
+
*/
|
|
11
|
+
import type { StructuralViolation, RuleSeverity } from './types';
|
|
12
|
+
export interface SeverityContext {
|
|
13
|
+
isTestFile: boolean;
|
|
14
|
+
isAuthPath: boolean;
|
|
15
|
+
isPaymentPath: boolean;
|
|
16
|
+
isSecurityPath: boolean;
|
|
17
|
+
isScriptOrTooling: boolean;
|
|
18
|
+
isInfraPath: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface SeverityAdjustment {
|
|
21
|
+
originalSeverity: RuleSeverity;
|
|
22
|
+
adjustedSeverity: RuleSeverity;
|
|
23
|
+
reason: string;
|
|
24
|
+
contextFlags: SeverityContext;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Classify a file path into a severity context.
|
|
28
|
+
*/
|
|
29
|
+
export declare function classifyFileContext(filePath: string): SeverityContext;
|
|
30
|
+
/**
|
|
31
|
+
* Adjust a violation's severity based on file path context.
|
|
32
|
+
* Returns the adjusted violation (new object, original unmodified).
|
|
33
|
+
*/
|
|
34
|
+
export declare function adjustViolationSeverity(violation: StructuralViolation, context: SeverityContext): {
|
|
35
|
+
violation: StructuralViolation;
|
|
36
|
+
adjustment: SeverityAdjustment;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Apply context-aware severity to an array of violations.
|
|
40
|
+
* Returns adjusted violations with a summary of what changed.
|
|
41
|
+
*/
|
|
42
|
+
export declare function applyContextualSeverity(violations: StructuralViolation[]): {
|
|
43
|
+
violations: StructuralViolation[];
|
|
44
|
+
adjustments: SeverityAdjustment[];
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=context-severity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-severity.d.ts","sourceRoot":"","sources":["../../src/structural-rules/context-severity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAS,OAAO,CAAC;IAC3B,UAAU,EAAS,OAAO,CAAC;IAC3B,aAAa,EAAM,OAAO,CAAC;IAC3B,cAAc,EAAK,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAQ,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,YAAY,CAAC;IAC/B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,MAAM,EAAY,MAAM,CAAC;IACzB,YAAY,EAAM,eAAe,CAAC;CACnC;AAOD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAqDrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,eAAe,GACvB;IAAE,SAAS,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAsCpE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,mBAAmB,EAAE,GAChC;IACD,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC,CAYA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Context-aware severity adjustment.
|
|
4
|
+
*
|
|
5
|
+
* The same structural violation has different operational risk depending
|
|
6
|
+
* on where it appears in the codebase:
|
|
7
|
+
* - SR001 in src/auth/middleware.ts → BLOCKING (auth path is critical)
|
|
8
|
+
* - SR001 in test/helpers.ts → ADVISORY (tests are not production code)
|
|
9
|
+
* - SR004 in src/api/routes.ts → BLOCKING (request boundary)
|
|
10
|
+
* - SR004 in scripts/seed.ts → ADVISORY (internal tooling)
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.classifyFileContext = classifyFileContext;
|
|
14
|
+
exports.adjustViolationSeverity = adjustViolationSeverity;
|
|
15
|
+
exports.applyContextualSeverity = applyContextualSeverity;
|
|
16
|
+
// Rule IDs that get promoted to BLOCKING when in a critical path
|
|
17
|
+
const CRITICAL_PATH_PROMOTABLE_RULES = new Set([
|
|
18
|
+
'SR001', 'SR004', 'SR006', 'SR007', 'SR016',
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* Classify a file path into a severity context.
|
|
22
|
+
*/
|
|
23
|
+
function classifyFileContext(filePath) {
|
|
24
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
25
|
+
const fileName = normalized.split('/').pop() ?? '';
|
|
26
|
+
const isTestFile = /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(fileName) ||
|
|
27
|
+
/\/__tests__\//.test(normalized) ||
|
|
28
|
+
/(?:^|\/)tests?\//.test(normalized);
|
|
29
|
+
const isAuthPath = /\/auth\//.test(normalized) ||
|
|
30
|
+
/\/authentication\//.test(normalized) ||
|
|
31
|
+
/\/authorization\//.test(normalized) ||
|
|
32
|
+
/\/login\//.test(normalized) ||
|
|
33
|
+
/\/session\//.test(normalized);
|
|
34
|
+
const isPaymentPath = /\/payment\//.test(normalized) ||
|
|
35
|
+
/\/billing\//.test(normalized) ||
|
|
36
|
+
/\/stripe\//.test(normalized) ||
|
|
37
|
+
/\/checkout\//.test(normalized);
|
|
38
|
+
const isSecurityPath = /\/security\//.test(normalized) ||
|
|
39
|
+
/\/crypto\//.test(normalized) ||
|
|
40
|
+
/\/encrypt\//.test(normalized) ||
|
|
41
|
+
/\/vault\//.test(normalized);
|
|
42
|
+
const isScriptOrTooling = /\/scripts\//.test(normalized) ||
|
|
43
|
+
/\/tools\//.test(normalized) ||
|
|
44
|
+
/\/seed\//.test(normalized) ||
|
|
45
|
+
/\/fixtures\//.test(normalized) ||
|
|
46
|
+
/\/migrate\//.test(normalized) ||
|
|
47
|
+
/\bseed\./.test(fileName) ||
|
|
48
|
+
/\bfixture\./.test(fileName) ||
|
|
49
|
+
/\bmigration\./.test(fileName);
|
|
50
|
+
const isInfraPath = /\/infra\//.test(normalized) ||
|
|
51
|
+
/\/k8s\//.test(normalized) ||
|
|
52
|
+
/\/terraform\//.test(normalized) ||
|
|
53
|
+
/\/docker\//.test(normalized) ||
|
|
54
|
+
/\/deploy\//.test(normalized);
|
|
55
|
+
return {
|
|
56
|
+
isTestFile,
|
|
57
|
+
isAuthPath,
|
|
58
|
+
isPaymentPath,
|
|
59
|
+
isSecurityPath,
|
|
60
|
+
isScriptOrTooling,
|
|
61
|
+
isInfraPath,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Adjust a violation's severity based on file path context.
|
|
66
|
+
* Returns the adjusted violation (new object, original unmodified).
|
|
67
|
+
*/
|
|
68
|
+
function adjustViolationSeverity(violation, context) {
|
|
69
|
+
const originalSeverity = violation.severity;
|
|
70
|
+
let adjustedSeverity = originalSeverity;
|
|
71
|
+
let reason = 'No adjustment — context is neutral';
|
|
72
|
+
// Rule 1: Test files → always downgrade to ADVISORY
|
|
73
|
+
if (context.isTestFile) {
|
|
74
|
+
adjustedSeverity = 'ADVISORY';
|
|
75
|
+
reason = 'Test file — violations are advisory only';
|
|
76
|
+
}
|
|
77
|
+
// Rule 2: Scripts / tooling → downgrade to ADVISORY
|
|
78
|
+
else if (context.isScriptOrTooling) {
|
|
79
|
+
adjustedSeverity = 'ADVISORY';
|
|
80
|
+
reason = 'Tooling/script — not production request path';
|
|
81
|
+
}
|
|
82
|
+
// Rule 3: Critical path (auth/payment/security) → upgrade eligible ADVISORY to BLOCKING
|
|
83
|
+
else if ((context.isAuthPath || context.isPaymentPath || context.isSecurityPath) &&
|
|
84
|
+
originalSeverity === 'ADVISORY' &&
|
|
85
|
+
CRITICAL_PATH_PROMOTABLE_RULES.has(violation.ruleId)) {
|
|
86
|
+
adjustedSeverity = 'BLOCKING';
|
|
87
|
+
reason = 'Critical path (auth/payment/security) — elevated severity';
|
|
88
|
+
}
|
|
89
|
+
const adjustment = {
|
|
90
|
+
originalSeverity,
|
|
91
|
+
adjustedSeverity,
|
|
92
|
+
reason,
|
|
93
|
+
contextFlags: context,
|
|
94
|
+
};
|
|
95
|
+
const adjustedViolation = adjustedSeverity === originalSeverity
|
|
96
|
+
? violation
|
|
97
|
+
: { ...violation, severity: adjustedSeverity };
|
|
98
|
+
return { violation: adjustedViolation, adjustment };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Apply context-aware severity to an array of violations.
|
|
102
|
+
* Returns adjusted violations with a summary of what changed.
|
|
103
|
+
*/
|
|
104
|
+
function applyContextualSeverity(violations) {
|
|
105
|
+
const adjustedViolations = [];
|
|
106
|
+
const adjustments = [];
|
|
107
|
+
for (const violation of violations) {
|
|
108
|
+
const context = classifyFileContext(violation.filePath);
|
|
109
|
+
const { violation: adjusted, adjustment } = adjustViolationSeverity(violation, context);
|
|
110
|
+
adjustedViolations.push(adjusted);
|
|
111
|
+
adjustments.push(adjustment);
|
|
112
|
+
}
|
|
113
|
+
return { violations: adjustedViolations, adjustments };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=context-severity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-severity.js","sourceRoot":"","sources":["../../src/structural-rules/context-severity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { StructuralRule, StructuralViolation, RuleLanguage } from '../types';
|
|
2
|
+
export declare class DS001SagaRollbackAbsence implements StructuralRule {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
policyRef: string;
|
|
6
|
+
severity: "ADVISORY";
|
|
7
|
+
languages: RuleLanguage[];
|
|
8
|
+
description: string;
|
|
9
|
+
check(filePath: string, sourceText: string): StructuralViolation[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=DS001-saga-rollback-absence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DS001-saga-rollback-absence.d.ts","sourceRoot":"","sources":["../../../src/structural-rules/distributed/DS001-saga-rollback-absence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA6H7E,qBAAa,wBAAyB,YAAW,cAAc;IAC7D,EAAE,SAAW;IACb,IAAI,SAAmE;IACvE,SAAS,SAAW;IACpB,QAAQ,EAAG,UAAU,CAAU;IAC/B,SAAS,EAAE,YAAY,EAAE,CAAgC;IACzD,WAAW,SAEwF;IAEnG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,EAAE;CAyEnE"}
|