@harness-engineering/cli 1.24.3 → 1.25.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-architecture-advisor/SKILL.md +10 -6
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +40 -5
- package/dist/agents/skills/claude-code/harness-git-workflow/SKILL.md +32 -11
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +19 -0
- package/dist/agents/skills/claude-code/harness-skill-authoring/SKILL.md +42 -7
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +25 -0
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +10 -6
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +40 -5
- package/dist/agents/skills/codex/harness-git-workflow/SKILL.md +32 -11
- package/dist/agents/skills/codex/harness-planning/SKILL.md +19 -0
- package/dist/agents/skills/codex/harness-skill-authoring/SKILL.md +42 -7
- package/dist/agents/skills/codex/harness-verification/SKILL.md +25 -0
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +10 -6
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +40 -5
- package/dist/agents/skills/cursor/harness-git-workflow/SKILL.md +32 -11
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +19 -0
- package/dist/agents/skills/cursor/harness-skill-authoring/SKILL.md +42 -7
- package/dist/agents/skills/cursor/harness-verification/SKILL.md +25 -0
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +10 -6
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +40 -5
- package/dist/agents/skills/gemini-cli/harness-git-workflow/SKILL.md +32 -11
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +19 -0
- package/dist/agents/skills/gemini-cli/harness-skill-authoring/SKILL.md +42 -7
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +25 -0
- package/dist/agents-md-MCUM4SIZ.js +10 -0
- package/dist/{architecture-FBSLURIB.js → architecture-HNIO6AUX.js} +6 -5
- package/dist/{assess-project-74UVWPMB.js → assess-project-6MV5TNY3.js} +2 -1
- package/dist/bin/harness-mcp.js +18 -17
- package/dist/bin/harness.js +47 -31
- package/dist/{check-phase-gate-WY6UICCL.js → check-phase-gate-VCBQHQAC.js} +6 -5
- package/dist/{chunk-Q3XYV5UC.js → chunk-47N6R2F4.js} +5 -1
- package/dist/{chunk-3XAPHB2Z.js → chunk-4NK7Z3BP.js} +1 -1
- package/dist/{chunk-I4QR3HNH.js → chunk-5BQ5BOJL.js} +5 -1
- package/dist/{chunk-LM5Z2WCA.js → chunk-6VZQJ5CX.js} +5 -1
- package/dist/{chunk-NV4FPO7J.js → chunk-AT74HEQM.js} +1 -1
- package/dist/{chunk-ZAMT24QN.js → chunk-AZT567I6.js} +1525 -735
- package/dist/{chunk-TDLOFNNQ.js → chunk-BOQRTARD.js} +1 -1
- package/dist/{chunk-A737JDL4.js → chunk-CXJTVICF.js} +4 -4
- package/dist/{chunk-LOUH2LIC.js → chunk-EHRZMOQ2.js} +5 -1
- package/dist/{chunk-L5UONZ53.js → chunk-F23H3U5U.js} +6 -2
- package/dist/{chunk-YPKKEP3O.js → chunk-FES2YEQU.js} +9 -9
- package/dist/{chunk-SPTKLCKC.js → chunk-FIQL2HND.js} +6 -2
- package/dist/{chunk-FP53DDB5.js → chunk-FSNPBT74.js} +5 -1
- package/dist/{chunk-TB427QOK.js → chunk-GEEYCQDS.js} +13 -9
- package/dist/{chunk-ZOVATVQC.js → chunk-HIK6OEUF.js} +6 -1
- package/dist/chunk-K2SON7TI.js +5382 -0
- package/dist/chunk-KFQGP6VL.js +33 -0
- package/dist/{chunk-V2FGX2KD.js → chunk-M55DGGF3.js} +9 -5
- package/dist/{chunk-H4U2QNY2.js → chunk-MI6MA6OP.js} +16888 -13143
- package/dist/{chunk-YDRB55Q4.js → chunk-P7PANON5.js} +5 -1
- package/dist/chunk-RL4VMEXL.js +53 -0
- package/dist/{chunk-XNEMDKV5.js → chunk-RRHUCDRD.js} +1 -1
- package/dist/{chunk-O6UF33QH.js → chunk-RX7TUMBR.js} +320 -136
- package/dist/{chunk-3VYWO6QN.js → chunk-TYV4EUAD.js} +12 -8
- package/dist/{chunk-FJYP32IV.js → chunk-UQZBZINS.js} +6 -6
- package/dist/{chunk-UFQQBGC3.js → chunk-UV3BZMGT.js} +64 -3
- package/dist/{chunk-5PMRARB5.js → chunk-WIQA4BSH.js} +12 -5
- package/dist/{chunk-UQEUYRBP.js → chunk-WWACIIBA.js} +1 -1
- package/dist/{chunk-LVYPPKZI.js → chunk-XTITAVUR.js} +5 -1
- package/dist/{chunk-WEN5Z7CL.js → chunk-YTP2UDPV.js} +3 -3
- package/dist/ci-workflow-RTM7VVTD.js +10 -0
- package/dist/{constants-5JGUXPEK.js → constants-P4M3C2T3.js} +1 -0
- package/dist/{create-skill-QCXINA5Q.js → create-skill-6QWJHQYS.js} +3 -2
- package/dist/{dist-666AAZQ6.js → dist-3EWNRFFQ.js} +6 -1
- package/dist/{dist-RRMRZRV7.js → dist-ABTKRYZH.js} +1 -0
- package/dist/{dist-QW5G3GX3.js → dist-RADHOOXG.js} +4 -1
- package/dist/{dist-7EBSGAHX.js → dist-WCSJHQPK.js} +106 -3
- package/dist/{docs-H34GBVRS.js → docs-UBOGGHTY.js} +6 -5
- package/dist/engine-MJJAP5CH.js +10 -0
- package/dist/{entropy-ZAY73R6A.js → entropy-EMSXF2PX.js} +5 -4
- package/dist/{feedback-TMEGYMWU.js → feedback-ZLUX72HD.js} +2 -1
- package/dist/{generate-agent-definitions-PQPG6SX5.js → generate-agent-definitions-AWLPJ27C.js} +6 -5
- package/dist/{glob-helper-SRXMZPKM.js → glob-helper-VCQXK5XY.js} +2 -0
- package/dist/{graph-loader-M6FXJAKK.js → graph-loader-JHQVQRUS.js} +2 -1
- package/dist/index.d.ts +13 -7
- package/dist/index.js +30 -29
- package/dist/loader-JVSJZSWZ.js +12 -0
- package/dist/mcp-2553PNUC.js +38 -0
- package/dist/{performance-N67YJJDG.js → performance-7AGWJUY4.js} +6 -5
- package/dist/review-pipeline-ZWVQJTJX.js +13 -0
- package/dist/{runner-TY7DJGQV.js → runner-AAEF2TXY.js} +1 -0
- package/dist/runtime-D6YUQPP2.js +11 -0
- package/dist/{scan-U67OKDRS.js → scan-MPJ6JHUY.js} +2 -1
- package/dist/security-JLZUAQYT.js +14 -0
- package/dist/skill-executor-MOCUIAYS.js +9 -0
- package/dist/templates/base/.agnix.toml +16 -0
- package/dist/templates/orchestrator/WORKFLOW.md +55 -7
- package/dist/templates/orchestrator/template.json +1 -0
- package/dist/tool-tiers-7QGZ3FKY.js +98 -0
- package/dist/validate-TIIHRPMA.js +14 -0
- package/dist/validate-cross-check-ZOWFA3DB.js +10 -0
- package/dist/{version-KFFPOQAX.js → version-CUI434OP.js} +1 -0
- package/package.json +4 -4
- package/dist/agents-md-PBKKTSQY.js +0 -9
- package/dist/chunk-5LMZA5LZ.js +0 -38
- package/dist/chunk-OZIHPMA7.js +0 -5171
- package/dist/ci-workflow-QZRHAIO2.js +0 -9
- package/dist/engine-VUQEAJFZ.js +0 -9
- package/dist/loader-Y6A42WBD.js +0 -11
- package/dist/mcp-LCHC4NZ5.js +0 -37
- package/dist/review-pipeline-YXF5ITL2.js +0 -12
- package/dist/runtime-XNJUJCSG.js +0 -10
- package/dist/security-L2YN3CTI.js +0 -9
- package/dist/skill-executor-GA7BDX3F.js +0 -8
- package/dist/validate-MNE25KLZ.js +0 -13
- package/dist/validate-cross-check-Y4PDR63C.js +0 -9
package/dist/index.js
CHANGED
|
@@ -12,30 +12,30 @@ import {
|
|
|
12
12
|
runSnapshotCapture,
|
|
13
13
|
runUninstall,
|
|
14
14
|
runUninstallConstraints
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-AZT567I6.js";
|
|
16
16
|
import {
|
|
17
17
|
generateAgentsMd
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-5BQ5BOJL.js";
|
|
19
19
|
import {
|
|
20
20
|
generateCIWorkflow
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-EHRZMOQ2.js";
|
|
22
22
|
import {
|
|
23
23
|
runCrossCheck
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-XTITAVUR.js";
|
|
25
25
|
import {
|
|
26
26
|
TemplateEngine
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-FSNPBT74.js";
|
|
28
28
|
import "./chunk-CQ553GZO.js";
|
|
29
29
|
import {
|
|
30
30
|
generateRuntime
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-6VZQJ5CX.js";
|
|
32
32
|
import {
|
|
33
33
|
detectTrigger,
|
|
34
34
|
runPersona
|
|
35
35
|
} from "./chunk-GISMXMVL.js";
|
|
36
36
|
import {
|
|
37
37
|
executeSkill
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-WWACIIBA.js";
|
|
39
39
|
import {
|
|
40
40
|
ALLOWED_PERSONA_COMMANDS
|
|
41
41
|
} from "./chunk-TEFCFC4H.js";
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
OutputFormatter,
|
|
44
44
|
OutputMode,
|
|
45
45
|
runCheckPhaseGate
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-FIQL2HND.js";
|
|
47
47
|
import {
|
|
48
48
|
AGENT_DESCRIPTIONS,
|
|
49
49
|
DEFAULT_TOOLS,
|
|
@@ -52,57 +52,58 @@ import {
|
|
|
52
52
|
generateAgentDefinitions,
|
|
53
53
|
renderClaudeCodeAgent,
|
|
54
54
|
renderGeminiAgent
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-AT74HEQM.js";
|
|
56
56
|
import "./chunk-KET4QQZB.js";
|
|
57
57
|
import {
|
|
58
58
|
listPersonas,
|
|
59
59
|
loadPersona
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-P7PANON5.js";
|
|
61
61
|
import {
|
|
62
62
|
runScan
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-4NK7Z3BP.js";
|
|
64
64
|
import {
|
|
65
65
|
createHarnessServer,
|
|
66
66
|
generateSlashCommands,
|
|
67
67
|
getToolDefinitions,
|
|
68
68
|
startServer
|
|
69
|
-
} from "./chunk-
|
|
70
|
-
import "./chunk-
|
|
71
|
-
import "./chunk-
|
|
72
|
-
import "./chunk-
|
|
73
|
-
import "./chunk-
|
|
74
|
-
import "./chunk-
|
|
75
|
-
import "./chunk-
|
|
76
|
-
import "./chunk-
|
|
77
|
-
import "./chunk-
|
|
78
|
-
import "./chunk-
|
|
79
|
-
import "./chunk-
|
|
69
|
+
} from "./chunk-RX7TUMBR.js";
|
|
70
|
+
import "./chunk-FES2YEQU.js";
|
|
71
|
+
import "./chunk-UV3BZMGT.js";
|
|
72
|
+
import "./chunk-F23H3U5U.js";
|
|
73
|
+
import "./chunk-UQZBZINS.js";
|
|
74
|
+
import "./chunk-YTP2UDPV.js";
|
|
75
|
+
import "./chunk-CXJTVICF.js";
|
|
76
|
+
import "./chunk-47N6R2F4.js";
|
|
77
|
+
import "./chunk-GEEYCQDS.js";
|
|
78
|
+
import "./chunk-M55DGGF3.js";
|
|
79
|
+
import "./chunk-TYV4EUAD.js";
|
|
80
80
|
import "./chunk-EPUKTTJZ.js";
|
|
81
81
|
import "./chunk-W6Y7ZW3Y.js";
|
|
82
82
|
import {
|
|
83
83
|
findConfigFile,
|
|
84
84
|
loadConfig,
|
|
85
85
|
resolveConfig
|
|
86
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-WIQA4BSH.js";
|
|
87
87
|
import "./chunk-3ISINLYT.js";
|
|
88
88
|
import "./chunk-6B6UN6SG.js";
|
|
89
|
-
import "./chunk-
|
|
89
|
+
import "./chunk-BOQRTARD.js";
|
|
90
90
|
import "./chunk-BM3PWGXQ.js";
|
|
91
|
-
import "./chunk-
|
|
92
|
-
import "./chunk-
|
|
93
|
-
import "./chunk-
|
|
91
|
+
import "./chunk-MI6MA6OP.js";
|
|
92
|
+
import "./chunk-RL4VMEXL.js";
|
|
93
|
+
import "./chunk-K2SON7TI.js";
|
|
94
94
|
import {
|
|
95
95
|
generateSkillFiles
|
|
96
|
-
} from "./chunk-
|
|
96
|
+
} from "./chunk-RRHUCDRD.js";
|
|
97
97
|
import {
|
|
98
98
|
logger
|
|
99
99
|
} from "./chunk-EBJQ6N4M.js";
|
|
100
|
-
import "./chunk-
|
|
100
|
+
import "./chunk-HIK6OEUF.js";
|
|
101
101
|
import {
|
|
102
102
|
CLIError,
|
|
103
103
|
ExitCode,
|
|
104
104
|
handleError
|
|
105
105
|
} from "./chunk-3WGJMBKH.js";
|
|
106
|
+
import "./chunk-KFQGP6VL.js";
|
|
106
107
|
export {
|
|
107
108
|
AGENT_DESCRIPTIONS,
|
|
108
109
|
ALLOWED_PERSONA_COMMANDS,
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createHarnessServer,
|
|
3
|
+
getToolDefinitions,
|
|
4
|
+
startServer
|
|
5
|
+
} from "./chunk-RX7TUMBR.js";
|
|
6
|
+
import "./chunk-FES2YEQU.js";
|
|
7
|
+
import "./chunk-UV3BZMGT.js";
|
|
8
|
+
import "./chunk-F23H3U5U.js";
|
|
9
|
+
import "./chunk-UQZBZINS.js";
|
|
10
|
+
import "./chunk-YTP2UDPV.js";
|
|
11
|
+
import "./chunk-CXJTVICF.js";
|
|
12
|
+
import {
|
|
13
|
+
resolveProjectConfig
|
|
14
|
+
} from "./chunk-47N6R2F4.js";
|
|
15
|
+
import "./chunk-GEEYCQDS.js";
|
|
16
|
+
import "./chunk-M55DGGF3.js";
|
|
17
|
+
import "./chunk-TYV4EUAD.js";
|
|
18
|
+
import {
|
|
19
|
+
resultToMcpResponse
|
|
20
|
+
} from "./chunk-EPUKTTJZ.js";
|
|
21
|
+
import "./chunk-W6Y7ZW3Y.js";
|
|
22
|
+
import "./chunk-WIQA4BSH.js";
|
|
23
|
+
import "./chunk-3ISINLYT.js";
|
|
24
|
+
import "./chunk-6B6UN6SG.js";
|
|
25
|
+
import "./chunk-BOQRTARD.js";
|
|
26
|
+
import "./chunk-MI6MA6OP.js";
|
|
27
|
+
import "./chunk-RL4VMEXL.js";
|
|
28
|
+
import "./chunk-K2SON7TI.js";
|
|
29
|
+
import "./chunk-HIK6OEUF.js";
|
|
30
|
+
import "./chunk-3WGJMBKH.js";
|
|
31
|
+
import "./chunk-KFQGP6VL.js";
|
|
32
|
+
export {
|
|
33
|
+
createHarnessServer,
|
|
34
|
+
getToolDefinitions,
|
|
35
|
+
resolveProjectConfig,
|
|
36
|
+
resultToMcpResponse,
|
|
37
|
+
startServer
|
|
38
|
+
};
|
|
@@ -7,14 +7,15 @@ import {
|
|
|
7
7
|
handleGetPerfBaselines,
|
|
8
8
|
handleUpdatePerfBaselines,
|
|
9
9
|
updatePerfBaselinesDefinition
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TYV4EUAD.js";
|
|
11
11
|
import "./chunk-EPUKTTJZ.js";
|
|
12
12
|
import "./chunk-W6Y7ZW3Y.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-WIQA4BSH.js";
|
|
14
|
+
import "./chunk-MI6MA6OP.js";
|
|
15
|
+
import "./chunk-RL4VMEXL.js";
|
|
16
|
+
import "./chunk-K2SON7TI.js";
|
|
17
17
|
import "./chunk-3WGJMBKH.js";
|
|
18
|
+
import "./chunk-KFQGP6VL.js";
|
|
18
19
|
export {
|
|
19
20
|
checkPerformanceDefinition,
|
|
20
21
|
getCriticalPathsDefinition,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
handleRunCodeReview,
|
|
3
|
+
runCodeReviewDefinition
|
|
4
|
+
} from "./chunk-F23H3U5U.js";
|
|
5
|
+
import "./chunk-W6Y7ZW3Y.js";
|
|
6
|
+
import "./chunk-MI6MA6OP.js";
|
|
7
|
+
import "./chunk-RL4VMEXL.js";
|
|
8
|
+
import "./chunk-K2SON7TI.js";
|
|
9
|
+
import "./chunk-KFQGP6VL.js";
|
|
10
|
+
export {
|
|
11
|
+
handleRunCodeReview,
|
|
12
|
+
runCodeReviewDefinition
|
|
13
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getSecurityTrendsDefinition,
|
|
3
|
+
handleGetSecurityTrends,
|
|
4
|
+
handleRunSecurityScan,
|
|
5
|
+
runSecurityScanDefinition
|
|
6
|
+
} from "./chunk-UV3BZMGT.js";
|
|
7
|
+
import "./chunk-W6Y7ZW3Y.js";
|
|
8
|
+
import "./chunk-KFQGP6VL.js";
|
|
9
|
+
export {
|
|
10
|
+
getSecurityTrendsDefinition,
|
|
11
|
+
handleGetSecurityTrends,
|
|
12
|
+
handleRunSecurityScan,
|
|
13
|
+
runSecurityScanDefinition
|
|
14
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# agnix configuration — validates CLAUDE.md, hooks, skills, and agent configs.
|
|
2
|
+
# Reference: https://agent-sh.github.io/agnix/docs/configuration
|
|
3
|
+
#
|
|
4
|
+
# Harness runs this config via `harness validate --agent-configs` (hybrid mode):
|
|
5
|
+
# - If the `agnix` binary is on PATH, harness shells out to it (385+ rules).
|
|
6
|
+
# - Otherwise, harness runs a built-in fallback rule set covering the
|
|
7
|
+
# highest-value checks (CLAUDE.md size, invalid hooks, unreachable skills).
|
|
8
|
+
# Install agnix for the full rule catalogue: `cargo install agnix-cli`.
|
|
9
|
+
|
|
10
|
+
target = "claude-code"
|
|
11
|
+
strict = false
|
|
12
|
+
max_files = 10000
|
|
13
|
+
locale = "en"
|
|
14
|
+
|
|
15
|
+
[rules]
|
|
16
|
+
disabled_rules = []
|
|
@@ -17,13 +17,37 @@ hooks:
|
|
|
17
17
|
agent:
|
|
18
18
|
backend: claude
|
|
19
19
|
command: claude
|
|
20
|
+
# Local model for autonomous execution of simple tasks
|
|
21
|
+
localBackend: pi
|
|
22
|
+
localEndpoint: http://localhost:1234/v1
|
|
23
|
+
localModel: gemma-4-e4b
|
|
24
|
+
# Escalation routing — controls what runs locally vs primary vs human
|
|
25
|
+
escalation:
|
|
26
|
+
alwaysHuman: [full-exploration]
|
|
27
|
+
autoExecute: [quick-fix, diagnostic]
|
|
28
|
+
primaryExecute: [guided-change]
|
|
29
|
+
signalGated: []
|
|
30
|
+
diagnosticRetryBudget: 1
|
|
20
31
|
maxConcurrentAgents: 1
|
|
21
32
|
maxTurns: 10
|
|
22
33
|
maxRetryBackoffMs: 5000
|
|
23
34
|
maxConcurrentAgentsByState: {}
|
|
35
|
+
globalCooldownMs: 60000
|
|
36
|
+
maxRequestsPerMinute: 50
|
|
37
|
+
maxRequestsPerSecond: 1
|
|
38
|
+
# Default limits based on Anthropic Tier 3. Adjust according to your account tier.
|
|
39
|
+
# Tier 1: 40k ITPM / 10k OTPM
|
|
40
|
+
# Tier 2: 200k ITPM / 40k OTPM
|
|
41
|
+
# Tier 3: 400k ITPM / 80k OTPM
|
|
42
|
+
# Tier 4: 1m ITPM / 200k OTPM
|
|
43
|
+
maxInputTokensPerMinute: 400000
|
|
44
|
+
maxOutputTokensPerMinute: 80000
|
|
24
45
|
turnTimeoutMs: 300000
|
|
25
46
|
readTimeoutMs: 30000
|
|
26
47
|
stallTimeoutMs: 60000
|
|
48
|
+
intelligence:
|
|
49
|
+
enabled: true
|
|
50
|
+
requestTimeoutMs: 180000
|
|
27
51
|
server:
|
|
28
52
|
port: 8080
|
|
29
53
|
---
|
|
@@ -31,18 +55,42 @@ server:
|
|
|
31
55
|
# Prompt Template
|
|
32
56
|
|
|
33
57
|
You are an expert coding agent working on the Harness Engineering project.
|
|
34
|
-
Your goal is to implement the following issue
|
|
58
|
+
Your goal is to implement the following issue using the standard Harness Engineering workflow.
|
|
35
59
|
|
|
36
60
|
## Issue: {{ issue.title }}
|
|
37
61
|
|
|
38
62
|
**Identifier:** {{ issue.identifier }}
|
|
39
|
-
**
|
|
63
|
+
**Description:** {{ issue.description }}
|
|
40
64
|
|
|
41
|
-
##
|
|
65
|
+
## Standard Workflow
|
|
42
66
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
67
|
+
Follow these steps exactly, using the corresponding slash commands to ensure high-quality, architecturally sound delivery:
|
|
68
|
+
|
|
69
|
+
1. **Brainstorming:** Use `/harness:brainstorming` to explore the problem space and draft a technical proposal in `docs/changes/`.
|
|
70
|
+
2. **Planning:** Use `/harness:planning` to create a detailed implementation plan and task breakdown.
|
|
71
|
+
3. **Execution:** Use `/harness:execution` to implement the changes task-by-task, following TDD principles.
|
|
72
|
+
4. **Verification:** Use `/harness:verification` to ensure the implementation is complete, wired correctly, and meets all requirements.
|
|
73
|
+
5. **Code Review:** Use `/harness:code-review` and `/harness:pre-commit-review` to perform a final quality check before completing the task.
|
|
74
|
+
6. **Ship:** When the review is clean, you are pre-authorized to ship without asking:
|
|
75
|
+
- Create a topic branch if you are still on `main`/`master` (e.g. `feat/{{ issue.identifier }}`).
|
|
76
|
+
- Stage your changes and create a descriptive commit (Conventional Commits style).
|
|
77
|
+
- Push the branch with `git push -u origin HEAD`.
|
|
78
|
+
- Open a pull request. Use a HEREDOC for the body to preserve newlines:
|
|
79
|
+
```
|
|
80
|
+
gh pr create --title "<title>" --body "$(cat <<'EOF'
|
|
81
|
+
## Summary
|
|
82
|
+
<body content with real newlines>
|
|
83
|
+
EOF
|
|
84
|
+
)"
|
|
85
|
+
```
|
|
86
|
+
Or use `gh pr create --fill` to auto-generate from commit messages.
|
|
87
|
+
- Report the PR URL as your final output, then stop. Do not await further instructions — this is the terminal step of the workflow.
|
|
88
|
+
|
|
89
|
+
## Rules
|
|
90
|
+
|
|
91
|
+
- Always verify your changes with `harness validate`.
|
|
92
|
+
- Adhere to the architectural constraints defined in `harness.config.json`.
|
|
93
|
+
- Document your progress and any learnings in `.harness/learnings.md`.
|
|
94
|
+
- Step 6 (Ship) is part of the standard workflow. Do not pause to ask for commit authorization — completing the issue means the PR has been opened.
|
|
47
95
|
|
|
48
96
|
Attempt Number: {{ attempt }}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import "./chunk-KFQGP6VL.js";
|
|
2
|
+
|
|
3
|
+
// src/mcp/tool-tiers.ts
|
|
4
|
+
var CORE_TOOL_NAMES = [
|
|
5
|
+
"validate_project",
|
|
6
|
+
"check_dependencies",
|
|
7
|
+
"check_docs",
|
|
8
|
+
"query_graph",
|
|
9
|
+
"get_impact",
|
|
10
|
+
"manage_state",
|
|
11
|
+
"run_skill",
|
|
12
|
+
"code_search",
|
|
13
|
+
"code_outline",
|
|
14
|
+
"compact"
|
|
15
|
+
];
|
|
16
|
+
var STANDARD_EXTRA = [
|
|
17
|
+
// Review / scan / analysis
|
|
18
|
+
"run_code_review",
|
|
19
|
+
"run_security_scan",
|
|
20
|
+
"detect_entropy",
|
|
21
|
+
"check_performance",
|
|
22
|
+
"review_changes",
|
|
23
|
+
"analyze_diff",
|
|
24
|
+
// Graph navigation
|
|
25
|
+
"find_context_for",
|
|
26
|
+
"get_relationships",
|
|
27
|
+
"search_similar",
|
|
28
|
+
"compute_blast_radius",
|
|
29
|
+
"ask_graph",
|
|
30
|
+
// Workflow
|
|
31
|
+
"manage_roadmap",
|
|
32
|
+
"check_phase_gate",
|
|
33
|
+
"gather_context",
|
|
34
|
+
"assess_project",
|
|
35
|
+
"recommend_skills",
|
|
36
|
+
"search_skills",
|
|
37
|
+
"code_unfold"
|
|
38
|
+
];
|
|
39
|
+
var STANDARD_TOOL_NAMES = [...CORE_TOOL_NAMES, ...STANDARD_EXTRA];
|
|
40
|
+
var DEFAULT_CHARS_PER_TOKEN = 4;
|
|
41
|
+
function estimateBaselineTokens(definitions, charsPerToken = DEFAULT_CHARS_PER_TOKEN) {
|
|
42
|
+
if (charsPerToken <= 0) {
|
|
43
|
+
throw new Error("charsPerToken must be > 0");
|
|
44
|
+
}
|
|
45
|
+
let totalChars = 0;
|
|
46
|
+
for (const def of definitions) {
|
|
47
|
+
totalChars += def.name.length;
|
|
48
|
+
totalChars += def.description.length;
|
|
49
|
+
totalChars += JSON.stringify(def.inputSchema).length;
|
|
50
|
+
}
|
|
51
|
+
return Math.ceil(totalChars / charsPerToken);
|
|
52
|
+
}
|
|
53
|
+
var DEFAULT_BUDGETS = {
|
|
54
|
+
coreMax: 4e3,
|
|
55
|
+
standardMax: 12e3
|
|
56
|
+
};
|
|
57
|
+
function selectTier(definitions, options = {}) {
|
|
58
|
+
const budgets = options.budgets ?? DEFAULT_BUDGETS;
|
|
59
|
+
const charsPerToken = options.charsPerToken ?? DEFAULT_CHARS_PER_TOKEN;
|
|
60
|
+
const tier = resolveTier(options, budgets);
|
|
61
|
+
const filter = filterForTier(tier, definitions);
|
|
62
|
+
const effectiveDefs = filter === void 0 ? definitions : definitions.filter((d) => filter.includes(d.name));
|
|
63
|
+
const estimatedTokens = estimateBaselineTokens(effectiveDefs, charsPerToken);
|
|
64
|
+
return {
|
|
65
|
+
tier,
|
|
66
|
+
filter,
|
|
67
|
+
estimatedTokens,
|
|
68
|
+
reason: explainTier(tier, options, budgets)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function resolveTier(options, budgets) {
|
|
72
|
+
if (options.overrideTier) return options.overrideTier;
|
|
73
|
+
const budget = options.tokenBudget;
|
|
74
|
+
if (budget === void 0) return "full";
|
|
75
|
+
if (budget < budgets.coreMax) return "core";
|
|
76
|
+
if (budget < budgets.standardMax) return "standard";
|
|
77
|
+
return "full";
|
|
78
|
+
}
|
|
79
|
+
function filterForTier(tier, definitions) {
|
|
80
|
+
if (tier === "full") return void 0;
|
|
81
|
+
const allow = tier === "core" ? CORE_TOOL_NAMES : STANDARD_TOOL_NAMES;
|
|
82
|
+
const allowSet = new Set(allow);
|
|
83
|
+
const present = new Set(definitions.map((d) => d.name));
|
|
84
|
+
return allow.filter((name) => present.has(name) && allowSet.has(name));
|
|
85
|
+
}
|
|
86
|
+
function explainTier(tier, options, budgets) {
|
|
87
|
+
if (options.overrideTier) return `override: ${options.overrideTier}`;
|
|
88
|
+
if (options.tokenBudget === void 0) return "no budget specified; defaulting to full";
|
|
89
|
+
return `tokenBudget=${options.tokenBudget} \u2192 ${tier} (thresholds: core<${budgets.coreMax}, standard<${budgets.standardMax})`;
|
|
90
|
+
}
|
|
91
|
+
export {
|
|
92
|
+
CORE_TOOL_NAMES,
|
|
93
|
+
DEFAULT_BUDGETS,
|
|
94
|
+
DEFAULT_CHARS_PER_TOKEN,
|
|
95
|
+
STANDARD_TOOL_NAMES,
|
|
96
|
+
estimateBaselineTokens,
|
|
97
|
+
selectTier
|
|
98
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
handleValidateProject,
|
|
3
|
+
validateToolDefinition
|
|
4
|
+
} from "./chunk-YTP2UDPV.js";
|
|
5
|
+
import "./chunk-47N6R2F4.js";
|
|
6
|
+
import "./chunk-W6Y7ZW3Y.js";
|
|
7
|
+
import "./chunk-MI6MA6OP.js";
|
|
8
|
+
import "./chunk-RL4VMEXL.js";
|
|
9
|
+
import "./chunk-K2SON7TI.js";
|
|
10
|
+
import "./chunk-KFQGP6VL.js";
|
|
11
|
+
export {
|
|
12
|
+
handleValidateProject,
|
|
13
|
+
validateToolDefinition
|
|
14
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@harness-engineering/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.0",
|
|
4
4
|
"description": "CLI for Harness Engineering toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"web-tree-sitter": "^0.24.7",
|
|
38
38
|
"yaml": "^2.8.3",
|
|
39
39
|
"zod": "^3.25.76",
|
|
40
|
-
"@harness-engineering/core": "0.
|
|
41
|
-
"@harness-engineering/dashboard": "0.1.
|
|
40
|
+
"@harness-engineering/core": "0.22.0",
|
|
41
|
+
"@harness-engineering/dashboard": "0.1.5",
|
|
42
42
|
"@harness-engineering/graph": "0.4.3",
|
|
43
43
|
"@harness-engineering/linter-gen": "0.1.6",
|
|
44
|
-
"@harness-engineering/orchestrator": "0.2.
|
|
44
|
+
"@harness-engineering/orchestrator": "0.2.8",
|
|
45
45
|
"@harness-engineering/types": "0.9.2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
package/dist/chunk-5LMZA5LZ.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// ../types/dist/index.mjs
|
|
2
|
-
function Ok(value) {
|
|
3
|
-
return { ok: true, value };
|
|
4
|
-
}
|
|
5
|
-
function Err(error) {
|
|
6
|
-
return { ok: false, error };
|
|
7
|
-
}
|
|
8
|
-
function isOk(result) {
|
|
9
|
-
return result.ok === true;
|
|
10
|
-
}
|
|
11
|
-
function isErr(result) {
|
|
12
|
-
return result.ok === false;
|
|
13
|
-
}
|
|
14
|
-
var STANDARD_COGNITIVE_MODES = [
|
|
15
|
-
"adversarial-reviewer",
|
|
16
|
-
"constructive-architect",
|
|
17
|
-
"meticulous-implementer",
|
|
18
|
-
"diagnostic-investigator",
|
|
19
|
-
"advisory-guide",
|
|
20
|
-
"meticulous-verifier"
|
|
21
|
-
];
|
|
22
|
-
var SESSION_SECTION_NAMES = [
|
|
23
|
-
"terminology",
|
|
24
|
-
"decisions",
|
|
25
|
-
"constraints",
|
|
26
|
-
"risks",
|
|
27
|
-
"openQuestions",
|
|
28
|
-
"evidence"
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
export {
|
|
32
|
-
Ok,
|
|
33
|
-
Err,
|
|
34
|
-
isOk,
|
|
35
|
-
isErr,
|
|
36
|
-
STANDARD_COGNITIVE_MODES,
|
|
37
|
-
SESSION_SECTION_NAMES
|
|
38
|
-
};
|