@harness-engineering/cli 4.0.1 → 4.2.0
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/harness-autopilot/SKILL.md +40 -8
- package/dist/agents/skills/claude-code/harness-catalog-retrospective/SKILL.md +124 -0
- package/dist/agents/skills/claude-code/harness-catalog-retrospective/skill.yaml +48 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +13 -0
- package/dist/agents/skills/claude-code/harness-parallel-agents/SKILL.md +3 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/claude-code/pre-merge-brief/skill.yaml +67 -0
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +40 -8
- package/dist/agents/skills/codex/harness-catalog-retrospective/SKILL.md +124 -0
- package/dist/agents/skills/codex/harness-catalog-retrospective/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-execution/SKILL.md +13 -0
- package/dist/agents/skills/codex/harness-parallel-agents/SKILL.md +3 -0
- package/dist/agents/skills/codex/harness-planning/SKILL.md +3 -1
- package/dist/agents/skills/codex/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/codex/pre-merge-brief/skill.yaml +67 -0
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +40 -8
- package/dist/agents/skills/cursor/harness-catalog-retrospective/SKILL.md +124 -0
- package/dist/agents/skills/cursor/harness-catalog-retrospective/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +13 -0
- package/dist/agents/skills/cursor/harness-parallel-agents/SKILL.md +3 -0
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +3 -1
- package/dist/agents/skills/cursor/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/cursor/pre-merge-brief/skill.yaml +67 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +40 -8
- package/dist/agents/skills/gemini-cli/harness-catalog-retrospective/SKILL.md +124 -0
- package/dist/agents/skills/gemini-cli/harness-catalog-retrospective/skill.yaml +48 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +13 -0
- package/dist/agents/skills/gemini-cli/harness-parallel-agents/SKILL.md +3 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/pre-merge-brief/SKILL.md +86 -0
- package/dist/agents/skills/gemini-cli/pre-merge-brief/skill.yaml +67 -0
- package/dist/{agents-md-VJLYEH2S.js → agents-md-BK2UPKUC.js} +4 -4
- package/dist/analyzer-XRCV63KC-6T2Z32XC.js +26 -0
- package/dist/{architecture-YQH2NYXY.js → architecture-7PNQZOWV.js} +5 -5
- package/dist/{assess-project-KOTAPAHD.js → assess-project-2QPCNN7N.js} +5 -3
- package/dist/bin/harness-mcp.js +15 -15
- package/dist/bin/harness.js +26 -26
- package/dist/{check-phase-gate-CHU2E3OU.js → check-phase-gate-RZUSDB3O.js} +5 -5
- package/dist/{chunk-MMLQPHZ5.js → chunk-33OU3LYX.js} +380 -15
- package/dist/{chunk-XAVMTAUT.js → chunk-6STDKKAM.js} +19 -3
- package/dist/{chunk-I3CGCZJF.js → chunk-BJDT3VGQ.js} +6 -6
- package/dist/{chunk-M7F2PPN3.js → chunk-D5YCPIK6.js} +2 -2
- package/dist/{chunk-SDMV4QHM.js → chunk-DBCC7KIW.js} +25 -7
- package/dist/{chunk-E5EW5HVJ.js → chunk-DVG6DDX6.js} +1 -1
- package/dist/{chunk-4VXFZSYF.js → chunk-DW6HE5DH.js} +2 -2
- package/dist/{chunk-7PJCK7UE.js → chunk-E5KJOUHI.js} +7 -7
- package/dist/{chunk-6SCYTIF4.js → chunk-HU7NS7JA.js} +32 -7
- package/dist/{chunk-36GQREOE.js → chunk-HUC73DZC.js} +3 -3
- package/dist/{chunk-EYMOPFSD.js → chunk-J5MFNKE7.js} +2 -2
- package/dist/{chunk-JPVOI7GP.js → chunk-J7H5I4FO.js} +2 -2
- package/dist/{chunk-RG3TNIUB.js → chunk-K5R2I37T.js} +208 -97
- package/dist/{chunk-AAUY53CC.js → chunk-KHL6WFRL.js} +2 -2
- package/dist/{chunk-OQ6KOQEV.js → chunk-KYFXXEK3.js} +3 -3
- package/dist/{chunk-5RSXUAMN.js → chunk-MHHISNS2.js} +2 -2
- package/dist/{chunk-GHBFNLV2.js → chunk-RRCS27GT.js} +1531 -1175
- package/dist/{chunk-6YFHUIGT.js → chunk-RZTLXZHJ.js} +59 -21
- package/dist/{chunk-AX5KGRM6.js → chunk-SI4O2W4H.js} +2 -2
- package/dist/{chunk-BDGTZRZ6.js → chunk-UEXQMI6K.js} +56 -44
- package/dist/{chunk-7TIJXWG3.js → chunk-V2GJE5J5.js} +3 -3
- package/dist/{chunk-T746REAE.js → chunk-VC2B275U.js} +2 -2
- package/dist/{chunk-SEA2PFVI.js → chunk-XACP5P2J.js} +2 -2
- package/dist/{chunk-UWVMJEUJ.js → chunk-YTJIRQON.js} +2 -2
- package/dist/{chunk-YANR2RL7.js → chunk-ZIJABBGZ.js} +2 -2
- package/dist/{ci-workflow-HO4WKGNG.js → ci-workflow-LGN7LHHO.js} +4 -4
- package/dist/{dist-ICW4QUEW.js → dist-FBBADRYS.js} +3 -1
- package/dist/{dist-6D2F2J57.js → dist-LE5AU7FR.js} +19 -3
- package/dist/{docs-FP47JONV.js → docs-3BTPSHKE.js} +5 -5
- package/dist/{engine-YUA6IYOG.js → engine-GWGU4AMH.js} +4 -4
- package/dist/{entropy-DBW2INZU.js → entropy-35XURODP.js} +7 -4
- package/dist/{feedback-BPHADTRQ.js → feedback-NDGZZ37W.js} +1 -1
- package/dist/{generate-agent-definitions-KPVGBGDY.js → generate-agent-definitions-PYZ3E7SP.js} +5 -5
- package/dist/hooks/sentinel-pre.js +15 -138
- package/dist/index.d.ts +61 -0
- package/dist/index.js +25 -25
- package/dist/{loader-QOJQ6NZM.js → loader-QK2OJXKB.js} +4 -4
- package/dist/{mcp-ZPX6O767.js → mcp-Z5YMV7TA.js} +15 -15
- package/dist/{performance-FXYTGJGQ.js → performance-VAYOYPVK.js} +5 -5
- package/dist/{review-pipeline-2TFQ5OAE.js → review-pipeline-UETEOWSS.js} +4 -4
- package/dist/{runtime-XK6ZCHKE.js → runtime-J7KFACTK.js} +4 -4
- package/dist/{security-4W2P5ZGI.js → security-6AIUZXF5.js} +1 -1
- package/dist/{state-events-ECQAIZLU.js → state-events-XQPHGLG5.js} +4 -4
- package/dist/{validate-64KTEGIE.js → validate-ON7YMVLY.js} +5 -5
- package/dist/{validate-cross-check-J5PVGICB.js → validate-cross-check-HKKQA7K5.js} +4 -4
- package/package.json +8 -7
- package/dist/analyzer-V633GUHY-OV335HGM.js +0 -26
|
@@ -22,8 +22,8 @@ import {
|
|
|
22
22
|
getDefaultRegistry,
|
|
23
23
|
getOutline,
|
|
24
24
|
getParser,
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
init_chunk_IHRT6II2,
|
|
26
|
+
init_chunk_JZ7UO3OF,
|
|
27
27
|
parseFile,
|
|
28
28
|
parseSize,
|
|
29
29
|
readFileContent,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
resetParserCache,
|
|
32
32
|
resolveFileToLayer,
|
|
33
33
|
validateDependencies
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-RZTLXZHJ.js";
|
|
35
35
|
import {
|
|
36
36
|
AuthAuditEntrySchema,
|
|
37
37
|
AuthTokenPublicSchema,
|
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
OTLPKeyValueSchema,
|
|
56
56
|
OTLPSpanSchema,
|
|
57
57
|
Ok,
|
|
58
|
+
PlanTaskSchema,
|
|
58
59
|
PromptCacheStatsSchema,
|
|
59
60
|
ProposalContentSchema,
|
|
60
61
|
ProposalDecisionSchema,
|
|
@@ -79,7 +80,7 @@ import {
|
|
|
79
80
|
init_dist,
|
|
80
81
|
isErr,
|
|
81
82
|
isOk
|
|
82
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-UEXQMI6K.js";
|
|
83
84
|
import {
|
|
84
85
|
DEFAULT_SKIP_DIRS,
|
|
85
86
|
GraphStore,
|
|
@@ -123,7 +124,7 @@ import {
|
|
|
123
124
|
__export
|
|
124
125
|
} from "./chunk-KFQGP6VL.js";
|
|
125
126
|
|
|
126
|
-
// ../core/dist/chunk-
|
|
127
|
+
// ../core/dist/chunk-OFA2AAZK.mjs
|
|
127
128
|
import { createHash } from "crypto";
|
|
128
129
|
import { readFileSync, writeFileSync, renameSync, mkdirSync, existsSync } from "fs";
|
|
129
130
|
import { randomBytes } from "crypto";
|
|
@@ -759,10 +760,10 @@ async function toHaveMaxDepDepth(received, maxDepth) {
|
|
|
759
760
|
};
|
|
760
761
|
}
|
|
761
762
|
var CircularDepsCollector, LayerViolationCollector, ArchBaselineManager, ComplexityCollector, CouplingCollector, ForbiddenImportCollector, ModuleSizeCollector, DepDepthCollector, defaultCollectors, archMatchers;
|
|
762
|
-
var
|
|
763
|
-
"../core/dist/chunk-
|
|
763
|
+
var init_chunk_OFA2AAZK = __esm({
|
|
764
|
+
"../core/dist/chunk-OFA2AAZK.mjs"() {
|
|
764
765
|
"use strict";
|
|
765
|
-
|
|
766
|
+
init_chunk_JZ7UO3OF();
|
|
766
767
|
init_chunk_IIEDD47I();
|
|
767
768
|
init_dist2();
|
|
768
769
|
init_dist2();
|
|
@@ -1383,6 +1384,7 @@ __export(dist_exports, {
|
|
|
1383
1384
|
PII_LINE_RE: () => PII_LINE_RE,
|
|
1384
1385
|
PII_TOKENS: () => PII_TOKENS,
|
|
1385
1386
|
PatternConfigSchema: () => PatternConfigSchema,
|
|
1387
|
+
PlanTaskSchema: () => PlanTaskSchema,
|
|
1386
1388
|
PredictionEngine: () => PredictionEngine,
|
|
1387
1389
|
PredictionOptionsSchema: () => PredictionOptionsSchema,
|
|
1388
1390
|
PredictionRegressionResultSchema: () => RegressionResultSchema,
|
|
@@ -1522,6 +1524,7 @@ __export(dist_exports, {
|
|
|
1522
1524
|
buildExternalId: () => buildExternalId,
|
|
1523
1525
|
buildProjectContext: () => buildProjectContext,
|
|
1524
1526
|
buildSnapshot: () => buildSnapshot,
|
|
1527
|
+
buildTaskGraph: () => buildTaskGraph,
|
|
1525
1528
|
calculateCacheSavings: () => calculateCacheSavings,
|
|
1526
1529
|
calculateCost: () => calculateCost,
|
|
1527
1530
|
calibrateDepth: () => calibrateDepth,
|
|
@@ -1633,6 +1636,7 @@ __export(dist_exports, {
|
|
|
1633
1636
|
generateRubric: () => generateRubric,
|
|
1634
1637
|
generateSuggestions: () => generateSuggestions,
|
|
1635
1638
|
getActionEmitter: () => getActionEmitter,
|
|
1639
|
+
getCatalogRetrospectiveReport: () => getCatalogRetrospectiveReport,
|
|
1636
1640
|
getExitCode: () => getExitCode,
|
|
1637
1641
|
getFeedbackConfig: () => getFeedbackConfig,
|
|
1638
1642
|
getInjectionPatterns: () => getInjectionPatterns,
|
|
@@ -1654,6 +1658,7 @@ __export(dist_exports, {
|
|
|
1654
1658
|
injectionRules: () => injectionRules,
|
|
1655
1659
|
insecureDefaultsRules: () => insecureDefaultsRules,
|
|
1656
1660
|
invalidateCheckState: () => invalidateCheckState,
|
|
1661
|
+
isAbandonedMidWorkflow: () => isAbandonedMidWorkflow,
|
|
1657
1662
|
isBadPort: () => isBadPort,
|
|
1658
1663
|
isClaimableBy: () => isClaimableBy,
|
|
1659
1664
|
isDuplicateFinding: () => isDuplicateFinding,
|
|
@@ -1718,6 +1723,7 @@ __export(dist_exports, {
|
|
|
1718
1723
|
parseManifest: () => parseManifest,
|
|
1719
1724
|
parseMeta: () => parseMeta,
|
|
1720
1725
|
parseProtectedRegions: () => parseProtectedRegions,
|
|
1726
|
+
parseReferencedIssues: () => parseReferencedIssues,
|
|
1721
1727
|
parseRoadmap: () => parseRoadmap,
|
|
1722
1728
|
parseSections: () => parseSections,
|
|
1723
1729
|
parseSecurityConfig: () => parseSecurityConfig,
|
|
@@ -1725,6 +1731,7 @@ __export(dist_exports, {
|
|
|
1725
1731
|
parseSize: () => parseSize,
|
|
1726
1732
|
parseStrategyDoc: () => parseStrategyDoc,
|
|
1727
1733
|
pathTraversalRules: () => pathTraversalRules,
|
|
1734
|
+
planParallelization: () => planParallelization,
|
|
1728
1735
|
presetKind: () => presetKind,
|
|
1729
1736
|
previewFix: () => previewFix,
|
|
1730
1737
|
projectValue: () => projectValue,
|
|
@@ -1751,6 +1758,7 @@ __export(dist_exports, {
|
|
|
1751
1758
|
release: () => release,
|
|
1752
1759
|
removeContributions: () => removeContributions,
|
|
1753
1760
|
removeProvenance: () => removeProvenance,
|
|
1761
|
+
renderRetrospectiveMarkdown: () => renderRetrospectiveMarkdown,
|
|
1754
1762
|
requestMultiplePeerReviews: () => requestMultiplePeerReviews,
|
|
1755
1763
|
requestPeerReview: () => requestPeerReview,
|
|
1756
1764
|
resetFeedbackConfig: () => resetFeedbackConfig,
|
|
@@ -1838,6 +1846,7 @@ __export(dist_exports, {
|
|
|
1838
1846
|
validateFindings: () => validateFindings,
|
|
1839
1847
|
validateKnowledgeMap: () => validateKnowledgeMap,
|
|
1840
1848
|
validatePatternConfig: () => validatePatternConfig,
|
|
1849
|
+
validatePlanTasks: () => validatePlanTasks,
|
|
1841
1850
|
validatePulseConfig: () => validatePulseConfig,
|
|
1842
1851
|
validateRoadmapMode: () => validateRoadmapMode,
|
|
1843
1852
|
validateSolutionsDir: () => validateSolutionsDir,
|
|
@@ -8970,10 +8979,12 @@ async function runEntropyCheck(projectRoot, config) {
|
|
|
8970
8979
|
const entropyConfig = config.entropy || {};
|
|
8971
8980
|
const perfConfig = config.performance || {};
|
|
8972
8981
|
const entryPoints = entropyConfig.entryPoints ?? perfConfig.entryPoints;
|
|
8982
|
+
const driftConfig = entropyConfig.drift;
|
|
8973
8983
|
const analyzer = new EntropyAnalyzer({
|
|
8974
8984
|
rootDir: projectRoot,
|
|
8975
8985
|
...entryPoints ? { entryPoints } : {},
|
|
8976
|
-
|
|
8986
|
+
...driftConfig?.docPaths ? { docPaths: driftConfig.docPaths } : {},
|
|
8987
|
+
analyze: { drift: driftConfig ?? true, deadCode: true, patterns: false }
|
|
8977
8988
|
});
|
|
8978
8989
|
const result = await analyzer.analyze();
|
|
8979
8990
|
if (!result.ok) {
|
|
@@ -12722,6 +12733,20 @@ async function fetchWithRetry(fetchFn, input, init, opts = RETRY_DEFAULTS) {
|
|
|
12722
12733
|
}
|
|
12723
12734
|
return lastResponse;
|
|
12724
12735
|
}
|
|
12736
|
+
function parseReferencedIssues(text) {
|
|
12737
|
+
if (!text) return [];
|
|
12738
|
+
const re = /(?:[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)?#(\d+)/g;
|
|
12739
|
+
const seen = /* @__PURE__ */ new Set();
|
|
12740
|
+
const out = [];
|
|
12741
|
+
for (const m of text.matchAll(re)) {
|
|
12742
|
+
const n = Number.parseInt(m[1], 10);
|
|
12743
|
+
if (Number.isInteger(n) && n > 0 && !seen.has(n)) {
|
|
12744
|
+
seen.add(n);
|
|
12745
|
+
out.push(n);
|
|
12746
|
+
}
|
|
12747
|
+
}
|
|
12748
|
+
return out;
|
|
12749
|
+
}
|
|
12725
12750
|
function isValidTrackerShape(tracker) {
|
|
12726
12751
|
if (!tracker || typeof tracker !== "object") return false;
|
|
12727
12752
|
const t = tracker;
|
|
@@ -14641,6 +14666,157 @@ function aggregateByDay2(records) {
|
|
|
14641
14666
|
function topSkills(records, n) {
|
|
14642
14667
|
return aggregateBySkill(records).slice(0, n);
|
|
14643
14668
|
}
|
|
14669
|
+
function isAbandonedMidWorkflow(record) {
|
|
14670
|
+
if (record.outcome === "abandoned") return true;
|
|
14671
|
+
return record.outcome !== "completed" && record.phasesReached.length > 0;
|
|
14672
|
+
}
|
|
14673
|
+
function resolveNowMs(records, now) {
|
|
14674
|
+
if (now) return now.getTime();
|
|
14675
|
+
let latest = Number.NEGATIVE_INFINITY;
|
|
14676
|
+
for (const record of records) {
|
|
14677
|
+
const t = Date.parse(record.startedAt);
|
|
14678
|
+
if (!Number.isNaN(t) && t > latest) latest = t;
|
|
14679
|
+
}
|
|
14680
|
+
return latest === Number.NEGATIVE_INFINITY ? Date.now() : latest;
|
|
14681
|
+
}
|
|
14682
|
+
function buildStat(skill, records, nowMs) {
|
|
14683
|
+
const invocations = records.length;
|
|
14684
|
+
const failures = records.filter((r) => r.outcome === "failed").length;
|
|
14685
|
+
const abandoned = records.filter(isAbandonedMidWorkflow).length;
|
|
14686
|
+
const timestamps = records.map((r) => r.startedAt).sort();
|
|
14687
|
+
const lastUsed = timestamps[timestamps.length - 1];
|
|
14688
|
+
const daysSinceLastUse = Math.floor((nowMs - Date.parse(lastUsed)) / DAY_MS);
|
|
14689
|
+
return {
|
|
14690
|
+
skill,
|
|
14691
|
+
invocations,
|
|
14692
|
+
failures,
|
|
14693
|
+
failureRate: failures / invocations,
|
|
14694
|
+
abandonedMidWorkflow: abandoned,
|
|
14695
|
+
lastUsed,
|
|
14696
|
+
daysSinceLastUse
|
|
14697
|
+
};
|
|
14698
|
+
}
|
|
14699
|
+
function groupBySkill(records) {
|
|
14700
|
+
const map = /* @__PURE__ */ new Map();
|
|
14701
|
+
for (const record of records) {
|
|
14702
|
+
const bucket = map.get(record.skill);
|
|
14703
|
+
if (bucket) bucket.push(record);
|
|
14704
|
+
else map.set(record.skill, [record]);
|
|
14705
|
+
}
|
|
14706
|
+
return map;
|
|
14707
|
+
}
|
|
14708
|
+
function computeCoverage(invokedSkills, catalogSkills) {
|
|
14709
|
+
if (!catalogSkills) {
|
|
14710
|
+
return { catalogSize: null, everInvoked: null, neverInvoked: null };
|
|
14711
|
+
}
|
|
14712
|
+
const catalog = new Set(catalogSkills);
|
|
14713
|
+
let everInvoked = 0;
|
|
14714
|
+
for (const skill of catalog) {
|
|
14715
|
+
if (invokedSkills.has(skill)) everInvoked++;
|
|
14716
|
+
}
|
|
14717
|
+
return {
|
|
14718
|
+
catalogSize: catalog.size,
|
|
14719
|
+
everInvoked,
|
|
14720
|
+
neverInvoked: catalog.size - everInvoked
|
|
14721
|
+
};
|
|
14722
|
+
}
|
|
14723
|
+
function getCatalogRetrospectiveReport(records, options = {}) {
|
|
14724
|
+
const inactiveDaysThreshold = options.inactiveDays ?? 90;
|
|
14725
|
+
const topN = options.topN ?? 10;
|
|
14726
|
+
const nowMs = resolveNowMs(records, options.now);
|
|
14727
|
+
const generatedAt = (options.now ?? /* @__PURE__ */ new Date()).toISOString();
|
|
14728
|
+
const bySkill = groupBySkill(records);
|
|
14729
|
+
const stats = Array.from(bySkill.entries()).map(([skill, recs]) => buildStat(skill, recs, nowMs));
|
|
14730
|
+
const topInvoked = [...stats].sort((a, b) => b.invocations - a.invocations || a.skill.localeCompare(b.skill)).slice(0, topN);
|
|
14731
|
+
const topFailing = stats.filter((s) => s.failures > 0).sort(
|
|
14732
|
+
(a, b) => b.failures - a.failures || b.failureRate - a.failureRate || a.skill.localeCompare(b.skill)
|
|
14733
|
+
).slice(0, topN);
|
|
14734
|
+
const abandonedMidWorkflow = stats.filter((s) => s.abandonedMidWorkflow > 0).sort(
|
|
14735
|
+
(a, b) => b.abandonedMidWorkflow - a.abandonedMidWorkflow || a.skill.localeCompare(b.skill)
|
|
14736
|
+
).slice(0, topN);
|
|
14737
|
+
const staleSkills = stats.filter((s) => s.daysSinceLastUse >= inactiveDaysThreshold).sort((a, b) => b.daysSinceLastUse - a.daysSinceLastUse || a.skill.localeCompare(b.skill));
|
|
14738
|
+
const timestamps = records.map((r) => r.startedAt).sort();
|
|
14739
|
+
const windowStart = timestamps[0] ?? null;
|
|
14740
|
+
const windowEnd = timestamps[timestamps.length - 1] ?? null;
|
|
14741
|
+
const windowDays = windowStart && windowEnd ? Math.max(0, Math.round((Date.parse(windowEnd) - Date.parse(windowStart)) / DAY_MS)) : 0;
|
|
14742
|
+
return {
|
|
14743
|
+
generatedAt,
|
|
14744
|
+
windowStart,
|
|
14745
|
+
windowEnd,
|
|
14746
|
+
windowDays,
|
|
14747
|
+
totalRecords: records.length,
|
|
14748
|
+
distinctSkills: bySkill.size,
|
|
14749
|
+
inactiveDaysThreshold,
|
|
14750
|
+
topN,
|
|
14751
|
+
topInvoked,
|
|
14752
|
+
topFailing,
|
|
14753
|
+
abandonedMidWorkflow,
|
|
14754
|
+
staleSkills,
|
|
14755
|
+
coverage: computeCoverage(new Set(bySkill.keys()), options.catalogSkills)
|
|
14756
|
+
};
|
|
14757
|
+
}
|
|
14758
|
+
function formatRate(rate) {
|
|
14759
|
+
return `${(rate * 100).toFixed(0)}%`;
|
|
14760
|
+
}
|
|
14761
|
+
function statRow(s) {
|
|
14762
|
+
return `| \`${s.skill}\` | ${s.invocations} | ${s.failures} (${formatRate(s.failureRate)}) | ${s.abandonedMidWorkflow} | ${s.lastUsed.slice(0, 10)} |`;
|
|
14763
|
+
}
|
|
14764
|
+
function renderStatSection(title, rows, emptyNote) {
|
|
14765
|
+
if (rows.length === 0) return `### ${title}
|
|
14766
|
+
|
|
14767
|
+
_${emptyNote}_
|
|
14768
|
+
`;
|
|
14769
|
+
const header = "| Skill | Invocations | Failures | Abandoned mid-workflow | Last used |\n| ----- | ----------- | -------- | ---------------------- | --------- |";
|
|
14770
|
+
return `### ${title}
|
|
14771
|
+
|
|
14772
|
+
${header}
|
|
14773
|
+
${rows.map(statRow).join("\n")}
|
|
14774
|
+
`;
|
|
14775
|
+
}
|
|
14776
|
+
function renderOverview(report) {
|
|
14777
|
+
const lines = ["## Overview", "", `- **Generated:** ${report.generatedAt}`];
|
|
14778
|
+
if (report.windowStart && report.windowEnd) {
|
|
14779
|
+
lines.push(
|
|
14780
|
+
`- **Window:** ${report.windowStart.slice(0, 10)} \u2192 ${report.windowEnd.slice(0, 10)} (${report.windowDays} days)`
|
|
14781
|
+
);
|
|
14782
|
+
} else {
|
|
14783
|
+
lines.push("- **Window:** no records");
|
|
14784
|
+
}
|
|
14785
|
+
lines.push(`- **Records:** ${report.totalRecords} across ${report.distinctSkills} skill(s)`);
|
|
14786
|
+
const { catalogSize, everInvoked, neverInvoked } = report.coverage;
|
|
14787
|
+
if (catalogSize != null && everInvoked != null && neverInvoked != null) {
|
|
14788
|
+
lines.push(
|
|
14789
|
+
`- **Telemetry coverage:** ${everInvoked}/${catalogSize} catalog skills have emitted telemetry (${neverInvoked} never invoked)`
|
|
14790
|
+
);
|
|
14791
|
+
}
|
|
14792
|
+
return lines.join("\n");
|
|
14793
|
+
}
|
|
14794
|
+
function staleEmptyNote(report) {
|
|
14795
|
+
const base = `No ever-invoked skill is inactive \u2265${report.inactiveDaysThreshold} days.`;
|
|
14796
|
+
if (report.windowDays < report.inactiveDaysThreshold) {
|
|
14797
|
+
return `${base} Note: the record window (${report.windowDays} days) is shorter than the threshold, so this signal cannot fire yet.`;
|
|
14798
|
+
}
|
|
14799
|
+
return base;
|
|
14800
|
+
}
|
|
14801
|
+
function renderRetrospectiveMarkdown(report) {
|
|
14802
|
+
const sections = [
|
|
14803
|
+
`# Catalog Retrospective \u2014 ${report.generatedAt.slice(0, 10)}`,
|
|
14804
|
+
renderOverview(report),
|
|
14805
|
+
renderStatSection("Top skills by invocations", report.topInvoked, "No invocations recorded."),
|
|
14806
|
+
renderStatSection("Top failing skills", report.topFailing, "No failing skills recorded."),
|
|
14807
|
+
renderStatSection(
|
|
14808
|
+
"Abandoned mid-workflow",
|
|
14809
|
+
report.abandonedMidWorkflow,
|
|
14810
|
+
"No abandoned-mid-workflow runs recorded."
|
|
14811
|
+
),
|
|
14812
|
+
renderStatSection(
|
|
14813
|
+
`Stale skills (inactive \u2265${report.inactiveDaysThreshold} days)`,
|
|
14814
|
+
report.staleSkills,
|
|
14815
|
+
staleEmptyNote(report)
|
|
14816
|
+
)
|
|
14817
|
+
];
|
|
14818
|
+
return sections.join("\n\n").trimEnd() + "\n";
|
|
14819
|
+
}
|
|
14644
14820
|
function isEmptyObject(v) {
|
|
14645
14821
|
return typeof v === "object" && v !== null && !Array.isArray(v) && Object.keys(v).length === 0;
|
|
14646
14822
|
}
|
|
@@ -15133,7 +15309,7 @@ function arrayLen(arr) {
|
|
|
15133
15309
|
return Array.isArray(arr) ? arr.length : 0;
|
|
15134
15310
|
}
|
|
15135
15311
|
async function gatherEntropyBlock(projectPath) {
|
|
15136
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./analyzer-
|
|
15312
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./analyzer-XRCV63KC-6T2Z32XC.js");
|
|
15137
15313
|
const analyzer = new EntropyAnalyzer2({
|
|
15138
15314
|
rootDir: projectPath,
|
|
15139
15315
|
include: ["src/**/*.ts", "src/**/*.tsx", "packages/*/src/**/*.ts"],
|
|
@@ -15347,6 +15523,185 @@ ${issues}`));
|
|
|
15347
15523
|
}
|
|
15348
15524
|
return Ok(result.data);
|
|
15349
15525
|
}
|
|
15526
|
+
function footprintOf(task) {
|
|
15527
|
+
const files = task.files || [];
|
|
15528
|
+
const owns = task.owns || [];
|
|
15529
|
+
return /* @__PURE__ */ new Set([...files, ...owns]);
|
|
15530
|
+
}
|
|
15531
|
+
function shareFootprint(a, b) {
|
|
15532
|
+
if (!a || !b) return false;
|
|
15533
|
+
for (const item of a) {
|
|
15534
|
+
if (b.has(item)) return true;
|
|
15535
|
+
}
|
|
15536
|
+
return false;
|
|
15537
|
+
}
|
|
15538
|
+
function addDependency(deps, consumer, producer) {
|
|
15539
|
+
if (!consumer || !producer) return;
|
|
15540
|
+
const consumerDeps = deps.get(consumer.id);
|
|
15541
|
+
if (consumerDeps) consumerDeps.add(producer.id);
|
|
15542
|
+
}
|
|
15543
|
+
function toGraphNode(task, deps) {
|
|
15544
|
+
const set = deps.get(task.id) || /* @__PURE__ */ new Set();
|
|
15545
|
+
return { id: task.id, dependsOn: [...set].sort() };
|
|
15546
|
+
}
|
|
15547
|
+
function buildTaskGraph(tasks) {
|
|
15548
|
+
const footprints = tasks.map(footprintOf);
|
|
15549
|
+
const deps = /* @__PURE__ */ new Map();
|
|
15550
|
+
for (const task of tasks) {
|
|
15551
|
+
deps.set(task.id, new Set(task.dependsOn || []));
|
|
15552
|
+
}
|
|
15553
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
15554
|
+
for (let j = i + 1; j < tasks.length; j++) {
|
|
15555
|
+
if (shareFootprint(footprints[i], footprints[j])) {
|
|
15556
|
+
addDependency(deps, tasks[j], tasks[i]);
|
|
15557
|
+
}
|
|
15558
|
+
}
|
|
15559
|
+
}
|
|
15560
|
+
return tasks.map((task) => toGraphNode(task, deps));
|
|
15561
|
+
}
|
|
15562
|
+
function validatePlanTasks(tasks) {
|
|
15563
|
+
const errors = [];
|
|
15564
|
+
const warnings = [];
|
|
15565
|
+
const index = /* @__PURE__ */ new Map();
|
|
15566
|
+
tasks.forEach((t, i) => index.set(t.id, i));
|
|
15567
|
+
for (const t of tasks) {
|
|
15568
|
+
for (const dep of t.dependsOn || []) {
|
|
15569
|
+
if (!index.has(dep)) {
|
|
15570
|
+
errors.push(`Task "${t.id}" depends on unknown task id "${dep}".`);
|
|
15571
|
+
continue;
|
|
15572
|
+
}
|
|
15573
|
+
if (index.get(dep) > index.get(t.id)) {
|
|
15574
|
+
warnings.push(
|
|
15575
|
+
`Task "${t.id}" depends on "${dep}" which is declared later (consumer before producer).`
|
|
15576
|
+
);
|
|
15577
|
+
}
|
|
15578
|
+
}
|
|
15579
|
+
}
|
|
15580
|
+
const { cyclic } = findParallelGroups(buildTaskGraph(tasks));
|
|
15581
|
+
if (cyclic.length > 0) {
|
|
15582
|
+
errors.push(`Dependency cycle detected among tasks: ${cyclic.join(", ")}.`);
|
|
15583
|
+
}
|
|
15584
|
+
return { errors, warnings };
|
|
15585
|
+
}
|
|
15586
|
+
function waveSeverity(taskIds, conflicts) {
|
|
15587
|
+
const set = new Set(taskIds);
|
|
15588
|
+
let max = "none";
|
|
15589
|
+
for (const c of conflicts.conflicts) {
|
|
15590
|
+
if (!set.has(c.taskA) || !set.has(c.taskB)) continue;
|
|
15591
|
+
if (SEVERITY_RANK2[c.severity] > SEVERITY_RANK2[max]) max = c.severity;
|
|
15592
|
+
}
|
|
15593
|
+
return max;
|
|
15594
|
+
}
|
|
15595
|
+
function classifyFiring(severity, waveSize, minWaveSize, analysisLevel) {
|
|
15596
|
+
if (severity === "high") {
|
|
15597
|
+
return {
|
|
15598
|
+
firing: "serialize",
|
|
15599
|
+
reason: "high-severity conflicts predicted \u2014 running these tasks sequentially"
|
|
15600
|
+
};
|
|
15601
|
+
}
|
|
15602
|
+
if (waveSize < minWaveSize) {
|
|
15603
|
+
return {
|
|
15604
|
+
firing: "serialize",
|
|
15605
|
+
reason: `only ${waveSize} independent task(s), below minimum wave size ${minWaveSize} \u2014 running serially`
|
|
15606
|
+
};
|
|
15607
|
+
}
|
|
15608
|
+
if (severity === "medium") {
|
|
15609
|
+
return {
|
|
15610
|
+
firing: "confirm",
|
|
15611
|
+
reason: "medium-severity conflicts predicted \u2014 one confirmation before dispatch"
|
|
15612
|
+
};
|
|
15613
|
+
}
|
|
15614
|
+
if (analysisLevel === "file-only") {
|
|
15615
|
+
return {
|
|
15616
|
+
firing: "confirm",
|
|
15617
|
+
reason: "graph unavailable (file-only analysis) \u2014 transitive conflicts unknown, one confirmation before dispatch"
|
|
15618
|
+
};
|
|
15619
|
+
}
|
|
15620
|
+
return {
|
|
15621
|
+
firing: "auto-dispatch",
|
|
15622
|
+
reason: `${waveSize} independent tasks, ${severity === "none" ? "no" : severity} conflict severity, graph-expanded analysis \u2014 dispatching in parallel`
|
|
15623
|
+
};
|
|
15624
|
+
}
|
|
15625
|
+
function narrate(waves, reasons, serialized, cyclic, nodes) {
|
|
15626
|
+
const depMap = /* @__PURE__ */ new Map();
|
|
15627
|
+
for (const node of nodes) depMap.set(node.id, node.dependsOn);
|
|
15628
|
+
const cyclicSet = new Set(cyclic);
|
|
15629
|
+
const serializedSet = new Set(serialized);
|
|
15630
|
+
const labelDep = (id) => {
|
|
15631
|
+
if (cyclicSet.has(id)) return `${id} (cyclic)`;
|
|
15632
|
+
if (serializedSet.has(id)) return `${id} (serialized)`;
|
|
15633
|
+
return id;
|
|
15634
|
+
};
|
|
15635
|
+
const lines = [
|
|
15636
|
+
`Parallelization: ${waves.length} wave(s), ${serialized.length} serialized, ${cyclic.length} cyclic.`
|
|
15637
|
+
];
|
|
15638
|
+
waves.forEach((w, i) => {
|
|
15639
|
+
const waveSet = new Set(w.tasks);
|
|
15640
|
+
const blocking = [...new Set(w.tasks.flatMap((t) => depMap.get(t) ?? []))].filter((id) => !waveSet.has(id)).sort();
|
|
15641
|
+
const crossBucket = blocking.some((id) => serializedSet.has(id));
|
|
15642
|
+
const waitClause = blocking.length ? `waits on ${blocking.map(labelDep).join(", ")}${crossBucket ? " (cross-bucket prerequisite gates this wave)" : ""}` : "no upstream dependencies (root wave)";
|
|
15643
|
+
lines.push(
|
|
15644
|
+
`Wave ${i + 1} [${w.tasks.join(", ")}]: ${waitClause}; ${w.firing}: ${reasons[i] ?? ""}.`
|
|
15645
|
+
);
|
|
15646
|
+
});
|
|
15647
|
+
if (serialized.length > 0) {
|
|
15648
|
+
lines.push(
|
|
15649
|
+
`Serialized (run sequentially): [${serialized.join(
|
|
15650
|
+
", "
|
|
15651
|
+
)}] \u2014 high-severity conflict members or dependency-cycle members.`
|
|
15652
|
+
);
|
|
15653
|
+
}
|
|
15654
|
+
if (cyclic.length > 0) {
|
|
15655
|
+
lines.push(
|
|
15656
|
+
`Cyclic (blocked): [${cyclic.join(", ")}] \u2014 dependency cycle; resolve before scheduling.`
|
|
15657
|
+
);
|
|
15658
|
+
}
|
|
15659
|
+
return lines.join("\n");
|
|
15660
|
+
}
|
|
15661
|
+
function highRiskGroupMembers(conflicts) {
|
|
15662
|
+
const members = [];
|
|
15663
|
+
for (const group of conflicts.groups) {
|
|
15664
|
+
if (group.length > 1) members.push(...group);
|
|
15665
|
+
}
|
|
15666
|
+
return members;
|
|
15667
|
+
}
|
|
15668
|
+
function planParallelization(input) {
|
|
15669
|
+
const { tasks, conflicts } = input;
|
|
15670
|
+
const minWaveSize = input.minWaveSize ?? DEFAULT_MIN_WAVE_SIZE;
|
|
15671
|
+
const nodes = buildTaskGraph(tasks);
|
|
15672
|
+
const { waves: rawWaves, cyclic } = findParallelGroups(nodes);
|
|
15673
|
+
const serializedSet = new Set(cyclic);
|
|
15674
|
+
for (const id of highRiskGroupMembers(conflicts)) serializedSet.add(id);
|
|
15675
|
+
const serialized = [...serializedSet].sort();
|
|
15676
|
+
const depMap = /* @__PURE__ */ new Map();
|
|
15677
|
+
for (const node of nodes) depMap.set(node.id, node.dependsOn);
|
|
15678
|
+
const reasons = [];
|
|
15679
|
+
const waves = rawWaves.map((taskIds) => taskIds.filter((id) => !serializedSet.has(id))).filter((taskIds) => taskIds.length > 0).map((taskIds) => {
|
|
15680
|
+
const severity = waveSeverity(taskIds, conflicts);
|
|
15681
|
+
let { firing, reason } = classifyFiring(
|
|
15682
|
+
severity,
|
|
15683
|
+
taskIds.length,
|
|
15684
|
+
minWaveSize,
|
|
15685
|
+
conflicts.analysisLevel
|
|
15686
|
+
);
|
|
15687
|
+
const waveSet = new Set(taskIds);
|
|
15688
|
+
const crossBucketUpstream = [...new Set(taskIds.flatMap((t) => depMap.get(t) ?? []))].filter((id) => !waveSet.has(id) && serializedSet.has(id)).sort();
|
|
15689
|
+
if (crossBucketUpstream.length > 0 && firing === "auto-dispatch") {
|
|
15690
|
+
firing = "confirm";
|
|
15691
|
+
reason = `depends on ${crossBucketUpstream.join(
|
|
15692
|
+
", "
|
|
15693
|
+
)} running in the serialized/cyclic channel \u2014 cross-bucket prerequisite not parallel-safe, one confirmation before dispatch`;
|
|
15694
|
+
}
|
|
15695
|
+
reasons.push(reason);
|
|
15696
|
+
return { tasks: taskIds, severity, firing, analysisLevel: conflicts.analysisLevel };
|
|
15697
|
+
});
|
|
15698
|
+
return {
|
|
15699
|
+
waves,
|
|
15700
|
+
serialized,
|
|
15701
|
+
cyclic,
|
|
15702
|
+
narration: narrate(waves, reasons, serialized, cyclic, nodes)
|
|
15703
|
+
};
|
|
15704
|
+
}
|
|
15350
15705
|
function proposalsDir(projectPath) {
|
|
15351
15706
|
return path51.join(projectPath, ".harness", "proposals");
|
|
15352
15707
|
}
|
|
@@ -16046,12 +16401,12 @@ function writeStrategyDoc(doc, opts) {
|
|
|
16046
16401
|
throw e;
|
|
16047
16402
|
}
|
|
16048
16403
|
}
|
|
16049
|
-
var WHATWG_BAD_PORTS, BAD_PORT_SET, VALID_TYPES, CONVENTIONAL_PATTERN, LOOKBACK_PATTERN, PulseDbSourceSchema, PulseSourcesSchema, PulseConfigSchema, KNOWN_SECTION_NAMES, ISO_DATE, PLACEHOLDER_INLINE, REQUIRED, ALLOWED, StrategyFrontmatterSchema, StrategySectionSchema, StrategyDocSchema, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ALL_SOLUTION_CATEGORIES, ISO_DATE2, BugTrackSchema, KnowledgeTrackSchema, BaseFrontmatter, SolutionDocFrontmatterSchema, TRACK_CATEGORIES, 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, ROADMAP_READ_ALLOWLIST, ROADMAP_MD, DYNAMIC_ROADMAP_IO, KEBAB_CASE, TICKET_ID, 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, readFile72, 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, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, EM_DASH2, H3_NAME, FRONTMATTER, STATUS_RANK, META_FILE, ShardStore, MonolithStore, ALL_CATEGORIES, 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, 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, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, EVENT_LOG_FILE, EVENT_BLOBS_DIR, MAX_LINE_BYTES, BLOB_REF_KEY, SNAPSHOT_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, STATE_DIRS, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, LOCK_RETRIES, LOCK_BACKOFFS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, event_sourcing_exports, ScopeSchema, envelopeShape, StateImportedPayload, DecisionRecordedPayload, PositionSetPayload, BlockerOpenedPayload, BlockerResolvedPayload, ProgressSetPayload, SessionSummarizedPayload, LANES, LaneSchema, TaskRegisteredPayload, LaneTransitionedPayload, UserInputCapturedPayload, ApprovalRequestedPayload, ApprovalResolvedPayload, EventSchema, BlobRefSchema, StoredEventSchema, cached, localCounters, CORE_HANDLERS, KIND_LABEL, MATERIALIZE_DEBOUNCE_MS, pendingTimers, inflightMaterializes, ensured, TERMINAL_LANES, NON_TERMINAL, TABLE, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, OSV_ENDPOINT, DEFAULT_CACHE_DIR, DEFAULT_TTL_HOURS, 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, JS_EXT_FALLBACKS, 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, ADVERSARIAL_DESCRIPTOR, UNVERIFIED_INPUT_PATTERN, PROMISE_NO_REJECT_PATTERN, UNGUARDED_OPTIONAL_CALL, COMPOSE_NO_AWAIT, FETCH_NO_TIMEOUT, TYPESCRIPT_STRICT_DESCRIPTOR, EXPLICIT_ANY_PATTERN, TS_IGNORE_PATTERN, UNSAFE_AS_UNKNOWN, NON_NULL_ASSERTION, VAGUE_HELPER_NAME, FRONTEND_RACES_DESCRIPTOR, AGENT_DESCRIPTORS, CONDITIONAL_SUBAGENT_DESCRIPTORS, AGENT_RUNNERS, SUBAGENT_ORDER, RISK_KEYWORDS, EXCLUDED_PATH_PATTERNS, ASYNC_UI_SIGNALS, WORD_BOUNDARY, 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, CI_REVIEW_VERDICT_SCHEMA_VERSION, CI_RUNNERS, CI_ASSESSMENTS, CI_REVIEW_DOMAINS, ReviewFindingSchema, CiReviewVerdictSchema, VERDICT_MAP, RUNNER_PRESETS, VERDICT_MAP2, DEFAULT_EXEC_TIMEOUT_MS, DEFAULT_EXEC_MAX_STDOUT_BYTES, STDERR_CAP_BYTES, STDERR_TAIL_BYTES, defaultExecFile, EMPTY_TIER, EM_DASH3, DEFAULT_MILESTONE, MAX_CLOSEST_MATCHES, MACHINE_ASSIGNEE_PATTERNS, EXTERNAL_ID_RE, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, PRIORITY_RANK2, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, ConflictError, DEFAULTS, GitHubHttp, ETagStore, START_MARKER, END_MARKER, SERIALIZER_FIELDS, GitHubIssuesTrackerAdapter, LINEAR_ENDPOINT, EXTERNAL_PREFIX, HISTORY_MARKER, ISSUE_FIELDS, LinearTrackerAdapter, migrate_exports, HASH_RE, DEFAULT_CATCH_ALL, DEFAULT_INTAKE, DEFAULT_MAX_ACTIVE, 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, DEFAULT_CAPACITY, CacheMetricsRecorder, RETRY_BACKOFFS_MS, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_BATCH_SIZE, defaultFetch, defaultWarn, OTLPExporter, SERVICE_NAME_ATTR, SpanKind, ModeSchema, SeveritySchema, TierSchema, StrengthFindingSchema, HarnessConfigSubsetSchema, HookFileSchema, ProjectContextSchema, AuditSummarySchema, AuditResultSchema, SEVERITY_WEIGHTS, clamp, HOOK_SCRIPT_TOKEN, NEVER_BLOCKS, ALWAYS_EXIT_ZERO, EXIT_ZERO_LINE, NONZERO_EXIT, GATE, ERREXIT, strength001NonblockingHooks, BASELINE_REWRITE, strength002Autobaseline, SKIP_RE, strength003SkipList, strength004EmptyThresholds, INIT_SKILL_PATH, DEFAULT_BASIC, strength005LowestTier, AUTO_PATTERN, COMMENT_LINE, NAME_VALUE_LINE, PAT_GATING, REVIEW_SIGNAL, strength006AutoapproveBaseline, CHECK_KEYS, SIGNAL_REGISTRY, HEALTH_SIGNAL_NAMES, CHECK_SIGNAL_MAP, SIGNAL_CATEGORY_MAP, strength007SnapshotSignalMismatch, ALL_RULES, HarnessStrengthAuditor, MAX_TOP_AFFECTED, CompoundLockHeldError, KNOWN_CATEGORIES, ProposalNotFoundError, ProposalConflictError, ALLOWED_FIELD_KEYS, PII_TOKENS, PII_FIELD_DENYLIST, PII_LINE_RE, ALLOWED_SET, PulseAdapterAlreadyRegisteredError, REGISTRY, MOCK_ADAPTER_NAME, ALLOWED_FIELD_SET, adapter, LOOKBACK_RE, MAX_LINES, INLINE_TEMPLATE, TRUNCATION_MARKER2, execFileAsync, FIX_RE, EMPTY_REPO_RE, execFileAsync2, TRACK_CATEGORIES2, STOPWORDS, KEYWORD_TO_CATEGORY, SECTION_ORDER, FILENAME;
|
|
16404
|
+
var WHATWG_BAD_PORTS, BAD_PORT_SET, VALID_TYPES, CONVENTIONAL_PATTERN, LOOKBACK_PATTERN, PulseDbSourceSchema, PulseSourcesSchema, PulseConfigSchema, KNOWN_SECTION_NAMES, ISO_DATE, PLACEHOLDER_INLINE, REQUIRED, ALLOWED, StrategyFrontmatterSchema, StrategySectionSchema, StrategyDocSchema, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ALL_SOLUTION_CATEGORIES, ISO_DATE2, BugTrackSchema, KnowledgeTrackSchema, BaseFrontmatter, SolutionDocFrontmatterSchema, TRACK_CATEGORIES, 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, ROADMAP_READ_ALLOWLIST, ROADMAP_MD, DYNAMIC_ROADMAP_IO, KEBAB_CASE, TICKET_ID, 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, readFile72, 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, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, EM_DASH2, H3_NAME, FRONTMATTER, STATUS_RANK, META_FILE, ShardStore, MonolithStore, ALL_CATEGORIES, 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, 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, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, EVENT_LOG_FILE, EVENT_BLOBS_DIR, MAX_LINE_BYTES, BLOB_REF_KEY, SNAPSHOT_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, STATE_DIRS, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, LOCK_RETRIES, LOCK_BACKOFFS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, event_sourcing_exports, ScopeSchema, envelopeShape, StateImportedPayload, DecisionRecordedPayload, PositionSetPayload, BlockerOpenedPayload, BlockerResolvedPayload, ProgressSetPayload, SessionSummarizedPayload, LANES, LaneSchema, TaskRegisteredPayload, LaneTransitionedPayload, UserInputCapturedPayload, ApprovalRequestedPayload, ApprovalResolvedPayload, EventSchema, BlobRefSchema, StoredEventSchema, cached, localCounters, CORE_HANDLERS, KIND_LABEL, MATERIALIZE_DEBOUNCE_MS, pendingTimers, inflightMaterializes, ensured, TERMINAL_LANES, NON_TERMINAL, TABLE, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, OSV_ENDPOINT, DEFAULT_CACHE_DIR, DEFAULT_TTL_HOURS, 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, JS_EXT_FALLBACKS, 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, ADVERSARIAL_DESCRIPTOR, UNVERIFIED_INPUT_PATTERN, PROMISE_NO_REJECT_PATTERN, UNGUARDED_OPTIONAL_CALL, COMPOSE_NO_AWAIT, FETCH_NO_TIMEOUT, TYPESCRIPT_STRICT_DESCRIPTOR, EXPLICIT_ANY_PATTERN, TS_IGNORE_PATTERN, UNSAFE_AS_UNKNOWN, NON_NULL_ASSERTION, VAGUE_HELPER_NAME, FRONTEND_RACES_DESCRIPTOR, AGENT_DESCRIPTORS, CONDITIONAL_SUBAGENT_DESCRIPTORS, AGENT_RUNNERS, SUBAGENT_ORDER, RISK_KEYWORDS, EXCLUDED_PATH_PATTERNS, ASYNC_UI_SIGNALS, WORD_BOUNDARY, 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, CI_REVIEW_VERDICT_SCHEMA_VERSION, CI_RUNNERS, CI_ASSESSMENTS, CI_REVIEW_DOMAINS, ReviewFindingSchema, CiReviewVerdictSchema, VERDICT_MAP, RUNNER_PRESETS, VERDICT_MAP2, DEFAULT_EXEC_TIMEOUT_MS, DEFAULT_EXEC_MAX_STDOUT_BYTES, STDERR_CAP_BYTES, STDERR_TAIL_BYTES, defaultExecFile, EMPTY_TIER, EM_DASH3, DEFAULT_MILESTONE, MAX_CLOSEST_MATCHES, MACHINE_ASSIGNEE_PATTERNS, EXTERNAL_ID_RE, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, PRIORITY_RANK2, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, ConflictError, DEFAULTS, GitHubHttp, ETagStore, START_MARKER, END_MARKER, SERIALIZER_FIELDS, GitHubIssuesTrackerAdapter, LINEAR_ENDPOINT, EXTERNAL_PREFIX, HISTORY_MARKER, ISSUE_FIELDS, LinearTrackerAdapter, migrate_exports, HASH_RE, DEFAULT_CATCH_ALL, DEFAULT_INTAKE, DEFAULT_MAX_ACTIVE, 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, DAY_MS, 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, DEFAULT_CAPACITY, CacheMetricsRecorder, RETRY_BACKOFFS_MS, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_BATCH_SIZE, defaultFetch, defaultWarn, OTLPExporter, SERVICE_NAME_ATTR, SpanKind, ModeSchema, SeveritySchema, TierSchema, StrengthFindingSchema, HarnessConfigSubsetSchema, HookFileSchema, ProjectContextSchema, AuditSummarySchema, AuditResultSchema, SEVERITY_WEIGHTS, clamp, HOOK_SCRIPT_TOKEN, NEVER_BLOCKS, ALWAYS_EXIT_ZERO, EXIT_ZERO_LINE, NONZERO_EXIT, GATE, ERREXIT, strength001NonblockingHooks, BASELINE_REWRITE, strength002Autobaseline, SKIP_RE, strength003SkipList, strength004EmptyThresholds, INIT_SKILL_PATH, DEFAULT_BASIC, strength005LowestTier, AUTO_PATTERN, COMMENT_LINE, NAME_VALUE_LINE, PAT_GATING, REVIEW_SIGNAL, strength006AutoapproveBaseline, CHECK_KEYS, SIGNAL_REGISTRY, HEALTH_SIGNAL_NAMES, CHECK_SIGNAL_MAP, SIGNAL_CATEGORY_MAP, strength007SnapshotSignalMismatch, ALL_RULES, HarnessStrengthAuditor, MAX_TOP_AFFECTED, CompoundLockHeldError, KNOWN_CATEGORIES, SEVERITY_RANK2, DEFAULT_MIN_WAVE_SIZE, ProposalNotFoundError, ProposalConflictError, ALLOWED_FIELD_KEYS, PII_TOKENS, PII_FIELD_DENYLIST, PII_LINE_RE, ALLOWED_SET, PulseAdapterAlreadyRegisteredError, REGISTRY, MOCK_ADAPTER_NAME, ALLOWED_FIELD_SET, adapter, LOOKBACK_RE, MAX_LINES, INLINE_TEMPLATE, TRUNCATION_MARKER2, execFileAsync, FIX_RE, EMPTY_REPO_RE, execFileAsync2, TRACK_CATEGORIES2, STOPWORDS, KEYWORD_TO_CATEGORY, SECTION_ORDER, FILENAME;
|
|
16050
16405
|
var init_dist3 = __esm({
|
|
16051
16406
|
"../core/dist/index.mjs"() {
|
|
16052
|
-
|
|
16053
|
-
|
|
16054
|
-
|
|
16407
|
+
init_chunk_OFA2AAZK();
|
|
16408
|
+
init_chunk_IHRT6II2();
|
|
16409
|
+
init_chunk_JZ7UO3OF();
|
|
16055
16410
|
init_chunk_XKLVJIPL();
|
|
16056
16411
|
init_chunk_IIEDD47I();
|
|
16057
16412
|
init_chunk_7P6ASYW6();
|
|
@@ -17179,7 +17534,7 @@ var init_dist3 = __esm({
|
|
|
17179
17534
|
check: "Context validation",
|
|
17180
17535
|
passed: graphData.graphExists && graphData.nodeCount > 0,
|
|
17181
17536
|
severity: "info",
|
|
17182
|
-
details: graphData.graphExists ? `Graph loaded: ${graphData.nodeCount} nodes, ${graphData.edgeCount} edges` : "No graph available \u2014 run harness scan to build the knowledge graph"
|
|
17537
|
+
details: graphData.graphExists ? `Graph loaded: ${graphData.nodeCount} nodes, ${graphData.edgeCount} edges` : "No graph available \u2014 run harness graph scan to build the knowledge graph"
|
|
17183
17538
|
}) : void 0
|
|
17184
17539
|
)
|
|
17185
17540
|
);
|
|
@@ -22321,6 +22676,7 @@ console.log('Blueprint player initialized.');
|
|
|
22321
22676
|
STALENESS_WARNING_DAYS = 7;
|
|
22322
22677
|
MICRODOLLARS_PER_DOLLAR = 1e6;
|
|
22323
22678
|
TOKENS_PER_MILLION2 = 1e6;
|
|
22679
|
+
DAY_MS = 24 * 60 * 60 * 1e3;
|
|
22324
22680
|
StructuralStrategy = class {
|
|
22325
22681
|
name = "structural";
|
|
22326
22682
|
lossy = false;
|
|
@@ -23035,6 +23391,8 @@ console.log('Blueprint player initialized.');
|
|
|
23035
23391
|
lockPath;
|
|
23036
23392
|
};
|
|
23037
23393
|
KNOWN_CATEGORIES = new Set(ALL_SOLUTION_CATEGORIES);
|
|
23394
|
+
SEVERITY_RANK2 = { none: 0, low: 1, medium: 2, high: 3 };
|
|
23395
|
+
DEFAULT_MIN_WAVE_SIZE = 3;
|
|
23038
23396
|
ProposalNotFoundError = class extends Error {
|
|
23039
23397
|
constructor(id) {
|
|
23040
23398
|
super(`proposal not found: ${id}`);
|
|
@@ -23565,6 +23923,7 @@ export {
|
|
|
23565
23923
|
parseExternalId,
|
|
23566
23924
|
buildExternalId,
|
|
23567
23925
|
GitHubIssuesSyncAdapter,
|
|
23926
|
+
parseReferencedIssues,
|
|
23568
23927
|
loadTrackerSyncConfig,
|
|
23569
23928
|
reconcileDoneFromClosedIssues,
|
|
23570
23929
|
syncToExternal,
|
|
@@ -23616,6 +23975,9 @@ export {
|
|
|
23616
23975
|
aggregateBySkill,
|
|
23617
23976
|
aggregateByDay2,
|
|
23618
23977
|
topSkills,
|
|
23978
|
+
isAbandonedMidWorkflow,
|
|
23979
|
+
getCatalogRetrospectiveReport,
|
|
23980
|
+
renderRetrospectiveMarkdown,
|
|
23619
23981
|
StructuralStrategy,
|
|
23620
23982
|
DEFAULT_TOKEN_BUDGET,
|
|
23621
23983
|
TruncationStrategy,
|
|
@@ -23658,6 +24020,9 @@ export {
|
|
|
23658
24020
|
CompoundLockHeldError,
|
|
23659
24021
|
acquireCompoundLock,
|
|
23660
24022
|
loadNotificationsConfig,
|
|
24023
|
+
buildTaskGraph,
|
|
24024
|
+
validatePlanTasks,
|
|
24025
|
+
planParallelization,
|
|
23661
24026
|
proposalsDir,
|
|
23662
24027
|
ProposalNotFoundError,
|
|
23663
24028
|
ProposalConflictError,
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
} from "./chunk-3WGJMBKH.js";
|
|
8
8
|
import {
|
|
9
9
|
init_dist as init_dist2
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-33OU3LYX.js";
|
|
11
11
|
import {
|
|
12
12
|
Err,
|
|
13
13
|
Ok
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-UEXQMI6K.js";
|
|
15
15
|
import {
|
|
16
16
|
init_dist,
|
|
17
17
|
skipDirGlobs
|
|
@@ -72,13 +72,29 @@ var AgentConfigSchema = z.object({
|
|
|
72
72
|
/** Routing rules for orchestrator agent dispatch. */
|
|
73
73
|
routing: RoutingConfigSchema.optional()
|
|
74
74
|
});
|
|
75
|
+
var DriftConfigSchema = z.object({
|
|
76
|
+
/** Glob patterns for docs to scan for drift (default: docs/**, README) */
|
|
77
|
+
docPaths: z.array(z.string()).optional(),
|
|
78
|
+
/** Flag doc references to code symbols that no longer exist (default: true) */
|
|
79
|
+
checkApiSignatures: z.boolean().optional(),
|
|
80
|
+
/** Check fenced code examples against the codebase (default: true) */
|
|
81
|
+
checkExamples: z.boolean().optional(),
|
|
82
|
+
/** Check documented structure against the filesystem (default: true) */
|
|
83
|
+
checkStructure: z.boolean().optional(),
|
|
84
|
+
/** Regexes matched against a reference to exclude it from drift reporting */
|
|
85
|
+
ignorePatterns: z.array(z.string()).optional(),
|
|
86
|
+
/** Doc-path prefixes whose symbols describe intended future code (ADRs, proposals) */
|
|
87
|
+
forwardLookingPaths: z.array(z.string()).optional()
|
|
88
|
+
});
|
|
75
89
|
var EntropyConfigSchema = z.object({
|
|
76
90
|
/** Explicit entry points for reachability analysis (overrides auto-detection) */
|
|
77
91
|
entryPoints: z.array(z.string()).optional(),
|
|
78
92
|
/** Patterns to exclude from entropy analysis */
|
|
79
93
|
excludePatterns: z.array(z.string()).default([...skipDirGlobs(), "**/*.test.ts"]),
|
|
80
94
|
/** Whether to automatically attempt to fix simple entropy issues */
|
|
81
|
-
autoFix: z.boolean().default(false)
|
|
95
|
+
autoFix: z.boolean().default(false),
|
|
96
|
+
/** Documentation-drift detection tuning (scope/disable individual checks) */
|
|
97
|
+
drift: DriftConfigSchema.optional()
|
|
82
98
|
});
|
|
83
99
|
var PhaseGateMappingSchema = z.object({
|
|
84
100
|
/** Pattern for implementation files */
|