@guardiojs/guardio 0.0.3 → 0.0.6
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/bin/guardio.mjs +3 -0
- package/dist/cli.js +44 -57
- package/dist/cli.js.map +1 -1
- package/dist/config/PluginManager.d.ts +4 -0
- package/dist/config/PluginManager.d.ts.map +1 -1
- package/dist/config/PluginManager.js +17 -1
- package/dist/config/PluginManager.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +27 -7
- package/dist/config/types.d.ts.map +1 -1
- package/dist/core/GuardioActions.d.ts +12 -0
- package/dist/core/GuardioActions.d.ts.map +1 -0
- package/dist/core/GuardioActions.js +12 -0
- package/dist/core/GuardioActions.js.map +1 -0
- package/dist/core/GuardioCore.d.ts +22 -9
- package/dist/core/GuardioCore.d.ts.map +1 -1
- package/dist/core/GuardioCore.js +175 -74
- package/dist/core/GuardioCore.js.map +1 -1
- package/dist/core/GuardioErrorCodes.d.ts +42 -0
- package/dist/core/GuardioErrorCodes.d.ts.map +1 -0
- package/dist/core/GuardioErrorCodes.js +71 -0
- package/dist/core/GuardioErrorCodes.js.map +1 -0
- package/dist/core/transports/create-client-transport.d.ts +14 -0
- package/dist/core/transports/create-client-transport.d.ts.map +1 -0
- package/dist/core/transports/create-client-transport.js +19 -0
- package/dist/core/transports/create-client-transport.js.map +1 -0
- package/dist/core/transports/http-client.d.ts +27 -0
- package/dist/core/transports/http-client.d.ts.map +1 -0
- package/dist/core/transports/http-client.js +86 -0
- package/dist/core/transports/http-client.js.map +1 -0
- package/dist/core/transports/index.d.ts +13 -0
- package/dist/core/transports/index.d.ts.map +1 -0
- package/dist/core/transports/index.js +11 -0
- package/dist/core/transports/index.js.map +1 -0
- package/dist/core/transports/sse-url-transport.d.ts +26 -0
- package/dist/core/transports/sse-url-transport.d.ts.map +1 -0
- package/dist/core/transports/sse-url-transport.js +111 -0
- package/dist/core/transports/sse-url-transport.js.map +1 -0
- package/dist/core/transports/stdio-client.d.ts +12 -0
- package/dist/core/transports/stdio-client.d.ts.map +1 -0
- package/dist/core/transports/stdio-client.js +25 -0
- package/dist/core/transports/stdio-client.js.map +1 -0
- package/dist/core/transports/types.d.ts +21 -0
- package/dist/core/transports/types.d.ts.map +1 -0
- package/dist/core/transports/types.js +2 -0
- package/dist/core/transports/types.js.map +1 -0
- package/dist/core/types.d.ts +40 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +11 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +16 -0
- package/dist/logger.js.map +1 -0
- package/dist/plugins/intervention/HttpInterventionPlugin.d.ts.map +1 -1
- package/dist/plugins/intervention/HttpInterventionPlugin.js +4 -7
- package/dist/plugins/intervention/HttpInterventionPlugin.js.map +1 -1
- package/dist/plugins/notification/DefaultNotificationPlugin.d.ts +1 -1
- package/dist/plugins/notification/DefaultNotificationPlugin.d.ts.map +1 -1
- package/dist/plugins/notification/DefaultNotificationPlugin.js +3 -2
- package/dist/plugins/notification/DefaultNotificationPlugin.js.map +1 -1
- package/dist/plugins/policy/DefaultPolicyPlugin.d.ts.map +1 -1
- package/dist/plugins/policy/DefaultPolicyPlugin.js +4 -1
- package/dist/plugins/policy/DefaultPolicyPlugin.js.map +1 -1
- package/dist/plugins/policy/RegexPolicyPlugin.d.ts.map +1 -1
- package/dist/plugins/policy/RegexPolicyPlugin.js +2 -1
- package/dist/plugins/policy/RegexPolicyPlugin.js.map +1 -1
- package/dist/server/index.d.ts +20 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +27 -0
- package/dist/server/index.js.map +1 -0
- package/package.json +4 -3
- package/README.md +0 -224
package/bin/guardio.mjs
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,75 +1,62 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI –
|
|
2
|
+
* CLI – load config and start Guardio as an HTTP server only.
|
|
3
|
+
* Requires server.type "url" (upstream MCP via HTTP/SSE). Clients connect to Guardio via HTTP.
|
|
3
4
|
*/
|
|
4
5
|
import { resolve, dirname } from "node:path";
|
|
5
|
-
import {
|
|
6
|
-
import { loadConfigFromPath } from "./config/index.js";
|
|
6
|
+
import { GuardioHttpServer } from "./server/index.js";
|
|
7
|
+
import { loadConfigFromPath, getConfigPath } from "./config/index.js";
|
|
8
|
+
import { logger } from "./logger.js";
|
|
7
9
|
const configIdx = process.argv.indexOf("--config");
|
|
8
10
|
const configPathArg = configIdx >= 0 && process.argv[configIdx + 1]
|
|
9
11
|
? process.argv[configIdx + 1]
|
|
10
12
|
: null;
|
|
13
|
+
const DEFAULT_PORT = 3939;
|
|
14
|
+
const DEFAULT_HOST = "127.0.0.1";
|
|
11
15
|
async function main() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
configPath = resolved;
|
|
20
|
-
cwd = dirname(resolved);
|
|
21
|
-
if (config.server?.type === "command") {
|
|
22
|
-
command = config.server.command;
|
|
23
|
-
const configDir = dirname(resolved);
|
|
24
|
-
args = (config.server.args ?? []).map((arg) => resolve(configDir, arg));
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
command =
|
|
28
|
-
process.env.GUARDIO_COMMAND ??
|
|
29
|
-
process.env.MCP_REAL_TOOL_COMMAND ??
|
|
30
|
-
"node";
|
|
31
|
-
args = process.env.GUARDIO_ARGS
|
|
32
|
-
? process.env.GUARDIO_ARGS.split(",").map((s) => s.trim())
|
|
33
|
-
: process.env.MCP_REAL_TOOL_ARGS
|
|
34
|
-
? process.env.MCP_REAL_TOOL_ARGS.split(",").map((s) => s.trim())
|
|
35
|
-
: ["/path/to/your/actual-mcp-server/index.ts"];
|
|
36
|
-
}
|
|
16
|
+
logger.debug({ argv: process.argv }, "CLI starting");
|
|
17
|
+
const resolved = configPathArg
|
|
18
|
+
? resolve(configPathArg)
|
|
19
|
+
: getConfigPath(process.cwd());
|
|
20
|
+
if (!resolved) {
|
|
21
|
+
logger.error("No guardio config found. Use --config guardio.config.json or add guardio.config.js/ts/json in cwd.");
|
|
22
|
+
process.exit(1);
|
|
37
23
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
argvAfterDash.length > 0
|
|
46
|
-
? argvAfterDash[0]
|
|
47
|
-
: directArgs.length > 0
|
|
48
|
-
? directArgs[0]
|
|
49
|
-
: process.env.GUARDIO_COMMAND ??
|
|
50
|
-
process.env.MCP_REAL_TOOL_COMMAND ??
|
|
51
|
-
"node";
|
|
52
|
-
args =
|
|
53
|
-
argvAfterDash.length > 1
|
|
54
|
-
? argvAfterDash.slice(1)
|
|
55
|
-
: directArgs.length > 1
|
|
56
|
-
? directArgs.slice(1)
|
|
57
|
-
: process.env.GUARDIO_ARGS
|
|
58
|
-
? process.env.GUARDIO_ARGS.split(",").map((s) => s.trim())
|
|
59
|
-
: process.env.MCP_REAL_TOOL_ARGS
|
|
60
|
-
? process.env.MCP_REAL_TOOL_ARGS.split(",").map((s) => s.trim())
|
|
61
|
-
: ["/path/to/your/actual-mcp-server/index.ts"];
|
|
24
|
+
logger.info({ configPath: resolved }, "Loading config");
|
|
25
|
+
const config = await loadConfigFromPath(resolved);
|
|
26
|
+
const configPath = resolved;
|
|
27
|
+
const cwd = dirname(resolved);
|
|
28
|
+
if (!config.server || config.server.type !== "url") {
|
|
29
|
+
logger.error('Guardio requires server: { type: "url", url: "<MCP_SSE_BASE_URL>" } in config.');
|
|
30
|
+
process.exit(1);
|
|
62
31
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
32
|
+
const server = {
|
|
33
|
+
type: "url",
|
|
34
|
+
url: config.server.url,
|
|
35
|
+
headers: config.server.headers,
|
|
36
|
+
timeoutMs: config.server.timeoutMs,
|
|
37
|
+
};
|
|
38
|
+
const portEnv = process.env.GUARDIO_HTTP_PORT ?? process.env.GUARDIO_CLIENT_PORT;
|
|
39
|
+
const port = portEnv != null && portEnv !== ""
|
|
40
|
+
? parseInt(portEnv, 10)
|
|
41
|
+
: (config.client?.port ?? DEFAULT_PORT);
|
|
42
|
+
const host = process.env.GUARDIO_HTTP_HOST ?? config.client?.host ?? DEFAULT_HOST;
|
|
43
|
+
if (port == null || Number.isNaN(port)) {
|
|
44
|
+
logger.error("Set client.port in config or GUARDIO_HTTP_PORT (default " +
|
|
45
|
+
DEFAULT_PORT +
|
|
46
|
+
").");
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
logger.info({ port, host }, "Starting HTTP server");
|
|
50
|
+
const httpServer = new GuardioHttpServer({
|
|
51
|
+
server,
|
|
52
|
+
listen: { port, host },
|
|
66
53
|
cwd,
|
|
67
54
|
configPath,
|
|
68
55
|
});
|
|
69
|
-
await
|
|
56
|
+
await httpServer.run();
|
|
70
57
|
}
|
|
71
58
|
main().catch((err) => {
|
|
72
|
-
|
|
59
|
+
logger.error({ err }, "Guardio failed to start");
|
|
73
60
|
process.exit(1);
|
|
74
61
|
});
|
|
75
62
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@ import type { PolicyPluginInterface } from "../interfaces/PolicyPluginInterface.
|
|
|
3
3
|
import type { InterventionPluginInterface } from "../interfaces/InterventionPluginInterface.js";
|
|
4
4
|
export type PolicyPluginFactory = (config?: Record<string, unknown>) => PolicyPluginInterface;
|
|
5
5
|
export type InterventionPluginFactory = (config?: Record<string, unknown>) => InterventionPluginInterface;
|
|
6
|
+
/**
|
|
7
|
+
* Resolves path to config file: first .js, then .ts, then .json (from cwd).
|
|
8
|
+
*/
|
|
9
|
+
export declare function getConfigPath(cwd: string): string | null;
|
|
6
10
|
/**
|
|
7
11
|
* Loads GuardioConfig from a path. Supports .json (readFile + parse) and .js/.ts (dynamic import).
|
|
8
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/config/PluginManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/config/PluginManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAWhG,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,qBAAqB,CAAC;AAE3B,MAAM,MAAM,yBAAyB,GAAG,CACtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,2BAA2B,CAAC;AA4CjC;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWxD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAuBxB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,mBAAmB,CAA8C;IAEzE;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAItE;;OAEG;IACH,0BAA0B,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,yBAAyB,GACjC,IAAI;IAKP;;OAEG;IACG,UAAU,CACd,GAAG,GAAE,MAAsB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC;IAmBzB;;OAEG;IACG,gBAAgB,CACpB,GAAG,GAAE,MAAsB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA6DnC;;OAEG;IACG,eAAe,CACnB,GAAG,CAAC,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC;IAUjC;;OAEG;IACG,sBAAsB,CAC1B,GAAG,GAAE,MAAsB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,EAAE,CAAC;CA6D1C"}
|
|
@@ -3,6 +3,7 @@ import { join, dirname, resolve } from "node:path";
|
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import { DefaultPolicyPlugin, RegexPolicyPlugin, } from "../plugins/policy/index.js";
|
|
5
5
|
import { DefaultInterventionPlugin, HttpInterventionPlugin, } from "../plugins/intervention/index.js";
|
|
6
|
+
import { logger } from "../logger.js";
|
|
6
7
|
const policyRegistry = {
|
|
7
8
|
default: (config) => new DefaultPolicyPlugin(config ?? {}),
|
|
8
9
|
regex: (config) => new RegexPolicyPlugin(config ?? {}),
|
|
@@ -40,7 +41,7 @@ async function loadPluginInstance(entryPath) {
|
|
|
40
41
|
/**
|
|
41
42
|
* Resolves path to config file: first .js, then .ts, then .json (from cwd).
|
|
42
43
|
*/
|
|
43
|
-
function getConfigPath(cwd) {
|
|
44
|
+
export function getConfigPath(cwd) {
|
|
44
45
|
const names = [
|
|
45
46
|
"guardio.config.js",
|
|
46
47
|
"guardio.config.ts",
|
|
@@ -57,6 +58,7 @@ function getConfigPath(cwd) {
|
|
|
57
58
|
* Loads GuardioConfig from a path. Supports .json (readFile + parse) and .js/.ts (dynamic import).
|
|
58
59
|
*/
|
|
59
60
|
export async function loadConfigFromPath(configPath) {
|
|
61
|
+
logger.debug({ configPath }, "Loading config from path");
|
|
60
62
|
if (configPath.endsWith(".json")) {
|
|
61
63
|
const raw = readFileSync(configPath, "utf-8");
|
|
62
64
|
return JSON.parse(raw);
|
|
@@ -65,8 +67,10 @@ export async function loadConfigFromPath(configPath) {
|
|
|
65
67
|
const mod = await import(url);
|
|
66
68
|
const config = mod.default ?? mod;
|
|
67
69
|
if (!config || typeof config !== "object" || !Array.isArray(config.plugins)) {
|
|
70
|
+
logger.error({ configPath }, "Invalid guardio config: expected default export with plugins array");
|
|
68
71
|
throw new Error(`Invalid guardio config: expected default export with plugins array (at ${configPath})`);
|
|
69
72
|
}
|
|
73
|
+
logger.debug({ configPath, pluginCount: config.plugins.length }, "Config loaded");
|
|
70
74
|
return config;
|
|
71
75
|
}
|
|
72
76
|
export class PluginManager {
|
|
@@ -93,9 +97,11 @@ export class PluginManager {
|
|
|
93
97
|
async loadConfig(cwd = process.cwd(), configPath) {
|
|
94
98
|
const path = configPath ?? getConfigPath(cwd);
|
|
95
99
|
if (!path) {
|
|
100
|
+
logger.error({ cwd }, "No guardio config found");
|
|
96
101
|
throw new Error(`No guardio config found in ${cwd}. Add guardio.config.js, guardio.config.ts, or guardio.config.json`);
|
|
97
102
|
}
|
|
98
103
|
if (this.configPath === path && this.config !== null) {
|
|
104
|
+
logger.debug("Using cached config");
|
|
99
105
|
return this.config;
|
|
100
106
|
}
|
|
101
107
|
this.configPath = path;
|
|
@@ -117,9 +123,11 @@ export class PluginManager {
|
|
|
117
123
|
for (const entry of plugins) {
|
|
118
124
|
if (entry.path) {
|
|
119
125
|
const entryPath = resolvePluginEntryPath(entry.path, configDir);
|
|
126
|
+
logger.debug({ path: entry.path, entryPath }, "Loading policy plugin from path");
|
|
120
127
|
const instance = await loadPluginInstance(entryPath);
|
|
121
128
|
if (typeof instance.name !== "string" ||
|
|
122
129
|
typeof instance.evaluate !== "function") {
|
|
130
|
+
logger.error({ path: entry.path }, "Plugin default export must be a policy instance (name, evaluate)");
|
|
123
131
|
throw new Error(`Plugin at ${entry.path}: default export must be a policy instance (name, evaluate).`);
|
|
124
132
|
}
|
|
125
133
|
instances.push(instance);
|
|
@@ -127,12 +135,15 @@ export class PluginManager {
|
|
|
127
135
|
else {
|
|
128
136
|
const factory = policyRegistry[entry.name];
|
|
129
137
|
if (!factory) {
|
|
138
|
+
logger.error({ name: entry.name, registered: Object.keys(policyRegistry) }, "Unknown policy plugin name");
|
|
130
139
|
throw new Error(`Unknown policy plugin name: "${entry.name}". Registered: ${Object.keys(policyRegistry).join(", ")}`);
|
|
131
140
|
}
|
|
141
|
+
logger.debug({ name: entry.name }, "Instantiating built-in policy plugin");
|
|
132
142
|
instances.push(factory(entry.config ?? {}));
|
|
133
143
|
}
|
|
134
144
|
}
|
|
135
145
|
this.policyPlugins = instances;
|
|
146
|
+
logger.debug({ count: instances.length, names: instances.map((p) => p.name) }, "Policy plugins resolved");
|
|
136
147
|
return instances;
|
|
137
148
|
}
|
|
138
149
|
/**
|
|
@@ -158,9 +169,11 @@ export class PluginManager {
|
|
|
158
169
|
for (const entry of plugins) {
|
|
159
170
|
if (entry.path) {
|
|
160
171
|
const entryPath = resolvePluginEntryPath(entry.path, configDir);
|
|
172
|
+
logger.debug({ path: entry.path, entryPath }, "Loading intervention plugin from path");
|
|
161
173
|
const instance = await loadPluginInstance(entryPath);
|
|
162
174
|
if (typeof instance.name !== "string" ||
|
|
163
175
|
typeof instance.act !== "function") {
|
|
176
|
+
logger.error({ path: entry.path }, "Plugin default export must be an intervention instance (name, act)");
|
|
164
177
|
throw new Error(`Plugin at ${entry.path}: default export must be an intervention instance (name, act).`);
|
|
165
178
|
}
|
|
166
179
|
instances.push(instance);
|
|
@@ -168,12 +181,15 @@ export class PluginManager {
|
|
|
168
181
|
else {
|
|
169
182
|
const factory = interventionRegistry[entry.name];
|
|
170
183
|
if (!factory) {
|
|
184
|
+
logger.error({ name: entry.name, registered: Object.keys(interventionRegistry) }, "Unknown intervention plugin name");
|
|
171
185
|
throw new Error(`Unknown intervention plugin name: "${entry.name}". Registered: ${Object.keys(interventionRegistry).join(", ")}`);
|
|
172
186
|
}
|
|
187
|
+
logger.debug({ name: entry.name }, "Instantiating built-in intervention plugin");
|
|
173
188
|
instances.push(factory(entry.config ?? {}));
|
|
174
189
|
}
|
|
175
190
|
}
|
|
176
191
|
this.interventionPlugins = instances;
|
|
192
|
+
logger.debug({ count: instances.length, names: instances.map((p) => p.name) }, "Intervention plugins resolved");
|
|
177
193
|
return instances;
|
|
178
194
|
}
|
|
179
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../../src/config/PluginManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../../src/config/PluginManager.ts"],"names":[],"mappings":"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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { PluginManager, loadConfigFromPath } from "./PluginManager.js";
|
|
1
|
+
export { PluginManager, loadConfigFromPath, getConfigPath, } from "./PluginManager.js";
|
|
2
2
|
export type { PolicyPluginFactory } from "./PluginManager.js";
|
|
3
|
-
export type { GuardioConfig, GuardioServerConfig, PolicyPluginConfigEntry, InterventionPluginConfigEntry, PluginConfigEntry, } from "./types.js";
|
|
3
|
+
export type { GuardioConfig, GuardioServerConfig, GuardioServerConfigUrl, GuardioClientConfig, PolicyPluginConfigEntry, InterventionPluginConfigEntry, PluginConfigEntry, } from "./types.js";
|
|
4
4
|
export type { InterventionPluginFactory } from "./PluginManager.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { PluginManager, loadConfigFromPath } from "./PluginManager.js";
|
|
1
|
+
export { PluginManager, loadConfigFromPath, getConfigPath, } from "./PluginManager.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,oBAAoB,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -25,19 +25,39 @@ export interface InterventionPluginConfigEntry {
|
|
|
25
25
|
*/
|
|
26
26
|
export type PluginConfigEntry = PolicyPluginConfigEntry | InterventionPluginConfigEntry;
|
|
27
27
|
/**
|
|
28
|
-
* MCP server to proxy to (
|
|
28
|
+
* MCP server to proxy to (HTTP/SSE URL only).
|
|
29
29
|
*/
|
|
30
|
-
export interface
|
|
31
|
-
type: "
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
export interface GuardioServerConfigUrl {
|
|
31
|
+
type: "url";
|
|
32
|
+
url: string;
|
|
33
|
+
/** Optional headers (e.g. Authorization). */
|
|
34
|
+
headers?: Record<string, string>;
|
|
35
|
+
/** Request timeout in ms. Defaults to 30000. */
|
|
36
|
+
timeoutMs?: number;
|
|
37
|
+
}
|
|
38
|
+
/** Server config: only HTTP/SSE URL is supported. */
|
|
39
|
+
export type GuardioServerConfig = GuardioServerConfigUrl;
|
|
40
|
+
/**
|
|
41
|
+
* Listen address for the Guardio HTTP server. Clients (e.g. AI Agents) connect to this URL.
|
|
42
|
+
*/
|
|
43
|
+
export interface GuardioClientConfig {
|
|
44
|
+
/** Port the HTTP server listens on. Default 3939. */
|
|
45
|
+
port?: number;
|
|
46
|
+
/** Host to bind. Default "127.0.0.1". Use "0.0.0.0" for external connections. */
|
|
47
|
+
host?: string;
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated Guardio is HTTP-only; mode is ignored. Use port/host to configure the server.
|
|
50
|
+
*/
|
|
51
|
+
mode?: "http";
|
|
34
52
|
}
|
|
35
53
|
/**
|
|
36
54
|
* Guardio config file shape (default export of guardio.config.ts / .json).
|
|
37
55
|
*/
|
|
38
56
|
export interface GuardioConfig {
|
|
39
|
-
/** MCP server to proxy to
|
|
40
|
-
server
|
|
57
|
+
/** MCP server to proxy to (HTTP/SSE URL). Required. */
|
|
58
|
+
server: GuardioServerConfig;
|
|
59
|
+
/** Where Guardio HTTP server listens (port, host). Optional; defaults port 3939, host 127.0.0.1. */
|
|
60
|
+
client?: GuardioClientConfig;
|
|
41
61
|
plugins: PluginConfigEntry[];
|
|
42
62
|
}
|
|
43
63
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kJAAkJ;IAClJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wJAAwJ;IACxJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,6BAA6B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kJAAkJ;IAClJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,wJAAwJ;IACxJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,uBAAuB,GACvB,6BAA6B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,oGAAoG;IACpG,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action names for result._guardio.action when Guardio blocks or rejects a tool call.
|
|
3
|
+
* We return a successful JSON-RPC result (not an error), so numeric error codes are not used.
|
|
4
|
+
* These strings identify the kind of denial for the AI Agent / client.
|
|
5
|
+
*/
|
|
6
|
+
export declare const GuardioAction: {
|
|
7
|
+
/** Tool was blocked by a policy plugin. */
|
|
8
|
+
readonly TOOL_BLOCKED: "TOOL_BLOCKED";
|
|
9
|
+
/** Tool call was rejected by an intervention plugin. */
|
|
10
|
+
readonly POLICY_VIOLATION: "POLICY_VIOLATION";
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=GuardioActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuardioActions.d.ts","sourceRoot":"","sources":["../../src/core/GuardioActions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,aAAa;IACxB,2CAA2C;;IAE3C,wDAAwD;;CAEhD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action names for result._guardio.action when Guardio blocks or rejects a tool call.
|
|
3
|
+
* We return a successful JSON-RPC result (not an error), so numeric error codes are not used.
|
|
4
|
+
* These strings identify the kind of denial for the AI Agent / client.
|
|
5
|
+
*/
|
|
6
|
+
export const GuardioAction = {
|
|
7
|
+
/** Tool was blocked by a policy plugin. */
|
|
8
|
+
TOOL_BLOCKED: "TOOL_BLOCKED",
|
|
9
|
+
/** Tool call was rejected by an intervention plugin. */
|
|
10
|
+
POLICY_VIOLATION: "POLICY_VIOLATION",
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=GuardioActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuardioActions.js","sourceRoot":"","sources":["../../src/core/GuardioActions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,2CAA2C;IAC3C,YAAY,EAAE,cAAc;IAC5B,wDAAwD;IACxD,gBAAgB,EAAE,kBAAkB;CAC5B,CAAC"}
|
|
@@ -3,17 +3,30 @@ export declare class GuardioCore {
|
|
|
3
3
|
private readonly config;
|
|
4
4
|
private policyPlugins;
|
|
5
5
|
private interventionPlugins;
|
|
6
|
-
private
|
|
7
|
-
private
|
|
8
|
-
private toolInterface;
|
|
9
|
-
private pendingResponseId;
|
|
10
|
-
private readonly appQueue;
|
|
6
|
+
private transport;
|
|
7
|
+
private clientTransport;
|
|
11
8
|
constructor(config: GuardioCoreConfig);
|
|
12
9
|
run(): Promise<void>;
|
|
13
|
-
private
|
|
10
|
+
private sendToClient;
|
|
11
|
+
/** Resolve Guardio package version from package.json when available. */
|
|
12
|
+
private getGuardioVersion;
|
|
13
|
+
/**
|
|
14
|
+
* Build a successful JSON-RPC response for blocked/rejected tool calls.
|
|
15
|
+
* Returns a result (not error) so AI Agent frameworks don't treat it as a fatal error;
|
|
16
|
+
* the agent can read the content and _guardio metadata.
|
|
17
|
+
*/
|
|
18
|
+
private buildGuardioBlockedResponse;
|
|
19
|
+
/**
|
|
20
|
+
* Handle POST /messages (HTTP client): run policy/intervention, then forward to remote.
|
|
21
|
+
*/
|
|
22
|
+
handlePostMessage(body: string): Promise<{
|
|
23
|
+
status: number;
|
|
24
|
+
body: string;
|
|
25
|
+
}>;
|
|
26
|
+
private sendBlockedResponse;
|
|
27
|
+
/**
|
|
28
|
+
* Process one line from client (stdio or from queue): run plugins, then forward to MCP.
|
|
29
|
+
*/
|
|
14
30
|
private processAppLine;
|
|
15
|
-
private drainAppQueue;
|
|
16
|
-
private attachAppHandler;
|
|
17
|
-
private attachToolHandler;
|
|
18
31
|
}
|
|
19
32
|
//# sourceMappingURL=GuardioCore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuardioCore.d.ts","sourceRoot":"","sources":["../../src/core/GuardioCore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GuardioCore.d.ts","sourceRoot":"","sources":["../../src/core/GuardioCore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAYpD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,mBAAmB,CAAqC;IAEhE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,eAAe,CAAgC;gBAE3C,MAAM,EAAE,iBAAiB;IAI/B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C1B,OAAO,CAAC,YAAY;IAIpB,wEAAwE;IACxE,OAAO,CAAC,iBAAiB;IAUzB;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAyCnC;;OAEG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA4F5C,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;YACW,cAAc;CA8C7B"}
|