@harness-engineering/cli 2.6.0 → 2.7.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/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/claude-code/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/claude-code/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/claude-code/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/claude-code/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/claude-code/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/claude-code/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/claude-code/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/claude-code/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/claude-code/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/claude-code/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/claude-code/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/claude-code/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/claude-code/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/claude-code/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/claude-code/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/claude-code/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/claude-code/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/claude-code/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/claude-code/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/claude-code/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/claude-code/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/claude-code/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/claude-code/test-craft/skill.yaml +58 -0
- package/dist/agents/skills/codex/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/codex/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/codex/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/codex/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/codex/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/codex/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/codex/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/codex/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/codex/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/codex/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/codex/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/codex/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/codex/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/codex/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/codex/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/codex/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/codex/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/codex/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/codex/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/codex/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/codex/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/codex/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/codex/test-craft/skill.yaml +58 -0
- package/dist/agents/skills/cursor/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/cursor/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/cursor/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/cursor/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/cursor/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/cursor/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/cursor/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/cursor/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/cursor/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/cursor/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/cursor/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/cursor/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/cursor/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/cursor/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/cursor/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/cursor/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/cursor/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/cursor/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/cursor/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/cursor/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/cursor/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/cursor/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/cursor/test-craft/skill.yaml +58 -0
- package/dist/agents/skills/gemini-cli/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/gemini-cli/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/gemini-cli/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/gemini-cli/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/gemini-cli/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/gemini-cli/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/gemini-cli/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/gemini-cli/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/gemini-cli/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/gemini-cli/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/gemini-cli/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/gemini-cli/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/gemini-cli/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/gemini-cli/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/gemini-cli/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/gemini-cli/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/gemini-cli/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/gemini-cli/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/gemini-cli/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/gemini-cli/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/gemini-cli/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/gemini-cli/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/gemini-cli/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/gemini-cli/test-craft/skill.yaml +58 -0
- package/dist/{agents-md-2JUQ4FE2.js → agents-md-267R2NUJ.js} +4 -4
- package/dist/{analyzer-VY6DJVOU-4AHIJLNS.js → analyzer-VY6DJVOU-WYKV3TTW.js} +2 -2
- package/dist/{architecture-CXAVNB5X.js → architecture-ZTEHGIHD.js} +6 -6
- package/dist/{assess-project-M626SSPN.js → assess-project-OKDW3YSK.js} +2 -1
- package/dist/bin/harness-mcp.js +17 -17
- package/dist/bin/harness.js +27 -27
- package/dist/{check-phase-gate-XMU6LLUQ.js → check-phase-gate-YJWFDW66.js} +5 -5
- package/dist/{chunk-ORNMAYHB.js → chunk-4EGPFB7V.js} +6196 -125
- package/dist/{chunk-HFOB2MPQ.js → chunk-67RP7MLR.js} +3 -3
- package/dist/{chunk-5JNSFYZU.js → chunk-6T5AYG5S.js} +6 -6
- package/dist/{chunk-5XLLIYYL.js → chunk-6UHDQP2N.js} +1 -1
- package/dist/{chunk-YP7I25SL.js → chunk-B3B64OPD.js} +1 -1
- package/dist/{chunk-VTTNIZJL.js → chunk-B4OLYXZ4.js} +93 -3
- package/dist/{chunk-6AX6R3LM.js → chunk-CXAHK5PJ.js} +9 -9
- package/dist/{chunk-BCFDGOMA.js → chunk-H2ZJOJ7A.js} +81 -1
- package/dist/{chunk-NX6A24DS.js → chunk-HLPY3RHE.js} +1641 -292
- package/dist/{chunk-Q6ZR2L6Q.js → chunk-HMMSWRWR.js} +2 -2
- package/dist/{chunk-YYRQCQPZ.js → chunk-IY2TZLY5.js} +176 -107
- package/dist/{chunk-I6K43QQS.js → chunk-MQG7FHXX.js} +3 -3
- package/dist/{chunk-43M3RLFQ.js → chunk-OLTVDPA2.js} +2 -2
- package/dist/{chunk-JFZOWO7D.js → chunk-OQE6ME2Z.js} +1 -1
- package/dist/{chunk-GWE5LL3R.js → chunk-P7EO7USC.js} +10 -10
- package/dist/{chunk-24KCOJJG.js → chunk-PARV3G2F.js} +1 -1
- package/dist/{chunk-QOKMDDBJ.js → chunk-QUPC37UB.js} +6 -6
- package/dist/{chunk-EPUKTTJZ.js → chunk-RC3OI5NK.js} +5 -1
- package/dist/{chunk-L5BCZ5XS.js → chunk-S7GEONXL.js} +1 -1
- package/dist/{chunk-5FDBXUFW.js → chunk-TIH53QXY.js} +1 -1
- package/dist/{chunk-OA6SWTU4.js → chunk-TIZ3L6CU.js} +11 -8
- package/dist/{chunk-GWF2OILZ.js → chunk-VG6UK6G6.js} +1 -1
- package/dist/{chunk-SZEFU6XC.js → chunk-W3PDVZ4I.js} +1 -1
- package/dist/{chunk-HYTRDAHV.js → chunk-WOXR6I3R.js} +3 -1
- package/dist/{chunk-K246XQ2L.js → chunk-XTIPZUPR.js} +1 -1
- package/dist/{chunk-HMW3VKUF.js → chunk-Z2GUITAS.js} +10 -10
- package/dist/{chunk-PFZEADQM.js → chunk-ZKA3TGYS.js} +79 -2
- package/dist/{ci-workflow-3JNDZQYD.js → ci-workflow-YGTQTNVC.js} +4 -4
- package/dist/{dist-QPWXPCPL.js → dist-R3TOOPJ7.js} +1 -1
- package/dist/{dist-OHDQBTSO.js → dist-XIJWWQ5N.js} +3 -3
- package/dist/{docs-5RYMDHN3.js → docs-KCTLXK2G.js} +6 -6
- package/dist/{engine-KZ3PPUYE.js → engine-J64WPH5K.js} +4 -4
- package/dist/{entropy-DQTAPSSE.js → entropy-M27JUL3V.js} +5 -5
- package/dist/{feedback-WH6XPQJS.js → feedback-W25QO3OL.js} +2 -2
- package/dist/{generate-agent-definitions-SZA4QIHN.js → generate-agent-definitions-RNMU5U5R.js} +5 -5
- package/dist/{glob-helper-XE2UGEOV.js → glob-helper-EX4YZKZO.js} +1 -1
- package/dist/{graph-loader-EQBOIHFZ.js → graph-loader-EIFEOUVI.js} +1 -1
- package/dist/index.d.ts +587 -6
- package/dist/index.js +27 -27
- package/dist/{loader-BNKGM23C.js → loader-HZKJ5ABV.js} +4 -4
- package/dist/{mcp-GZH4EYGD.js → mcp-NEAPIDTT.js} +17 -17
- package/dist/{performance-54TMJOEU.js → performance-3AVQUDRG.js} +6 -6
- package/dist/{review-pipeline-OTDDVPNY.js → review-pipeline-KA7SGUXJ.js} +4 -4
- package/dist/{runtime-W5THSNAL.js → runtime-IP6FVV5M.js} +4 -4
- package/dist/{scan-4PPP6ZXT.js → scan-LYKLM4EQ.js} +1 -1
- package/dist/{security-27HW7CYT.js → security-EAR4FJWI.js} +1 -1
- package/dist/{validate-QRVCD4GP.js → validate-EVH3UXIC.js} +5 -5
- package/dist/{validate-cross-check-BUAGBAPO.js → validate-cross-check-SNE3SQOB.js} +4 -4
- package/package.json +8 -7
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
init_dist,
|
|
6
6
|
paginate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IY2TZLY5.js";
|
|
8
8
|
|
|
9
9
|
// src/mcp/tools/review-pipeline.ts
|
|
10
10
|
init_dist();
|
|
@@ -79,7 +79,7 @@ var runCodeReviewDefinition = {
|
|
|
79
79
|
};
|
|
80
80
|
async function handleRunCodeReview(input) {
|
|
81
81
|
try {
|
|
82
|
-
const { parseDiff, runReviewPipeline } = await import("./dist-
|
|
82
|
+
const { parseDiff, runReviewPipeline } = await import("./dist-XIJWWQ5N.js");
|
|
83
83
|
const parseResult = parseDiff(input.diff);
|
|
84
84
|
if (!parseResult.ok) {
|
|
85
85
|
return {
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
resetParserCache,
|
|
32
32
|
resolveFileToLayer,
|
|
33
33
|
validateDependencies
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-W3PDVZ4I.js";
|
|
35
35
|
import {
|
|
36
36
|
AuthAuditEntrySchema,
|
|
37
37
|
AuthTokenPublicSchema,
|
|
@@ -85,7 +85,7 @@ import {
|
|
|
85
85
|
init_dist as init_dist2,
|
|
86
86
|
queryTraceability,
|
|
87
87
|
skipDirGlobs
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-H2ZJOJ7A.js";
|
|
89
89
|
import {
|
|
90
90
|
ArchBaselineSchema,
|
|
91
91
|
ArchConfigSchema,
|
|
@@ -3311,25 +3311,8 @@ function validateBranchName(branchName, config) {
|
|
|
3311
3311
|
}
|
|
3312
3312
|
if (config.enforceKebabCase) {
|
|
3313
3313
|
for (const part of slug.split("/")) {
|
|
3314
|
-
const
|
|
3315
|
-
if (
|
|
3316
|
-
const rest = ticketMatch[2];
|
|
3317
|
-
if (rest && !KEBAB_CASE.test(rest)) {
|
|
3318
|
-
return {
|
|
3319
|
-
valid: false,
|
|
3320
|
-
branchName,
|
|
3321
|
-
message: `Branch slug part "${part}" does not follow kebab-case after the ticket ID.`,
|
|
3322
|
-
suggestion: `Ensure the description after "${ticketMatch[1]}" uses kebab-case (lowercase, single hyphens, no leading/trailing hyphen).`
|
|
3323
|
-
};
|
|
3324
|
-
}
|
|
3325
|
-
} else if (!KEBAB_CASE.test(part)) {
|
|
3326
|
-
return {
|
|
3327
|
-
valid: false,
|
|
3328
|
-
branchName,
|
|
3329
|
-
message: `Branch slug part "${part}" must be in kebab-case (lowercase, single hyphens, no leading/trailing hyphen).`,
|
|
3330
|
-
suggestion: `Change "${part}" to match the convention.`
|
|
3331
|
-
};
|
|
3332
|
-
}
|
|
3314
|
+
const kebabFailure = validateKebabSlugPart(part, branchName);
|
|
3315
|
+
if (kebabFailure) return kebabFailure;
|
|
3333
3316
|
}
|
|
3334
3317
|
}
|
|
3335
3318
|
if (typeof config.maxLength === "number" && config.maxLength > 0 && slug.length > config.maxLength) {
|
|
@@ -3342,6 +3325,26 @@ function validateBranchName(branchName, config) {
|
|
|
3342
3325
|
}
|
|
3343
3326
|
return { valid: true, branchName };
|
|
3344
3327
|
}
|
|
3328
|
+
function validateKebabSlugPart(part, branchName) {
|
|
3329
|
+
const ticketMatch = part.match(TICKET_ID);
|
|
3330
|
+
if (ticketMatch) {
|
|
3331
|
+
const rest = ticketMatch[2];
|
|
3332
|
+
if (!rest || KEBAB_CASE.test(rest)) return null;
|
|
3333
|
+
return {
|
|
3334
|
+
valid: false,
|
|
3335
|
+
branchName,
|
|
3336
|
+
message: `Branch slug part "${part}" does not follow kebab-case after the ticket ID.`,
|
|
3337
|
+
suggestion: `Ensure the description after "${ticketMatch[1]}" uses kebab-case (lowercase, single hyphens, no leading/trailing hyphen).`
|
|
3338
|
+
};
|
|
3339
|
+
}
|
|
3340
|
+
if (KEBAB_CASE.test(part)) return null;
|
|
3341
|
+
return {
|
|
3342
|
+
valid: false,
|
|
3343
|
+
branchName,
|
|
3344
|
+
message: `Branch slug part "${part}" must be in kebab-case (lowercase, single hyphens, no leading/trailing hyphen).`,
|
|
3345
|
+
suggestion: `Change "${part}" to match the convention.`
|
|
3346
|
+
};
|
|
3347
|
+
}
|
|
3345
3348
|
function determineImportance(filePath) {
|
|
3346
3349
|
const name = basename2(filePath).toLowerCase();
|
|
3347
3350
|
if (name === "index.ts" || name === "index.js" || name === "main.ts") {
|
|
@@ -4811,7 +4814,7 @@ function arrayLen(arr) {
|
|
|
4811
4814
|
return Array.isArray(arr) ? arr.length : 0;
|
|
4812
4815
|
}
|
|
4813
4816
|
async function gatherEntropyBlock(projectPath) {
|
|
4814
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./analyzer-VY6DJVOU-
|
|
4817
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./analyzer-VY6DJVOU-WYKV3TTW.js");
|
|
4815
4818
|
const analyzer = new EntropyAnalyzer2({
|
|
4816
4819
|
rootDir: projectPath,
|
|
4817
4820
|
include: ["src/**/*.ts", "src/**/*.tsx", "packages/*/src/**/*.ts"],
|
|
@@ -4832,15 +4835,20 @@ async function gatherDecayBlock(projectPath) {
|
|
|
4832
4835
|
const { TimelineManager: TimelineManager2 } = await import("./timeline-manager-FPYKJRHR-VVX7CSGW.js");
|
|
4833
4836
|
const mgr = new TimelineManager2(projectPath);
|
|
4834
4837
|
const trends = mgr.trends();
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
+
return {
|
|
4839
|
+
recentBumps: arrayLen(trends.recentSnapshots),
|
|
4840
|
+
topAffected: collectTopAffectedLabels(trends.topAffected)
|
|
4841
|
+
};
|
|
4842
|
+
}
|
|
4843
|
+
function collectTopAffectedLabels(affected) {
|
|
4844
|
+
if (!Array.isArray(affected)) return [];
|
|
4845
|
+
const out = [];
|
|
4838
4846
|
for (const node of affected) {
|
|
4839
4847
|
const label = node.id ?? node.name;
|
|
4840
|
-
if (typeof label === "string" && label.length > 0)
|
|
4841
|
-
if (
|
|
4848
|
+
if (typeof label === "string" && label.length > 0) out.push(label);
|
|
4849
|
+
if (out.length >= MAX_TOP_AFFECTED) break;
|
|
4842
4850
|
}
|
|
4843
|
-
return
|
|
4851
|
+
return out;
|
|
4844
4852
|
}
|
|
4845
4853
|
async function gatherAttentionBlock(projectPath) {
|
|
4846
4854
|
const sessionsDir = path4.join(projectPath, ".harness", "sessions");
|
|
@@ -11070,13 +11078,20 @@ function arraysEqual2(a, b) {
|
|
|
11070
11078
|
}
|
|
11071
11079
|
function metaFromFeatureFields(src) {
|
|
11072
11080
|
const meta = {};
|
|
11073
|
-
|
|
11074
|
-
if (src.plans
|
|
11075
|
-
if (src.blockedBy
|
|
11076
|
-
|
|
11077
|
-
|
|
11081
|
+
assignNonNullish(meta, "spec", src.spec);
|
|
11082
|
+
if (hasItems(src.plans)) meta.plan = src.plans[0];
|
|
11083
|
+
if (hasItems(src.blockedBy)) meta.blocked_by = src.blockedBy;
|
|
11084
|
+
assignNonNullish(meta, "priority", src.priority);
|
|
11085
|
+
assignNonNullish(meta, "milestone", src.milestone);
|
|
11078
11086
|
return meta;
|
|
11079
11087
|
}
|
|
11088
|
+
function assignNonNullish(meta, key, value) {
|
|
11089
|
+
if (value === void 0 || value === null) return;
|
|
11090
|
+
meta[key] = value;
|
|
11091
|
+
}
|
|
11092
|
+
function hasItems(arr) {
|
|
11093
|
+
return Array.isArray(arr) && arr.length > 0;
|
|
11094
|
+
}
|
|
11080
11095
|
function buildCreateMeta(feature) {
|
|
11081
11096
|
return metaFromFeatureFields(feature);
|
|
11082
11097
|
}
|
|
@@ -11289,33 +11304,42 @@ function featureToNewInput(feature, milestone) {
|
|
|
11289
11304
|
return input;
|
|
11290
11305
|
}
|
|
11291
11306
|
function metaToPatch(feature, expected) {
|
|
11292
|
-
const patch = {};
|
|
11293
|
-
patch
|
|
11294
|
-
if (expected.
|
|
11295
|
-
|
|
11296
|
-
|
|
11297
|
-
|
|
11298
|
-
if (expected.milestone !== void 0) patch.milestone = expected.milestone ?? null;
|
|
11307
|
+
const patch = { summary: feature.summary };
|
|
11308
|
+
assignIfPresent(patch, "spec", expected.spec, null);
|
|
11309
|
+
if (expected.plan != null) patch.plans = [expected.plan];
|
|
11310
|
+
assignIfPresent(patch, "blockedBy", expected.blocked_by, []);
|
|
11311
|
+
assignIfPresent(patch, "priority", expected.priority, null);
|
|
11312
|
+
assignIfPresent(patch, "milestone", expected.milestone, null);
|
|
11299
11313
|
return patch;
|
|
11300
11314
|
}
|
|
11315
|
+
function assignIfPresent(patch, key, value, fallback2) {
|
|
11316
|
+
if (value === void 0) return;
|
|
11317
|
+
patch[key] = value ?? fallback2;
|
|
11318
|
+
}
|
|
11301
11319
|
function formatDiff(actual, expected) {
|
|
11302
|
-
const keys =
|
|
11303
|
-
const collect = (m) => {
|
|
11304
|
-
for (const k of Object.keys(m)) {
|
|
11305
|
-
const v = m[k];
|
|
11306
|
-
if (v !== void 0 && v !== null && !(Array.isArray(v) && v.length === 0)) keys.add(k);
|
|
11307
|
-
}
|
|
11308
|
-
};
|
|
11309
|
-
collect(actual);
|
|
11310
|
-
collect(expected);
|
|
11320
|
+
const keys = collectPresentKeys(actual, expected);
|
|
11311
11321
|
const changed = [];
|
|
11312
|
-
for (const key of
|
|
11322
|
+
for (const key of keys) {
|
|
11313
11323
|
const a = actual[key];
|
|
11314
11324
|
const e = expected[key];
|
|
11315
11325
|
if (JSON.stringify(a ?? null) !== JSON.stringify(e ?? null)) changed.push(key);
|
|
11316
11326
|
}
|
|
11317
11327
|
return changed.join(",");
|
|
11318
11328
|
}
|
|
11329
|
+
function hasMeaningfulValue(value) {
|
|
11330
|
+
if (value === void 0 || value === null) return false;
|
|
11331
|
+
if (Array.isArray(value) && value.length === 0) return false;
|
|
11332
|
+
return true;
|
|
11333
|
+
}
|
|
11334
|
+
function collectPresentKeys(...metas) {
|
|
11335
|
+
const keys = /* @__PURE__ */ new Set();
|
|
11336
|
+
for (const m of metas) {
|
|
11337
|
+
for (const [k, v] of Object.entries(m)) {
|
|
11338
|
+
if (hasMeaningfulValue(v)) keys.add(k);
|
|
11339
|
+
}
|
|
11340
|
+
}
|
|
11341
|
+
return [...keys].sort();
|
|
11342
|
+
}
|
|
11319
11343
|
function mapAction(action) {
|
|
11320
11344
|
switch (action) {
|
|
11321
11345
|
case "assigned":
|
|
@@ -12464,23 +12488,56 @@ async function send(events, apiKey) {
|
|
|
12464
12488
|
function toUnixNanoString(ns) {
|
|
12465
12489
|
return ns.toString(10);
|
|
12466
12490
|
}
|
|
12491
|
+
function encodeAttributeValue(value) {
|
|
12492
|
+
if (typeof value === "string") return { stringValue: value };
|
|
12493
|
+
if (typeof value === "boolean") return { boolValue: value };
|
|
12494
|
+
if (typeof value === "number") {
|
|
12495
|
+
return Number.isInteger(value) ? { intValue: String(value) } : { doubleValue: value };
|
|
12496
|
+
}
|
|
12497
|
+
return null;
|
|
12498
|
+
}
|
|
12499
|
+
function resolveOTLPOptions(opts) {
|
|
12500
|
+
const {
|
|
12501
|
+
endpoint,
|
|
12502
|
+
enabled = true,
|
|
12503
|
+
headers = {},
|
|
12504
|
+
flushIntervalMs = DEFAULT_FLUSH_INTERVAL_MS,
|
|
12505
|
+
batchSize = DEFAULT_BATCH_SIZE,
|
|
12506
|
+
fetchImpl = defaultFetch,
|
|
12507
|
+
warn = defaultWarn
|
|
12508
|
+
} = opts;
|
|
12509
|
+
return {
|
|
12510
|
+
endpoint,
|
|
12511
|
+
enabled,
|
|
12512
|
+
headers: { "Content-Type": "application/json", ...headers },
|
|
12513
|
+
flushIntervalMs,
|
|
12514
|
+
batchSize,
|
|
12515
|
+
fetchImpl,
|
|
12516
|
+
warn
|
|
12517
|
+
};
|
|
12518
|
+
}
|
|
12467
12519
|
function attributesToOTLP(attrs) {
|
|
12468
12520
|
const out = [];
|
|
12469
12521
|
for (const [key, value] of Object.entries(attrs)) {
|
|
12470
|
-
|
|
12471
|
-
|
|
12472
|
-
} else if (typeof value === "boolean") {
|
|
12473
|
-
out.push({ key, value: { boolValue: value } });
|
|
12474
|
-
} else if (typeof value === "number") {
|
|
12475
|
-
if (Number.isInteger(value)) {
|
|
12476
|
-
out.push({ key, value: { intValue: String(value) } });
|
|
12477
|
-
} else {
|
|
12478
|
-
out.push({ key, value: { doubleValue: value } });
|
|
12479
|
-
}
|
|
12480
|
-
}
|
|
12522
|
+
const encoded = encodeAttributeValue(value);
|
|
12523
|
+
if (encoded) out.push({ key, value: encoded });
|
|
12481
12524
|
}
|
|
12482
12525
|
return out;
|
|
12483
12526
|
}
|
|
12527
|
+
function spanToOTLP(s) {
|
|
12528
|
+
const span = {
|
|
12529
|
+
traceId: s.traceId,
|
|
12530
|
+
spanId: s.spanId,
|
|
12531
|
+
name: s.name,
|
|
12532
|
+
kind: s.kind,
|
|
12533
|
+
startTimeUnixNano: toUnixNanoString(s.startTimeNs),
|
|
12534
|
+
endTimeUnixNano: toUnixNanoString(s.endTimeNs),
|
|
12535
|
+
attributes: attributesToOTLP(s.attributes)
|
|
12536
|
+
};
|
|
12537
|
+
if (s.parentSpanId !== void 0) span["parentSpanId"] = s.parentSpanId;
|
|
12538
|
+
if (s.statusCode !== void 0) span["status"] = { code: s.statusCode };
|
|
12539
|
+
return span;
|
|
12540
|
+
}
|
|
12484
12541
|
function acquireCompoundLock(category, opts = {}) {
|
|
12485
12542
|
if (!KNOWN_CATEGORIES.has(category)) {
|
|
12486
12543
|
throw new Error(
|
|
@@ -12542,15 +12599,22 @@ function readHolderPid(lockPath) {
|
|
|
12542
12599
|
return -1;
|
|
12543
12600
|
}
|
|
12544
12601
|
}
|
|
12545
|
-
function
|
|
12546
|
-
|
|
12547
|
-
|
|
12548
|
-
|
|
12549
|
-
for (const k of Object.keys(
|
|
12602
|
+
function isObject(value) {
|
|
12603
|
+
return Boolean(value) && typeof value === "object";
|
|
12604
|
+
}
|
|
12605
|
+
function hasAllowedFieldKeys(fields) {
|
|
12606
|
+
for (const k of Object.keys(fields)) {
|
|
12550
12607
|
if (!ALLOWED_SET.has(k)) return false;
|
|
12551
12608
|
if (PII_FIELD_DENYLIST.test(k)) return false;
|
|
12552
12609
|
}
|
|
12553
|
-
|
|
12610
|
+
return true;
|
|
12611
|
+
}
|
|
12612
|
+
function isSanitizedResult(value) {
|
|
12613
|
+
if (!isObject(value)) return false;
|
|
12614
|
+
const { fields, distributions } = value;
|
|
12615
|
+
if (!isObject(fields)) return false;
|
|
12616
|
+
if (!hasAllowedFieldKeys(fields)) return false;
|
|
12617
|
+
if (!isObject(distributions)) return false;
|
|
12554
12618
|
return true;
|
|
12555
12619
|
}
|
|
12556
12620
|
function assertSanitized(value) {
|
|
@@ -13137,7 +13201,7 @@ function deriveSkillUsage(projectRoot, skillName, windowDays = 30) {
|
|
|
13137
13201
|
if (lastUsed) stats.lastUsed = lastUsed;
|
|
13138
13202
|
return stats;
|
|
13139
13203
|
}
|
|
13140
|
-
var WHATWG_BAD_PORTS, BAD_PORT_SET, VALID_TYPES, CONVENTIONAL_PATTERN, LOOKBACK_PATTERN, PulseDbSourceSchema, PulseSourcesSchema, PulseConfigSchema, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ALL_SOLUTION_CATEGORIES, ISO_DATE, 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, 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, readFile62, 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, 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, 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, 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, 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, PRIORITY_RANK2, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, ConflictError, DEFAULTS, GitHubHttp, ETagStore, START_MARKER, END_MARKER, SERIALIZER_FIELDS, GitHubIssuesTrackerAdapter, migrate_exports, HASH_RE, 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, OTLPExporter, SpanKind, CompoundLockHeldError, KNOWN_CATEGORIES, 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, ProposalNotFoundError, ProposalConflictError;
|
|
13204
|
+
var WHATWG_BAD_PORTS, BAD_PORT_SET, VALID_TYPES, CONVENTIONAL_PATTERN, LOOKBACK_PATTERN, PulseDbSourceSchema, PulseSourcesSchema, PulseConfigSchema, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ALL_SOLUTION_CATEGORIES, ISO_DATE, 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, 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, readFile62, 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, MAX_TOP_AFFECTED, 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, 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, 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, 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, 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, PRIORITY_RANK2, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, ConflictError, DEFAULTS, GitHubHttp, ETagStore, START_MARKER, END_MARKER, SERIALIZER_FIELDS, GitHubIssuesTrackerAdapter, migrate_exports, HASH_RE, 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, CompoundLockHeldError, KNOWN_CATEGORIES, 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, ProposalNotFoundError, ProposalConflictError;
|
|
13141
13205
|
var init_dist3 = __esm({
|
|
13142
13206
|
"../core/dist/index.mjs"() {
|
|
13143
13207
|
init_chunk_FYTJQ2ZY();
|
|
@@ -13688,6 +13752,7 @@ var init_dist3 = __esm({
|
|
|
13688
13752
|
exclude: z4.array(z4.string()).optional(),
|
|
13689
13753
|
docPaths: z4.array(z4.string()).optional()
|
|
13690
13754
|
});
|
|
13755
|
+
MAX_TOP_AFFECTED = 5;
|
|
13691
13756
|
BaselineManager = class {
|
|
13692
13757
|
baselinesPath;
|
|
13693
13758
|
constructor(projectRoot) {
|
|
@@ -16068,11 +16133,20 @@ var init_dist3 = __esm({
|
|
|
16068
16133
|
}
|
|
16069
16134
|
return null;
|
|
16070
16135
|
}
|
|
16071
|
-
/**
|
|
16072
|
-
|
|
16073
|
-
|
|
16136
|
+
/**
|
|
16137
|
+
* Scan a single line against a resolved rule; push any findings into the array.
|
|
16138
|
+
*
|
|
16139
|
+
* Suppression check is two-pass: same line first (trailing-comment style), then the previous
|
|
16140
|
+
* line (the dominant convention: `// harness-ignore` on the line above the flagged code).
|
|
16141
|
+
* Without the prior-line check, every multi-line statement annotated using the over-the-top
|
|
16142
|
+
* convention would slip through and re-trigger the finding.
|
|
16143
|
+
*/
|
|
16144
|
+
scanLineForRule(rule, resolved, line, lineNumber, filePath, findings, priorLine) {
|
|
16145
|
+
const sameLineMatch = parseHarnessIgnore(line, rule.id);
|
|
16146
|
+
const priorLineMatch = !sameLineMatch && priorLine !== void 0 ? parseHarnessIgnore(priorLine, rule.id) : null;
|
|
16147
|
+
const suppressionMatch = sameLineMatch ?? priorLineMatch;
|
|
16074
16148
|
if (suppressionMatch) {
|
|
16075
|
-
if (!suppressionMatch.justification) {
|
|
16149
|
+
if (!suppressionMatch.justification && sameLineMatch !== null) {
|
|
16076
16150
|
findings.push(this.buildSuppressionFinding(rule, filePath, lineNumber, line));
|
|
16077
16151
|
}
|
|
16078
16152
|
return;
|
|
@@ -16096,7 +16170,15 @@ var init_dist3 = __esm({
|
|
|
16096
16170
|
);
|
|
16097
16171
|
if (resolved === "off") continue;
|
|
16098
16172
|
for (let i = 0; i < lines.length; i++) {
|
|
16099
|
-
this.scanLineForRule(
|
|
16173
|
+
this.scanLineForRule(
|
|
16174
|
+
rule,
|
|
16175
|
+
resolved,
|
|
16176
|
+
lines[i] ?? "",
|
|
16177
|
+
startLine + i,
|
|
16178
|
+
filePath,
|
|
16179
|
+
findings,
|
|
16180
|
+
i > 0 ? lines[i - 1] : void 0
|
|
16181
|
+
);
|
|
16100
16182
|
}
|
|
16101
16183
|
}
|
|
16102
16184
|
return findings;
|
|
@@ -18500,6 +18582,10 @@ console.log('Blueprint player initialized.');
|
|
|
18500
18582
|
}
|
|
18501
18583
|
};
|
|
18502
18584
|
RETRY_BACKOFFS_MS = [1e3, 2e3, 4e3];
|
|
18585
|
+
DEFAULT_FLUSH_INTERVAL_MS = 2e3;
|
|
18586
|
+
DEFAULT_BATCH_SIZE = 64;
|
|
18587
|
+
defaultFetch = (...args) => globalThis.fetch(...args);
|
|
18588
|
+
defaultWarn = (...args) => console.warn(...args);
|
|
18503
18589
|
OTLPExporter = class {
|
|
18504
18590
|
endpoint;
|
|
18505
18591
|
enabled;
|
|
@@ -18512,13 +18598,14 @@ console.log('Blueprint player initialized.');
|
|
|
18512
18598
|
timer = null;
|
|
18513
18599
|
inFlightFlushes = /* @__PURE__ */ new Set();
|
|
18514
18600
|
constructor(opts) {
|
|
18515
|
-
|
|
18516
|
-
this.
|
|
18517
|
-
this.
|
|
18518
|
-
this.
|
|
18519
|
-
this.
|
|
18520
|
-
this.
|
|
18521
|
-
this.
|
|
18601
|
+
const resolved = resolveOTLPOptions(opts);
|
|
18602
|
+
this.endpoint = resolved.endpoint;
|
|
18603
|
+
this.enabled = resolved.enabled;
|
|
18604
|
+
this.headers = resolved.headers;
|
|
18605
|
+
this.flushIntervalMs = resolved.flushIntervalMs;
|
|
18606
|
+
this.batchSize = resolved.batchSize;
|
|
18607
|
+
this.fetchImpl = resolved.fetchImpl;
|
|
18608
|
+
this.warn = resolved.warn;
|
|
18522
18609
|
}
|
|
18523
18610
|
/**
|
|
18524
18611
|
* O(1) buffer push. When `enabled === false` this is a no-op. If the
|
|
@@ -18601,36 +18688,18 @@ console.log('Blueprint player initialized.');
|
|
|
18601
18688
|
* tests; not part of the supported API surface.
|
|
18602
18689
|
*/
|
|
18603
18690
|
spansToOTLPJSON(spans) {
|
|
18604
|
-
|
|
18605
|
-
|
|
18606
|
-
|
|
18607
|
-
|
|
18608
|
-
|
|
18609
|
-
|
|
18610
|
-
|
|
18611
|
-
{
|
|
18612
|
-
scope: { name: "harness" },
|
|
18613
|
-
spans: spans.map((s) => {
|
|
18614
|
-
const span = {
|
|
18615
|
-
traceId: s.traceId,
|
|
18616
|
-
spanId: s.spanId,
|
|
18617
|
-
name: s.name,
|
|
18618
|
-
kind: s.kind,
|
|
18619
|
-
startTimeUnixNano: toUnixNanoString(s.startTimeNs),
|
|
18620
|
-
endTimeUnixNano: toUnixNanoString(s.endTimeNs),
|
|
18621
|
-
attributes: attributesToOTLP(s.attributes)
|
|
18622
|
-
};
|
|
18623
|
-
if (s.parentSpanId !== void 0) span["parentSpanId"] = s.parentSpanId;
|
|
18624
|
-
if (s.statusCode !== void 0) span["status"] = { code: s.statusCode };
|
|
18625
|
-
return span;
|
|
18626
|
-
})
|
|
18627
|
-
}
|
|
18628
|
-
]
|
|
18629
|
-
}
|
|
18630
|
-
]
|
|
18691
|
+
const scopeSpan = {
|
|
18692
|
+
scope: { name: "harness" },
|
|
18693
|
+
spans: spans.map(spanToOTLP)
|
|
18694
|
+
};
|
|
18695
|
+
const resourceSpan = {
|
|
18696
|
+
resource: { attributes: SERVICE_NAME_ATTR },
|
|
18697
|
+
scopeSpans: [scopeSpan]
|
|
18631
18698
|
};
|
|
18699
|
+
return { resourceSpans: [resourceSpan] };
|
|
18632
18700
|
}
|
|
18633
18701
|
};
|
|
18702
|
+
SERVICE_NAME_ATTR = [{ key: "service.name", value: { stringValue: "harness" } }];
|
|
18634
18703
|
SpanKind = /* @__PURE__ */ ((SpanKind2) => {
|
|
18635
18704
|
SpanKind2[SpanKind2["INTERNAL"] = 1] = "INTERNAL";
|
|
18636
18705
|
SpanKind2[SpanKind2["SERVER"] = 2] = "SERVER";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VG6UK6G6.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-XIJWWQ5N.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-XIJWWQ5N.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);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-B4OLYXZ4.js";
|
|
4
4
|
import {
|
|
5
5
|
logger
|
|
6
6
|
} from "./chunk-EBJQ6N4M.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-3WGJMBKH.js";
|
|
10
10
|
import {
|
|
11
11
|
init_dist
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-IY2TZLY5.js";
|
|
13
13
|
import {
|
|
14
14
|
Ok
|
|
15
15
|
} from "./chunk-OH3NXXUY.js";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resultToMcpResponse
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RC3OI5NK.js";
|
|
4
4
|
import {
|
|
5
5
|
sanitizePath
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-B4OLYXZ4.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IY2TZLY5.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-OH3NXXUY.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-XIJWWQ5N.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-XIJWWQ5N.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
|
-
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-
|
|
60
|
+
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-EIFEOUVI.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-R3TOOPJ7.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-XIJWWQ5N.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
99
|
+
const { loadGraphStore } = await import("./graph-loader-EIFEOUVI.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-R3TOOPJ7.js");
|
|
104
104
|
const assembler = new Assembler(store);
|
|
105
105
|
const report = assembler.checkCoverage();
|
|
106
106
|
graphCoverage = {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resultToMcpResponse
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RC3OI5NK.js";
|
|
4
4
|
import {
|
|
5
5
|
sanitizePath
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
7
7
|
import {
|
|
8
8
|
init_dist
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-IY2TZLY5.js";
|
|
10
10
|
import {
|
|
11
11
|
Ok
|
|
12
12
|
} from "./chunk-OH3NXXUY.js";
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
// src/mcp/tools/entropy.ts
|
|
15
15
|
init_dist();
|
|
16
16
|
async function loadEntropyGraphOptions(projectPath) {
|
|
17
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
17
|
+
const { loadGraphStore } = await import("./graph-loader-EIFEOUVI.js");
|
|
18
18
|
const store = await loadGraphStore(projectPath);
|
|
19
19
|
if (!store) return void 0;
|
|
20
|
-
const { GraphEntropyAdapter } = await import("./dist-
|
|
20
|
+
const { GraphEntropyAdapter } = await import("./dist-R3TOOPJ7.js");
|
|
21
21
|
const adapter = new GraphEntropyAdapter(store);
|
|
22
22
|
const driftData = adapter.computeDriftData();
|
|
23
23
|
const deadCodeData = adapter.computeDeadCodeData();
|
|
@@ -127,7 +127,7 @@ function buildSummaryResponse(report) {
|
|
|
127
127
|
}
|
|
128
128
|
async function handleDetectEntropy(input) {
|
|
129
129
|
try {
|
|
130
|
-
const { EntropyAnalyzer } = await import("./dist-
|
|
130
|
+
const { EntropyAnalyzer } = await import("./dist-XIJWWQ5N.js");
|
|
131
131
|
const typeFilter = input.type ?? "all";
|
|
132
132
|
const analyzer = new EntropyAnalyzer({
|
|
133
133
|
rootDir: sanitizePath(input.path),
|
|
@@ -146,7 +146,7 @@ async function handleDetectEntropy(input) {
|
|
|
146
146
|
return resultToMcpResponse(result);
|
|
147
147
|
}
|
|
148
148
|
if (!result.ok) return resultToMcpResponse(result);
|
|
149
|
-
const { createFixes, applyFixes, generateSuggestions } = await import("./dist-
|
|
149
|
+
const { createFixes, applyFixes, generateSuggestions } = await import("./dist-XIJWWQ5N.js");
|
|
150
150
|
const report = result.value;
|
|
151
151
|
const deadCode = report.deadCode;
|
|
152
152
|
const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
// src/mcp/utils/result-adapter.ts
|
|
2
|
+
function bigIntSafeReplacer(_key, value) {
|
|
3
|
+
return typeof value === "bigint" ? value.toString() : value;
|
|
4
|
+
}
|
|
2
5
|
function resultToMcpResponse(result) {
|
|
3
6
|
if (result.ok) {
|
|
4
7
|
return {
|
|
5
8
|
content: [
|
|
6
9
|
{
|
|
7
10
|
type: "text",
|
|
8
|
-
text: typeof result.value === "string" ? result.value : JSON.stringify(result.value)
|
|
11
|
+
text: typeof result.value === "string" ? result.value : JSON.stringify(result.value, bigIntSafeReplacer)
|
|
9
12
|
}
|
|
10
13
|
]
|
|
11
14
|
};
|
|
@@ -17,5 +20,6 @@ function resultToMcpResponse(result) {
|
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
export {
|
|
23
|
+
bigIntSafeReplacer,
|
|
20
24
|
resultToMcpResponse
|
|
21
25
|
};
|