harness-engineering-agent 0.1.2 → 0.1.3
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/README.md +17 -6
- package/dist/mcp/cli.d.ts +3 -0
- package/dist/mcp/cli.d.ts.map +1 -0
- package/dist/mcp/cli.js +17 -0
- package/dist/mcp/cli.js.map +1 -0
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +24 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
- package/dist/plugin/create-harness-plugin.js +1 -16
- package/dist/plugin/create-harness-plugin.js.map +1 -1
- package/dist/plugin/harness-agent-config.js +2 -2
- package/dist/plugin/harness-agent-config.js.map +1 -1
- package/dist/tools/harness-research-tools.d.ts +3 -13
- package/dist/tools/harness-research-tools.d.ts.map +1 -1
- package/dist/tools/harness-research-tools.js +75 -80
- package/dist/tools/harness-research-tools.js.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -192,21 +192,21 @@ Luban / harness-worker:
|
|
|
192
192
|
|
|
193
193
|
`harness` primary 同样只读,不使用任何研究工具。
|
|
194
194
|
|
|
195
|
-
##
|
|
195
|
+
## Harness MCP 工具
|
|
196
196
|
|
|
197
|
-
Harness
|
|
197
|
+
Harness 通过本地 stdio MCP Server 提供以下只读工程工具:
|
|
198
198
|
|
|
199
199
|
- `harness_context7_resolve`、`harness_context7_query`:直连 Context7 官方 HTTP API。
|
|
200
200
|
- `harness_grep_app_search`:通过自研 Streamable HTTP MCP 客户端调用 grep.app 官方 `searchGitHub`。
|
|
201
201
|
- `harness_lsp_status`、`harness_lsp_diagnostics`、`harness_lsp_definition`、`harness_lsp_references`:通过自研 JSON-RPC stdio 客户端访问 JDT LS 和 TypeScript Language Server。
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
OpenCode 以 `harness` 作为 MCP Server 名称,因此最终工具名保持 `harness_*`。工具使用权限按角色分配:
|
|
204
204
|
|
|
205
205
|
- **全部研究工具**:Fuxi(Planner)、Luban(Worker)、Zhulong(Verifier)、Xingtian(Failure Analyzer)、Jingwei(Repair Worker)。
|
|
206
206
|
- **grep.app + LSP**:Yinglong(Acceptance)。
|
|
207
207
|
- **不使用研究工具**:Harness(primary)、Nuwa(Intake)。
|
|
208
208
|
|
|
209
|
-
LSP 只提供只读查询,不实现重命名或代码写入。JDT LS
|
|
209
|
+
LSP 只提供只读查询,不实现重命名或代码写入。JDT LS 数据目录位于系统临时目录,并在 MCP Server 退出时清理。
|
|
210
210
|
|
|
211
211
|
Context7 默认匿名访问,可通过环境变量 `CONTEXT7_API_KEY` 提升限额。JDT LS 命令可通过 `HARNESS_JDTLS_COMMAND` 覆盖。
|
|
212
212
|
|
|
@@ -373,18 +373,29 @@ pnpm publish:npm -- --token-auth
|
|
|
373
373
|
|
|
374
374
|
## OpenCode npm 引用
|
|
375
375
|
|
|
376
|
-
发布后在 `opencode.json`
|
|
376
|
+
发布后在 `opencode.json` 中加载插件并注册 Harness MCP Server:
|
|
377
377
|
|
|
378
378
|
```json
|
|
379
379
|
{
|
|
380
380
|
"$schema": "https://opencode.ai/config.json",
|
|
381
|
-
"plugin": ["harness-engineering-agent"]
|
|
381
|
+
"plugin": ["harness-engineering-agent"],
|
|
382
|
+
"mcp": {
|
|
383
|
+
"harness": {
|
|
384
|
+
"type": "local",
|
|
385
|
+
"command": ["npx", "-y", "harness-engineering-agent@latest"],
|
|
386
|
+
"enabled": true,
|
|
387
|
+
"timeout": 30000
|
|
388
|
+
}
|
|
389
|
+
}
|
|
382
390
|
}
|
|
383
391
|
```
|
|
384
392
|
|
|
385
393
|
OpenCode 会通过包的 `./server` 导出加载专用插件入口;根入口仍保留完整 SDK 导出,供其它
|
|
386
394
|
npm 调用方使用。
|
|
387
395
|
|
|
396
|
+
Harness 的内部 Agent 使用 `mode: "all"` 注册,会显示在 OpenCode Agent/Model 选择列表中,
|
|
397
|
+
同时仍可作为 Harness 内部会话角色调用。
|
|
398
|
+
|
|
388
399
|
## 项目配置
|
|
389
400
|
|
|
390
401
|
在目标项目创建 `.harness/config.yaml`:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":""}
|
package/dist/mcp/cli.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { createHarnessMcpServer } from "./server.js";
|
|
4
|
+
const runtime = createHarnessMcpServer();
|
|
5
|
+
const transport = new StdioServerTransport();
|
|
6
|
+
const shutdown = async () => {
|
|
7
|
+
await runtime.close();
|
|
8
|
+
await runtime.server.close();
|
|
9
|
+
};
|
|
10
|
+
process.once("SIGINT", () => {
|
|
11
|
+
void shutdown();
|
|
12
|
+
});
|
|
13
|
+
process.once("SIGTERM", () => {
|
|
14
|
+
void shutdown();
|
|
15
|
+
});
|
|
16
|
+
await runtime.server.connect(transport);
|
|
17
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAA;AACxC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;AAE5C,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;IACzC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACrB,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;AAC9B,CAAC,CAAA;AAED,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC1B,KAAK,QAAQ,EAAE,CAAA;AACjB,CAAC,CAAC,CAAA;AACF,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;IAC3B,KAAK,QAAQ,EAAE,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AASnE,eAAO,MAAM,sBAAsB,QAAO;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CA2BpC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { createContext7Client } from "../tools/context7-client.js";
|
|
3
|
+
import { createGrepAppClient } from "../tools/grep-app-client.js";
|
|
4
|
+
import { registerHarnessResearchTools } from "../tools/harness-research-tools.js";
|
|
5
|
+
import { createLspClient } from "../tools/lsp-client.js";
|
|
6
|
+
const CONTEXT7_API_KEY = "CONTEXT7_API_KEY";
|
|
7
|
+
export const createHarnessMcpServer = () => {
|
|
8
|
+
const lsp = createLspClient();
|
|
9
|
+
const server = new McpServer({
|
|
10
|
+
name: "harness",
|
|
11
|
+
version: "1.0.0",
|
|
12
|
+
}, {
|
|
13
|
+
capabilities: { tools: {} },
|
|
14
|
+
instructions: "Harness research tools are read-only and intended for Harness internal agents.",
|
|
15
|
+
});
|
|
16
|
+
const context7ApiKey = process.env[CONTEXT7_API_KEY];
|
|
17
|
+
registerHarnessResearchTools(server, {
|
|
18
|
+
context7: createContext7Client(context7ApiKey === undefined ? {} : { apiKey: context7ApiKey }),
|
|
19
|
+
grepApp: createGrepAppClient(),
|
|
20
|
+
lsp,
|
|
21
|
+
}, process.cwd());
|
|
22
|
+
return { server, close: () => lsp.close() };
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAGpC,EAAE;IACF,MAAM,GAAG,GAAG,eAAe,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,YAAY,EACV,gFAAgF;KACnF,CACF,CAAA;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IACpD,4BAA4B,CAC1B,MAAM,EACN;QACE,QAAQ,EAAE,oBAAoB,CAC5B,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAC/D;QACD,OAAO,EAAE,mBAAmB,EAAE;QAC9B,GAAG;KACJ,EACD,OAAO,CAAC,GAAG,EAAE,CACd,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAA;AAC7C,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-harness-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"create-harness-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,KAAK,+BAA+B,EAEpC,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EACnC,MAAM,wCAAwC,CAAA;AAE/C,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,QAAQ,CAAA;IAChF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,KAAK,cAAc,CAAA;IACjG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,aAAa,CAAA;IAClD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,kBAAkB,CAAA;IACxF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;QAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;QACxB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;QACvC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAA;QAC/C,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;QAC/B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;KACjC,KAAK,aAAa,CAAA;IACnB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,kBAAkB,CAAA;IAC3F,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE;QAC/C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;QAC9B,QAAQ,CAAC,MAAM,EAAE;YACf,QAAQ,CAAC,OAAO,EAAE;gBAChB,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;aAC9E,CAAA;SACF,CAAA;KACF,KAAK,6BAA6B,CAAA;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAA;CAClC,CAAA;AAWD,eAAO,MAAM,mBAAmB,GAAI,eAAc,yBAA8B,KAAG,MAoClF,CAAA;AAED,eAAO,MAAM,aAAa,QAAwB,CAAA;AAyIlD,eAAO,MAAM,yBAAyB,GACpC,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAAC,KACjD,MAAoD,CAAA"}
|
|
@@ -5,10 +5,6 @@ import { createRunController, } from "../controller/index.js";
|
|
|
5
5
|
import { RunIdSchema } from "../domain/index.js";
|
|
6
6
|
import { createOpencodeSessionAdapter, createOpencodeSessionClient, } from "../session/index.js";
|
|
7
7
|
import { createFilesystemRunStore } from "../store/index.js";
|
|
8
|
-
import { createContext7Client } from "../tools/context7-client.js";
|
|
9
|
-
import { createGrepAppClient } from "../tools/grep-app-client.js";
|
|
10
|
-
import { createHarnessResearchTools } from "../tools/harness-research-tools.js";
|
|
11
|
-
import { createLspClient } from "../tools/lsp-client.js";
|
|
12
8
|
import { createNodeProcessRunner, createVerificationRunner, } from "../verification/index.js";
|
|
13
9
|
import { applyHarnessAgentConfig } from "./harness-agent-config.js";
|
|
14
10
|
import { handleHarnessChatMessage } from "./harness-chat-hook.js";
|
|
@@ -22,8 +18,7 @@ export const createHarnessPlugin = (dependencies = {}) => {
|
|
|
22
18
|
runtime.coordinator === undefined ||
|
|
23
19
|
runtime.parentSessionDispatcher === undefined ||
|
|
24
20
|
runtime.projectRoot === undefined ||
|
|
25
|
-
runtime.sessionGuards === undefined
|
|
26
|
-
runtime.researchClients === undefined) {
|
|
21
|
+
runtime.sessionGuards === undefined) {
|
|
27
22
|
return {};
|
|
28
23
|
}
|
|
29
24
|
const config = runtime.config;
|
|
@@ -31,10 +26,7 @@ export const createHarnessPlugin = (dependencies = {}) => {
|
|
|
31
26
|
const parentSessionDispatcher = runtime.parentSessionDispatcher;
|
|
32
27
|
const projectRoot = runtime.projectRoot;
|
|
33
28
|
const sessionGuards = runtime.sessionGuards;
|
|
34
|
-
const researchClients = runtime.researchClients;
|
|
35
29
|
return {
|
|
36
|
-
tool: createHarnessResearchTools(researchClients),
|
|
37
|
-
dispose: async () => researchClients.lsp.close(),
|
|
38
30
|
config: async (mutableConfig) => {
|
|
39
31
|
applyHarnessAgentConfig(mutableConfig, config);
|
|
40
32
|
},
|
|
@@ -91,12 +83,6 @@ const createRuntime = async (input, dependencies) => {
|
|
|
91
83
|
internalSessionIds: new Set(),
|
|
92
84
|
};
|
|
93
85
|
const parentSessionClient = asParentSessionClient(input.client);
|
|
94
|
-
const context7ApiKey = process.env[String("CONTEXT7_API_KEY")];
|
|
95
|
-
const researchClients = {
|
|
96
|
-
context7: createContext7Client(context7ApiKey === undefined ? {} : { apiKey: context7ApiKey }),
|
|
97
|
-
grepApp: createGrepAppClient(),
|
|
98
|
-
lsp: createLspClient(),
|
|
99
|
-
};
|
|
100
86
|
const controller = (dependencies.createController ??
|
|
101
87
|
((options) => createRunController({
|
|
102
88
|
store: options.store,
|
|
@@ -150,7 +136,6 @@ const createRuntime = async (input, dependencies) => {
|
|
|
150
136
|
parentSessionDispatcher,
|
|
151
137
|
projectRoot,
|
|
152
138
|
sessionGuards,
|
|
153
|
-
researchClients,
|
|
154
139
|
};
|
|
155
140
|
};
|
|
156
141
|
const createIdSource = () => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-harness-plugin.js","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,OAAO,EAAsB,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAGL,mBAAmB,GAEpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,GAE5B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAiB,MAAM,mBAAmB,CAAA;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"create-harness-plugin.js","sourceRoot":"","sources":["../../src/plugin/create-harness-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ const RESEARCH_TOOL_NAMES = [
|
|
|
17
17
|
"harness_lsp_references",
|
|
18
18
|
];
|
|
19
19
|
const createReadOnlyAgent = (input) => ({
|
|
20
|
-
mode: "
|
|
20
|
+
mode: "all",
|
|
21
21
|
model: input.model,
|
|
22
22
|
description: input.description,
|
|
23
23
|
prompt: input.prompt,
|
|
@@ -32,7 +32,7 @@ const createReadOnlyAgent = (input) => ({
|
|
|
32
32
|
permission: { edit: "deny", bash: "deny" },
|
|
33
33
|
});
|
|
34
34
|
const createWorkerAgent = (model) => ({
|
|
35
|
-
mode: "
|
|
35
|
+
mode: "all",
|
|
36
36
|
model,
|
|
37
37
|
description: "Internal Harness Worker executor; the only Harness role allowed to modify code.",
|
|
38
38
|
prompt: "你是 Harness Worker 子 Agent。仅在允许路径内实现任务,输出结构化结果,不要切换角色。",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-agent-config.js","sourceRoot":"","sources":["../../src/plugin/harness-agent-config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,gCAAgC,EAChC,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,mCAAmC,CAAA;AAE1C,MAAM,yBAAyB,GAC7B,+FAA+F,CAAA;AACjG,MAAM,oBAAoB,GAAG;IAC3B,wCAAwC;IACxC,2CAA2C;IAC3C,+FAA+F;IAC/F,mDAAmD;IACnD,gCAAgC;CACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACZ,MAAM,mBAAmB,GAAG;IAC1B,0BAA0B;IAC1B,wBAAwB;IACxB,yBAAyB;IACzB,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;CAChB,CAAA;AAEV,MAAM,mBAAmB,GAAG,CAAC,KAK5B,EAAwC,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"harness-agent-config.js","sourceRoot":"","sources":["../../src/plugin/harness-agent-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { Context7Client } from "./context7-client.js";
|
|
3
3
|
import type { GrepAppClient } from "./grep-app-client.js";
|
|
4
4
|
import type { LspClient } from "./lsp-client.js";
|
|
5
|
-
type ResearchClients = {
|
|
5
|
+
export type ResearchClients = {
|
|
6
6
|
readonly context7: Context7Client;
|
|
7
7
|
readonly grepApp: GrepAppClient;
|
|
8
8
|
readonly lsp: LspClient;
|
|
9
9
|
};
|
|
10
|
-
export
|
|
11
|
-
readonly harness_context7_resolve: ToolDefinition;
|
|
12
|
-
readonly harness_context7_query: ToolDefinition;
|
|
13
|
-
readonly harness_grep_app_search: ToolDefinition;
|
|
14
|
-
readonly harness_lsp_status: ToolDefinition;
|
|
15
|
-
readonly harness_lsp_diagnostics: ToolDefinition;
|
|
16
|
-
readonly harness_lsp_definition: ToolDefinition;
|
|
17
|
-
readonly harness_lsp_references: ToolDefinition;
|
|
18
|
-
};
|
|
19
|
-
export declare const createHarnessResearchTools: (clients: ResearchClients) => HarnessResearchTools;
|
|
20
|
-
export {};
|
|
10
|
+
export declare const registerHarnessResearchTools: (server: McpServer, clients: ResearchClients, workspaceRoot: string) => void;
|
|
21
11
|
//# sourceMappingURL=harness-research-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-research-tools.d.ts","sourceRoot":"","sources":["../../src/tools/harness-research-tools.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"harness-research-tools.d.ts","sourceRoot":"","sources":["../../src/tools/harness-research-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAIxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,QAAQ,SAAS,EACjB,SAAS,eAAe,EACxB,eAAe,MAAM,KACpB,IA8FF,CAAA"}
|
|
@@ -1,101 +1,96 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from "zod";
|
|
2
2
|
import { sanitizeResearchToolOutput } from "../verification/command-policy.js";
|
|
3
|
-
const
|
|
4
|
-
"
|
|
5
|
-
"harness-worker",
|
|
6
|
-
"harness-verifier",
|
|
7
|
-
"harness-failure-analyzer",
|
|
8
|
-
]);
|
|
9
|
-
const GREP_ROLES = new Set([...RESEARCH_ROLES, "harness-acceptance"]);
|
|
10
|
-
const LSP_ROLES = new Set([...RESEARCH_ROLES, "harness-acceptance"]);
|
|
11
|
-
export const createHarnessResearchTools = (clients) => ({
|
|
12
|
-
harness_context7_resolve: tool({
|
|
3
|
+
export const registerHarnessResearchTools = (server, clients, workspaceRoot) => {
|
|
4
|
+
server.registerTool("context7_resolve", {
|
|
13
5
|
description: "Search Context7 for a library documentation source.",
|
|
14
|
-
|
|
15
|
-
libraryName:
|
|
16
|
-
query:
|
|
6
|
+
inputSchema: {
|
|
7
|
+
libraryName: z.string().trim().min(1),
|
|
8
|
+
query: z.string().trim().min(1),
|
|
17
9
|
},
|
|
18
|
-
|
|
19
|
-
}),
|
|
20
|
-
|
|
10
|
+
annotations: { readOnlyHint: true },
|
|
11
|
+
}, async ({ libraryName, query }) => researchResult(clients.context7.resolveLibrary({ libraryName, query })));
|
|
12
|
+
server.registerTool("context7_query", {
|
|
21
13
|
description: "Query official Context7 documentation snippets.",
|
|
22
|
-
|
|
23
|
-
libraryId:
|
|
14
|
+
inputSchema: {
|
|
15
|
+
libraryId: z
|
|
24
16
|
.string()
|
|
25
17
|
.trim()
|
|
26
18
|
.regex(/^\/[^/]+\/[^/]+/),
|
|
27
|
-
query:
|
|
19
|
+
query: z.string().trim().min(1),
|
|
28
20
|
},
|
|
29
|
-
|
|
30
|
-
}),
|
|
31
|
-
|
|
21
|
+
annotations: { readOnlyHint: true },
|
|
22
|
+
}, async ({ libraryId, query }) => researchResult(clients.context7.queryDocs({ libraryId, query })));
|
|
23
|
+
server.registerTool("grep_app_search", {
|
|
32
24
|
description: "Search public GitHub code through the official grep.app MCP service.",
|
|
33
|
-
|
|
34
|
-
query:
|
|
35
|
-
language:
|
|
36
|
-
repo:
|
|
37
|
-
path:
|
|
38
|
-
useRegexp:
|
|
39
|
-
matchCase:
|
|
40
|
-
matchWholeWords:
|
|
25
|
+
inputSchema: {
|
|
26
|
+
query: z.string().trim().min(1),
|
|
27
|
+
language: z.array(z.string().trim().min(1)).optional(),
|
|
28
|
+
repo: z.string().trim().min(1).optional(),
|
|
29
|
+
path: z.string().trim().min(1).optional(),
|
|
30
|
+
useRegexp: z.boolean().optional(),
|
|
31
|
+
matchCase: z.boolean().optional(),
|
|
32
|
+
matchWholeWords: z.boolean().optional(),
|
|
41
33
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
})
|
|
51
|
-
})
|
|
52
|
-
|
|
34
|
+
annotations: { readOnlyHint: true },
|
|
35
|
+
}, async (args) => researchResult(clients.grepApp.search({
|
|
36
|
+
query: args.query,
|
|
37
|
+
...(args.language === undefined ? {} : { language: args.language }),
|
|
38
|
+
...(args.repo === undefined ? {} : { repo: args.repo }),
|
|
39
|
+
...(args.path === undefined ? {} : { path: args.path }),
|
|
40
|
+
...(args.useRegexp === undefined ? {} : { useRegexp: args.useRegexp }),
|
|
41
|
+
...(args.matchCase === undefined ? {} : { matchCase: args.matchCase }),
|
|
42
|
+
...(args.matchWholeWords === undefined ? {} : { matchWholeWords: args.matchWholeWords }),
|
|
43
|
+
})));
|
|
44
|
+
server.registerTool("lsp_status", {
|
|
53
45
|
description: "Report available Harness LSP servers.",
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
})
|
|
57
|
-
|
|
46
|
+
inputSchema: {},
|
|
47
|
+
annotations: { readOnlyHint: true },
|
|
48
|
+
}, async () => researchResult(clients.lsp.status()));
|
|
49
|
+
server.registerTool("lsp_diagnostics", {
|
|
58
50
|
description: "Read diagnostics for a JavaScript, TypeScript, or Java file.",
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}),
|
|
62
|
-
|
|
51
|
+
inputSchema: lspInputSchema(),
|
|
52
|
+
annotations: { readOnlyHint: true },
|
|
53
|
+
}, async (args) => researchResult(clients.lsp.diagnostics({ ...args, workspaceRoot })));
|
|
54
|
+
server.registerTool("lsp_definition", {
|
|
63
55
|
description: "Resolve the definition at a source position.",
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}),
|
|
67
|
-
|
|
56
|
+
inputSchema: lspInputSchema(),
|
|
57
|
+
annotations: { readOnlyHint: true },
|
|
58
|
+
}, async (args) => researchResult(clients.lsp.definition({ ...args, workspaceRoot })));
|
|
59
|
+
server.registerTool("lsp_references", {
|
|
68
60
|
description: "Find references at a source position.",
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}),
|
|
72
|
-
}
|
|
73
|
-
const
|
|
74
|
-
filePath:
|
|
75
|
-
line:
|
|
76
|
-
column:
|
|
61
|
+
inputSchema: lspInputSchema(),
|
|
62
|
+
annotations: { readOnlyHint: true },
|
|
63
|
+
}, async (args) => researchResult(clients.lsp.references({ ...args, workspaceRoot })));
|
|
64
|
+
};
|
|
65
|
+
const lspInputSchema = () => ({
|
|
66
|
+
filePath: z.string().trim().min(1),
|
|
67
|
+
line: z.number().int().positive(),
|
|
68
|
+
column: z.number().int().positive(),
|
|
77
69
|
});
|
|
78
|
-
const
|
|
79
|
-
if (!context.agent.startsWith("harness-")) {
|
|
80
|
-
return JSON.stringify({
|
|
81
|
-
status: "denied",
|
|
82
|
-
reason: "tool is restricted to Harness internal agents",
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
if (!allowedRoles.has(context.agent)) {
|
|
86
|
-
return JSON.stringify({
|
|
87
|
-
status: "denied",
|
|
88
|
-
reason: "tool is restricted to Harness internal agents",
|
|
89
|
-
});
|
|
90
|
-
}
|
|
70
|
+
const researchResult = async (operation) => {
|
|
91
71
|
try {
|
|
92
|
-
return
|
|
72
|
+
return {
|
|
73
|
+
content: [
|
|
74
|
+
{
|
|
75
|
+
type: "text",
|
|
76
|
+
text: JSON.stringify({ status: "ok", data: sanitizeResearchToolOutput(await operation) }),
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
93
80
|
}
|
|
94
81
|
catch (error) {
|
|
95
|
-
return
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: "text",
|
|
86
|
+
text: JSON.stringify({
|
|
87
|
+
status: "error",
|
|
88
|
+
error: error instanceof Error ? error.message : "Harness research tool failed",
|
|
89
|
+
}),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
isError: true,
|
|
93
|
+
};
|
|
99
94
|
}
|
|
100
95
|
};
|
|
101
96
|
//# sourceMappingURL=harness-research-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-research-tools.js","sourceRoot":"","sources":["../../src/tools/harness-research-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"harness-research-tools.js","sourceRoot":"","sources":["../../src/tools/harness-research-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harness-engineering-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Minimal OpenCode harness plugin package.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,8 +14,15 @@
|
|
|
14
14
|
"./server": {
|
|
15
15
|
"types": "./dist/server.d.ts",
|
|
16
16
|
"import": "./dist/server.js"
|
|
17
|
+
},
|
|
18
|
+
"./mcp": {
|
|
19
|
+
"types": "./dist/mcp/server.d.ts",
|
|
20
|
+
"import": "./dist/mcp/server.js"
|
|
17
21
|
}
|
|
18
22
|
},
|
|
23
|
+
"bin": {
|
|
24
|
+
"harness-engineering-agent-mcp": "./dist/mcp/cli.js"
|
|
25
|
+
},
|
|
19
26
|
"files": [
|
|
20
27
|
"dist"
|
|
21
28
|
],
|
|
@@ -33,6 +40,7 @@
|
|
|
33
40
|
"typecheck": "tsc --noEmit"
|
|
34
41
|
},
|
|
35
42
|
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
36
44
|
"@opencode-ai/plugin": "1.17.11",
|
|
37
45
|
"@opencode-ai/sdk": "1.17.11",
|
|
38
46
|
"typescript-language-server": "5.3.0",
|