@harness-engineering/cli 2.5.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agents-md-KAD3L2NO.js → agents-md-2JUQ4FE2.js} +4 -4
- package/dist/{analyzer-VY6DJVOU-NI56JRFK.js → analyzer-VY6DJVOU-4AHIJLNS.js} +2 -2
- package/dist/{architecture-OC7TFCFF.js → architecture-CXAVNB5X.js} +5 -5
- package/dist/{assess-project-ZGMRPTS3.js → assess-project-M626SSPN.js} +1 -1
- package/dist/bin/harness-mcp.js +15 -15
- package/dist/bin/harness.js +24 -24
- package/dist/{check-phase-gate-PD5MVEZT.js → check-phase-gate-XMU6LLUQ.js} +5 -5
- package/dist/{chunk-N6VWCISQ.js → chunk-24KCOJJG.js} +2 -2
- package/dist/{chunk-LT244Y6E.js → chunk-372MGNTI.js} +207 -76
- package/dist/{chunk-XIW24BJY.js → chunk-43M3RLFQ.js} +3 -3
- package/dist/{chunk-2RNGLYOG.js → chunk-5JNSFYZU.js} +2 -2
- package/dist/{chunk-XSI3RDH6.js → chunk-6AX6R3LM.js} +7 -7
- package/dist/{chunk-UCL3UZIC.js → chunk-CQOMVZDC.js} +1588 -925
- package/dist/{chunk-DOUS4ULX.js → chunk-GWE5LL3R.js} +6 -6
- package/dist/{chunk-7DOGGXQU.js → chunk-GWF2OILZ.js} +2 -2
- package/dist/{chunk-TCSNO7YW.js → chunk-HFOB2MPQ.js} +2 -2
- package/dist/{chunk-6SRKI77C.js → chunk-HMW3VKUF.js} +3 -3
- package/dist/{chunk-NOOPJD5R.js → chunk-I6K43QQS.js} +3 -3
- package/dist/{chunk-IGBQIXPS.js → chunk-JFZOWO7D.js} +2 -2
- package/dist/{chunk-57TS3UGN.js → chunk-K246XQ2L.js} +2 -2
- package/dist/{chunk-A3EBWI7U.js → chunk-L5BCZ5XS.js} +2 -2
- package/dist/{chunk-65MJPWFN.js → chunk-OA6SWTU4.js} +6 -6
- package/dist/{chunk-2LPUIBVH.js → chunk-OH3NXXUY.js} +121 -2
- package/dist/{chunk-4CWFVEVV.js → chunk-PFZEADQM.js} +1 -1
- package/dist/{chunk-JE5GQVCQ.js → chunk-Q6ZR2L6Q.js} +2 -2
- package/dist/{chunk-UF7BKRH4.js → chunk-QOKMDDBJ.js} +4 -4
- package/dist/{chunk-IWRYCUDO.js → chunk-SZEFU6XC.js} +1 -1
- package/dist/{chunk-HIZXUWWC.js → chunk-VTTNIZJL.js} +21 -2
- package/dist/{chunk-IXKGMPMT.js → chunk-VUCGB2KH.js} +4 -2
- package/dist/{chunk-ELMV6QU2.js → chunk-YP7I25SL.js} +2 -2
- package/dist/{chunk-KQ6TDRPS.js → chunk-YYRQCQPZ.js} +425 -173
- package/dist/{ci-workflow-WAG4TOV6.js → ci-workflow-3JNDZQYD.js} +4 -4
- package/dist/{dist-HVJUGPSY.js → dist-E3SAAHCM.js} +23 -1
- package/dist/{dist-TKHVYUWZ.js → dist-OHDQBTSO.js} +43 -3
- package/dist/{docs-4WPBYSCF.js → docs-5RYMDHN3.js} +5 -5
- package/dist/{engine-5BXDQT5T.js → engine-GKGT5ULT.js} +4 -4
- package/dist/{entropy-7FIUFACI.js → entropy-DQTAPSSE.js} +4 -4
- package/dist/{feedback-ER2HRTFD.js → feedback-WH6XPQJS.js} +1 -1
- package/dist/{generate-agent-definitions-5PV4O3BD.js → generate-agent-definitions-SZA4QIHN.js} +5 -5
- package/dist/index.d.ts +47 -0
- package/dist/index.js +24 -24
- package/dist/{loader-6RTEYN5Q.js → loader-BNKGM23C.js} +4 -4
- package/dist/{mcp-QWSDEYMN.js → mcp-YKKPWUMH.js} +15 -15
- package/dist/{performance-AZJAT35R.js → performance-54TMJOEU.js} +5 -5
- package/dist/{review-pipeline-4VF73V4V.js → review-pipeline-OTDDVPNY.js} +4 -4
- package/dist/{runtime-SAZGLILX.js → runtime-W5THSNAL.js} +4 -4
- package/dist/{security-ZWRABJNE.js → security-27HW7CYT.js} +1 -1
- package/dist/{tool-tiers-LTQNNAFU.js → tool-tiers-B7JC2XC3.js} +3 -1
- package/dist/{validate-AFJVI4OX.js → validate-QRVCD4GP.js} +5 -5
- package/dist/{validate-cross-check-7PO7CBVT.js → validate-cross-check-BUAGBAPO.js} +4 -4
- package/package.json +7 -7
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VTTNIZJL.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-YYRQCQPZ.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-OH3NXXUY.js";
|
|
17
17
|
|
|
18
18
|
// src/mcp/tools/docs.ts
|
|
19
19
|
init_dist();
|
|
@@ -50,12 +50,12 @@ 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-OHDQBTSO.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-OHDQBTSO.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
60
|
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-EQBOIHFZ.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
@@ -94,7 +94,7 @@ 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-OHDQBTSO.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
99
|
const { loadGraphStore } = await import("./graph-loader-EQBOIHFZ.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
@@ -27,7 +27,7 @@ var runSecurityScanDefinition = {
|
|
|
27
27
|
};
|
|
28
28
|
async function handleRunSecurityScan(input) {
|
|
29
29
|
try {
|
|
30
|
-
const core = await import("./dist-
|
|
30
|
+
const core = await import("./dist-OHDQBTSO.js");
|
|
31
31
|
const projectRoot = sanitizePath(input.path);
|
|
32
32
|
let configData = {};
|
|
33
33
|
try {
|
|
@@ -114,7 +114,7 @@ var getSecurityTrendsDefinition = {
|
|
|
114
114
|
};
|
|
115
115
|
async function handleGetSecurityTrends(input) {
|
|
116
116
|
try {
|
|
117
|
-
const core = await import("./dist-
|
|
117
|
+
const core = await import("./dist-OHDQBTSO.js");
|
|
118
118
|
const projectRoot = sanitizePath(input.path);
|
|
119
119
|
const manager = new core.SecurityTimelineManager(projectRoot);
|
|
120
120
|
const trendOptions = {};
|
|
@@ -33,7 +33,7 @@ var createSelfReviewDefinition = {
|
|
|
33
33
|
};
|
|
34
34
|
async function handleCreateSelfReview(input) {
|
|
35
35
|
try {
|
|
36
|
-
const { parseDiff, createSelfReview } = await import("./dist-
|
|
36
|
+
const { parseDiff, createSelfReview } = await import("./dist-OHDQBTSO.js");
|
|
37
37
|
const parseResult = parseDiff(input.diff);
|
|
38
38
|
if (!parseResult.ok) {
|
|
39
39
|
return resultToMcpResponse(parseResult);
|
|
@@ -119,7 +119,7 @@ var analyzeDiffDefinition = {
|
|
|
119
119
|
};
|
|
120
120
|
async function handleAnalyzeDiff(input) {
|
|
121
121
|
try {
|
|
122
|
-
const { parseDiff, analyzeDiff } = await import("./dist-
|
|
122
|
+
const { parseDiff, analyzeDiff } = await import("./dist-OHDQBTSO.js");
|
|
123
123
|
const parseResult = parseDiff(input.diff);
|
|
124
124
|
if (!parseResult.ok) {
|
|
125
125
|
return resultToMcpResponse(parseResult);
|
|
@@ -195,7 +195,7 @@ var requestPeerReviewDefinition = {
|
|
|
195
195
|
};
|
|
196
196
|
async function handleRequestPeerReview(input) {
|
|
197
197
|
try {
|
|
198
|
-
const { parseDiff, requestPeerReview } = await import("./dist-
|
|
198
|
+
const { parseDiff, requestPeerReview } = await import("./dist-OHDQBTSO.js");
|
|
199
199
|
const parseResult = parseDiff(input.diff);
|
|
200
200
|
if (!parseResult.ok) {
|
|
201
201
|
return resultToMcpResponse(parseResult);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GWF2OILZ.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-OHDQBTSO.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-OHDQBTSO.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);
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-KET4QQZB.js";
|
|
4
4
|
import {
|
|
5
5
|
init_dist
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YYRQCQPZ.js";
|
|
7
7
|
import {
|
|
8
8
|
Err,
|
|
9
9
|
Ok
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-OH3NXXUY.js";
|
|
11
11
|
|
|
12
12
|
// src/persona/generators/runtime.ts
|
|
13
13
|
init_dist();
|
|
@@ -72,7 +72,7 @@ async function handleAssessProject(input) {
|
|
|
72
72
|
let validateResult = null;
|
|
73
73
|
if (checksToRun.has("validate")) {
|
|
74
74
|
try {
|
|
75
|
-
const { handleValidateProject } = await import("./validate-
|
|
75
|
+
const { handleValidateProject } = await import("./validate-QRVCD4GP.js");
|
|
76
76
|
const result = await handleValidateProject({ path: projectPath });
|
|
77
77
|
const out = parseToolResponse(result, "validate");
|
|
78
78
|
if ("error" in out) {
|
|
@@ -101,7 +101,7 @@ async function handleAssessProject(input) {
|
|
|
101
101
|
parallelChecks.push(
|
|
102
102
|
(async () => {
|
|
103
103
|
try {
|
|
104
|
-
const { handleCheckDependencies } = await import("./architecture-
|
|
104
|
+
const { handleCheckDependencies } = await import("./architecture-CXAVNB5X.js");
|
|
105
105
|
const result = await handleCheckDependencies({ path: projectPath });
|
|
106
106
|
const out = parseToolResponse(result, "deps");
|
|
107
107
|
if ("error" in out) return out.error;
|
|
@@ -129,7 +129,7 @@ async function handleAssessProject(input) {
|
|
|
129
129
|
parallelChecks.push(
|
|
130
130
|
(async () => {
|
|
131
131
|
try {
|
|
132
|
-
const { handleCheckDocs } = await import("./docs-
|
|
132
|
+
const { handleCheckDocs } = await import("./docs-5RYMDHN3.js");
|
|
133
133
|
const result = await handleCheckDocs({ path: projectPath, scope: "coverage" });
|
|
134
134
|
const out = parseToolResponse(result, "docs");
|
|
135
135
|
if ("error" in out) return out.error;
|
|
@@ -157,7 +157,7 @@ async function handleAssessProject(input) {
|
|
|
157
157
|
parallelChecks.push(
|
|
158
158
|
(async () => {
|
|
159
159
|
try {
|
|
160
|
-
const { handleDetectEntropy } = await import("./entropy-
|
|
160
|
+
const { handleDetectEntropy } = await import("./entropy-DQTAPSSE.js");
|
|
161
161
|
const result = await handleDetectEntropy({ path: projectPath, type: "all" });
|
|
162
162
|
const out = parseToolResponse(result, "entropy");
|
|
163
163
|
if ("error" in out) return out.error;
|
|
@@ -188,7 +188,7 @@ async function handleAssessProject(input) {
|
|
|
188
188
|
parallelChecks.push(
|
|
189
189
|
(async () => {
|
|
190
190
|
try {
|
|
191
|
-
const { handleRunSecurityScan } = await import("./security-
|
|
191
|
+
const { handleRunSecurityScan } = await import("./security-27HW7CYT.js");
|
|
192
192
|
const result = await handleRunSecurityScan({ path: projectPath });
|
|
193
193
|
const out = parseToolResponse(result, "security");
|
|
194
194
|
if ("error" in out) return out.error;
|
|
@@ -221,7 +221,7 @@ async function handleAssessProject(input) {
|
|
|
221
221
|
parallelChecks.push(
|
|
222
222
|
(async () => {
|
|
223
223
|
try {
|
|
224
|
-
const { handleCheckPerformance } = await import("./performance-
|
|
224
|
+
const { handleCheckPerformance } = await import("./performance-54TMJOEU.js");
|
|
225
225
|
const result = await handleCheckPerformance({ path: projectPath });
|
|
226
226
|
if ("isError" in result && result.isError) {
|
|
227
227
|
const msg = result.content[0]?.text ?? "Performance check failed";
|
|
@@ -8,6 +8,7 @@ import { z as z2 } from "zod";
|
|
|
8
8
|
import { z as z3 } from "zod";
|
|
9
9
|
import { z as z4 } from "zod";
|
|
10
10
|
import { z as z5 } from "zod";
|
|
11
|
+
import { z as z6 } from "zod";
|
|
11
12
|
function Ok(value) {
|
|
12
13
|
return { ok: true, value };
|
|
13
14
|
}
|
|
@@ -20,7 +21,7 @@ function isOk(result) {
|
|
|
20
21
|
function isErr(result) {
|
|
21
22
|
return result.ok === false;
|
|
22
23
|
}
|
|
23
|
-
var STANDARD_COGNITIVE_MODES, DEFAULT_SKILL_CONTEXT_BUDGET, SESSION_SECTION_NAMES, TrajectoryMetadataSchema, PromptCacheStatsSchema, OTLPKeyValueSchema, OTLPSpanSchema, TokenScopeSchema, BridgeKindSchema, AuthTokenSchema, AuthTokenPublicSchema, AuthAuditEntrySchema, WebhookSubscriptionSchema, WebhookSubscriptionPublicSchema, GatewayEventSchema, WebhookDeliveryStatusSchema, WebhookDeliverySchema, INDEXED_FILE_KINDS, SessionSummarySchema, INSIGHTS_KEYS, SESSIONS_DEFAULTS, NotificationSinkKindSchema, NotificationSeveritySchema, NotificationActionSchema, NotificationEnvelopeSchema, NotificationSinkConfigSchema, NotificationsConfigSchema, NotificationDeliveryResultSchema;
|
|
24
|
+
var STANDARD_COGNITIVE_MODES, DEFAULT_SKILL_CONTEXT_BUDGET, SESSION_SECTION_NAMES, TrajectoryMetadataSchema, PromptCacheStatsSchema, OTLPKeyValueSchema, OTLPSpanSchema, TokenScopeSchema, BridgeKindSchema, AuthTokenSchema, AuthTokenPublicSchema, AuthAuditEntrySchema, WebhookSubscriptionSchema, WebhookSubscriptionPublicSchema, GatewayEventSchema, WebhookDeliveryStatusSchema, WebhookDeliverySchema, INDEXED_FILE_KINDS, SessionSummarySchema, INSIGHTS_KEYS, SESSIONS_DEFAULTS, NotificationSinkKindSchema, NotificationSeveritySchema, NotificationActionSchema, NotificationEnvelopeSchema, NotificationSinkConfigSchema, NotificationsConfigSchema, NotificationDeliveryResultSchema, SkillProvenanceSchema, ProposalKindSchema, ProposalStatusSchema, ProposalGateFindingSchema, ProposalGateSchema, ProposalDecisionSchema, ProposalContentSchema, ProposalSourceSchema, SkillProposalSchema, EmitSkillProposalInputSchema, EditProposalInputSchema;
|
|
24
25
|
var init_dist = __esm({
|
|
25
26
|
"../types/dist/index.mjs"() {
|
|
26
27
|
STANDARD_COGNITIVE_MODES = [
|
|
@@ -102,7 +103,8 @@ var init_dist = __esm({
|
|
|
102
103
|
"resolve-interaction",
|
|
103
104
|
"subscribe-webhook",
|
|
104
105
|
"modify-roadmap",
|
|
105
|
-
"read-telemetry"
|
|
106
|
+
"read-telemetry",
|
|
107
|
+
"manage-proposals"
|
|
106
108
|
]);
|
|
107
109
|
BridgeKindSchema = z2.enum(["slack", "discord", "github-app", "custom"]);
|
|
108
110
|
AuthTokenSchema = z2.object({
|
|
@@ -224,6 +226,112 @@ var init_dist = __esm({
|
|
|
224
226
|
httpStatus: z5.number().int().optional()
|
|
225
227
|
})
|
|
226
228
|
]);
|
|
229
|
+
SkillProvenanceSchema = z6.enum(["community", "agent-proposed", "user-authored"]);
|
|
230
|
+
ProposalKindSchema = z6.enum(["new-skill", "refinement"]);
|
|
231
|
+
ProposalStatusSchema = z6.enum([
|
|
232
|
+
"open",
|
|
233
|
+
"gate-running",
|
|
234
|
+
"gate-failed",
|
|
235
|
+
"approved",
|
|
236
|
+
"rejected"
|
|
237
|
+
]);
|
|
238
|
+
ProposalGateFindingSchema = z6.object({
|
|
239
|
+
severity: z6.enum(["error", "warning"]),
|
|
240
|
+
title: z6.string(),
|
|
241
|
+
detail: z6.string()
|
|
242
|
+
});
|
|
243
|
+
ProposalGateSchema = z6.object({
|
|
244
|
+
lastRunAt: z6.string().datetime().optional(),
|
|
245
|
+
findings: z6.array(ProposalGateFindingSchema).optional()
|
|
246
|
+
});
|
|
247
|
+
ProposalDecisionSchema = z6.object({
|
|
248
|
+
decidedAt: z6.string().datetime(),
|
|
249
|
+
decidedBy: z6.string(),
|
|
250
|
+
action: z6.enum(["approved", "rejected"]),
|
|
251
|
+
reason: z6.string().optional()
|
|
252
|
+
});
|
|
253
|
+
ProposalContentSchema = z6.object({
|
|
254
|
+
name: z6.string().regex(/^[a-z][a-z0-9-]*$/).max(64),
|
|
255
|
+
description: z6.string().min(20).max(280),
|
|
256
|
+
skillYaml: z6.string().optional(),
|
|
257
|
+
skillMd: z6.string().optional(),
|
|
258
|
+
diff: z6.string().optional()
|
|
259
|
+
}).strict();
|
|
260
|
+
ProposalSourceSchema = z6.object({
|
|
261
|
+
sessionId: z6.string().optional(),
|
|
262
|
+
taskId: z6.string().optional(),
|
|
263
|
+
justification: z6.string().min(20).max(2e3)
|
|
264
|
+
});
|
|
265
|
+
SkillProposalSchema = z6.object({
|
|
266
|
+
id: z6.string().min(1),
|
|
267
|
+
createdAt: z6.string().datetime(),
|
|
268
|
+
kind: ProposalKindSchema,
|
|
269
|
+
targetSkill: z6.string().optional(),
|
|
270
|
+
proposedBy: z6.string().min(1),
|
|
271
|
+
source: ProposalSourceSchema,
|
|
272
|
+
content: ProposalContentSchema,
|
|
273
|
+
status: ProposalStatusSchema,
|
|
274
|
+
gate: ProposalGateSchema.optional(),
|
|
275
|
+
decision: ProposalDecisionSchema.optional()
|
|
276
|
+
}).superRefine((val, ctx) => {
|
|
277
|
+
if (val.kind === "new-skill") {
|
|
278
|
+
if (!val.content.skillYaml || !val.content.skillMd) {
|
|
279
|
+
ctx.addIssue({
|
|
280
|
+
code: z6.ZodIssueCode.custom,
|
|
281
|
+
path: ["content"],
|
|
282
|
+
message: "new-skill proposals require skillYaml and skillMd"
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
if (val.targetSkill) {
|
|
286
|
+
ctx.addIssue({
|
|
287
|
+
code: z6.ZodIssueCode.custom,
|
|
288
|
+
path: ["targetSkill"],
|
|
289
|
+
message: "targetSkill is forbidden on new-skill proposals"
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
if (val.content.diff) {
|
|
293
|
+
ctx.addIssue({
|
|
294
|
+
code: z6.ZodIssueCode.custom,
|
|
295
|
+
path: ["content", "diff"],
|
|
296
|
+
message: "diff is forbidden on new-skill proposals"
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
} else if (val.kind === "refinement") {
|
|
300
|
+
if (!val.targetSkill) {
|
|
301
|
+
ctx.addIssue({
|
|
302
|
+
code: z6.ZodIssueCode.custom,
|
|
303
|
+
path: ["targetSkill"],
|
|
304
|
+
message: "refinement proposals require targetSkill"
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
if (!val.content.diff) {
|
|
308
|
+
ctx.addIssue({
|
|
309
|
+
code: z6.ZodIssueCode.custom,
|
|
310
|
+
path: ["content", "diff"],
|
|
311
|
+
message: "refinement proposals require a unified diff"
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
if (val.content.skillYaml || val.content.skillMd) {
|
|
315
|
+
ctx.addIssue({
|
|
316
|
+
code: z6.ZodIssueCode.custom,
|
|
317
|
+
path: ["content"],
|
|
318
|
+
message: "skillYaml/skillMd are forbidden on refinement proposals (use diff)"
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
EmitSkillProposalInputSchema = z6.object({
|
|
324
|
+
kind: ProposalKindSchema,
|
|
325
|
+
targetSkill: z6.string().optional(),
|
|
326
|
+
proposedBy: z6.string().min(1).max(120),
|
|
327
|
+
justification: z6.string().min(20).max(2e3),
|
|
328
|
+
sessionId: z6.string().optional(),
|
|
329
|
+
taskId: z6.string().optional(),
|
|
330
|
+
content: ProposalContentSchema
|
|
331
|
+
});
|
|
332
|
+
EditProposalInputSchema = z6.object({
|
|
333
|
+
content: ProposalContentSchema.partial()
|
|
334
|
+
});
|
|
227
335
|
}
|
|
228
336
|
});
|
|
229
337
|
|
|
@@ -260,5 +368,16 @@ export {
|
|
|
260
368
|
NotificationSinkConfigSchema,
|
|
261
369
|
NotificationsConfigSchema,
|
|
262
370
|
NotificationDeliveryResultSchema,
|
|
371
|
+
SkillProvenanceSchema,
|
|
372
|
+
ProposalKindSchema,
|
|
373
|
+
ProposalStatusSchema,
|
|
374
|
+
ProposalGateFindingSchema,
|
|
375
|
+
ProposalGateSchema,
|
|
376
|
+
ProposalDecisionSchema,
|
|
377
|
+
ProposalContentSchema,
|
|
378
|
+
ProposalSourceSchema,
|
|
379
|
+
SkillProposalSchema,
|
|
380
|
+
EmitSkillProposalInputSchema,
|
|
381
|
+
EditProposalInputSchema,
|
|
263
382
|
init_dist
|
|
264
383
|
};
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
init_dist,
|
|
6
6
|
paginate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YYRQCQPZ.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-OHDQBTSO.js");
|
|
83
83
|
const parseResult = parseDiff(input.diff);
|
|
84
84
|
if (!parseResult.ok) {
|
|
85
85
|
return {
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
7
7
|
import {
|
|
8
8
|
init_dist
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YYRQCQPZ.js";
|
|
10
10
|
import {
|
|
11
11
|
Ok
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-OH3NXXUY.js";
|
|
13
13
|
|
|
14
14
|
// src/mcp/tools/entropy.ts
|
|
15
15
|
init_dist();
|
|
@@ -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-OHDQBTSO.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-OHDQBTSO.js");
|
|
150
150
|
const report = result.value;
|
|
151
151
|
const deadCode = report.deadCode;
|
|
152
152
|
const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;
|
|
@@ -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-YYRQCQPZ.js";
|
|
11
11
|
import {
|
|
12
12
|
Err,
|
|
13
13
|
Ok
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-OH3NXXUY.js";
|
|
15
15
|
import {
|
|
16
16
|
init_dist,
|
|
17
17
|
skipDirGlobs
|
|
@@ -361,6 +361,25 @@ var HarnessConfigSchema = z.object({
|
|
|
361
361
|
graph: z.object({
|
|
362
362
|
/** Per-connector configuration (keyed by connector name: jira, slack, ci, confluence, figma, miro) */
|
|
363
363
|
connectors: z.record(z.string(), z.record(z.string(), z.unknown())).default({})
|
|
364
|
+
}).optional(),
|
|
365
|
+
/**
|
|
366
|
+
* Hermes Phase 2 — Disk-hygiene rules consumed by `harness cleanup-sessions --all`.
|
|
367
|
+
* Keys correspond to registered target names (sessions, cache, maintenance,
|
|
368
|
+
* dashboard-state, snapshots, analyzer-output); values override the default
|
|
369
|
+
* TTL in hours. Unknown keys are ignored (forward-compatible).
|
|
370
|
+
*/
|
|
371
|
+
cleanup: z.object({
|
|
372
|
+
ttlHours: z.record(z.string(), z.number().positive()).optional()
|
|
373
|
+
}).optional(),
|
|
374
|
+
/**
|
|
375
|
+
* Hermes Phase 2 — Pre-launch OSV malware guard configuration.
|
|
376
|
+
* `enabled: false` disables the guard; `strict: true` reverses the default
|
|
377
|
+
* fail-open posture on OSV.dev network errors.
|
|
378
|
+
*/
|
|
379
|
+
osvGuard: z.object({
|
|
380
|
+
enabled: z.boolean().default(true),
|
|
381
|
+
strict: z.boolean().default(false),
|
|
382
|
+
cacheTtlHours: z.number().positive().default(24)
|
|
364
383
|
}).optional()
|
|
365
384
|
});
|
|
366
385
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
init_dist
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YYRQCQPZ.js";
|
|
4
4
|
import {
|
|
5
5
|
Err,
|
|
6
6
|
Ok
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OH3NXXUY.js";
|
|
8
8
|
|
|
9
9
|
// src/templates/engine.ts
|
|
10
10
|
init_dist();
|
|
@@ -93,6 +93,7 @@ var NON_JSON_PACKAGE_CONFIGS = /* @__PURE__ */ new Set([
|
|
|
93
93
|
"build.gradle.kts"
|
|
94
94
|
]);
|
|
95
95
|
var HARNESS_CONFIG_FILES = /* @__PURE__ */ new Set(["harness.config.json", "AGENTS.md", ".harness/.gitignore"]);
|
|
96
|
+
var IGNORED_TEMPLATE_FILES = /* @__PURE__ */ new Set([".DS_Store", "Thumbs.db", "desktop.ini"]);
|
|
96
97
|
function isHarnessConfigFile(relativePath) {
|
|
97
98
|
return HARNESS_CONFIG_FILES.has(relativePath);
|
|
98
99
|
}
|
|
@@ -372,6 +373,7 @@ var TemplateEngine = class {
|
|
|
372
373
|
const walk = (currentDir) => {
|
|
373
374
|
const entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
374
375
|
for (const entry of entries) {
|
|
376
|
+
if (IGNORED_TEMPLATE_FILES.has(entry.name)) continue;
|
|
375
377
|
const fullPath = path.join(currentDir, entry.name);
|
|
376
378
|
if (entry.isDirectory()) {
|
|
377
379
|
walk(fullPath);
|