fourmis-agents-sdk 0.2.2 → 0.2.4
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/index.js +9 -6
- package/dist/agents/tools.js +9 -6
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +30 -14
- package/dist/auth/login-openai.js +6 -2
- package/dist/auth/openai-oauth.d.ts.map +1 -1
- package/dist/auth/openai-oauth.js +6 -2
- package/dist/index.js +30 -14
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +7 -2
- package/dist/mcp/index.js +7 -2
- package/dist/providers/openai.js +9 -4
- package/dist/providers/registry.js +9 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -2
- package/package.json +1 -1
package/dist/agents/index.js
CHANGED
|
@@ -97,14 +97,18 @@ __export(exports_openai_oauth, {
|
|
|
97
97
|
import { randomBytes, createHash } from "crypto";
|
|
98
98
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
99
99
|
import { join } from "path";
|
|
100
|
+
import { homedir } from "os";
|
|
101
|
+
function getHome() {
|
|
102
|
+
return process.env.HOME ?? homedir();
|
|
103
|
+
}
|
|
100
104
|
function tokenDir() {
|
|
101
|
-
return join(
|
|
105
|
+
return join(getHome(), ".fourmis");
|
|
102
106
|
}
|
|
103
107
|
function tokenPath() {
|
|
104
108
|
return join(tokenDir(), "openai-auth.json");
|
|
105
109
|
}
|
|
106
110
|
function codexFallbackPath() {
|
|
107
|
-
return join(
|
|
111
|
+
return join(getHome(), ".codex", "auth.json");
|
|
108
112
|
}
|
|
109
113
|
function loadTokens() {
|
|
110
114
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -1447,9 +1451,10 @@ class OpenAIAdapter {
|
|
|
1447
1451
|
}
|
|
1448
1452
|
}
|
|
1449
1453
|
function loadTokensSync() {
|
|
1454
|
+
const home = process.env.HOME ?? __require("os").homedir();
|
|
1450
1455
|
const paths = [
|
|
1451
|
-
`${
|
|
1452
|
-
`${
|
|
1456
|
+
`${home}/.fourmis/openai-auth.json`,
|
|
1457
|
+
`${home}/.codex/auth.json`
|
|
1453
1458
|
];
|
|
1454
1459
|
for (const p of paths) {
|
|
1455
1460
|
try {
|
|
@@ -2053,8 +2058,6 @@ var ALL_TOOLS = {
|
|
|
2053
2058
|
function buildToolRegistry(toolNames, allowedTools, disallowedTools) {
|
|
2054
2059
|
const registry = new ToolRegistry;
|
|
2055
2060
|
for (const name of toolNames) {
|
|
2056
|
-
if (allowedTools && !allowedTools.includes(name))
|
|
2057
|
-
continue;
|
|
2058
2061
|
if (disallowedTools?.includes(name))
|
|
2059
2062
|
continue;
|
|
2060
2063
|
const tool = ALL_TOOLS[name];
|
package/dist/agents/tools.js
CHANGED
|
@@ -97,14 +97,18 @@ __export(exports_openai_oauth, {
|
|
|
97
97
|
import { randomBytes, createHash } from "crypto";
|
|
98
98
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
99
99
|
import { join } from "path";
|
|
100
|
+
import { homedir } from "os";
|
|
101
|
+
function getHome() {
|
|
102
|
+
return process.env.HOME ?? homedir();
|
|
103
|
+
}
|
|
100
104
|
function tokenDir() {
|
|
101
|
-
return join(
|
|
105
|
+
return join(getHome(), ".fourmis");
|
|
102
106
|
}
|
|
103
107
|
function tokenPath() {
|
|
104
108
|
return join(tokenDir(), "openai-auth.json");
|
|
105
109
|
}
|
|
106
110
|
function codexFallbackPath() {
|
|
107
|
-
return join(
|
|
111
|
+
return join(getHome(), ".codex", "auth.json");
|
|
108
112
|
}
|
|
109
113
|
function loadTokens() {
|
|
110
114
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -1447,9 +1451,10 @@ class OpenAIAdapter {
|
|
|
1447
1451
|
}
|
|
1448
1452
|
}
|
|
1449
1453
|
function loadTokensSync() {
|
|
1454
|
+
const home = process.env.HOME ?? __require("os").homedir();
|
|
1450
1455
|
const paths = [
|
|
1451
|
-
`${
|
|
1452
|
-
`${
|
|
1456
|
+
`${home}/.fourmis/openai-auth.json`,
|
|
1457
|
+
`${home}/.codex/auth.json`
|
|
1453
1458
|
];
|
|
1454
1459
|
for (const p of paths) {
|
|
1455
1460
|
try {
|
|
@@ -2053,8 +2058,6 @@ var ALL_TOOLS = {
|
|
|
2053
2058
|
function buildToolRegistry(toolNames, allowedTools, disallowedTools) {
|
|
2054
2059
|
const registry = new ToolRegistry;
|
|
2055
2060
|
for (const name of toolNames) {
|
|
2056
|
-
if (allowedTools && !allowedTools.includes(name))
|
|
2057
|
-
continue;
|
|
2058
2061
|
if (disallowedTools?.includes(name))
|
|
2059
2062
|
continue;
|
|
2060
2063
|
const tool = ALL_TOOLS[name];
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAoBzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAoBzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,GAAG,KAAK,CA8JR"}
|
package/dist/api.js
CHANGED
|
@@ -97,14 +97,18 @@ __export(exports_openai_oauth, {
|
|
|
97
97
|
import { randomBytes, createHash } from "crypto";
|
|
98
98
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
99
99
|
import { join } from "path";
|
|
100
|
+
import { homedir } from "os";
|
|
101
|
+
function getHome() {
|
|
102
|
+
return process.env.HOME ?? homedir();
|
|
103
|
+
}
|
|
100
104
|
function tokenDir() {
|
|
101
|
-
return join(
|
|
105
|
+
return join(getHome(), ".fourmis");
|
|
102
106
|
}
|
|
103
107
|
function tokenPath() {
|
|
104
108
|
return join(tokenDir(), "openai-auth.json");
|
|
105
109
|
}
|
|
106
110
|
function codexFallbackPath() {
|
|
107
|
-
return join(
|
|
111
|
+
return join(getHome(), ".codex", "auth.json");
|
|
108
112
|
}
|
|
109
113
|
function loadTokens() {
|
|
110
114
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -1447,9 +1451,10 @@ class OpenAIAdapter {
|
|
|
1447
1451
|
}
|
|
1448
1452
|
}
|
|
1449
1453
|
function loadTokensSync() {
|
|
1454
|
+
const home = process.env.HOME ?? __require("os").homedir();
|
|
1450
1455
|
const paths = [
|
|
1451
|
-
`${
|
|
1452
|
-
`${
|
|
1456
|
+
`${home}/.fourmis/openai-auth.json`,
|
|
1457
|
+
`${home}/.codex/auth.json`
|
|
1453
1458
|
];
|
|
1454
1459
|
for (const p of paths) {
|
|
1455
1460
|
try {
|
|
@@ -2053,8 +2058,6 @@ var ALL_TOOLS = {
|
|
|
2053
2058
|
function buildToolRegistry(toolNames, allowedTools, disallowedTools) {
|
|
2054
2059
|
const registry = new ToolRegistry;
|
|
2055
2060
|
for (const name of toolNames) {
|
|
2056
|
-
if (allowedTools && !allowedTools.includes(name))
|
|
2057
|
-
continue;
|
|
2058
2061
|
if (disallowedTools?.includes(name))
|
|
2059
2062
|
continue;
|
|
2060
2063
|
const tool = ALL_TOOLS[name];
|
|
@@ -2209,7 +2212,7 @@ class PermissionManager {
|
|
|
2209
2212
|
// src/settings.ts
|
|
2210
2213
|
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
2211
2214
|
import { dirname as dirname2, join as join2 } from "path";
|
|
2212
|
-
import { homedir } from "os";
|
|
2215
|
+
import { homedir as homedir2 } from "os";
|
|
2213
2216
|
|
|
2214
2217
|
class SettingsManager {
|
|
2215
2218
|
cwd;
|
|
@@ -2295,7 +2298,7 @@ class SettingsManager {
|
|
|
2295
2298
|
sourceToPath(source) {
|
|
2296
2299
|
switch (source) {
|
|
2297
2300
|
case "user":
|
|
2298
|
-
return join2(
|
|
2301
|
+
return join2(homedir2(), ".claude", "settings.json");
|
|
2299
2302
|
case "project":
|
|
2300
2303
|
return join2(this.cwd, ".claude", "settings.json");
|
|
2301
2304
|
case "local":
|
|
@@ -2305,7 +2308,7 @@ class SettingsManager {
|
|
|
2305
2308
|
destinationToPath(destination) {
|
|
2306
2309
|
switch (destination) {
|
|
2307
2310
|
case "userSettings":
|
|
2308
|
-
return join2(
|
|
2311
|
+
return join2(homedir2(), ".claude", "settings.json");
|
|
2309
2312
|
case "projectSettings":
|
|
2310
2313
|
return join2(this.cwd, ".claude", "settings.json");
|
|
2311
2314
|
case "localSettings":
|
|
@@ -2537,11 +2540,16 @@ class McpClientManager {
|
|
|
2537
2540
|
await client.connect(clientTransport);
|
|
2538
2541
|
} else if (config.type === "sse") {
|
|
2539
2542
|
const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js");
|
|
2540
|
-
const
|
|
2543
|
+
const opts = config.headers ? {
|
|
2544
|
+
eventSourceInit: { headers: config.headers },
|
|
2545
|
+
requestInit: { headers: config.headers }
|
|
2546
|
+
} : undefined;
|
|
2547
|
+
const transport = new SSEClientTransport(new URL(config.url), opts);
|
|
2541
2548
|
await client.connect(transport);
|
|
2542
2549
|
} else if (config.type === "http") {
|
|
2543
2550
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
2544
|
-
const
|
|
2551
|
+
const requestInit = config.headers ? { headers: config.headers } : undefined;
|
|
2552
|
+
const transport = new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
|
|
2545
2553
|
await client.connect(transport);
|
|
2546
2554
|
} else {
|
|
2547
2555
|
const { StdioClientTransport } = await import("@modelcontextprotocol/sdk/client/stdio.js");
|
|
@@ -2926,12 +2934,12 @@ class TaskManager {
|
|
|
2926
2934
|
// src/utils/session-store.ts
|
|
2927
2935
|
import { readFileSync as readFileSync4, appendFileSync, mkdirSync as mkdirSync3, readdirSync, statSync } from "fs";
|
|
2928
2936
|
import { join as join4 } from "path";
|
|
2929
|
-
import { homedir as
|
|
2937
|
+
import { homedir as homedir3 } from "os";
|
|
2930
2938
|
function sanitizeCwd(cwd) {
|
|
2931
2939
|
return cwd.replace(/[/.]/g, "-");
|
|
2932
2940
|
}
|
|
2933
2941
|
function sessionsDir(cwd) {
|
|
2934
|
-
return join4(
|
|
2942
|
+
return join4(homedir3(), ".claude", "projects", sanitizeCwd(cwd));
|
|
2935
2943
|
}
|
|
2936
2944
|
function ensureDir(dir) {
|
|
2937
2945
|
mkdirSync3(dir, { recursive: true });
|
|
@@ -3039,7 +3047,7 @@ function query(params) {
|
|
|
3039
3047
|
});
|
|
3040
3048
|
const model = options.model ?? DEFAULT_MODEL;
|
|
3041
3049
|
const toolNames = resolveToolNames(options.tools);
|
|
3042
|
-
const registry = buildToolRegistry(toolNames,
|
|
3050
|
+
const registry = buildToolRegistry(toolNames, undefined, options.disallowedTools);
|
|
3043
3051
|
const systemPrompt = options.systemPrompt ?? buildSystemPrompt({
|
|
3044
3052
|
tools: registry.list(),
|
|
3045
3053
|
cwd: options.cwd,
|
|
@@ -3067,6 +3075,14 @@ function query(params) {
|
|
|
3067
3075
|
mergedPermissions.deny = mergedDeny;
|
|
3068
3076
|
}
|
|
3069
3077
|
}
|
|
3078
|
+
if (options.allowedTools && options.allowedTools.length > 0) {
|
|
3079
|
+
if (!mergedPermissions)
|
|
3080
|
+
mergedPermissions = {};
|
|
3081
|
+
mergedPermissions.allow = [
|
|
3082
|
+
...mergedPermissions.allow ?? [],
|
|
3083
|
+
...options.allowedTools
|
|
3084
|
+
];
|
|
3085
|
+
}
|
|
3070
3086
|
const permissions = new PermissionManager(options.permissionMode ?? "default", options.canUseTool, mergedPermissions, settingsManager);
|
|
3071
3087
|
const cwd = options.cwd ?? process.cwd();
|
|
3072
3088
|
let sessionId = options.sessionId ?? uuid();
|
|
@@ -28,14 +28,18 @@ __export(exports_openai_oauth, {
|
|
|
28
28
|
import { randomBytes, createHash } from "crypto";
|
|
29
29
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
30
30
|
import { join } from "path";
|
|
31
|
+
import { homedir } from "os";
|
|
32
|
+
function getHome() {
|
|
33
|
+
return process.env.HOME ?? homedir();
|
|
34
|
+
}
|
|
31
35
|
function tokenDir() {
|
|
32
|
-
return join(
|
|
36
|
+
return join(getHome(), ".fourmis");
|
|
33
37
|
}
|
|
34
38
|
function tokenPath() {
|
|
35
39
|
return join(tokenDir(), "openai-auth.json");
|
|
36
40
|
}
|
|
37
41
|
function codexFallbackPath() {
|
|
38
|
-
return join(
|
|
42
|
+
return join(getHome(), ".codex", "auth.json");
|
|
39
43
|
}
|
|
40
44
|
function loadTokens() {
|
|
41
45
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-oauth.d.ts","sourceRoot":"","sources":["../../src/auth/openai-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"openai-oauth.d.ts","sourceRoot":"","sources":["../../src/auth/openai-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAkBF,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAahD;AAYD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9D;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAKnE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAO5D;AAmDD,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAwBhG;AAID,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+BnE"}
|
|
@@ -27,14 +27,18 @@ __export(exports_openai_oauth, {
|
|
|
27
27
|
import { randomBytes, createHash } from "crypto";
|
|
28
28
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
29
29
|
import { join } from "path";
|
|
30
|
+
import { homedir } from "os";
|
|
31
|
+
function getHome() {
|
|
32
|
+
return process.env.HOME ?? homedir();
|
|
33
|
+
}
|
|
30
34
|
function tokenDir() {
|
|
31
|
-
return join(
|
|
35
|
+
return join(getHome(), ".fourmis");
|
|
32
36
|
}
|
|
33
37
|
function tokenPath() {
|
|
34
38
|
return join(tokenDir(), "openai-auth.json");
|
|
35
39
|
}
|
|
36
40
|
function codexFallbackPath() {
|
|
37
|
-
return join(
|
|
41
|
+
return join(getHome(), ".codex", "auth.json");
|
|
38
42
|
}
|
|
39
43
|
function loadTokens() {
|
|
40
44
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
package/dist/index.js
CHANGED
|
@@ -97,14 +97,18 @@ __export(exports_openai_oauth, {
|
|
|
97
97
|
import { randomBytes, createHash } from "crypto";
|
|
98
98
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
99
99
|
import { join } from "path";
|
|
100
|
+
import { homedir } from "os";
|
|
101
|
+
function getHome() {
|
|
102
|
+
return process.env.HOME ?? homedir();
|
|
103
|
+
}
|
|
100
104
|
function tokenDir() {
|
|
101
|
-
return join(
|
|
105
|
+
return join(getHome(), ".fourmis");
|
|
102
106
|
}
|
|
103
107
|
function tokenPath() {
|
|
104
108
|
return join(tokenDir(), "openai-auth.json");
|
|
105
109
|
}
|
|
106
110
|
function codexFallbackPath() {
|
|
107
|
-
return join(
|
|
111
|
+
return join(getHome(), ".codex", "auth.json");
|
|
108
112
|
}
|
|
109
113
|
function loadTokens() {
|
|
110
114
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -1447,9 +1451,10 @@ class OpenAIAdapter {
|
|
|
1447
1451
|
}
|
|
1448
1452
|
}
|
|
1449
1453
|
function loadTokensSync() {
|
|
1454
|
+
const home = process.env.HOME ?? __require("os").homedir();
|
|
1450
1455
|
const paths = [
|
|
1451
|
-
`${
|
|
1452
|
-
`${
|
|
1456
|
+
`${home}/.fourmis/openai-auth.json`,
|
|
1457
|
+
`${home}/.codex/auth.json`
|
|
1453
1458
|
];
|
|
1454
1459
|
for (const p of paths) {
|
|
1455
1460
|
try {
|
|
@@ -2053,8 +2058,6 @@ var ALL_TOOLS = {
|
|
|
2053
2058
|
function buildToolRegistry(toolNames, allowedTools, disallowedTools) {
|
|
2054
2059
|
const registry = new ToolRegistry;
|
|
2055
2060
|
for (const name of toolNames) {
|
|
2056
|
-
if (allowedTools && !allowedTools.includes(name))
|
|
2057
|
-
continue;
|
|
2058
2061
|
if (disallowedTools?.includes(name))
|
|
2059
2062
|
continue;
|
|
2060
2063
|
const tool = ALL_TOOLS[name];
|
|
@@ -2209,7 +2212,7 @@ class PermissionManager {
|
|
|
2209
2212
|
// src/settings.ts
|
|
2210
2213
|
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
2211
2214
|
import { dirname as dirname2, join as join2 } from "path";
|
|
2212
|
-
import { homedir } from "os";
|
|
2215
|
+
import { homedir as homedir2 } from "os";
|
|
2213
2216
|
|
|
2214
2217
|
class SettingsManager {
|
|
2215
2218
|
cwd;
|
|
@@ -2295,7 +2298,7 @@ class SettingsManager {
|
|
|
2295
2298
|
sourceToPath(source) {
|
|
2296
2299
|
switch (source) {
|
|
2297
2300
|
case "user":
|
|
2298
|
-
return join2(
|
|
2301
|
+
return join2(homedir2(), ".claude", "settings.json");
|
|
2299
2302
|
case "project":
|
|
2300
2303
|
return join2(this.cwd, ".claude", "settings.json");
|
|
2301
2304
|
case "local":
|
|
@@ -2305,7 +2308,7 @@ class SettingsManager {
|
|
|
2305
2308
|
destinationToPath(destination) {
|
|
2306
2309
|
switch (destination) {
|
|
2307
2310
|
case "userSettings":
|
|
2308
|
-
return join2(
|
|
2311
|
+
return join2(homedir2(), ".claude", "settings.json");
|
|
2309
2312
|
case "projectSettings":
|
|
2310
2313
|
return join2(this.cwd, ".claude", "settings.json");
|
|
2311
2314
|
case "localSettings":
|
|
@@ -2537,11 +2540,16 @@ class McpClientManager {
|
|
|
2537
2540
|
await client.connect(clientTransport);
|
|
2538
2541
|
} else if (config.type === "sse") {
|
|
2539
2542
|
const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js");
|
|
2540
|
-
const
|
|
2543
|
+
const opts = config.headers ? {
|
|
2544
|
+
eventSourceInit: { headers: config.headers },
|
|
2545
|
+
requestInit: { headers: config.headers }
|
|
2546
|
+
} : undefined;
|
|
2547
|
+
const transport = new SSEClientTransport(new URL(config.url), opts);
|
|
2541
2548
|
await client.connect(transport);
|
|
2542
2549
|
} else if (config.type === "http") {
|
|
2543
2550
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
2544
|
-
const
|
|
2551
|
+
const requestInit = config.headers ? { headers: config.headers } : undefined;
|
|
2552
|
+
const transport = new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
|
|
2545
2553
|
await client.connect(transport);
|
|
2546
2554
|
} else {
|
|
2547
2555
|
const { StdioClientTransport } = await import("@modelcontextprotocol/sdk/client/stdio.js");
|
|
@@ -2926,12 +2934,12 @@ class TaskManager {
|
|
|
2926
2934
|
// src/utils/session-store.ts
|
|
2927
2935
|
import { readFileSync as readFileSync4, appendFileSync, mkdirSync as mkdirSync3, readdirSync, statSync } from "fs";
|
|
2928
2936
|
import { join as join4 } from "path";
|
|
2929
|
-
import { homedir as
|
|
2937
|
+
import { homedir as homedir3 } from "os";
|
|
2930
2938
|
function sanitizeCwd(cwd) {
|
|
2931
2939
|
return cwd.replace(/[/.]/g, "-");
|
|
2932
2940
|
}
|
|
2933
2941
|
function sessionsDir(cwd) {
|
|
2934
|
-
return join4(
|
|
2942
|
+
return join4(homedir3(), ".claude", "projects", sanitizeCwd(cwd));
|
|
2935
2943
|
}
|
|
2936
2944
|
function ensureDir(dir) {
|
|
2937
2945
|
mkdirSync3(dir, { recursive: true });
|
|
@@ -3039,7 +3047,7 @@ function query(params) {
|
|
|
3039
3047
|
});
|
|
3040
3048
|
const model = options.model ?? DEFAULT_MODEL;
|
|
3041
3049
|
const toolNames = resolveToolNames(options.tools);
|
|
3042
|
-
const registry = buildToolRegistry(toolNames,
|
|
3050
|
+
const registry = buildToolRegistry(toolNames, undefined, options.disallowedTools);
|
|
3043
3051
|
const systemPrompt = options.systemPrompt ?? buildSystemPrompt({
|
|
3044
3052
|
tools: registry.list(),
|
|
3045
3053
|
cwd: options.cwd,
|
|
@@ -3067,6 +3075,14 @@ function query(params) {
|
|
|
3067
3075
|
mergedPermissions.deny = mergedDeny;
|
|
3068
3076
|
}
|
|
3069
3077
|
}
|
|
3078
|
+
if (options.allowedTools && options.allowedTools.length > 0) {
|
|
3079
|
+
if (!mergedPermissions)
|
|
3080
|
+
mergedPermissions = {};
|
|
3081
|
+
mergedPermissions.allow = [
|
|
3082
|
+
...mergedPermissions.allow ?? [],
|
|
3083
|
+
...options.allowedTools
|
|
3084
|
+
];
|
|
3085
|
+
}
|
|
3070
3086
|
const permissions = new PermissionManager(options.permissionMode ?? "default", options.canUseTool, mergedPermissions, settingsManager);
|
|
3071
3087
|
const cwd = options.cwd ?? process.cwd();
|
|
3072
3088
|
let sessionId = options.sessionId ?? uuid();
|
package/dist/mcp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,eAAe,EAChB,MAAM,YAAY,CAAC;AASpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAsC;gBAEzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKnB,UAAU;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAEf,eAAe,EAChB,MAAM,YAAY,CAAC;AASpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAsC;gBAEzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKnB,UAAU;IA+DxB;;OAEG;IACH,QAAQ,IAAI,kBAAkB,EAAE;IAsB1B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BnF,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,eAAe,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IA4BrF,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAepE,MAAM,IAAI,eAAe,EAAE;IAcrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAYhC"}
|
package/dist/mcp/client.js
CHANGED
|
@@ -35,11 +35,16 @@ class McpClientManager {
|
|
|
35
35
|
await client.connect(clientTransport);
|
|
36
36
|
} else if (config.type === "sse") {
|
|
37
37
|
const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js");
|
|
38
|
-
const
|
|
38
|
+
const opts = config.headers ? {
|
|
39
|
+
eventSourceInit: { headers: config.headers },
|
|
40
|
+
requestInit: { headers: config.headers }
|
|
41
|
+
} : undefined;
|
|
42
|
+
const transport = new SSEClientTransport(new URL(config.url), opts);
|
|
39
43
|
await client.connect(transport);
|
|
40
44
|
} else if (config.type === "http") {
|
|
41
45
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
42
|
-
const
|
|
46
|
+
const requestInit = config.headers ? { headers: config.headers } : undefined;
|
|
47
|
+
const transport = new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
|
|
43
48
|
await client.connect(transport);
|
|
44
49
|
} else {
|
|
45
50
|
const { StdioClientTransport } = await import("@modelcontextprotocol/sdk/client/stdio.js");
|
package/dist/mcp/index.js
CHANGED
|
@@ -35,11 +35,16 @@ class McpClientManager {
|
|
|
35
35
|
await client.connect(clientTransport);
|
|
36
36
|
} else if (config.type === "sse") {
|
|
37
37
|
const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js");
|
|
38
|
-
const
|
|
38
|
+
const opts = config.headers ? {
|
|
39
|
+
eventSourceInit: { headers: config.headers },
|
|
40
|
+
requestInit: { headers: config.headers }
|
|
41
|
+
} : undefined;
|
|
42
|
+
const transport = new SSEClientTransport(new URL(config.url), opts);
|
|
39
43
|
await client.connect(transport);
|
|
40
44
|
} else if (config.type === "http") {
|
|
41
45
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
42
|
-
const
|
|
46
|
+
const requestInit = config.headers ? { headers: config.headers } : undefined;
|
|
47
|
+
const transport = new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
|
|
43
48
|
await client.connect(transport);
|
|
44
49
|
} else {
|
|
45
50
|
const { StdioClientTransport } = await import("@modelcontextprotocol/sdk/client/stdio.js");
|
package/dist/providers/openai.js
CHANGED
|
@@ -27,14 +27,18 @@ __export(exports_openai_oauth, {
|
|
|
27
27
|
import { randomBytes, createHash } from "crypto";
|
|
28
28
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
29
29
|
import { join } from "path";
|
|
30
|
+
import { homedir } from "os";
|
|
31
|
+
function getHome() {
|
|
32
|
+
return process.env.HOME ?? homedir();
|
|
33
|
+
}
|
|
30
34
|
function tokenDir() {
|
|
31
|
-
return join(
|
|
35
|
+
return join(getHome(), ".fourmis");
|
|
32
36
|
}
|
|
33
37
|
function tokenPath() {
|
|
34
38
|
return join(tokenDir(), "openai-auth.json");
|
|
35
39
|
}
|
|
36
40
|
function codexFallbackPath() {
|
|
37
|
-
return join(
|
|
41
|
+
return join(getHome(), ".codex", "auth.json");
|
|
38
42
|
}
|
|
39
43
|
function loadTokens() {
|
|
40
44
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -850,9 +854,10 @@ class OpenAIAdapter {
|
|
|
850
854
|
}
|
|
851
855
|
}
|
|
852
856
|
function loadTokensSync() {
|
|
857
|
+
const home = process.env.HOME ?? __require("os").homedir();
|
|
853
858
|
const paths = [
|
|
854
|
-
`${
|
|
855
|
-
`${
|
|
859
|
+
`${home}/.fourmis/openai-auth.json`,
|
|
860
|
+
`${home}/.codex/auth.json`
|
|
856
861
|
];
|
|
857
862
|
for (const p of paths) {
|
|
858
863
|
try {
|
|
@@ -27,14 +27,18 @@ __export(exports_openai_oauth, {
|
|
|
27
27
|
import { randomBytes, createHash } from "crypto";
|
|
28
28
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
29
29
|
import { join } from "path";
|
|
30
|
+
import { homedir } from "os";
|
|
31
|
+
function getHome() {
|
|
32
|
+
return process.env.HOME ?? homedir();
|
|
33
|
+
}
|
|
30
34
|
function tokenDir() {
|
|
31
|
-
return join(
|
|
35
|
+
return join(getHome(), ".fourmis");
|
|
32
36
|
}
|
|
33
37
|
function tokenPath() {
|
|
34
38
|
return join(tokenDir(), "openai-auth.json");
|
|
35
39
|
}
|
|
36
40
|
function codexFallbackPath() {
|
|
37
|
-
return join(
|
|
41
|
+
return join(getHome(), ".codex", "auth.json");
|
|
38
42
|
}
|
|
39
43
|
function loadTokens() {
|
|
40
44
|
for (const p of [tokenPath(), codexFallbackPath()]) {
|
|
@@ -1064,9 +1068,10 @@ class OpenAIAdapter {
|
|
|
1064
1068
|
}
|
|
1065
1069
|
}
|
|
1066
1070
|
function loadTokensSync() {
|
|
1071
|
+
const home = process.env.HOME ?? __require("os").homedir();
|
|
1067
1072
|
const paths = [
|
|
1068
|
-
`${
|
|
1069
|
-
`${
|
|
1073
|
+
`${home}/.fourmis/openai-auth.json`,
|
|
1074
|
+
`${home}/.codex/auth.json`
|
|
1070
1075
|
];
|
|
1071
1076
|
for (const p of paths) {
|
|
1072
1077
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAkB7C;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAkB7C;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,YAAY,CAad"}
|
package/dist/tools/index.js
CHANGED
|
@@ -570,8 +570,6 @@ var ALL_TOOLS = {
|
|
|
570
570
|
function buildToolRegistry(toolNames, allowedTools, disallowedTools) {
|
|
571
571
|
const registry = new ToolRegistry;
|
|
572
572
|
for (const name of toolNames) {
|
|
573
|
-
if (allowedTools && !allowedTools.includes(name))
|
|
574
|
-
continue;
|
|
575
573
|
if (disallowedTools?.includes(name))
|
|
576
574
|
continue;
|
|
577
575
|
const tool = ALL_TOOLS[name];
|