@mongodb-js/harness-tester 3.0.4 → 3.0.5
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 -0
- package/dist/harness/claude/claudeConfig.d.ts +13 -0
- package/dist/harness/claude/claudeConfig.d.ts.map +1 -1
- package/dist/harness/claude/claudeConfig.js +54 -2
- package/dist/harness/claude/claudeConfig.js.map +1 -1
- package/dist/harness/claude/claudeHarness.d.ts.map +1 -1
- package/dist/harness/claude/claudeHarness.js +4 -2
- package/dist/harness/claude/claudeHarness.js.map +1 -1
- package/dist/harness/codex/codexConfig.d.ts +21 -5
- package/dist/harness/codex/codexConfig.d.ts.map +1 -1
- package/dist/harness/codex/codexConfig.js +70 -18
- package/dist/harness/codex/codexConfig.js.map +1 -1
- package/dist/harness/codex/codexHarness.d.ts.map +1 -1
- package/dist/harness/codex/codexHarness.js +4 -2
- package/dist/harness/codex/codexHarness.js.map +1 -1
- package/dist/harness/shared.d.ts +17 -0
- package/dist/harness/shared.d.ts.map +1 -1
- package/dist/harness/shared.js +24 -0
- package/dist/harness/shared.js.map +1 -1
- package/dist/harness/types.d.ts +32 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,4 +11,21 @@ What lives here:
|
|
|
11
11
|
- `useAgent({ harness })` — pure agent hook: temp workdir, availability skip gate, and base `AgentHarnessOptions` (model overrides, timeout).
|
|
12
12
|
- `AGENT_HARNESSES` — the registry of harness classes.
|
|
13
13
|
|
|
14
|
+
## Remote servers: headers and OAuth
|
|
15
|
+
|
|
16
|
+
`AgentHarnessOptions` can point a harness at a remote MCP server instead of spawning one:
|
|
17
|
+
|
|
18
|
+
- `serverUrl` — streamable HTTP endpoint (mutually exclusive with `stdioServer`).
|
|
19
|
+
- `headers` — extra HTTP headers for that server, e.g. `{ Authorization: "Bearer ..." }`.
|
|
20
|
+
- `oauth` — pre-seeded OAuth credentials (`accessToken`, and optional `refreshToken`, `expiresAt`, `clientId`, `clientSecret`, `scopes`, `issuer`). The harness writes them into the agent's native credential store before startup, so no interactive browser login is needed.
|
|
21
|
+
|
|
22
|
+
Where `oauth` is written:
|
|
23
|
+
|
|
24
|
+
| Harness | Store |
|
|
25
|
+
| ------- | ---------------------------------------------------------------------------------------------------- |
|
|
26
|
+
| codex | `$CODEX_HOME/.credentials.json`, with `mcp_oauth_credentials_store = "file"` in the generated config |
|
|
27
|
+
| claude | the `mcpOAuth` map in `$CLAUDE_CONFIG_DIR/.credentials.json` |
|
|
28
|
+
|
|
29
|
+
`oauth` cannot be combined with `stdioServer`. On macOS, claude normally reads the `Claude Code-credentials` OS keychain, which the seeded file does not override (the file store is the fallback used on CI/Linux).
|
|
30
|
+
|
|
14
31
|
The MCP/MongoDB side of an e2e suite (in-process MongoDB MCP server, mongod spin-up, connection wiring) lives in `packages/e2e-tests` (`useMcpAgent`), which composes with the `useAgent` hook here. See that package's README.
|
|
@@ -16,6 +16,19 @@ export declare class ClaudeHarnessConfig implements AgentHarnessConfig {
|
|
|
16
16
|
getHostHomeDir(): string;
|
|
17
17
|
buildConfig(options: AgentHarnessOptions): string;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Pre-seed `mcpOAuth` tokens in the session's `.credentials.json`, keyed by
|
|
21
|
+
* {@link oauthCredentialStoreKey}, so claude connects to a remote server without
|
|
22
|
+
* an interactive browser login. No-op unless `options.oauth` is set.
|
|
23
|
+
*
|
|
24
|
+
* Caveat: on macOS claude normally reads the `Claude Code-credentials` OS
|
|
25
|
+
* keychain, which this file does not override; the file store is the fallback
|
|
26
|
+
* (and what CI/Linux use).
|
|
27
|
+
*/
|
|
28
|
+
export declare function seedClaudeOAuthCredentials({ homeDir, options, }: {
|
|
29
|
+
homeDir: string;
|
|
30
|
+
options: AgentHarnessOptions;
|
|
31
|
+
}): void;
|
|
19
32
|
/**
|
|
20
33
|
* Pre-seed the hermetic claude home to suppress onboarding/trust dialogs.
|
|
21
34
|
* Mutates nothing outside the home.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAEjD,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,0EAA0E,CAAC;AAEhH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAIvE;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBnF;AAED,uGAAuG;AACvG,qBAAa,mBAAoB,YAAW,kBAAkB;IAC1D,QAAQ,CAAC,aAAa,uBAAuB;IAC7C,QAAQ,CAAC,cAAc,qBAAqB;IAE5C,sEAAsE;IACtE,cAAc,IAAI,MAAM;IAIxB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"claudeConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAEjD,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,0EAA0E,CAAC;AAEhH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAIvE;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBnF;AAED,uGAAuG;AACvG,qBAAa,mBAAoB,YAAW,kBAAkB;IAC1D,QAAQ,CAAC,aAAa,uBAAuB;IAC7C,QAAQ,CAAC,cAAc,qBAAqB;IAE5C,sEAAsE;IACtE,cAAc,IAAI,MAAM;IAIxB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;CAgBpD;AAWD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,OAAO,EACP,OAAO,GACV,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CA6BP;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,aAAuB,GAC1B,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAsBP"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { canonicalPath } from "../shared.js";
|
|
4
|
+
import { canonicalPath, oauthCredentialStoreKey } from "../shared.js";
|
|
5
5
|
/** Default model: grove serves the undated id; `haiku` resolves to a dated id it lacks. */
|
|
6
6
|
export const DEFAULT_CLAUDE_MODEL = "claude-haiku-4-5";
|
|
7
7
|
/** Minimum reasoning effort for e2e runs (mirrors the codex harness's `"low"`). */
|
|
@@ -51,10 +51,62 @@ export class ClaudeHarnessConfig {
|
|
|
51
51
|
args: options.stdioServer.args,
|
|
52
52
|
env: options.stdioServer.env,
|
|
53
53
|
}
|
|
54
|
-
: {
|
|
54
|
+
: {
|
|
55
|
+
type: "http",
|
|
56
|
+
url: options.serverUrl ?? "",
|
|
57
|
+
...(options.headers && Object.keys(options.headers).length > 0 ? { headers: options.headers } : {}),
|
|
58
|
+
};
|
|
55
59
|
return JSON.stringify({ mcpServers: { [mcpServerName]: server } }, null, 2);
|
|
56
60
|
}
|
|
57
61
|
}
|
|
62
|
+
/** Read and parse a JSON file, or `undefined` when missing/unreadable. */
|
|
63
|
+
function readJsonFile(filePath) {
|
|
64
|
+
try {
|
|
65
|
+
return JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Pre-seed `mcpOAuth` tokens in the session's `.credentials.json`, keyed by
|
|
73
|
+
* {@link oauthCredentialStoreKey}, so claude connects to a remote server without
|
|
74
|
+
* an interactive browser login. No-op unless `options.oauth` is set.
|
|
75
|
+
*
|
|
76
|
+
* Caveat: on macOS claude normally reads the `Claude Code-credentials` OS
|
|
77
|
+
* keychain, which this file does not override; the file store is the fallback
|
|
78
|
+
* (and what CI/Linux use).
|
|
79
|
+
*/
|
|
80
|
+
export function seedClaudeOAuthCredentials({ homeDir, options, }) {
|
|
81
|
+
if (!options.oauth || !options.serverUrl) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const { oauth } = options;
|
|
85
|
+
const serverName = options.mcpServerName ?? "mongo";
|
|
86
|
+
const credentialsPath = path.join(homeDir, ".credentials.json");
|
|
87
|
+
const existing = readJsonFile(credentialsPath) ?? {};
|
|
88
|
+
const mcpOAuth = { ...(existing.mcpOAuth ?? {}) };
|
|
89
|
+
const key = oauthCredentialStoreKey({
|
|
90
|
+
serverName,
|
|
91
|
+
serverUrl: options.serverUrl,
|
|
92
|
+
headers: options.headers,
|
|
93
|
+
});
|
|
94
|
+
mcpOAuth[key] = {
|
|
95
|
+
serverName,
|
|
96
|
+
serverUrl: options.serverUrl,
|
|
97
|
+
accessToken: oauth.accessToken,
|
|
98
|
+
...(oauth.refreshToken !== undefined ? { refreshToken: oauth.refreshToken } : {}),
|
|
99
|
+
...(oauth.expiresAt !== undefined ? { expiresAt: oauth.expiresAt } : {}),
|
|
100
|
+
...(oauth.clientId !== undefined ? { clientId: oauth.clientId } : {}),
|
|
101
|
+
...(oauth.clientSecret !== undefined ? { clientSecret: oauth.clientSecret } : {}),
|
|
102
|
+
...(oauth.issuer !== undefined ? { issuer: oauth.issuer } : {}),
|
|
103
|
+
// Only set the discovery URL from the actual issuer: the MCP resource URL is a
|
|
104
|
+
// different host (e.g. mcp.mongodb.com vs cloud.mongodb.com), so falling back to
|
|
105
|
+
// it would make Claude refresh against the wrong authorization server.
|
|
106
|
+
...(oauth.issuer !== undefined ? { discoveryState: { authorizationServerUrl: oauth.issuer } } : {}),
|
|
107
|
+
};
|
|
108
|
+
fs.writeFileSync(credentialsPath, JSON.stringify({ ...existing, mcpOAuth }, null, 2), { mode: 0o600 });
|
|
109
|
+
}
|
|
58
110
|
/**
|
|
59
111
|
* Pre-seed the hermetic claude home to suppress onboarding/trust dialogs.
|
|
60
112
|
* Mutates nothing outside the home.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"claudeConfig.js","sourceRoot":"","sources":["../../../src/harness/claude/claudeConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeHarness.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claudeHarness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"claudeHarness.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claudeHarness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAW5D,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,WAAW,uBAAuB;IACpC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1C;AAED,qBAAa,gBAAiB,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;gBAExC,OAAO,GAAE,uBAA4B;IAQjD,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,OAAO;IAIrB,2FAA2F;IAC3F,WAAW,IAAI,OAAO;IAehB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;CAmDnE"}
|
|
@@ -2,8 +2,8 @@ import { execFileSync } from "node:child_process";
|
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { TuiTest } from "@microsoft/tui-test";
|
|
5
|
-
import { ClaudeHarnessConfig, buildClaudeEnv, DEFAULT_CLAUDE_EFFORT_LEVEL, resolveClaudeModel, seedClaudeHome, } from "./claudeConfig.js";
|
|
6
|
-
import { resolveBackend } from "../shared.js";
|
|
5
|
+
import { ClaudeHarnessConfig, buildClaudeEnv, DEFAULT_CLAUDE_EFFORT_LEVEL, resolveClaudeModel, seedClaudeHome, seedClaudeOAuthCredentials, } from "./claudeConfig.js";
|
|
6
|
+
import { assertRemoteServerOptions, resolveBackend } from "../shared.js";
|
|
7
7
|
import { HarnessLogger } from "../logger.js";
|
|
8
8
|
import { ClaudeTuiSession } from "./claudeSession.js";
|
|
9
9
|
export class ClaudeTuiHarness {
|
|
@@ -39,6 +39,7 @@ export class ClaudeTuiHarness {
|
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
41
|
async start(options) {
|
|
42
|
+
assertRemoteServerOptions(options);
|
|
42
43
|
// Per-session CLAUDE_CONFIG_DIR: developer config untouched, no state or JSONL reused.
|
|
43
44
|
const config = new ClaudeHarnessConfig();
|
|
44
45
|
const claudeHome = path.join(options.workDir, `claude-home-${Math.random().toString(36).slice(2, 8)}`);
|
|
@@ -46,6 +47,7 @@ export class ClaudeTuiHarness {
|
|
|
46
47
|
// Pre-seed onboarding/trust state + MCP config (whitelists MCP tools, so no permission flags needed).
|
|
47
48
|
const mcpServerName = options.mcpServerName ?? "mongo";
|
|
48
49
|
seedClaudeHome({ homeDir: claudeHome, workDir: options.workDir, mcpServerName });
|
|
50
|
+
seedClaudeOAuthCredentials({ homeDir: claudeHome, options });
|
|
49
51
|
const mcpConfig = config.buildConfig(options);
|
|
50
52
|
const mcpConfigPath = path.join(claudeHome, config.configFileName);
|
|
51
53
|
await fs.writeFile(mcpConfigPath, mcpConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeHarness.js","sourceRoot":"","sources":["../../../src/harness/claude/claudeHarness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAgB,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACH,mBAAmB,EACnB,cAAc,EACd,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"claudeHarness.js","sourceRoot":"","sources":["../../../src/harness/claude/claudeHarness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { AgentHarnessConfig, AgentHarnessOptions } from "../types.js";
|
|
2
|
-
/**
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Fallback model when neither the real config nor an override is available.
|
|
4
|
+
* Keep this on the latest model codex ships, so codex does not show its
|
|
5
|
+
* "Try new model" onboarding dialog (which blocks the composer) on first run.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_CODEX_MODEL = "gpt-6-luna";
|
|
4
8
|
/** Reasoning effort applied to the harness session's model. */
|
|
5
9
|
export declare const DEFAULT_CODEX_REASONING_EFFORT = "low";
|
|
6
10
|
/** {@link AgentHarnessConfig} for codex (OpenAI CLI agent). */
|
|
@@ -27,12 +31,24 @@ export declare class CodexHarnessConfig implements AgentHarnessConfig {
|
|
|
27
31
|
*/
|
|
28
32
|
private copyCatalogWithLiftedTruncation;
|
|
29
33
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* outside the sandbox).
|
|
34
|
+
* Top-level scalars; must precede every table header (otherwise TOML absorbs them into the
|
|
35
|
+
* following `[mcp_servers.X.env]`/`.http_headers` table and codex rejects a non-string env value).
|
|
33
36
|
*/
|
|
37
|
+
private buildSandboxTopLevelToml;
|
|
38
|
+
/** Whitelist the session to MCP tools only: disable shell + web-search. */
|
|
34
39
|
private buildSandboxToml;
|
|
35
40
|
private buildMcpServerToml;
|
|
36
41
|
buildConfig(options: AgentHarnessOptions, sessionHomeDir: string): string;
|
|
37
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Pre-seed OAuth tokens in the session's `.credentials.json` so codex connects
|
|
45
|
+
* to a remote server without an interactive login. Requires
|
|
46
|
+
* `mcp_oauth_credentials_store = "file"` (set by `buildConfig` when `oauth` is
|
|
47
|
+
* present); codex matches entries by `server_name` + `server_url`, so the map
|
|
48
|
+
* key is informational. No-op unless `options.oauth` is set.
|
|
49
|
+
*/
|
|
50
|
+
export declare function seedCodexOAuthCredentials({ homeDir, options, }: {
|
|
51
|
+
homeDir: string;
|
|
52
|
+
options: AgentHarnessOptions;
|
|
53
|
+
}): void;
|
|
38
54
|
//# sourceMappingURL=codexConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E
|
|
1
|
+
{"version":3,"file":"codexConfig.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,+DAA+D;AAC/D,eAAO,MAAM,8BAA8B,QAAQ,CAAC;AAOpD,+DAA+D;AAC/D,qBAAa,kBAAmB,YAAW,kBAAkB;IACzD,QAAQ,CAAC,aAAa,gBAAgB;IACtC,QAAQ,CAAC,cAAc,iBAAiB;IAExC,kFAAkF;IAClF,cAAc,IAAI,MAAM;IAIxB,2EAA2E;IAC3E,iBAAiB,IAAI,MAAM;IAI3B,+FAA+F;IAC/F,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUrD;;;OAGG;IACH,2BAA2B,IAAI,MAAM,GAAG,SAAS;IAUjD,kGAAkG;IAClG,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IA6BvC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAIhC,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;IA4B1B,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;CAgD5E;AAWD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,EACtC,OAAO,EACP,OAAO,GACV,EAAE;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CAwBP"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import fs, { existsSync } from "node:fs";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { canonicalPath } from "../shared.js";
|
|
5
|
-
/**
|
|
6
|
-
|
|
4
|
+
import { canonicalPath, oauthCredentialStoreKey } from "../shared.js";
|
|
5
|
+
/**
|
|
6
|
+
* Fallback model when neither the real config nor an override is available.
|
|
7
|
+
* Keep this on the latest model codex ships, so codex does not show its
|
|
8
|
+
* "Try new model" onboarding dialog (which blocks the composer) on first run.
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_CODEX_MODEL = "gpt-6-luna";
|
|
7
11
|
/** Reasoning effort applied to the harness session's model. */
|
|
8
12
|
export const DEFAULT_CODEX_REASONING_EFFORT = "low";
|
|
9
13
|
function tomlString(value) {
|
|
@@ -85,22 +89,15 @@ export class CodexHarnessConfig {
|
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* outside the sandbox).
|
|
92
|
+
* Top-level scalars; must precede every table header (otherwise TOML absorbs them into the
|
|
93
|
+
* following `[mcp_servers.X.env]`/`.http_headers` table and codex rejects a non-string env value).
|
|
91
94
|
*/
|
|
95
|
+
buildSandboxTopLevelToml() {
|
|
96
|
+
return ['sandbox_mode = "read-only"', "allow_login_shell = false"].join("\n");
|
|
97
|
+
}
|
|
98
|
+
/** Whitelist the session to MCP tools only: disable shell + web-search. */
|
|
92
99
|
buildSandboxToml() {
|
|
93
|
-
return [
|
|
94
|
-
'sandbox_mode = "read-only"',
|
|
95
|
-
// Top-level scalars must precede the table headers below.
|
|
96
|
-
"allow_login_shell = false",
|
|
97
|
-
"",
|
|
98
|
-
"[features]",
|
|
99
|
-
"shell_tool = false",
|
|
100
|
-
"",
|
|
101
|
-
"[tools]",
|
|
102
|
-
"web_search = false",
|
|
103
|
-
].join("\n");
|
|
100
|
+
return ["[features]", "shell_tool = false", "", "[tools]", "web_search = false"].join("\n");
|
|
104
101
|
}
|
|
105
102
|
buildMcpServerToml(options, mcpServerName) {
|
|
106
103
|
// Codex's 10s default MCP startup timeout is too short for this server.
|
|
@@ -116,7 +113,16 @@ export class CodexHarnessConfig {
|
|
|
116
113
|
...(envLines.length ? [``, `[mcp_servers.${mcpServerName}.env]`, ...envLines] : []),
|
|
117
114
|
].join("\n");
|
|
118
115
|
}
|
|
119
|
-
|
|
116
|
+
const lines = [
|
|
117
|
+
`[mcp_servers.${mcpServerName}]`,
|
|
118
|
+
`url = ${tomlString(options.serverUrl ?? "")}`,
|
|
119
|
+
startupTimeout,
|
|
120
|
+
];
|
|
121
|
+
const headerLines = Object.entries(options.headers ?? {}).map(([k, v]) => `${tomlString(k)} = ${tomlString(v)}`);
|
|
122
|
+
if (headerLines.length > 0) {
|
|
123
|
+
lines.push("", `[mcp_servers.${mcpServerName}.http_headers]`, ...headerLines);
|
|
124
|
+
}
|
|
125
|
+
return lines.join("\n");
|
|
120
126
|
}
|
|
121
127
|
buildConfig(options, sessionHomeDir) {
|
|
122
128
|
const { mcpServerName = "mongo", model, workDir } = options;
|
|
@@ -139,8 +145,13 @@ export class CodexHarnessConfig {
|
|
|
139
145
|
`model = ${tomlString(resolvedModel)}`,
|
|
140
146
|
`model_provider = "grove"`,
|
|
141
147
|
`model_reasoning_effort = ${tomlString(DEFAULT_CODEX_REASONING_EFFORT)}`,
|
|
148
|
+
// Keep pre-seeded OAuth tokens in the hermetic home instead of the OS keyring.
|
|
149
|
+
...(options.oauth ? [`mcp_oauth_credentials_store = "file"`] : []),
|
|
142
150
|
...catalogLines,
|
|
143
151
|
"",
|
|
152
|
+
// Top-level scalars must precede the table headers below.
|
|
153
|
+
this.buildSandboxTopLevelToml(),
|
|
154
|
+
"",
|
|
144
155
|
this.buildProviderToml(),
|
|
145
156
|
"",
|
|
146
157
|
this.buildMcpServerToml(options, mcpServerName),
|
|
@@ -159,4 +170,45 @@ export class CodexHarnessConfig {
|
|
|
159
170
|
return lines.join("\n");
|
|
160
171
|
}
|
|
161
172
|
}
|
|
173
|
+
/** Read and parse a JSON file, or an empty map when missing/unreadable. */
|
|
174
|
+
function readJsonFile(filePath) {
|
|
175
|
+
try {
|
|
176
|
+
return JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return {};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Pre-seed OAuth tokens in the session's `.credentials.json` so codex connects
|
|
184
|
+
* to a remote server without an interactive login. Requires
|
|
185
|
+
* `mcp_oauth_credentials_store = "file"` (set by `buildConfig` when `oauth` is
|
|
186
|
+
* present); codex matches entries by `server_name` + `server_url`, so the map
|
|
187
|
+
* key is informational. No-op unless `options.oauth` is set.
|
|
188
|
+
*/
|
|
189
|
+
export function seedCodexOAuthCredentials({ homeDir, options, }) {
|
|
190
|
+
if (!options.oauth || !options.serverUrl) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const { oauth } = options;
|
|
194
|
+
const serverName = options.mcpServerName ?? "mongo";
|
|
195
|
+
const key = oauthCredentialStoreKey({
|
|
196
|
+
serverName,
|
|
197
|
+
serverUrl: options.serverUrl,
|
|
198
|
+
headers: options.headers,
|
|
199
|
+
});
|
|
200
|
+
const store = readJsonFile(path.join(homeDir, ".credentials.json"));
|
|
201
|
+
store[key] = {
|
|
202
|
+
server_name: serverName,
|
|
203
|
+
server_url: options.serverUrl,
|
|
204
|
+
...(oauth.issuer !== undefined ? { issuer: oauth.issuer } : {}),
|
|
205
|
+
client_id: oauth.clientId ?? "",
|
|
206
|
+
...(oauth.clientSecret !== undefined ? { client_secret: oauth.clientSecret } : {}),
|
|
207
|
+
access_token: oauth.accessToken,
|
|
208
|
+
...(oauth.expiresAt !== undefined ? { expires_at: oauth.expiresAt } : {}),
|
|
209
|
+
...(oauth.refreshToken !== undefined ? { refresh_token: oauth.refreshToken } : {}),
|
|
210
|
+
scopes: oauth.scopes ?? [],
|
|
211
|
+
};
|
|
212
|
+
fs.writeFileSync(path.join(homeDir, ".credentials.json"), JSON.stringify(store, null, 2), { mode: 0o600 });
|
|
213
|
+
}
|
|
162
214
|
//# sourceMappingURL=codexConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexConfig.js","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"codexConfig.js","sourceRoot":"","sources":["../../../src/harness/codex/codexConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexHarness.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI5D,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACnC,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,eAAgB,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;gBAExC,OAAO,GAAE,sBAA2B;IAQhD,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,OAAO;IAIrB,2FAA2F;IAC3F,WAAW,IAAI,OAAO;IAehB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"codexHarness.d.ts","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI5D,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACnC,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,eAAgB,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;gBAExC,OAAO,GAAE,sBAA2B;IAQhD,aAAa,IAAI,MAAM;IAIvB,UAAU,IAAI,OAAO;IAIrB,2FAA2F;IAC3F,WAAW,IAAI,OAAO;IAehB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;CA8BnE"}
|
|
@@ -2,8 +2,8 @@ import { execFileSync } from "node:child_process";
|
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { TuiTest } from "@microsoft/tui-test";
|
|
5
|
-
import { CodexHarnessConfig } from "./codexConfig.js";
|
|
6
|
-
import { resolveBackend } from "../shared.js";
|
|
5
|
+
import { CodexHarnessConfig, seedCodexOAuthCredentials } from "./codexConfig.js";
|
|
6
|
+
import { assertRemoteServerOptions, resolveBackend } from "../shared.js";
|
|
7
7
|
import { HarnessLogger } from "../logger.js";
|
|
8
8
|
import { CodexTuiSession } from "./codexSession.js";
|
|
9
9
|
export class CodexTuiHarness {
|
|
@@ -39,12 +39,14 @@ export class CodexTuiHarness {
|
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
41
|
async start(options) {
|
|
42
|
+
assertRemoteServerOptions(options);
|
|
42
43
|
// Per-session CODEX_HOME: developer config untouched, no state reused across sessions.
|
|
43
44
|
const config = new CodexHarnessConfig();
|
|
44
45
|
const codexHome = path.join(options.workDir, `codex-home-${Math.random().toString(36).slice(2, 8)}`);
|
|
45
46
|
await fs.mkdir(codexHome, { recursive: true });
|
|
46
47
|
const configToml = config.buildConfig(options, codexHome);
|
|
47
48
|
await fs.writeFile(path.join(codexHome, config.configFileName), configToml);
|
|
49
|
+
seedCodexOAuthCredentials({ homeDir: codexHome, options });
|
|
48
50
|
const terminal = new TuiTest(`codex-${process.pid}-${Math.random().toString(36).slice(2, 8)}`, {
|
|
49
51
|
backend: this.backend,
|
|
50
52
|
timeouts: { ready: 60000, text: 60000, idle: 60000 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codexHarness.js","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAgB,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"codexHarness.js","sourceRoot":"","sources":["../../../src/harness/codex/codexHarness.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/shared.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Backend } from "@microsoft/tui-test";
|
|
2
|
+
import type { AgentHarnessOptions } from "./types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Canonicalize a path so config keys match the agent's view of the filesystem
|
|
4
5
|
* (macOS resolves `/var` -> `/private/var`; a non-canonical key silently misses).
|
|
@@ -15,4 +16,20 @@ export declare const DEFAULT_PROMPT_TIMEOUT_MS: number;
|
|
|
15
16
|
export declare function resolveBackend(explicit?: Backend): Backend;
|
|
16
17
|
/** Strip the `<server>.` / `mcp__<server>__` prefix agents render before tool names. */
|
|
17
18
|
export declare function normalizeToolName(name: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Key under which claude/codex persist MCP OAuth credentials for a remote
|
|
21
|
+
* server: `<name>|<sha256(JSON.stringify({type,url,headers}))[0..16]>`.
|
|
22
|
+
*
|
|
23
|
+
* The payload field order (`type`, `url`, `headers`) is load-bearing: both CLIs
|
|
24
|
+
* serialize it verbatim, so reordering changes the key and the token is missed.
|
|
25
|
+
* Codex only uses this as the file-store key (it matches entries by
|
|
26
|
+
* `server_name` + `server_url`), but claude looks the entry up by this exact key.
|
|
27
|
+
*/
|
|
28
|
+
export declare function oauthCredentialStoreKey({ serverName, serverUrl, headers, }: {
|
|
29
|
+
serverName: string;
|
|
30
|
+
serverUrl: string;
|
|
31
|
+
headers?: Record<string, string>;
|
|
32
|
+
}): string;
|
|
33
|
+
/** Guard `oauth` against stdio/missing-URL misuse (it only applies to a remote server). */
|
|
34
|
+
export declare function assertRemoteServerOptions(options: AgentHarnessOptions): void;
|
|
18
35
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/harness/shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/harness/shared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,oDAAoD;AACpD,eAAO,MAAM,yBAAyB,QAAgB,CAAC;AAIvD,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAS1D;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,UAAU,EACV,SAAS,EACT,OAAY,GACf,EAAE;IACC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,GAAG,MAAM,CAIT;AAED,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAO5E"}
|
package/dist/harness/shared.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import fs from "node:fs";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
/**
|
|
@@ -43,4 +44,27 @@ export function normalizeToolName(name) {
|
|
|
43
44
|
const lastSegment = name.split(/__|\./).pop();
|
|
44
45
|
return lastSegment ?? name;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Key under which claude/codex persist MCP OAuth credentials for a remote
|
|
49
|
+
* server: `<name>|<sha256(JSON.stringify({type,url,headers}))[0..16]>`.
|
|
50
|
+
*
|
|
51
|
+
* The payload field order (`type`, `url`, `headers`) is load-bearing: both CLIs
|
|
52
|
+
* serialize it verbatim, so reordering changes the key and the token is missed.
|
|
53
|
+
* Codex only uses this as the file-store key (it matches entries by
|
|
54
|
+
* `server_name` + `server_url`), but claude looks the entry up by this exact key.
|
|
55
|
+
*/
|
|
56
|
+
export function oauthCredentialStoreKey({ serverName, serverUrl, headers = {}, }) {
|
|
57
|
+
const payload = JSON.stringify({ type: "http", url: serverUrl, headers });
|
|
58
|
+
const hash = createHash("sha256").update(payload).digest("hex").slice(0, 16);
|
|
59
|
+
return `${serverName}|${hash}`;
|
|
60
|
+
}
|
|
61
|
+
/** Guard `oauth` against stdio/missing-URL misuse (it only applies to a remote server). */
|
|
62
|
+
export function assertRemoteServerOptions(options) {
|
|
63
|
+
if (options.oauth && options.stdioServer) {
|
|
64
|
+
throw new Error("`oauth` cannot be combined with `stdioServer`; use a remote `serverUrl` server");
|
|
65
|
+
}
|
|
66
|
+
if (options.oauth && !options.serverUrl) {
|
|
67
|
+
throw new Error("`oauth` requires a remote `serverUrl` server");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
46
70
|
//# sourceMappingURL=shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/harness/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/harness/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACnC,IAAI,CAAC;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAa;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AACzC,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,MAAM,sBAAsB,GAAuB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAEnF,qGAAqG;AACrG,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAClD,IAAI,OAAO,IAAK,sBAA4C,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7E,OAAO,OAAkB,CAAC;IAC9B,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,WAAW,IAAI,IAAI,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACpC,UAAU,EACV,SAAS,EACT,OAAO,GAAG,EAAE,GAKf;IACG,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,yBAAyB,CAAC,OAA4B;IAClE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;AACL,CAAC"}
|
package/dist/harness/types.d.ts
CHANGED
|
@@ -24,6 +24,18 @@ export interface AgentHarnessOptions {
|
|
|
24
24
|
* `http://127.0.0.1:PORT/mcp`. Mutually exclusive with `stdioServer`.
|
|
25
25
|
*/
|
|
26
26
|
serverUrl?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Extra HTTP headers sent to the remote (`serverUrl`) MCP server, e.g.
|
|
29
|
+
* `{ Authorization: "Bearer ..." }`. Ignored for `stdioServer`.
|
|
30
|
+
*/
|
|
31
|
+
headers?: Record<string, string>;
|
|
32
|
+
/**
|
|
33
|
+
* Pre-seed OAuth credentials for the remote (`serverUrl`) MCP server so the
|
|
34
|
+
* agent can authenticate without an interactive login. The harness writes
|
|
35
|
+
* them into its native credential store before starting. Mutually exclusive
|
|
36
|
+
* with `stdioServer`.
|
|
37
|
+
*/
|
|
38
|
+
oauth?: OAuthCredentials;
|
|
27
39
|
/**
|
|
28
40
|
* Stdio server spec; when set, the harness spawns the MCP server itself.
|
|
29
41
|
* Mutually exclusive with `serverUrl`.
|
|
@@ -44,6 +56,26 @@ export interface AgentHarnessOptions {
|
|
|
44
56
|
/** Dump the generated config (redacted) to the test logs. */
|
|
45
57
|
debug?: boolean;
|
|
46
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* OAuth tokens for a remote MCP server, seeded into the harness's credential
|
|
61
|
+
* store ahead of an interactive browser login.
|
|
62
|
+
*/
|
|
63
|
+
export interface OAuthCredentials {
|
|
64
|
+
/** Bearer access token. */
|
|
65
|
+
accessToken: string;
|
|
66
|
+
/** Refresh token, persisted so the agent can refresh non-interactively. */
|
|
67
|
+
refreshToken?: string;
|
|
68
|
+
/** Access-token expiry as epoch milliseconds. */
|
|
69
|
+
expiresAt?: number;
|
|
70
|
+
/** OAuth client id the tokens were issued to. */
|
|
71
|
+
clientId?: string;
|
|
72
|
+
/** OAuth client secret, persisted alongside the tokens when provided. */
|
|
73
|
+
clientSecret?: string;
|
|
74
|
+
/** Granted scopes (used by codex; claude does not persist scopes). */
|
|
75
|
+
scopes?: string[];
|
|
76
|
+
/** Authorization-server issuer the tokens are bound to. */
|
|
77
|
+
issuer?: string;
|
|
78
|
+
}
|
|
47
79
|
export interface AgentHarness {
|
|
48
80
|
readonly name: string;
|
|
49
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACtB,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,oFAAoF;IACpF,KAAK,EAAE,cAAc,CAAC;IACtB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC/E,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC;IACvB,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,YAAY;IACzB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,6BAA6B;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,8GAA8G;AAC9G,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,2GAA2G;IAC3G,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,oFAAoF;IACpF,cAAc,IAAI,MAAM,CAAC;IAEzB;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7E"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import { ClaudeTuiHarness } from "./harness/claude/claudeHarness.js";
|
|
|
2
2
|
import { CodexTuiHarness } from "./harness/codex/codexHarness.js";
|
|
3
3
|
export { useAgent, type AgentContext } from "./useAgent.js";
|
|
4
4
|
export { AGENT_HARNESSES } from "./harnesses.js";
|
|
5
|
-
export type { AgentHarness, AgentHarnessConfig, AgentHarnessOptions, AgentSession, AgentTurn, AgentTurnState, ToolCallRecord, } from "./harness/types.js";
|
|
5
|
+
export type { AgentHarness, AgentHarnessConfig, AgentHarnessOptions, AgentSession, AgentTurn, AgentTurnState, OAuthCredentials, ToolCallRecord, } from "./harness/types.js";
|
|
6
6
|
export { ClaudeTuiHarness, CodexTuiHarness };
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EACR,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EACR,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAWjD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}
|
package/package.json
CHANGED