@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
package/dist/{generate-agent-definitions-KPVGBGDY.js → generate-agent-definitions-PYZ3E7SP.js}
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createGenerateAgentDefinitionsCommand,
|
|
3
3
|
generateAgentDefinitions
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DVG6DDX6.js";
|
|
5
5
|
import "./chunk-KET4QQZB.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-MHHISNS2.js";
|
|
7
7
|
import "./chunk-3ISINLYT.js";
|
|
8
8
|
import "./chunk-UTJJJDNN.js";
|
|
9
9
|
import "./chunk-3WGJMBKH.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-33OU3LYX.js";
|
|
11
|
+
import "./chunk-RZTLXZHJ.js";
|
|
12
|
+
import "./chunk-UEXQMI6K.js";
|
|
13
13
|
import "./chunk-WZJR6SOI.js";
|
|
14
14
|
import "./chunk-QCLOIUMX.js";
|
|
15
15
|
import "./chunk-XARGEOJV.js";
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/* global console */
|
|
3
2
|
// sentinel-pre.js — PreToolUse:* hook
|
|
4
|
-
// Sentinel
|
|
5
|
-
//
|
|
3
|
+
// Sentinel ENFORCEMENT: blocks destructive operations during an already-tainted
|
|
4
|
+
// session. Taint is set exclusively by sentinel-post from untrusted tool OUTPUT
|
|
5
|
+
// (the actual prompt-injection vector). This hook performs NO injection detection
|
|
6
|
+
// on tool INPUTS — an agent's own tool inputs are its intent, not untrusted content,
|
|
7
|
+
// and scanning them here falsely tainted legitimate work (e.g. an agent running
|
|
8
|
+
// `git commit --no-verify`, or inputs containing base64/git-SHA tokens), then blocked
|
|
9
|
+
// the agent's own `git push`. Detection lives in sentinel-post; pre only enforces.
|
|
6
10
|
// Exit codes: 0 = allow, 2 = block
|
|
11
|
+
//
|
|
12
|
+
// Design contract: see packages/cli/src/hooks/profiles.ts — "sentinel-pre (exit-2
|
|
13
|
+
// blocks a destructive op in an already-tainted session) and sentinel-post
|
|
14
|
+
// (detection only)".
|
|
7
15
|
|
|
8
|
-
import { readFileSync,
|
|
9
|
-
import { resolve
|
|
16
|
+
import { readFileSync, unlinkSync, realpathSync } from 'node:fs';
|
|
17
|
+
import { resolve } from 'node:path';
|
|
10
18
|
import process from 'node:process';
|
|
11
19
|
|
|
12
20
|
// Destructive tool patterns blocked during taint.
|
|
13
|
-
// These are intentionally inline — this check runs before the @harness-engineering/core
|
|
14
|
-
// import attempt to ensure enforcement even when core is unavailable.
|
|
15
21
|
// Keep in sync with DESTRUCTIVE_BASH exported from @harness-engineering/core injection-patterns.ts.
|
|
16
22
|
const DESTRUCTIVE_BASH = [
|
|
17
23
|
/\bgit\s+push\b/,
|
|
@@ -33,73 +39,6 @@ function isOutsideWorkspace(filePath, workspaceRoot) {
|
|
|
33
39
|
return !realResolved.startsWith(workspaceRoot);
|
|
34
40
|
}
|
|
35
41
|
|
|
36
|
-
// Minimal inline patterns for when @harness-engineering/core isn't available.
|
|
37
|
-
// Keep in sync with @harness-engineering/core injection-patterns.ts ALL_PATTERNS.
|
|
38
|
-
// Covers all HIGH-severity patterns and key MEDIUM patterns for degraded-mode safety.
|
|
39
|
-
function inlineScan(text) {
|
|
40
|
-
console.error('[sentinel] Running in degraded mode: core import failed, using inline patterns');
|
|
41
|
-
const findings = [];
|
|
42
|
-
const lines = text.split('\n');
|
|
43
|
-
for (let i = 0; i < lines.length; i++) {
|
|
44
|
-
const line = lines[i];
|
|
45
|
-
// HIGH: INJ-UNI-001 — Zero-width characters
|
|
46
|
-
// eslint-disable-next-line no-misleading-character-class -- intentional: detects zero-width chars for security
|
|
47
|
-
if (/[\u200B\u200C\u200D\uFEFF\u2060]/.test(line)) {
|
|
48
|
-
findings.push({ severity: 'high', ruleId: 'INJ-UNI-001', match: line.trim(), line: i + 1 });
|
|
49
|
-
}
|
|
50
|
-
// HIGH: INJ-UNI-002 — RTL/LTR override characters
|
|
51
|
-
if (/[\u202A-\u202E\u2066-\u2069]/.test(line)) {
|
|
52
|
-
findings.push({ severity: 'high', ruleId: 'INJ-UNI-002', match: line.trim(), line: i + 1 });
|
|
53
|
-
}
|
|
54
|
-
// HIGH: INJ-REROL-001 — Ignore previous instructions
|
|
55
|
-
if (/(?:ignore|disregard|forget)\s+(?:all\s+)?(?:previous|prior|above|earlier)\s+(?:instructions?|prompts?|context|rules?|guidelines?)/i.test(line)) {
|
|
56
|
-
findings.push({ severity: 'high', ruleId: 'INJ-REROL-001', match: line.trim(), line: i + 1 });
|
|
57
|
-
}
|
|
58
|
-
// HIGH: INJ-REROL-002 — Role reassignment
|
|
59
|
-
if (/you\s+are\s+now\s+(?:a\s+|an\s+)?(?:new\s+)?(?:helpful\s+)?(?:my\s+)?(?:\w+\s+)?(?:assistant|agent|AI|bot|chatbot|system|persona)\b/i.test(line)) {
|
|
60
|
-
findings.push({ severity: 'high', ruleId: 'INJ-REROL-002', match: line.trim(), line: i + 1 });
|
|
61
|
-
}
|
|
62
|
-
// HIGH: INJ-REROL-003 — Direct instruction override
|
|
63
|
-
if (/(?:new\s+)?(?:system\s+)?(?:instruction|directive|role|persona)\s*[:=]\s*/i.test(line)) {
|
|
64
|
-
findings.push({ severity: 'high', ruleId: 'INJ-REROL-003', match: line.trim(), line: i + 1 });
|
|
65
|
-
}
|
|
66
|
-
// HIGH: INJ-PERM-001 — Enable all tools/permissions
|
|
67
|
-
if (/(?:allow|enable|grant)\s+all\s+(?:tools?|permissions?|access)/i.test(line)) {
|
|
68
|
-
findings.push({ severity: 'high', ruleId: 'INJ-PERM-001', match: line.trim(), line: i + 1 });
|
|
69
|
-
}
|
|
70
|
-
// HIGH: INJ-PERM-002 — Disable safety/security
|
|
71
|
-
if (/(?:disable|turn\s+off|remove|bypass)\s+(?:all\s+)?(?:safety|security|restrictions?|guardrails?|protections?|checks?)/i.test(line)) {
|
|
72
|
-
findings.push({ severity: 'high', ruleId: 'INJ-PERM-002', match: line.trim(), line: i + 1 });
|
|
73
|
-
}
|
|
74
|
-
// HIGH: INJ-PERM-003 — Auto-approve directive
|
|
75
|
-
if (/(?:auto[- ]?approve|--no-verify|--dangerously-skip-permissions)/i.test(line)) {
|
|
76
|
-
findings.push({ severity: 'high', ruleId: 'INJ-PERM-003', match: line.trim(), line: i + 1 });
|
|
77
|
-
}
|
|
78
|
-
// HIGH: INJ-ENC-001 — Suspicious base64 (skip lines that look like file paths or CLI commands)
|
|
79
|
-
if (!/^[\s]*(?:cd |git |node |pnpm |npm |\/|packages\/|agents\/|src\/)/.test(line) &&
|
|
80
|
-
/(?<!Bearer\s)(?<![:])(?<![A-Za-z0-9/])(?!eyJ)(?:[A-Za-z0-9+/]{4}){7,}(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?(?![A-Za-z0-9/])/.test(line)) {
|
|
81
|
-
findings.push({ severity: 'high', ruleId: 'INJ-ENC-001', match: line.trim(), line: i + 1 });
|
|
82
|
-
}
|
|
83
|
-
// MEDIUM: INJ-CTX-001 — System prompt claims
|
|
84
|
-
if (/(?:the\s+)?(?:system\s+prompt|system\s+message|hidden\s+instructions?)\s+(?:says?|tells?|instructs?|contains?|is)/i.test(line)) {
|
|
85
|
-
findings.push({ severity: 'medium', ruleId: 'INJ-CTX-001', match: line.trim(), line: i + 1 });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return findings;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function extractText(toolName, toolInput) {
|
|
92
|
-
if (toolName === 'Bash') return toolInput?.command ?? '';
|
|
93
|
-
if (toolName === 'Write') return toolInput?.content ?? '';
|
|
94
|
-
if (toolName === 'Edit') return `${toolInput?.old_string ?? ''}\n${toolInput?.new_string ?? ''}`;
|
|
95
|
-
if (toolName === 'Read') return toolInput?.file_path ?? '';
|
|
96
|
-
const parts = [];
|
|
97
|
-
for (const value of Object.values(toolInput || {})) {
|
|
98
|
-
if (typeof value === 'string') parts.push(value);
|
|
99
|
-
}
|
|
100
|
-
return parts.join('\n') || null;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
42
|
async function main() {
|
|
104
43
|
let raw = '';
|
|
105
44
|
try {
|
|
@@ -125,7 +64,8 @@ async function main() {
|
|
|
125
64
|
const sessionId = input?.session_id;
|
|
126
65
|
const workspaceRoot = process.cwd();
|
|
127
66
|
|
|
128
|
-
//
|
|
67
|
+
// Check taint state — block destructive ops if the session is already tainted.
|
|
68
|
+
// Taint is written only by sentinel-post (from untrusted tool OUTPUT).
|
|
129
69
|
let tainted = false;
|
|
130
70
|
try {
|
|
131
71
|
const taintPath = resolve(
|
|
@@ -173,69 +113,6 @@ async function main() {
|
|
|
173
113
|
}
|
|
174
114
|
}
|
|
175
115
|
|
|
176
|
-
// Step 2: Scan tool inputs for injection patterns
|
|
177
|
-
const textToScan = extractText(toolName, toolInput);
|
|
178
|
-
if (textToScan) {
|
|
179
|
-
let findings;
|
|
180
|
-
try {
|
|
181
|
-
const core = await import('@harness-engineering/core');
|
|
182
|
-
findings = core.scanForInjection(textToScan);
|
|
183
|
-
} catch {
|
|
184
|
-
findings = inlineScan(textToScan);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const actionable = findings.filter((f) => f.severity === 'high' || f.severity === 'medium');
|
|
188
|
-
|
|
189
|
-
if (actionable.length > 0) {
|
|
190
|
-
try {
|
|
191
|
-
const core = await import('@harness-engineering/core');
|
|
192
|
-
core.writeTaint(
|
|
193
|
-
workspaceRoot,
|
|
194
|
-
sessionId,
|
|
195
|
-
`Injection pattern detected in PreToolUse:${toolName} input`,
|
|
196
|
-
actionable,
|
|
197
|
-
`PreToolUse:${toolName}`
|
|
198
|
-
);
|
|
199
|
-
} catch {
|
|
200
|
-
// Fallback inline taint writer — merges with existing taint state
|
|
201
|
-
try {
|
|
202
|
-
const id = sessionId || 'default';
|
|
203
|
-
const taintPath = resolve(workspaceRoot, '.harness', `session-taint-${id}.json`);
|
|
204
|
-
mkdirSync(dirname(taintPath), { recursive: true });
|
|
205
|
-
const now = new Date().toISOString();
|
|
206
|
-
const maxSev = actionable.some((f) => f.severity === 'high') ? 'high' : 'medium';
|
|
207
|
-
const newFindings = actionable.map((f) => ({
|
|
208
|
-
ruleId: f.ruleId, severity: f.severity, match: f.match,
|
|
209
|
-
source: `PreToolUse:${toolName}`, detectedAt: now,
|
|
210
|
-
}));
|
|
211
|
-
// Read and merge existing taint state to preserve earlier taintedAt and findings
|
|
212
|
-
let existing = null;
|
|
213
|
-
try { existing = JSON.parse(readFileSync(taintPath, 'utf-8')); } catch { /* no existing */ }
|
|
214
|
-
const state = {
|
|
215
|
-
sessionId: id,
|
|
216
|
-
taintedAt: existing?.taintedAt ?? now,
|
|
217
|
-
expiresAt: new Date(Date.now() + 30 * 60 * 1000).toISOString(),
|
|
218
|
-
reason: existing?.reason ?? `Injection pattern detected in PreToolUse:${toolName} input`,
|
|
219
|
-
severity: maxSev,
|
|
220
|
-
findings: [...(existing?.findings ?? []), ...newFindings],
|
|
221
|
-
};
|
|
222
|
-
writeFileSync(taintPath, JSON.stringify(state, null, 2) + '\n');
|
|
223
|
-
} catch { /* best-effort */ }
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
for (const f of actionable) {
|
|
227
|
-
process.stderr.write(
|
|
228
|
-
`Sentinel [${f.severity}] ${f.ruleId}: detected in ${toolName} input\n`
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
const low = findings.filter((f) => f.severity === 'low');
|
|
234
|
-
for (const f of low) {
|
|
235
|
-
process.stderr.write(`Sentinel [low] ${f.ruleId}: ${f.match.slice(0, 80)}\n`);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
116
|
process.exit(0);
|
|
240
117
|
} catch {
|
|
241
118
|
process.exit(0);
|
package/dist/index.d.ts
CHANGED
|
@@ -704,14 +704,59 @@ declare const HarnessConfigSchema: z.ZodObject<{
|
|
|
704
704
|
excludePatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
705
705
|
/** Whether to automatically attempt to fix simple entropy issues */
|
|
706
706
|
autoFix: z.ZodDefault<z.ZodBoolean>;
|
|
707
|
+
/** Documentation-drift detection tuning (scope/disable individual checks) */
|
|
708
|
+
drift: z.ZodOptional<z.ZodObject<{
|
|
709
|
+
/** Glob patterns for docs to scan for drift (default: docs/**, README) */
|
|
710
|
+
docPaths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
711
|
+
/** Flag doc references to code symbols that no longer exist (default: true) */
|
|
712
|
+
checkApiSignatures: z.ZodOptional<z.ZodBoolean>;
|
|
713
|
+
/** Check fenced code examples against the codebase (default: true) */
|
|
714
|
+
checkExamples: z.ZodOptional<z.ZodBoolean>;
|
|
715
|
+
/** Check documented structure against the filesystem (default: true) */
|
|
716
|
+
checkStructure: z.ZodOptional<z.ZodBoolean>;
|
|
717
|
+
/** Regexes matched against a reference to exclude it from drift reporting */
|
|
718
|
+
ignorePatterns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
719
|
+
/** Doc-path prefixes whose symbols describe intended future code (ADRs, proposals) */
|
|
720
|
+
forwardLookingPaths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
721
|
+
}, "strip", z.ZodTypeAny, {
|
|
722
|
+
docPaths?: string[] | undefined;
|
|
723
|
+
checkApiSignatures?: boolean | undefined;
|
|
724
|
+
checkExamples?: boolean | undefined;
|
|
725
|
+
checkStructure?: boolean | undefined;
|
|
726
|
+
ignorePatterns?: string[] | undefined;
|
|
727
|
+
forwardLookingPaths?: string[] | undefined;
|
|
728
|
+
}, {
|
|
729
|
+
docPaths?: string[] | undefined;
|
|
730
|
+
checkApiSignatures?: boolean | undefined;
|
|
731
|
+
checkExamples?: boolean | undefined;
|
|
732
|
+
checkStructure?: boolean | undefined;
|
|
733
|
+
ignorePatterns?: string[] | undefined;
|
|
734
|
+
forwardLookingPaths?: string[] | undefined;
|
|
735
|
+
}>>;
|
|
707
736
|
}, "strip", z.ZodTypeAny, {
|
|
708
737
|
excludePatterns: string[];
|
|
709
738
|
autoFix: boolean;
|
|
710
739
|
entryPoints?: string[] | undefined;
|
|
740
|
+
drift?: {
|
|
741
|
+
docPaths?: string[] | undefined;
|
|
742
|
+
checkApiSignatures?: boolean | undefined;
|
|
743
|
+
checkExamples?: boolean | undefined;
|
|
744
|
+
checkStructure?: boolean | undefined;
|
|
745
|
+
ignorePatterns?: string[] | undefined;
|
|
746
|
+
forwardLookingPaths?: string[] | undefined;
|
|
747
|
+
} | undefined;
|
|
711
748
|
}, {
|
|
712
749
|
excludePatterns?: string[] | undefined;
|
|
713
750
|
entryPoints?: string[] | undefined;
|
|
714
751
|
autoFix?: boolean | undefined;
|
|
752
|
+
drift?: {
|
|
753
|
+
docPaths?: string[] | undefined;
|
|
754
|
+
checkApiSignatures?: boolean | undefined;
|
|
755
|
+
checkExamples?: boolean | undefined;
|
|
756
|
+
checkStructure?: boolean | undefined;
|
|
757
|
+
ignorePatterns?: string[] | undefined;
|
|
758
|
+
forwardLookingPaths?: string[] | undefined;
|
|
759
|
+
} | undefined;
|
|
715
760
|
}>>;
|
|
716
761
|
/** Security scanning configuration */
|
|
717
762
|
security: z.ZodOptional<z.ZodObject<{
|
|
@@ -2100,6 +2145,14 @@ declare const HarnessConfigSchema: z.ZodObject<{
|
|
|
2100
2145
|
excludePatterns: string[];
|
|
2101
2146
|
autoFix: boolean;
|
|
2102
2147
|
entryPoints?: string[] | undefined;
|
|
2148
|
+
drift?: {
|
|
2149
|
+
docPaths?: string[] | undefined;
|
|
2150
|
+
checkApiSignatures?: boolean | undefined;
|
|
2151
|
+
checkExamples?: boolean | undefined;
|
|
2152
|
+
checkStructure?: boolean | undefined;
|
|
2153
|
+
ignorePatterns?: string[] | undefined;
|
|
2154
|
+
forwardLookingPaths?: string[] | undefined;
|
|
2155
|
+
} | undefined;
|
|
2103
2156
|
} | undefined;
|
|
2104
2157
|
security?: z.objectOutputType<{
|
|
2105
2158
|
/** Whether security scanning is enabled */
|
|
@@ -2418,6 +2471,14 @@ declare const HarnessConfigSchema: z.ZodObject<{
|
|
|
2418
2471
|
excludePatterns?: string[] | undefined;
|
|
2419
2472
|
entryPoints?: string[] | undefined;
|
|
2420
2473
|
autoFix?: boolean | undefined;
|
|
2474
|
+
drift?: {
|
|
2475
|
+
docPaths?: string[] | undefined;
|
|
2476
|
+
checkApiSignatures?: boolean | undefined;
|
|
2477
|
+
checkExamples?: boolean | undefined;
|
|
2478
|
+
checkStructure?: boolean | undefined;
|
|
2479
|
+
ignorePatterns?: string[] | undefined;
|
|
2480
|
+
forwardLookingPaths?: string[] | undefined;
|
|
2481
|
+
} | undefined;
|
|
2421
2482
|
} | undefined;
|
|
2422
2483
|
security?: z.objectInputType<{
|
|
2423
2484
|
/** Whether security scanning is enabled */
|
package/dist/index.js
CHANGED
|
@@ -12,20 +12,20 @@ import {
|
|
|
12
12
|
runSnapshotCapture,
|
|
13
13
|
runUninstall,
|
|
14
14
|
runUninstallConstraints
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-RRCS27GT.js";
|
|
16
16
|
import {
|
|
17
17
|
generateRuntime
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-ZIJABBGZ.js";
|
|
19
19
|
import {
|
|
20
20
|
generateAgentsMd
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-VC2B275U.js";
|
|
22
22
|
import {
|
|
23
23
|
generateCIWorkflow
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-SI4O2W4H.js";
|
|
25
|
+
import "./chunk-KHL6WFRL.js";
|
|
26
26
|
import {
|
|
27
27
|
runCrossCheck
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-DW6HE5DH.js";
|
|
29
29
|
import {
|
|
30
30
|
AGENT_DESCRIPTIONS,
|
|
31
31
|
DEFAULT_TOOLS,
|
|
@@ -34,14 +34,14 @@ import {
|
|
|
34
34
|
generateAgentDefinitions,
|
|
35
35
|
renderClaudeCodeAgent,
|
|
36
36
|
renderGeminiAgent
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-DVG6DDX6.js";
|
|
38
38
|
import "./chunk-KET4QQZB.js";
|
|
39
39
|
import {
|
|
40
40
|
runScan
|
|
41
41
|
} from "./chunk-YYFSFSB3.js";
|
|
42
42
|
import {
|
|
43
43
|
TemplateEngine
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-YTJIRQON.js";
|
|
45
45
|
import "./chunk-CQ553GZO.js";
|
|
46
46
|
import {
|
|
47
47
|
generateSkillFiles
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
import {
|
|
50
50
|
listPersonas,
|
|
51
51
|
loadPersona
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-MHHISNS2.js";
|
|
53
53
|
import {
|
|
54
54
|
detectTrigger,
|
|
55
55
|
runPersona
|
|
@@ -64,27 +64,27 @@ import {
|
|
|
64
64
|
OutputFormatter,
|
|
65
65
|
OutputMode,
|
|
66
66
|
runCheckPhaseGate
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-V2GJE5J5.js";
|
|
68
68
|
import {
|
|
69
69
|
createHarnessServer,
|
|
70
70
|
generateSlashCommands,
|
|
71
71
|
getToolDefinitions,
|
|
72
72
|
startServer
|
|
73
|
-
} from "./chunk-
|
|
74
|
-
import "./chunk-
|
|
75
|
-
import "./chunk-
|
|
76
|
-
import "./chunk-
|
|
77
|
-
import "./chunk-
|
|
78
|
-
import "./chunk-
|
|
79
|
-
import "./chunk-
|
|
80
|
-
import "./chunk-
|
|
73
|
+
} from "./chunk-K5R2I37T.js";
|
|
74
|
+
import "./chunk-KYFXXEK3.js";
|
|
75
|
+
import "./chunk-D5YCPIK6.js";
|
|
76
|
+
import "./chunk-J5MFNKE7.js";
|
|
77
|
+
import "./chunk-HU7NS7JA.js";
|
|
78
|
+
import "./chunk-BJDT3VGQ.js";
|
|
79
|
+
import "./chunk-DBCC7KIW.js";
|
|
80
|
+
import "./chunk-E5KJOUHI.js";
|
|
81
81
|
import "./chunk-IOW3MW2K.js";
|
|
82
82
|
import "./chunk-3ISINLYT.js";
|
|
83
83
|
import "./chunk-4U5LDFCY.js";
|
|
84
|
-
import "./chunk-
|
|
85
|
-
import "./chunk-
|
|
84
|
+
import "./chunk-HUC73DZC.js";
|
|
85
|
+
import "./chunk-J7H5I4FO.js";
|
|
86
86
|
import "./chunk-RC3OI5NK.js";
|
|
87
|
-
import "./chunk-
|
|
87
|
+
import "./chunk-XACP5P2J.js";
|
|
88
88
|
import "./chunk-W6Y7ZW3Y.js";
|
|
89
89
|
import "./chunk-WBVCN35T.js";
|
|
90
90
|
import "./chunk-UTJJJDNN.js";
|
|
@@ -94,7 +94,7 @@ import {
|
|
|
94
94
|
findConfigFile,
|
|
95
95
|
loadConfig,
|
|
96
96
|
resolveConfig
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-6STDKKAM.js";
|
|
98
98
|
import "./chunk-ZCZD7FHU.js";
|
|
99
99
|
import {
|
|
100
100
|
logger
|
|
@@ -104,10 +104,10 @@ import {
|
|
|
104
104
|
ExitCode,
|
|
105
105
|
handleError
|
|
106
106
|
} from "./chunk-3WGJMBKH.js";
|
|
107
|
-
import "./chunk-
|
|
107
|
+
import "./chunk-33OU3LYX.js";
|
|
108
108
|
import "./chunk-BM3PWGXQ.js";
|
|
109
|
-
import "./chunk-
|
|
110
|
-
import "./chunk-
|
|
109
|
+
import "./chunk-RZTLXZHJ.js";
|
|
110
|
+
import "./chunk-UEXQMI6K.js";
|
|
111
111
|
import "./chunk-WZJR6SOI.js";
|
|
112
112
|
import "./chunk-QCLOIUMX.js";
|
|
113
113
|
import "./chunk-XARGEOJV.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listPersonas,
|
|
3
3
|
loadPersona
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-MHHISNS2.js";
|
|
5
|
+
import "./chunk-33OU3LYX.js";
|
|
6
|
+
import "./chunk-RZTLXZHJ.js";
|
|
7
|
+
import "./chunk-UEXQMI6K.js";
|
|
8
8
|
import "./chunk-WZJR6SOI.js";
|
|
9
9
|
import "./chunk-QCLOIUMX.js";
|
|
10
10
|
import "./chunk-XARGEOJV.js";
|
|
@@ -2,37 +2,37 @@ import {
|
|
|
2
2
|
createHarnessServer,
|
|
3
3
|
getToolDefinitions,
|
|
4
4
|
startServer
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-K5R2I37T.js";
|
|
6
|
+
import "./chunk-KYFXXEK3.js";
|
|
7
|
+
import "./chunk-D5YCPIK6.js";
|
|
8
|
+
import "./chunk-J5MFNKE7.js";
|
|
9
|
+
import "./chunk-HU7NS7JA.js";
|
|
10
|
+
import "./chunk-BJDT3VGQ.js";
|
|
11
|
+
import "./chunk-DBCC7KIW.js";
|
|
12
|
+
import "./chunk-E5KJOUHI.js";
|
|
13
13
|
import "./chunk-IOW3MW2K.js";
|
|
14
14
|
import "./chunk-3ISINLYT.js";
|
|
15
15
|
import "./chunk-4U5LDFCY.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-HUC73DZC.js";
|
|
17
|
+
import "./chunk-J7H5I4FO.js";
|
|
18
18
|
import {
|
|
19
19
|
resultToMcpResponse
|
|
20
20
|
} from "./chunk-RC3OI5NK.js";
|
|
21
21
|
import {
|
|
22
22
|
resolveProjectConfig
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-XACP5P2J.js";
|
|
24
24
|
import "./chunk-W6Y7ZW3Y.js";
|
|
25
25
|
import "./chunk-WBVCN35T.js";
|
|
26
26
|
import "./chunk-UTJJJDNN.js";
|
|
27
27
|
import "./chunk-HIK6OEUF.js";
|
|
28
28
|
import "./chunk-Y6SUQC32.js";
|
|
29
|
-
import "./chunk-
|
|
29
|
+
import "./chunk-6STDKKAM.js";
|
|
30
30
|
import "./chunk-ZCZD7FHU.js";
|
|
31
31
|
import "./chunk-EBJQ6N4M.js";
|
|
32
32
|
import "./chunk-3WGJMBKH.js";
|
|
33
|
-
import "./chunk-
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-33OU3LYX.js";
|
|
34
|
+
import "./chunk-RZTLXZHJ.js";
|
|
35
|
+
import "./chunk-UEXQMI6K.js";
|
|
36
36
|
import "./chunk-WZJR6SOI.js";
|
|
37
37
|
import "./chunk-QCLOIUMX.js";
|
|
38
38
|
import "./chunk-XARGEOJV.js";
|
|
@@ -7,15 +7,15 @@ import {
|
|
|
7
7
|
handleGetPerfBaselines,
|
|
8
8
|
handleUpdatePerfBaselines,
|
|
9
9
|
updatePerfBaselinesDefinition
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-E5KJOUHI.js";
|
|
11
11
|
import "./chunk-RC3OI5NK.js";
|
|
12
12
|
import "./chunk-W6Y7ZW3Y.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-6STDKKAM.js";
|
|
14
14
|
import "./chunk-ZCZD7FHU.js";
|
|
15
15
|
import "./chunk-3WGJMBKH.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-33OU3LYX.js";
|
|
17
|
+
import "./chunk-RZTLXZHJ.js";
|
|
18
|
+
import "./chunk-UEXQMI6K.js";
|
|
19
19
|
import "./chunk-WZJR6SOI.js";
|
|
20
20
|
import "./chunk-QCLOIUMX.js";
|
|
21
21
|
import "./chunk-XARGEOJV.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
handleRunCodeReview,
|
|
3
3
|
runCodeReviewDefinition
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-J5MFNKE7.js";
|
|
5
5
|
import "./chunk-W6Y7ZW3Y.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-33OU3LYX.js";
|
|
7
|
+
import "./chunk-RZTLXZHJ.js";
|
|
8
|
+
import "./chunk-UEXQMI6K.js";
|
|
9
9
|
import "./chunk-WZJR6SOI.js";
|
|
10
10
|
import "./chunk-QCLOIUMX.js";
|
|
11
11
|
import "./chunk-XARGEOJV.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
generateRuntime
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZIJABBGZ.js";
|
|
4
4
|
import "./chunk-KET4QQZB.js";
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-33OU3LYX.js";
|
|
6
|
+
import "./chunk-RZTLXZHJ.js";
|
|
7
|
+
import "./chunk-UEXQMI6K.js";
|
|
8
8
|
import "./chunk-WZJR6SOI.js";
|
|
9
9
|
import "./chunk-QCLOIUMX.js";
|
|
10
10
|
import "./chunk-XARGEOJV.js";
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
isEmptyHarnessState,
|
|
7
7
|
readAuditTimeline,
|
|
8
8
|
readHarnessState
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-KHL6WFRL.js";
|
|
10
|
+
import "./chunk-33OU3LYX.js";
|
|
11
|
+
import "./chunk-RZTLXZHJ.js";
|
|
12
|
+
import "./chunk-UEXQMI6K.js";
|
|
13
13
|
import "./chunk-WZJR6SOI.js";
|
|
14
14
|
import "./chunk-QCLOIUMX.js";
|
|
15
15
|
import "./chunk-XARGEOJV.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
handleValidateProject,
|
|
3
3
|
validateToolDefinition
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-HUC73DZC.js";
|
|
5
|
+
import "./chunk-XACP5P2J.js";
|
|
6
6
|
import "./chunk-W6Y7ZW3Y.js";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-33OU3LYX.js";
|
|
8
|
+
import "./chunk-RZTLXZHJ.js";
|
|
9
|
+
import "./chunk-UEXQMI6K.js";
|
|
10
10
|
import "./chunk-WZJR6SOI.js";
|
|
11
11
|
import "./chunk-QCLOIUMX.js";
|
|
12
12
|
import "./chunk-XARGEOJV.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runCrossCheck
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-DW6HE5DH.js";
|
|
4
|
+
import "./chunk-33OU3LYX.js";
|
|
5
|
+
import "./chunk-RZTLXZHJ.js";
|
|
6
|
+
import "./chunk-UEXQMI6K.js";
|
|
7
7
|
import "./chunk-WZJR6SOI.js";
|
|
8
8
|
import "./chunk-QCLOIUMX.js";
|
|
9
9
|
import "./chunk-XARGEOJV.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@harness-engineering/cli",
|
|
3
|
-
"version": "4.0
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "CLI for Harness Engineering toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -39,15 +39,16 @@
|
|
|
39
39
|
"web-tree-sitter": "^0.24.7",
|
|
40
40
|
"yaml": "^2.8.3",
|
|
41
41
|
"zod": "^3.25.76",
|
|
42
|
-
"@harness-engineering/core": "0.
|
|
43
|
-
"@harness-engineering/dashboard": "0.11.
|
|
44
|
-
"@harness-engineering/graph": "0.11.
|
|
42
|
+
"@harness-engineering/core": "0.33.0",
|
|
43
|
+
"@harness-engineering/dashboard": "0.11.2",
|
|
44
|
+
"@harness-engineering/graph": "0.11.3",
|
|
45
45
|
"@harness-engineering/linter-gen": "0.1.7",
|
|
46
|
-
"@harness-engineering/orchestrator": "0.9.
|
|
47
|
-
"@harness-engineering/
|
|
46
|
+
"@harness-engineering/orchestrator": "0.9.2",
|
|
47
|
+
"@harness-engineering/signals": "0.2.1",
|
|
48
|
+
"@harness-engineering/types": "0.17.0"
|
|
48
49
|
},
|
|
49
50
|
"peerDependencies": {
|
|
50
|
-
"@harness-engineering/intelligence": "0.4.
|
|
51
|
+
"@harness-engineering/intelligence": "0.4.1"
|
|
51
52
|
},
|
|
52
53
|
"peerDependenciesMeta": {
|
|
53
54
|
"@harness-engineering/intelligence": {
|