@harness-engineering/cli 1.26.1 → 1.27.1
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/dist/agents/skills/claude-code/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/claude-code/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/claude-code/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/claude-code/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/claude-code/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/claude-code/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/claude-code/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/claude-code/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +4 -0
- package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/codex/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/codex/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/codex/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/codex/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/codex/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/codex/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/codex/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/codex/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/codex/harness-verification/SKILL.md +4 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/cursor/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/cursor/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/cursor/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/cursor/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/cursor/harness-verification/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/gemini-cli/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/gemini-cli/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/gemini-cli/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/gemini-cli/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/gemini-cli/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/gemini-cli/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/gemini-cli/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/gemini-cli/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +4 -0
- package/dist/{agents-md-VI3HLR7E.js → agents-md-2RN666DE.js} +3 -3
- package/dist/{architecture-ZDDKEVID.js → architecture-ZR33YKJB.js} +4 -4
- package/dist/{assess-project-Y6W7YDUA.js → assess-project-LLWWEQEV.js} +1 -1
- package/dist/bin/harness-mcp.js +17 -16
- package/dist/bin/harness.js +27 -26
- package/dist/{business-knowledge-6RHYJOB3.js → business-knowledge-EISPR7FU.js} +1 -1
- package/dist/{check-phase-gate-CXR3VM22.js → check-phase-gate-ZVG56NT2.js} +4 -4
- package/dist/chunk-27AJKSQY.js +107 -0
- package/dist/{chunk-DBIX3X4H.js → chunk-2FOLD76X.js} +2 -2
- package/dist/{chunk-3AMQYWGT.js → chunk-3AJW7VQ3.js} +2 -2
- package/dist/{chunk-FUND5WJR.js → chunk-3XMOWLK3.js} +2 -2
- package/dist/{chunk-OLW7BJ5N.js → chunk-776JFSPK.js} +1 -1
- package/dist/{chunk-VKS3F46M.js → chunk-A4ETL34H.js} +7 -2
- package/dist/{chunk-JV4Y2U5F.js → chunk-BO4AJZRE.js} +1 -1
- package/dist/{chunk-WZ7UHPT3.js → chunk-BZZNYHRY.js} +9 -9
- package/dist/{chunk-ZN6ROTYP.js → chunk-C7RPQWBG.js} +1 -1
- package/dist/{chunk-RAVD7QLY.js → chunk-CJYNZMOP.js} +8 -8
- package/dist/{chunk-PNNFCVW4.js → chunk-EGRQHLDM.js} +5 -5
- package/dist/{chunk-2BPPS6YQ.js → chunk-EHTUWULH.js} +458 -363
- package/dist/{chunk-N6B6RKQQ.js → chunk-EICASBYP.js} +1 -1
- package/dist/{chunk-K56DTX7G.js → chunk-F3Y64VNF.js} +6 -6
- package/dist/{chunk-ORNEK65Y.js → chunk-FUS4OOGC.js} +1 -1
- package/dist/{chunk-2FPUPRCY.js → chunk-GAIOIINV.js} +594 -127
- package/dist/{chunk-YC4EYIER.js → chunk-IBTHD2UA.js} +132 -77
- package/dist/{chunk-RC5ZY3EV.js → chunk-IOW3MW2K.js} +2 -2
- package/dist/{chunk-B66LRB5M.js → chunk-L3Y7L4EG.js} +1 -1
- package/dist/{chunk-BK4DJIIY.js → chunk-MGPVA2EM.js} +27 -4
- package/dist/{chunk-NY7DTZ6K.js → chunk-Q5DKIL46.js} +3 -3
- package/dist/{chunk-TY2ESLVL.js → chunk-SDDQPMZK.js} +1 -1
- package/dist/{chunk-7GY6WNEI.js → chunk-SDPHFDQS.js} +1 -1
- package/dist/{chunk-56A6OXVA.js → chunk-T7UZOJF4.js} +9 -9
- package/dist/{chunk-AMRC4FU2.js → chunk-VCC47EXU.js} +109 -57
- package/dist/{chunk-Q3ZLVMQM.js → chunk-XKU37HGH.js} +10 -1
- package/dist/{chunk-TSVYBDDE.js → chunk-YZH4I4JO.js} +1 -1
- package/dist/{ci-workflow-EW37KVPS.js → ci-workflow-JFOL4YWW.js} +3 -3
- package/dist/{dist-NCNAXUFD.js → dist-BZS2XRLG.js} +5 -1
- package/dist/{dist-CJDGASPP.js → dist-CPKL5Y2R.js} +2 -2
- package/dist/{docs-4XI2FQW2.js → docs-FUTRJQHA.js} +4 -4
- package/dist/{engine-4L4CDTHU.js → engine-FB3HCNVT.js} +3 -3
- package/dist/{entropy-PBYSIQYS.js → entropy-FIEE4YDA.js} +3 -3
- package/dist/{feedback-OTIFW5MK.js → feedback-7EC4T6XG.js} +1 -1
- package/dist/{generate-agent-definitions-CZGUXIIN.js → generate-agent-definitions-FOSFADNR.js} +4 -4
- package/dist/{graph-loader-RDXSEBD7.js → graph-loader-QEI7SYOQ.js} +1 -1
- package/dist/hooks/adoption-tracker.js +36 -8
- package/dist/hooks/sentinel-pre.js +3 -2
- package/dist/hooks/telemetry-reporter.js +34 -15
- package/dist/index-builder-3AOQ3ZII.js +13 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +29 -28
- package/dist/{loader-UZOXCWFC.js → loader-HXUOBTYA.js} +3 -3
- package/dist/{mcp-GWVVV6LH.js → mcp-NUG4BMKJ.js} +17 -16
- package/dist/{performance-5UQPP3XX.js → performance-TYXBCTR7.js} +4 -4
- package/dist/{review-pipeline-65V4EO6O.js → review-pipeline-B4WPU6BQ.js} +3 -3
- package/dist/{runtime-PXX7HNB3.js → runtime-HQQNOARD.js} +3 -3
- package/dist/{scan-WM7XDUF7.js → scan-M4EGDAQ2.js} +1 -1
- package/dist/{security-CAYDRZIZ.js → security-25VFLIAO.js} +1 -1
- package/dist/templates/orchestrator/harness.orchestrator.md +18 -8
- package/dist/{validate-CWGXR7QM.js → validate-EAVGKZQB.js} +4 -4
- package/dist/{validate-cross-check-BKCNLZYG.js → validate-cross-check-SPL3H4O5.js} +3 -3
- package/package.json +13 -5
- package/dist/hooks/profiles.ts +0 -48
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
NODE_STABILITY,
|
|
14
14
|
init_dist as init_dist2,
|
|
15
15
|
queryTraceability
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-GAIOIINV.js";
|
|
17
17
|
import {
|
|
18
18
|
__esm,
|
|
19
19
|
__export
|
|
20
20
|
} from "./chunk-KFQGP6VL.js";
|
|
21
21
|
|
|
22
|
-
// ../core/dist/chunk-
|
|
22
|
+
// ../core/dist/chunk-H73442AZ.mjs
|
|
23
23
|
import { z } from "zod";
|
|
24
24
|
import { createHash } from "crypto";
|
|
25
25
|
import { minimatch } from "minimatch";
|
|
@@ -1734,8 +1734,8 @@ async function toHaveMaxDepDepth(received, maxDepth) {
|
|
|
1734
1734
|
};
|
|
1735
1735
|
}
|
|
1736
1736
|
var ArchMetricCategorySchema, ViolationSchema, MetricResultSchema, CategoryBaselineSchema, ArchBaselineSchema, CategoryRegressionSchema, ArchDiffResultSchema, ThresholdConfigSchema, ArchConfigSchema, ConstraintRuleSchema, ViolationSnapshotSchema, ViolationHistorySchema, EmergenceConfidenceSchema, EmergentConstraintSuggestionSchema, EmergenceResultSchema, accessAsync, readFileAsync, EXTENSION_BY_LANG, CircularDepsCollector, TypeScriptParser, EXTENSION_MAP, parserCache, initialized, GRAMMAR_MAP, TOP_LEVEL_TYPES, METHOD_TYPES, IDENTIFIER_TYPES, NAME_EXTRACTORS, pythonStrategy, goStrategy, RUST_USE_ARG_TYPES, RUST_PUB_ITEM_TYPES, rustStrategy, JAVA_IMPORT_TYPES, JAVA_EXPORT_TYPES, javaStrategy, STRATEGIES, TreeSitterParser, ParserRegistry, defaultRegistry, LayerViolationCollector, ArchBaselineManager, DEFAULT_THRESHOLDS, FUNCTION_PATTERNS, DECISION_PATTERNS, ComplexityCollector, DEFAULT_THRESHOLDS2, CouplingCollector, ForbiddenImportCollector, ModuleSizeCollector, DepDepthCollector, defaultCollectors, archMatchers;
|
|
1737
|
-
var
|
|
1738
|
-
"../core/dist/chunk-
|
|
1737
|
+
var init_chunk_H73442AZ = __esm({
|
|
1738
|
+
"../core/dist/chunk-H73442AZ.mjs"() {
|
|
1739
1739
|
"use strict";
|
|
1740
1740
|
init_dist();
|
|
1741
1741
|
ArchMetricCategorySchema = z.enum([
|
|
@@ -2402,6 +2402,9 @@ var init_chunk_UWAI34RR = __esm({
|
|
|
2402
2402
|
};
|
|
2403
2403
|
}
|
|
2404
2404
|
}
|
|
2405
|
+
for (const baseline of Object.values(metrics)) {
|
|
2406
|
+
baseline.violationIds = [...new Set(baseline.violationIds)];
|
|
2407
|
+
}
|
|
2405
2408
|
return {
|
|
2406
2409
|
version: 1,
|
|
2407
2410
|
updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -3289,11 +3292,11 @@ import { minimatch as minimatch4 } from "minimatch";
|
|
|
3289
3292
|
import { z as z8 } from "zod";
|
|
3290
3293
|
import * as fs24 from "fs";
|
|
3291
3294
|
import * as path21 from "path";
|
|
3292
|
-
import { readFileSync as readFileSync222, writeFileSync as writeFileSync15, unlinkSync, mkdirSync as mkdirSync14, readdirSync as readdirSync3 } from "fs";
|
|
3295
|
+
import { readFileSync as readFileSync222, writeFileSync as writeFileSync15, unlinkSync as unlinkSync2, mkdirSync as mkdirSync14, readdirSync as readdirSync3 } from "fs";
|
|
3293
3296
|
import { join as join362, dirname as dirname12 } from "path";
|
|
3294
3297
|
import { createHash as createHash32 } from "crypto";
|
|
3295
3298
|
import { z as z9 } from "zod";
|
|
3296
|
-
import { readFileSync as readFileSync23, writeFileSync as writeFileSync16, renameSync as
|
|
3299
|
+
import { readFileSync as readFileSync23, writeFileSync as writeFileSync16, renameSync as renameSync82, mkdirSync as mkdirSync15, existsSync as existsSync332 } from "fs";
|
|
3297
3300
|
import { execSync as execSync3 } from "child_process";
|
|
3298
3301
|
import { randomBytes as randomBytes22 } from "crypto";
|
|
3299
3302
|
import { join as join372, dirname as dirname13 } from "path";
|
|
@@ -6092,45 +6095,54 @@ async function detectDocDrift(snapshot, config, graphDriftData) {
|
|
|
6092
6095
|
severity
|
|
6093
6096
|
});
|
|
6094
6097
|
}
|
|
6095
|
-
function
|
|
6098
|
+
function buildFileIndex(snapshot) {
|
|
6099
|
+
const index = /* @__PURE__ */ new Map();
|
|
6100
|
+
for (const file of snapshot.files) {
|
|
6101
|
+
index.set(file.path, file);
|
|
6102
|
+
}
|
|
6103
|
+
return index;
|
|
6104
|
+
}
|
|
6105
|
+
function resolveImportToFile(importSource, fromFile, snapshot, fileIndex) {
|
|
6096
6106
|
if (!importSource.startsWith(".")) {
|
|
6097
6107
|
return null;
|
|
6098
6108
|
}
|
|
6109
|
+
const hasFile = fileIndex ? (p) => fileIndex.has(p) : (p) => snapshot.files.some((f) => f.path === p);
|
|
6099
6110
|
const fromDir = dirname6(fromFile);
|
|
6100
6111
|
let resolved = resolve5(fromDir, importSource);
|
|
6101
6112
|
if (!resolved.endsWith(".ts") && !resolved.endsWith(".tsx")) {
|
|
6102
6113
|
const withTs = resolved + ".ts";
|
|
6103
|
-
if (
|
|
6114
|
+
if (hasFile(withTs)) {
|
|
6104
6115
|
return withTs;
|
|
6105
6116
|
}
|
|
6106
6117
|
const withIndex = resolve5(resolved, "index.ts");
|
|
6107
|
-
if (
|
|
6118
|
+
if (hasFile(withIndex)) {
|
|
6108
6119
|
return withIndex;
|
|
6109
6120
|
}
|
|
6110
6121
|
}
|
|
6111
|
-
if (
|
|
6122
|
+
if (hasFile(resolved)) {
|
|
6112
6123
|
return resolved;
|
|
6113
6124
|
}
|
|
6114
6125
|
return null;
|
|
6115
6126
|
}
|
|
6116
|
-
function enqueueResolved(sources, current, snapshot, visited, queue) {
|
|
6127
|
+
function enqueueResolved(sources, current, snapshot, visited, queue, fileIndex) {
|
|
6117
6128
|
for (const item of sources) {
|
|
6118
6129
|
if (!item.source) continue;
|
|
6119
|
-
const resolved = resolveImportToFile(item.source, current, snapshot);
|
|
6130
|
+
const resolved = resolveImportToFile(item.source, current, snapshot, fileIndex);
|
|
6120
6131
|
if (resolved && !visited.has(resolved)) {
|
|
6121
6132
|
queue.push(resolved);
|
|
6122
6133
|
}
|
|
6123
6134
|
}
|
|
6124
6135
|
}
|
|
6125
|
-
function processReachabilityNode(current, snapshot, reachability, visited, queue) {
|
|
6136
|
+
function processReachabilityNode(current, snapshot, reachability, visited, queue, fileIndex) {
|
|
6126
6137
|
reachability.set(current, true);
|
|
6127
|
-
const sourceFile = snapshot.files.find((f) => f.path === current);
|
|
6138
|
+
const sourceFile = fileIndex ? fileIndex.get(current) : snapshot.files.find((f) => f.path === current);
|
|
6128
6139
|
if (!sourceFile) return;
|
|
6129
|
-
enqueueResolved(sourceFile.imports, current, snapshot, visited, queue);
|
|
6140
|
+
enqueueResolved(sourceFile.imports, current, snapshot, visited, queue, fileIndex);
|
|
6130
6141
|
const reExports = sourceFile.exports.filter((e) => e.isReExport);
|
|
6131
|
-
enqueueResolved(reExports, current, snapshot, visited, queue);
|
|
6142
|
+
enqueueResolved(reExports, current, snapshot, visited, queue, fileIndex);
|
|
6132
6143
|
}
|
|
6133
6144
|
function buildReachabilityMap(snapshot) {
|
|
6145
|
+
const fileIndex = buildFileIndex(snapshot);
|
|
6134
6146
|
const reachability = /* @__PURE__ */ new Map();
|
|
6135
6147
|
for (const file of snapshot.files) {
|
|
6136
6148
|
reachability.set(file.path, false);
|
|
@@ -6141,11 +6153,12 @@ function buildReachabilityMap(snapshot) {
|
|
|
6141
6153
|
const current = queue.shift();
|
|
6142
6154
|
if (visited.has(current)) continue;
|
|
6143
6155
|
visited.add(current);
|
|
6144
|
-
processReachabilityNode(current, snapshot, reachability, visited, queue);
|
|
6156
|
+
processReachabilityNode(current, snapshot, reachability, visited, queue, fileIndex);
|
|
6145
6157
|
}
|
|
6146
6158
|
return reachability;
|
|
6147
6159
|
}
|
|
6148
6160
|
function buildExportUsageMap(snapshot) {
|
|
6161
|
+
const fileIndex = buildFileIndex(snapshot);
|
|
6149
6162
|
const usageMap = /* @__PURE__ */ new Map();
|
|
6150
6163
|
for (const file of snapshot.files) {
|
|
6151
6164
|
for (const exp of file.exports) {
|
|
@@ -6155,9 +6168,9 @@ function buildExportUsageMap(snapshot) {
|
|
|
6155
6168
|
}
|
|
6156
6169
|
for (const file of snapshot.files) {
|
|
6157
6170
|
for (const imp of file.imports) {
|
|
6158
|
-
const resolvedFile = resolveImportToFile(imp.source, file.path, snapshot);
|
|
6171
|
+
const resolvedFile = resolveImportToFile(imp.source, file.path, snapshot, fileIndex);
|
|
6159
6172
|
if (!resolvedFile) continue;
|
|
6160
|
-
const sourceFile =
|
|
6173
|
+
const sourceFile = fileIndex.get(resolvedFile);
|
|
6161
6174
|
if (!sourceFile) continue;
|
|
6162
6175
|
for (const specifier of imp.specifiers) {
|
|
6163
6176
|
const matchingExport = sourceFile.exports.find(
|
|
@@ -8364,7 +8377,9 @@ async function saveState(projectPath, state, stream, session) {
|
|
|
8364
8377
|
const stateDir = dirResult.value;
|
|
8365
8378
|
const statePath = path8.join(stateDir, STATE_FILE);
|
|
8366
8379
|
fs11.mkdirSync(stateDir, { recursive: true });
|
|
8367
|
-
|
|
8380
|
+
const tmpPath = statePath + ".tmp";
|
|
8381
|
+
fs11.writeFileSync(tmpPath, JSON.stringify(state, null, 2));
|
|
8382
|
+
fs11.renameSync(tmpPath, statePath);
|
|
8368
8383
|
return Ok(void 0);
|
|
8369
8384
|
} catch (error) {
|
|
8370
8385
|
return Err(
|
|
@@ -8463,7 +8478,9 @@ function loadContentHashes(stateDir) {
|
|
|
8463
8478
|
}
|
|
8464
8479
|
function saveContentHashes(stateDir, index) {
|
|
8465
8480
|
const hashesPath = path9.join(stateDir, CONTENT_HASHES_FILE);
|
|
8466
|
-
|
|
8481
|
+
const tmpPath = hashesPath + ".tmp";
|
|
8482
|
+
fs12.writeFileSync(tmpPath, JSON.stringify(index, null, 2) + "\n");
|
|
8483
|
+
fs12.renameSync(tmpPath, hashesPath);
|
|
8467
8484
|
}
|
|
8468
8485
|
function rebuildContentHashes(stateDir, learningsFile) {
|
|
8469
8486
|
const learningsPath = path9.join(stateDir, learningsFile);
|
|
@@ -8673,6 +8690,34 @@ function checkOverlap(newEntry, existingEntries, options) {
|
|
|
8673
8690
|
...bestScore >= threshold && bestEntry ? { matchedEntry: bestEntry, matchedHash: computeEntryHash(bestEntry) } : {}
|
|
8674
8691
|
};
|
|
8675
8692
|
}
|
|
8693
|
+
function sleep(ms) {
|
|
8694
|
+
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
8695
|
+
}
|
|
8696
|
+
async function acquireFileLock(lockPath) {
|
|
8697
|
+
for (let attempt = 0; attempt < LOCK_RETRIES; attempt++) {
|
|
8698
|
+
try {
|
|
8699
|
+
const fd = fs14.openSync(
|
|
8700
|
+
lockPath,
|
|
8701
|
+
fs14.constants.O_CREAT | fs14.constants.O_EXCL | fs14.constants.O_WRONLY
|
|
8702
|
+
);
|
|
8703
|
+
fs14.closeSync(fd);
|
|
8704
|
+
return;
|
|
8705
|
+
} catch (err) {
|
|
8706
|
+
const isExist = err instanceof Error && "code" in err && err.code === "EEXIST";
|
|
8707
|
+
if (!isExist) throw err;
|
|
8708
|
+
if (attempt < LOCK_RETRIES - 1) {
|
|
8709
|
+
await sleep(LOCK_BACKOFFS[attempt]);
|
|
8710
|
+
}
|
|
8711
|
+
}
|
|
8712
|
+
}
|
|
8713
|
+
throw new Error(`Failed to acquire lock after ${LOCK_RETRIES} attempts: ${lockPath}`);
|
|
8714
|
+
}
|
|
8715
|
+
function releaseFileLock(lockPath) {
|
|
8716
|
+
try {
|
|
8717
|
+
fs14.unlinkSync(lockPath);
|
|
8718
|
+
} catch {
|
|
8719
|
+
}
|
|
8720
|
+
}
|
|
8676
8721
|
function loadOrRebuildHashes(stateDir, learningsPath) {
|
|
8677
8722
|
const hashesPath = path11.join(stateDir, CONTENT_HASHES_FILE);
|
|
8678
8723
|
if (fs14.existsSync(hashesPath)) {
|
|
@@ -8708,52 +8753,58 @@ async function appendLearning(projectPath, learning, skillName, outcome, stream,
|
|
|
8708
8753
|
const stateDir = dirResult.value;
|
|
8709
8754
|
const learningsPath = path11.join(stateDir, LEARNINGS_FILE);
|
|
8710
8755
|
fs14.mkdirSync(stateDir, { recursive: true });
|
|
8711
|
-
const
|
|
8712
|
-
|
|
8713
|
-
|
|
8714
|
-
|
|
8715
|
-
|
|
8716
|
-
|
|
8717
|
-
|
|
8718
|
-
|
|
8719
|
-
|
|
8720
|
-
|
|
8721
|
-
|
|
8722
|
-
|
|
8723
|
-
|
|
8724
|
-
|
|
8725
|
-
|
|
8726
|
-
|
|
8727
|
-
|
|
8728
|
-
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
8756
|
+
const lockPath = learningsPath + ".lock";
|
|
8757
|
+
await acquireFileLock(lockPath);
|
|
8758
|
+
try {
|
|
8759
|
+
const normalizedContent = normalizeLearningContent(learning);
|
|
8760
|
+
const contentHash = computeContentHash(normalizedContent);
|
|
8761
|
+
const contentHashes = loadOrRebuildHashes(stateDir, learningsPath);
|
|
8762
|
+
if (contentHashes[contentHash]) {
|
|
8763
|
+
return Ok({ appended: false });
|
|
8764
|
+
}
|
|
8765
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
8766
|
+
const bulletLine = formatBulletLine(
|
|
8767
|
+
timestamp,
|
|
8768
|
+
learning,
|
|
8769
|
+
skillName,
|
|
8770
|
+
outcome,
|
|
8771
|
+
rootCause,
|
|
8772
|
+
triedAndFailed
|
|
8773
|
+
);
|
|
8774
|
+
const fmTags = [];
|
|
8775
|
+
if (skillName) fmTags.push(skillName);
|
|
8776
|
+
if (outcome) fmTags.push(outcome);
|
|
8777
|
+
const hash = crypto3.createHash("sha256").update(bulletLine).digest("hex").slice(0, 8);
|
|
8778
|
+
const tagsStr = fmTags.length > 0 ? ` tags:${fmTags.join(",")}` : "";
|
|
8779
|
+
const entry = `
|
|
8732
8780
|
<!-- hash:${hash}${tagsStr} -->
|
|
8733
8781
|
${bulletLine}
|
|
8734
8782
|
`;
|
|
8735
|
-
|
|
8736
|
-
|
|
8737
|
-
|
|
8738
|
-
|
|
8783
|
+
let overlapResult;
|
|
8784
|
+
let existingLineCount;
|
|
8785
|
+
if (!fs14.existsSync(learningsPath)) {
|
|
8786
|
+
fs14.writeFileSync(learningsPath, `# Learnings
|
|
8739
8787
|
${entry}`);
|
|
8740
|
-
|
|
8741
|
-
|
|
8742
|
-
|
|
8743
|
-
|
|
8744
|
-
|
|
8745
|
-
|
|
8746
|
-
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
|
|
8751
|
-
|
|
8752
|
-
|
|
8753
|
-
|
|
8754
|
-
|
|
8755
|
-
|
|
8756
|
-
|
|
8788
|
+
existingLineCount = 1;
|
|
8789
|
+
} else {
|
|
8790
|
+
const existingContent = fs14.readFileSync(learningsPath, "utf-8");
|
|
8791
|
+
const existingEntries = existingContent.split("\n").filter((line) => /^- \*\*\d{4}-\d{2}-\d{2}/.test(line));
|
|
8792
|
+
const overlap = checkOverlap(bulletLine, existingEntries);
|
|
8793
|
+
if (overlap.score >= 0.7) overlapResult = overlap;
|
|
8794
|
+
existingLineCount = existingContent.split("\n").length;
|
|
8795
|
+
fs14.appendFileSync(learningsPath, entry);
|
|
8796
|
+
}
|
|
8797
|
+
const bulletLineNum = existingLineCount + 2;
|
|
8798
|
+
contentHashes[contentHash] = { date: timestamp ?? "", line: bulletLineNum };
|
|
8799
|
+
saveContentHashes(stateDir, contentHashes);
|
|
8800
|
+
invalidateLearningsCacheEntry(learningsPath);
|
|
8801
|
+
return Ok({
|
|
8802
|
+
appended: true,
|
|
8803
|
+
...overlapResult ? { overlap: overlapResult } : {}
|
|
8804
|
+
});
|
|
8805
|
+
} finally {
|
|
8806
|
+
releaseFileLock(lockPath);
|
|
8807
|
+
}
|
|
8757
8808
|
} catch (error) {
|
|
8758
8809
|
return Err(
|
|
8759
8810
|
new Error(
|
|
@@ -9181,7 +9232,9 @@ async function saveHandoff(projectPath, handoff, stream, session) {
|
|
|
9181
9232
|
const stateDir = dirResult.value;
|
|
9182
9233
|
const handoffPath = path15.join(stateDir, HANDOFF_FILE);
|
|
9183
9234
|
fs18.mkdirSync(stateDir, { recursive: true });
|
|
9184
|
-
|
|
9235
|
+
const tmpPath = handoffPath + ".tmp";
|
|
9236
|
+
fs18.writeFileSync(tmpPath, JSON.stringify(handoff, null, 2));
|
|
9237
|
+
fs18.renameSync(tmpPath, handoffPath);
|
|
9185
9238
|
return Ok(void 0);
|
|
9186
9239
|
} catch (error) {
|
|
9187
9240
|
return Err(
|
|
@@ -9895,14 +9948,14 @@ function readTaint(projectRoot, sessionId) {
|
|
|
9895
9948
|
state = JSON.parse(content);
|
|
9896
9949
|
} catch {
|
|
9897
9950
|
try {
|
|
9898
|
-
|
|
9951
|
+
unlinkSync2(filePath);
|
|
9899
9952
|
} catch {
|
|
9900
9953
|
}
|
|
9901
9954
|
return null;
|
|
9902
9955
|
}
|
|
9903
9956
|
if (!state.sessionId || !state.taintedAt || !state.expiresAt || !state.findings) {
|
|
9904
9957
|
try {
|
|
9905
|
-
|
|
9958
|
+
unlinkSync2(filePath);
|
|
9906
9959
|
} catch {
|
|
9907
9960
|
}
|
|
9908
9961
|
return null;
|
|
@@ -9919,7 +9972,7 @@ function checkTaint(projectRoot, sessionId) {
|
|
|
9919
9972
|
if (now >= expiresAt) {
|
|
9920
9973
|
const filePath = getTaintFilePath(projectRoot, sessionId);
|
|
9921
9974
|
try {
|
|
9922
|
-
|
|
9975
|
+
unlinkSync2(filePath);
|
|
9923
9976
|
} catch {
|
|
9924
9977
|
}
|
|
9925
9978
|
return { tainted: false, expired: true, state };
|
|
@@ -9956,7 +10009,7 @@ function clearTaint(projectRoot, sessionId) {
|
|
|
9956
10009
|
if (sessionId) {
|
|
9957
10010
|
const filePath = getTaintFilePath(projectRoot, sessionId);
|
|
9958
10011
|
try {
|
|
9959
|
-
|
|
10012
|
+
unlinkSync2(filePath);
|
|
9960
10013
|
return 1;
|
|
9961
10014
|
} catch {
|
|
9962
10015
|
return 0;
|
|
@@ -9969,7 +10022,7 @@ function clearTaint(projectRoot, sessionId) {
|
|
|
9969
10022
|
for (const file of files) {
|
|
9970
10023
|
if (file.startsWith("session-taint-") && file.endsWith(".json")) {
|
|
9971
10024
|
try {
|
|
9972
|
-
|
|
10025
|
+
unlinkSync2(join362(harnessDir, file));
|
|
9973
10026
|
count++;
|
|
9974
10027
|
} catch {
|
|
9975
10028
|
}
|
|
@@ -12700,7 +12753,7 @@ function parseRepoParts(repo) {
|
|
|
12700
12753
|
}
|
|
12701
12754
|
return { owner: parts[0], repo: parts[1] };
|
|
12702
12755
|
}
|
|
12703
|
-
function
|
|
12756
|
+
function sleep2(ms) {
|
|
12704
12757
|
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
12705
12758
|
}
|
|
12706
12759
|
async function fetchWithRetry(fetchFn, input, init, opts = RETRY_DEFAULTS) {
|
|
@@ -12718,7 +12771,7 @@ async function fetchWithRetry(fetchFn, input, init, opts = RETRY_DEFAULTS) {
|
|
|
12718
12771
|
} else {
|
|
12719
12772
|
delayMs = opts.baseDelayMs * Math.pow(2, attempt) + Math.random() * 500;
|
|
12720
12773
|
}
|
|
12721
|
-
await
|
|
12774
|
+
await sleep2(delayMs);
|
|
12722
12775
|
}
|
|
12723
12776
|
return lastResponse;
|
|
12724
12777
|
}
|
|
@@ -13947,7 +14000,7 @@ function collectEvents(projectRoot, consent) {
|
|
|
13947
14000
|
})
|
|
13948
14001
|
);
|
|
13949
14002
|
}
|
|
13950
|
-
function
|
|
14003
|
+
function sleep3(ms) {
|
|
13951
14004
|
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
13952
14005
|
}
|
|
13953
14006
|
async function send(events, apiKey) {
|
|
@@ -13967,14 +14020,14 @@ async function send(events, apiKey) {
|
|
|
13967
14020
|
} catch {
|
|
13968
14021
|
}
|
|
13969
14022
|
if (attempt < MAX_ATTEMPTS - 1) {
|
|
13970
|
-
await
|
|
14023
|
+
await sleep3(1e3 * (attempt + 1));
|
|
13971
14024
|
}
|
|
13972
14025
|
}
|
|
13973
14026
|
}
|
|
13974
|
-
var VALID_TYPES, CONVENTIONAL_PATTERN, DEFAULT_AGNIX_TIMEOUT_MS, HARNESS_AGNIX_DISABLE, HARNESS_AGNIX_BIN, CLAUDE_MD_WARN_BYTES, CLAUDE_MD_ERROR_BYTES, CONTEXT_FILES, MIN_DESCRIPTION_LENGTH, SETTINGS_PATHS, KNOWN_HOOK_EVENTS, MCP_SETTINGS_FILES, REQUIRED_SECTIONS, SETTINGS_FILES, KNOWN_AGNIX_TOOLS, DEFAULT_SECTIONS, DEFAULT_RATIOS, NODE_TYPE_TO_CATEGORY, SECTION_LEVEL_MAP, DEFAULT_LEVEL, DEFAULT_BUDGET, DEFAULT_LOADER_CONFIG, LEVEL_FRACTIONS, PHASE_PRIORITIES, ManifestSchema, BundleConstraintsSchema, BundleSchema, ContributionsSchema, LockfilePackageSchema, LockfileSchema, SharableLayerSchema, SharableForbiddenImportSchema, SharableBoundaryConfigSchema, SharableSecurityRulesSchema, VALID_SCOPES, LINE_PATTERN, START_PATTERN, END_PATTERN, CODE_BLOCK_LANGUAGES, DEFAULT_DRIFT_CONFIG, FILE_TYPES, EXPORT_TYPES, CONVENTION_DESCRIPTIONS, RULE_CHECKERS, EntropyAnalyzer, readFile42, writeFile32, unlink22, mkdir22, copyFile2, DEFAULT_FIX_CONFIG, EXPORT_TYPE_KEYWORD, ALWAYS_UNSAFE_TYPES, idCounter, DEAD_CODE_FIX_ACTIONS, MustExportRuleSchema, MustExportDefaultRuleSchema, NoExportRuleSchema, MustImportRuleSchema, NoImportRuleSchema, NamingRuleSchema, MaxExportsRuleSchema, MaxLinesRuleSchema, RequireJSDocRuleSchema, RuleSchema, ConfigPatternSchema, PatternConfigSchema, DriftConfigSchema, DeadCodeConfigSchema, EntropyConfigSchema, BaselineManager, BenchmarkRunner, RegressionDetector, SKIP_DIRS, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, CategorySnapshotSchema, TimelineSnapshotSchema, TimelineFileSchema, TrendLineSchema, TrendResultSchema, DEFAULT_STABILITY_THRESHOLDS, ALL_CATEGORIES, TimelineManager, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, ALL_CATEGORIES2, DIRECTION_THRESHOLD, PredictionEngine, DEFAULT_COEFFICIENTS, SpecImpactEstimator, EMPTY_HISTORY, ViolationHistoryManager, NORMALIZERS, MAX_SAMPLES, DEFAULT_WINDOW_WEEKS, DEFAULT_MIN_OCCURRENCES, FailureEntrySchema, HandoffSchema, GateCheckSchema, GateResultSchema, GateConfigSchema, HarnessStateSchema, DEFAULT_STATE, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, HARNESS_DIR, STATE_FILE, LEARNINGS_FILE, FAILURES_FILE, HANDOFF_FILE, GATE_CONFIG_FILE, INDEX_FILE, SESSIONS_DIR, SESSION_INDEX_FILE, SUMMARY_FILE, SESSION_STATE_FILE, ARCHIVE_DIR, CONTENT_HASHES_FILE, EVENTS_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, SkillEventSchema, knownHashesCache, EVENT_FORMATTERS, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, hiddenUnicodePatterns, reRolingPatterns, permissionEscalationPatterns, encodedPayloadPatterns, indirectInjectionPatterns, contextManipulationPatterns, socialEngineeringPatterns, suspiciousPatterns, ALL_PATTERNS, DESTRUCTIVE_BASH, TAINT_DURATION_MS, DEFAULT_SESSION_ID, SecurityCategorySnapshotSchema, SupplyChainSnapshotSchema, SecurityTimelineSnapshotSchema, FindingLifecycleSchema, SecurityTimelineFileSchema, DirectionSchema2, SecurityTrendLineSchema, TrendAttributionSchema, SecurityTrendResultSchema, TimeToFixStatsSchema, TimeToFixResultSchema, EMPTY_SUPPLY_CHAIN, SecurityTimelineManager, ALL_CHECKS, STATUS_ICONS, CINotifier, ExclusionSet, PREFIX_PATTERNS, TEST_FILE_PATTERN, MD_FILE_PATTERN, ALL_DOMAINS, SECURITY_PATTERNS, SEVERITY_RANK, SEVERITY_ORDER, SEVERITY_LABELS, VALIDATED_BY_RANK, VALIDATION_SCORES, DOMAIN_BASELINES, FACTOR_WEIGHTS, EVIDENCE_SATURATION, CORROBORATED_AGREEMENT, STANDALONE_AGREEMENT, AGREEMENT_LINE_GAP, COMPLIANCE_DESCRIPTOR, EXPORT_RE, BUG_DETECTION_DESCRIPTOR, SECURITY_DESCRIPTOR, EVAL_PATTERN, SECRET_PATTERNS, SQL_CONCAT_PATTERN, SHELL_EXEC_PATTERN, ARCHITECTURE_DESCRIPTOR, LARGE_FILE_THRESHOLD, VIOLATION_FILE_RE, LEARNINGS_DESCRIPTOR, RELEVANCE_THRESHOLD, AGENT_DESCRIPTORS, AGENT_RUNNERS, DOWNGRADE_MAP, DEFAULT_PROVIDER_TIERS, SMALL_SUGGESTION_LINE_LIMIT, FILE_LINE_RANGE_PATTERN, FILE_LINE_PATTERN, FILE_ONLY_PATTERN, SECURITY_SENSITIVE_PATH, MIGRATION_PATH, TEST_PATH, CONFIG_PATH, STAGE_DOMAINS, EM_DASH2, STATUS_RANK, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, InteractionTypeSchema, QuestionSchema, ConfirmationSchema, TransitionSchema, EmitInteractionInputSchema, ProjectScanner, SHELL_TEMPLATE, STYLES, SCRIPTS, MockLLMService, llmService, ContentPipeline, BlueprintGenerator, TOKENS_PER_MILLION, fallback_default, LITELLM_PRICING_URL, CACHE_TTL_MS, STALENESS_WARNING_DAYS, MICRODOLLARS_PER_DOLLAR, TOKENS_PER_MILLION2, StructuralStrategy, DEFAULT_TOKEN_BUDGET, CHARS_PER_TOKEN, TRUNCATION_MARKER, TruncationStrategy, CompactionPipeline, STABILITY_LOOKUP, TIER_ORDER, AnthropicCacheAdapter, TIER_ORDER2, OpenAICacheAdapter, TIER_ORDER3, CACHED_CONTENT_MARKER, GeminiCacheAdapter, VERSION, POSTHOG_BATCH_URL, MAX_ATTEMPTS, TIMEOUT_MS;
|
|
14027
|
+
var VALID_TYPES, CONVENTIONAL_PATTERN, DEFAULT_AGNIX_TIMEOUT_MS, HARNESS_AGNIX_DISABLE, HARNESS_AGNIX_BIN, CLAUDE_MD_WARN_BYTES, CLAUDE_MD_ERROR_BYTES, CONTEXT_FILES, MIN_DESCRIPTION_LENGTH, SETTINGS_PATHS, KNOWN_HOOK_EVENTS, MCP_SETTINGS_FILES, REQUIRED_SECTIONS, SETTINGS_FILES, KNOWN_AGNIX_TOOLS, DEFAULT_SECTIONS, DEFAULT_RATIOS, NODE_TYPE_TO_CATEGORY, SECTION_LEVEL_MAP, DEFAULT_LEVEL, DEFAULT_BUDGET, DEFAULT_LOADER_CONFIG, LEVEL_FRACTIONS, PHASE_PRIORITIES, ManifestSchema, BundleConstraintsSchema, BundleSchema, ContributionsSchema, LockfilePackageSchema, LockfileSchema, SharableLayerSchema, SharableForbiddenImportSchema, SharableBoundaryConfigSchema, SharableSecurityRulesSchema, VALID_SCOPES, LINE_PATTERN, START_PATTERN, END_PATTERN, CODE_BLOCK_LANGUAGES, DEFAULT_DRIFT_CONFIG, FILE_TYPES, EXPORT_TYPES, CONVENTION_DESCRIPTIONS, RULE_CHECKERS, EntropyAnalyzer, readFile42, writeFile32, unlink22, mkdir22, copyFile2, DEFAULT_FIX_CONFIG, EXPORT_TYPE_KEYWORD, ALWAYS_UNSAFE_TYPES, idCounter, DEAD_CODE_FIX_ACTIONS, MustExportRuleSchema, MustExportDefaultRuleSchema, NoExportRuleSchema, MustImportRuleSchema, NoImportRuleSchema, NamingRuleSchema, MaxExportsRuleSchema, MaxLinesRuleSchema, RequireJSDocRuleSchema, RuleSchema, ConfigPatternSchema, PatternConfigSchema, DriftConfigSchema, DeadCodeConfigSchema, EntropyConfigSchema, BaselineManager, BenchmarkRunner, RegressionDetector, SKIP_DIRS, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, CategorySnapshotSchema, TimelineSnapshotSchema, TimelineFileSchema, TrendLineSchema, TrendResultSchema, DEFAULT_STABILITY_THRESHOLDS, ALL_CATEGORIES, TimelineManager, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, ALL_CATEGORIES2, DIRECTION_THRESHOLD, PredictionEngine, DEFAULT_COEFFICIENTS, SpecImpactEstimator, EMPTY_HISTORY, ViolationHistoryManager, NORMALIZERS, MAX_SAMPLES, DEFAULT_WINDOW_WEEKS, DEFAULT_MIN_OCCURRENCES, FailureEntrySchema, HandoffSchema, GateCheckSchema, GateResultSchema, GateConfigSchema, HarnessStateSchema, DEFAULT_STATE, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, HARNESS_DIR, STATE_FILE, LEARNINGS_FILE, FAILURES_FILE, HANDOFF_FILE, GATE_CONFIG_FILE, INDEX_FILE, SESSIONS_DIR, SESSION_INDEX_FILE, SUMMARY_FILE, SESSION_STATE_FILE, ARCHIVE_DIR, CONTENT_HASHES_FILE, EVENTS_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, LOCK_RETRIES, LOCK_BACKOFFS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, SkillEventSchema, knownHashesCache, EVENT_FORMATTERS, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, hiddenUnicodePatterns, reRolingPatterns, permissionEscalationPatterns, encodedPayloadPatterns, indirectInjectionPatterns, contextManipulationPatterns, socialEngineeringPatterns, suspiciousPatterns, ALL_PATTERNS, DESTRUCTIVE_BASH, TAINT_DURATION_MS, DEFAULT_SESSION_ID, SecurityCategorySnapshotSchema, SupplyChainSnapshotSchema, SecurityTimelineSnapshotSchema, FindingLifecycleSchema, SecurityTimelineFileSchema, DirectionSchema2, SecurityTrendLineSchema, TrendAttributionSchema, SecurityTrendResultSchema, TimeToFixStatsSchema, TimeToFixResultSchema, EMPTY_SUPPLY_CHAIN, SecurityTimelineManager, ALL_CHECKS, STATUS_ICONS, CINotifier, ExclusionSet, PREFIX_PATTERNS, TEST_FILE_PATTERN, MD_FILE_PATTERN, ALL_DOMAINS, SECURITY_PATTERNS, SEVERITY_RANK, SEVERITY_ORDER, SEVERITY_LABELS, VALIDATED_BY_RANK, VALIDATION_SCORES, DOMAIN_BASELINES, FACTOR_WEIGHTS, EVIDENCE_SATURATION, CORROBORATED_AGREEMENT, STANDALONE_AGREEMENT, AGREEMENT_LINE_GAP, COMPLIANCE_DESCRIPTOR, EXPORT_RE, BUG_DETECTION_DESCRIPTOR, SECURITY_DESCRIPTOR, EVAL_PATTERN, SECRET_PATTERNS, SQL_CONCAT_PATTERN, SHELL_EXEC_PATTERN, ARCHITECTURE_DESCRIPTOR, LARGE_FILE_THRESHOLD, VIOLATION_FILE_RE, LEARNINGS_DESCRIPTOR, RELEVANCE_THRESHOLD, AGENT_DESCRIPTORS, AGENT_RUNNERS, DOWNGRADE_MAP, DEFAULT_PROVIDER_TIERS, SMALL_SUGGESTION_LINE_LIMIT, FILE_LINE_RANGE_PATTERN, FILE_LINE_PATTERN, FILE_ONLY_PATTERN, SECURITY_SENSITIVE_PATH, MIGRATION_PATH, TEST_PATH, CONFIG_PATH, STAGE_DOMAINS, EM_DASH2, STATUS_RANK, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, InteractionTypeSchema, QuestionSchema, ConfirmationSchema, TransitionSchema, EmitInteractionInputSchema, ProjectScanner, SHELL_TEMPLATE, STYLES, SCRIPTS, MockLLMService, llmService, ContentPipeline, BlueprintGenerator, TOKENS_PER_MILLION, fallback_default, LITELLM_PRICING_URL, CACHE_TTL_MS, STALENESS_WARNING_DAYS, MICRODOLLARS_PER_DOLLAR, TOKENS_PER_MILLION2, StructuralStrategy, DEFAULT_TOKEN_BUDGET, CHARS_PER_TOKEN, TRUNCATION_MARKER, TruncationStrategy, CompactionPipeline, STABILITY_LOOKUP, TIER_ORDER, AnthropicCacheAdapter, TIER_ORDER2, OpenAICacheAdapter, TIER_ORDER3, CACHED_CONTENT_MARKER, GeminiCacheAdapter, VERSION, POSTHOG_BATCH_URL, MAX_ATTEMPTS, TIMEOUT_MS;
|
|
13975
14028
|
var init_dist3 = __esm({
|
|
13976
14029
|
"../core/dist/index.mjs"() {
|
|
13977
|
-
|
|
14030
|
+
init_chunk_H73442AZ();
|
|
13978
14031
|
init_dist();
|
|
13979
14032
|
init_dist();
|
|
13980
14033
|
init_dist();
|
|
@@ -16319,6 +16372,8 @@ var init_dist3 = __esm({
|
|
|
16319
16372
|
temporal: 0.1,
|
|
16320
16373
|
codeReference: 0.15
|
|
16321
16374
|
};
|
|
16375
|
+
LOCK_RETRIES = 3;
|
|
16376
|
+
LOCK_BACKOFFS = [50, 100, 200];
|
|
16322
16377
|
PROMOTABLE_OUTCOMES = ["gotcha", "decision", "observation"];
|
|
16323
16378
|
failuresCacheMap = /* @__PURE__ */ new Map();
|
|
16324
16379
|
FAILURE_LINE_REGEX = /^- \*\*(\d{4}-\d{2}-\d{2}) \[skill:([^\]]+)\] \[type:([^\]]+)\]:\*\* (.+)$/;
|
|
@@ -17618,7 +17673,7 @@ var init_dist3 = __esm({
|
|
|
17618
17673
|
}
|
|
17619
17674
|
const tmp = this.timelinePath + "." + randomBytes22(4).toString("hex") + ".tmp";
|
|
17620
17675
|
writeFileSync16(tmp, JSON.stringify(timeline, null, 2));
|
|
17621
|
-
|
|
17676
|
+
renameSync82(tmp, this.timelinePath);
|
|
17622
17677
|
}
|
|
17623
17678
|
/**
|
|
17624
17679
|
* Capture a new snapshot from a scan result.
|
|
@@ -18979,7 +19034,7 @@ console.log('Blueprint player initialized.');
|
|
|
18979
19034
|
};
|
|
18980
19035
|
}
|
|
18981
19036
|
};
|
|
18982
|
-
VERSION = "0.
|
|
19037
|
+
VERSION = "0.23.3";
|
|
18983
19038
|
POSTHOG_BATCH_URL = "https://app.posthog.com/batch";
|
|
18984
19039
|
MAX_ATTEMPTS = 3;
|
|
18985
19040
|
TIMEOUT_MS = 5e3;
|
|
@@ -53,12 +53,12 @@ async function findMarkdownFiles(dir) {
|
|
|
53
53
|
return results;
|
|
54
54
|
}
|
|
55
55
|
function parseFrontmatter(raw) {
|
|
56
|
-
const match = raw.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
56
|
+
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
57
57
|
if (!match) return null;
|
|
58
58
|
const yamlBlock = match[1];
|
|
59
59
|
const body = match[2];
|
|
60
60
|
const fm = {};
|
|
61
|
-
for (const line of yamlBlock.split(
|
|
61
|
+
for (const line of yamlBlock.split(/\r?\n/)) {
|
|
62
62
|
const kvMatch = line.match(/^(\w+):\s*(.+)$/);
|
|
63
63
|
if (!kvMatch) continue;
|
|
64
64
|
const key = kvMatch[1];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YZH4I4JO.js";
|
|
4
4
|
import {
|
|
5
5
|
resultToMcpResponse
|
|
6
6
|
} from "./chunk-EPUKTTJZ.js";
|
|
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
|
|
|
38
38
|
const configResult = resolveProjectConfig(projectPath);
|
|
39
39
|
if (!configResult.ok) return resultToMcpResponse(configResult);
|
|
40
40
|
try {
|
|
41
|
-
const { validateDependencies, TypeScriptParser } = await import("./dist-
|
|
41
|
+
const { validateDependencies, TypeScriptParser } = await import("./dist-CPKL5Y2R.js");
|
|
42
42
|
const config = configResult.value;
|
|
43
43
|
const rawLayers = Array.isArray(config.layers) ? config.layers : [];
|
|
44
44
|
const layers = rawLayers.map((l) => ({
|
|
@@ -47,11 +47,11 @@ async function handleCheckDependencies(input) {
|
|
|
47
47
|
allowedDependencies: l.allowedDependencies
|
|
48
48
|
}));
|
|
49
49
|
const parser = new TypeScriptParser();
|
|
50
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
50
|
+
const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
|
|
51
51
|
const store = await loadGraphStore(projectPath);
|
|
52
52
|
let graphDependencyData;
|
|
53
53
|
if (store) {
|
|
54
|
-
const { GraphConstraintAdapter } = await import("./dist-
|
|
54
|
+
const { GraphConstraintAdapter } = await import("./dist-BZS2XRLG.js");
|
|
55
55
|
const adapter = new GraphConstraintAdapter(store);
|
|
56
56
|
const graphData = adapter.computeDependencyGraph();
|
|
57
57
|
graphDependencyData = {
|
|
@@ -65,6 +65,29 @@ async function handleCheckDependencies(input) {
|
|
|
65
65
|
parser,
|
|
66
66
|
...graphDependencyData !== void 0 && { graphDependencyData }
|
|
67
67
|
});
|
|
68
|
+
let designViolations = [];
|
|
69
|
+
if (store) {
|
|
70
|
+
const designTokenNodes = store.findNodes({ type: "design_token" });
|
|
71
|
+
if (designTokenNodes.length > 0) {
|
|
72
|
+
const { DesignConstraintAdapter } = await import("./dist-BZS2XRLG.js");
|
|
73
|
+
const designAdapter = new DesignConstraintAdapter(store);
|
|
74
|
+
const fileNodes = store.findNodes({ type: "file" });
|
|
75
|
+
for (const fileNode of fileNodes) {
|
|
76
|
+
const filePath = fileNode.path ?? fileNode.id;
|
|
77
|
+
if (!/\.(tsx?|jsx?|css|scss|less|vue|svelte)$/.test(filePath)) continue;
|
|
78
|
+
const source = typeof fileNode.metadata?.source === "string" ? fileNode.metadata.source : "";
|
|
79
|
+
if (!source) continue;
|
|
80
|
+
designViolations.push(...designAdapter.checkAll(source, filePath));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (result.ok && designViolations.length > 0) {
|
|
85
|
+
const merged = {
|
|
86
|
+
...result.value,
|
|
87
|
+
designViolations
|
|
88
|
+
};
|
|
89
|
+
return resultToMcpResponse({ ok: true, value: merged });
|
|
90
|
+
}
|
|
68
91
|
return resultToMcpResponse(result);
|
|
69
92
|
} catch (error) {
|
|
70
93
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YZH4I4JO.js";
|
|
4
4
|
import {
|
|
5
5
|
sanitizePath
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
@@ -49,7 +49,7 @@ async function handleValidateProject(input) {
|
|
|
49
49
|
checks.config = "pass";
|
|
50
50
|
const config = configResult.value;
|
|
51
51
|
try {
|
|
52
|
-
const core = await import("./dist-
|
|
52
|
+
const core = await import("./dist-CPKL5Y2R.js");
|
|
53
53
|
if (typeof core.validateFileStructure === "function" && Array.isArray(config.conventions)) {
|
|
54
54
|
const conventions = config.conventions;
|
|
55
55
|
const structureResult = await core.validateFileStructure(projectPath, conventions);
|
|
@@ -68,7 +68,7 @@ async function handleValidateProject(input) {
|
|
|
68
68
|
} catch {
|
|
69
69
|
}
|
|
70
70
|
try {
|
|
71
|
-
const core = await import("./dist-
|
|
71
|
+
const core = await import("./dist-CPKL5Y2R.js");
|
|
72
72
|
if (typeof core.validateAgentsMap === "function") {
|
|
73
73
|
const agentsMapPath = path.join(projectPath, "AGENTS.md");
|
|
74
74
|
const agentsResult = await core.validateAgentsMap(agentsMapPath);
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-A4ETL34H.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IBTHD2UA.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-RL4VMEXL.js";
|
|
@@ -50,18 +50,18 @@ async function handleCheckDocs(input) {
|
|
|
50
50
|
const projectPath = sanitizePath(input.path);
|
|
51
51
|
const scope = input.scope ?? "coverage";
|
|
52
52
|
if (scope === "integrity") {
|
|
53
|
-
const { validateKnowledgeMap } = await import("./dist-
|
|
53
|
+
const { validateKnowledgeMap } = await import("./dist-CPKL5Y2R.js");
|
|
54
54
|
const result2 = await validateKnowledgeMap(projectPath);
|
|
55
55
|
return resultToMcpResponse(result2);
|
|
56
56
|
}
|
|
57
57
|
if (scope === "all") {
|
|
58
|
-
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-
|
|
58
|
+
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-CPKL5Y2R.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
|
-
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-
|
|
60
|
+
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-QEI7SYOQ.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
62
62
|
let graphCoverage2;
|
|
63
63
|
if (store2) {
|
|
64
|
-
const { Assembler } = await import("./dist-
|
|
64
|
+
const { Assembler } = await import("./dist-BZS2XRLG.js");
|
|
65
65
|
const assembler = new Assembler(store2);
|
|
66
66
|
const report = assembler.checkCoverage();
|
|
67
67
|
graphCoverage2 = {
|
|
@@ -94,13 +94,13 @@ async function handleCheckDocs(input) {
|
|
|
94
94
|
}
|
|
95
95
|
return resultToMcpResponse(Ok({ coverage, integrity }));
|
|
96
96
|
}
|
|
97
|
-
const { checkDocCoverage } = await import("./dist-
|
|
97
|
+
const { checkDocCoverage } = await import("./dist-CPKL5Y2R.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
99
|
+
const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
101
101
|
let graphCoverage;
|
|
102
102
|
if (store) {
|
|
103
|
-
const { Assembler } = await import("./dist-
|
|
103
|
+
const { Assembler } = await import("./dist-BZS2XRLG.js");
|
|
104
104
|
const assembler = new Assembler(store);
|
|
105
105
|
const report = assembler.checkCoverage();
|
|
106
106
|
graphCoverage = {
|