@better-agent/plugins 0.1.0-canary.6 → 0.2.0-beta.1
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/index.d.mts +33 -76
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +281 -332
- package/dist/index.mjs.map +1 -1
- package/package.json +21 -5
package/dist/index.d.mts
CHANGED
|
@@ -1,60 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthContext, Plugin, ToolApprovalConfig } from "@better-agent/core";
|
|
2
2
|
|
|
3
|
-
//#region src/auth/types.d.ts
|
|
4
|
-
/** Configuration for `authPlugin`. */
|
|
5
|
-
type AuthPluginConfig = {
|
|
6
|
-
/** Plugin id. */id?: string; /** Header used when `getKey` is not provided. */
|
|
7
|
-
header?: string; /** Allowed API keys for the default validator. */
|
|
8
|
-
apiKeys?: readonly string[]; /** Resolves the request API key. */
|
|
9
|
-
getKey?: (ctx: {
|
|
10
|
-
/** Agent name. */agentName: string; /** Guard mode. */
|
|
11
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
12
|
-
request: Request;
|
|
13
|
-
}) => string | null | undefined | Promise<string | null | undefined>; /** Validates one API key. */
|
|
14
|
-
validate?: (ctx: {
|
|
15
|
-
/** Resolved API key. */key: string | null; /** Agent name. */
|
|
16
|
-
agentName: string; /** Guard mode. */
|
|
17
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
18
|
-
request: Request;
|
|
19
|
-
}) => boolean | Promise<boolean>; /** Overrides the unauthorized response. */
|
|
20
|
-
onUnauthorized?: (ctx: {
|
|
21
|
-
/** Resolved API key. */key: string | null; /** Agent name. */
|
|
22
|
-
agentName: string; /** Guard mode. */
|
|
23
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
24
|
-
request: Request;
|
|
25
|
-
}) => Response | Promise<Response>;
|
|
26
|
-
};
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/auth/plugin.d.ts
|
|
29
|
-
/**
|
|
30
|
-
* Creates an API-key auth plugin.
|
|
31
|
-
*
|
|
32
|
-
* Provide either `apiKeys` or `validate`.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```ts
|
|
36
|
-
* const plugin = authPlugin({
|
|
37
|
-
* apiKeys: ["dev-key"],
|
|
38
|
-
* });
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
declare const authPlugin: (config: AuthPluginConfig) => Plugin;
|
|
42
|
-
//#endregion
|
|
43
3
|
//#region src/ip-allowlist/types.d.ts
|
|
44
|
-
/** Configuration for `
|
|
45
|
-
type
|
|
4
|
+
/** Configuration for `ipAllowlist`. */
|
|
5
|
+
type IpAllowlistConfig = {
|
|
46
6
|
/** Plugin id. */id?: string; /** Allowed IPs or CIDR ranges. */
|
|
47
7
|
allow: readonly string[]; /** Whether to trust `x-forwarded-for`. */
|
|
48
8
|
trustProxy?: boolean; /** Resolves the request IP. */
|
|
49
9
|
getIp?: (ctx: {
|
|
50
|
-
/** Agent name. */agentName: string; /**
|
|
51
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
10
|
+
/** Agent name. */agentName: string; /** Incoming request. */
|
|
52
11
|
request: Request;
|
|
53
12
|
}) => string | null | undefined | Promise<string | null | undefined>; /** Overrides the denied response. */
|
|
54
13
|
onDenied?: (ctx: {
|
|
55
14
|
/** Resolved IP. */ip: string | null; /** Agent name. */
|
|
56
|
-
agentName: string; /**
|
|
57
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
15
|
+
agentName: string; /** Incoming request. */
|
|
58
16
|
request: Request;
|
|
59
17
|
}) => Response | Promise<Response>;
|
|
60
18
|
};
|
|
@@ -65,16 +23,16 @@ type IpAllowlistPluginConfig = {
|
|
|
65
23
|
*
|
|
66
24
|
* @example
|
|
67
25
|
* ```ts
|
|
68
|
-
* const plugin =
|
|
26
|
+
* const plugin = ipAllowlist({
|
|
69
27
|
* allow: ["127.0.0.1", "10.0.0.0/8"],
|
|
70
28
|
* });
|
|
71
29
|
* ```
|
|
72
30
|
*/
|
|
73
|
-
declare const
|
|
31
|
+
declare const ipAllowlist: (config: IpAllowlistConfig) => Plugin;
|
|
74
32
|
//#endregion
|
|
75
33
|
//#region src/logging/types.d.ts
|
|
76
|
-
/** Configuration for `
|
|
77
|
-
type
|
|
34
|
+
/** Configuration for `logging`. */
|
|
35
|
+
type LoggingConfig = {
|
|
78
36
|
/** Plugin id. */id?: string; /** Minimum log level. */
|
|
79
37
|
level?: "debug" | "info" | "warn" | "error"; /** Logger implementation. */
|
|
80
38
|
logger?: {
|
|
@@ -88,21 +46,20 @@ type LoggingPluginConfig = {
|
|
|
88
46
|
events?: boolean; /** Logs step boundaries. */
|
|
89
47
|
steps?: boolean; /** Logs model calls. */
|
|
90
48
|
modelCalls?: boolean; /** Logs tool calls. */
|
|
91
|
-
toolCalls?: boolean; /** Logs
|
|
92
|
-
saves?: boolean; /** Logs error events. */
|
|
49
|
+
toolCalls?: boolean; /** Logs error events. */
|
|
93
50
|
errors?: boolean;
|
|
94
51
|
}; /** Extra header names to redact. */
|
|
95
52
|
redactHeaders?: readonly string[]; /** Rewrites logged bodies before emission. */
|
|
96
53
|
redactBody?: (ctx: {
|
|
97
54
|
/** Raw body value. */body: unknown; /** Logging phase. */
|
|
98
|
-
phase: "request" | "response" | "tool_args" | "tool_result"
|
|
55
|
+
phase: "request" | "response" | "tool_args" | "tool_result";
|
|
99
56
|
}) => unknown; /** Formats one log entry. */
|
|
100
57
|
format?: (entry: LogEntry) => unknown;
|
|
101
58
|
};
|
|
102
|
-
/** Structured log entry emitted by `
|
|
59
|
+
/** Structured log entry emitted by `logging`. */
|
|
103
60
|
type LogEntry = {
|
|
104
61
|
/** Log level. */level: "debug" | "info" | "warn" | "error"; /** Log event name. */
|
|
105
|
-
event: "request.received" | "run.event" | "step.start" | "model.before" | "model.after" | "tool.before" | "tool.after"
|
|
62
|
+
event: "request.received" | "run.event" | "step.start" | "model.before" | "model.after" | "tool.before" | "tool.after"; /** ISO timestamp. */
|
|
106
63
|
timestamp: string; /** Agent name. */
|
|
107
64
|
agentName: string; /** Run id, when available. */
|
|
108
65
|
runId?: string; /** Conversation id, when available. */
|
|
@@ -116,13 +73,13 @@ type LogEntry = {
|
|
|
116
73
|
*
|
|
117
74
|
* @example
|
|
118
75
|
* ```ts
|
|
119
|
-
* const plugin =
|
|
76
|
+
* const plugin = logging({
|
|
120
77
|
* level: "info",
|
|
121
78
|
* include: { requests: true, toolCalls: true },
|
|
122
79
|
* });
|
|
123
80
|
* ```
|
|
124
81
|
*/
|
|
125
|
-
declare const
|
|
82
|
+
declare const logging: (config?: LoggingConfig) => Plugin;
|
|
126
83
|
//#endregion
|
|
127
84
|
//#region src/rate-limit/types.d.ts
|
|
128
85
|
/** One rate-limit window bucket. */
|
|
@@ -135,17 +92,17 @@ type RateLimitBucket = {
|
|
|
135
92
|
};
|
|
136
93
|
/** Request data passed to rate-limit callbacks. */
|
|
137
94
|
type RateLimitRequestContext = {
|
|
138
|
-
/**
|
|
139
|
-
|
|
140
|
-
|
|
95
|
+
/** Agent name. */agentName: string; /** Incoming request. */
|
|
96
|
+
request: Request; /** Resolved auth context, when app auth is configured. */
|
|
97
|
+
auth: AuthContext | null;
|
|
141
98
|
};
|
|
142
99
|
/** Stored rate-limit row. */
|
|
143
100
|
type RateLimitStorageState = {
|
|
144
101
|
count: number;
|
|
145
102
|
version: number;
|
|
146
103
|
};
|
|
147
|
-
/** Configuration for `
|
|
148
|
-
type
|
|
104
|
+
/** Configuration for `rateLimit`. */
|
|
105
|
+
type RateLimitConfig = {
|
|
149
106
|
/** Plugin id. */id?: string; /** Rate-limit window in milliseconds. */
|
|
150
107
|
windowMs: number; /** Max requests per window. */
|
|
151
108
|
max: number; /** Resolves the rate-limit key. */
|
|
@@ -178,13 +135,13 @@ type RateLimitPluginConfig = {
|
|
|
178
135
|
*
|
|
179
136
|
* @example
|
|
180
137
|
* ```ts
|
|
181
|
-
* const plugin =
|
|
138
|
+
* const plugin = rateLimit({
|
|
182
139
|
* windowMs: 60_000,
|
|
183
140
|
* max: 30,
|
|
184
141
|
* });
|
|
185
142
|
* ```
|
|
186
143
|
*/
|
|
187
|
-
declare const
|
|
144
|
+
declare const rateLimit: (config: RateLimitConfig) => Plugin;
|
|
188
145
|
//#endregion
|
|
189
146
|
//#region src/sandbox/types.d.ts
|
|
190
147
|
/** Options for creating a sandbox. */
|
|
@@ -380,7 +337,7 @@ interface SandboxDesktopClient {
|
|
|
380
337
|
mimeType?: string;
|
|
381
338
|
}>;
|
|
382
339
|
}
|
|
383
|
-
/** Sandbox client used by `
|
|
340
|
+
/** Sandbox client used by `sandbox`. */
|
|
384
341
|
interface SandboxClient {
|
|
385
342
|
/** Provider name. */
|
|
386
343
|
provider?: string;
|
|
@@ -430,8 +387,8 @@ interface SandboxSessionKeyContext {
|
|
|
430
387
|
runId: string;
|
|
431
388
|
/** Agent name. */
|
|
432
389
|
agentName: string;
|
|
433
|
-
/**
|
|
434
|
-
|
|
390
|
+
/** Thread id, if available. */
|
|
391
|
+
threadId?: string;
|
|
435
392
|
/** Tool name, for example `sandbox_exec`. */
|
|
436
393
|
toolName: string;
|
|
437
394
|
}
|
|
@@ -446,8 +403,8 @@ interface SandboxToolApprovals {
|
|
|
446
403
|
/** Approval policy for `*_kill`. */
|
|
447
404
|
killSandbox?: ToolApprovalConfig;
|
|
448
405
|
}
|
|
449
|
-
/** Configuration for `
|
|
450
|
-
interface
|
|
406
|
+
/** Configuration for `sandbox`. */
|
|
407
|
+
interface SandboxConfig {
|
|
451
408
|
/** Plugin id. */
|
|
452
409
|
id?: string;
|
|
453
410
|
/** Tool name prefix. Defaults to `"sandbox"`. */
|
|
@@ -459,7 +416,7 @@ interface SandboxPluginConfig {
|
|
|
459
416
|
/**
|
|
460
417
|
* Controls sandbox reuse for each tool call.
|
|
461
418
|
*
|
|
462
|
-
* When omitted, the plugin reuses one sandbox per `
|
|
419
|
+
* When omitted, the plugin reuses one sandbox per `threadId`.
|
|
463
420
|
* Return a non-empty string to reuse a sandbox under that key.
|
|
464
421
|
* Return `null` or `undefined` to disable reuse for that call.
|
|
465
422
|
*/
|
|
@@ -518,7 +475,7 @@ declare function createMemorySandboxSessionStore(): SandboxSessionStore;
|
|
|
518
475
|
/**
|
|
519
476
|
* Adds sandbox tools.
|
|
520
477
|
*
|
|
521
|
-
* By default, the plugin reuses one sandbox per `
|
|
478
|
+
* By default, the plugin reuses one sandbox per `threadId`.
|
|
522
479
|
* Use `sessionKey` to customize reuse, or return `null`/`undefined`
|
|
523
480
|
* to disable reuse for a specific tool call.
|
|
524
481
|
*
|
|
@@ -526,9 +483,9 @@ declare function createMemorySandboxSessionStore(): SandboxSessionStore;
|
|
|
526
483
|
*
|
|
527
484
|
* @example
|
|
528
485
|
* ```ts
|
|
529
|
-
* import {
|
|
486
|
+
* import { sandbox, createE2BSandboxClient } from "@better-agent/plugins";
|
|
530
487
|
*
|
|
531
|
-
* const plugin =
|
|
488
|
+
* const plugin = sandbox({
|
|
532
489
|
* client: createE2BSandboxClient({
|
|
533
490
|
* apiKey: process.env.E2B_API_KEY,
|
|
534
491
|
* }),
|
|
@@ -541,7 +498,7 @@ declare function createMemorySandboxSessionStore(): SandboxSessionStore;
|
|
|
541
498
|
* });
|
|
542
499
|
* ```
|
|
543
500
|
*/
|
|
544
|
-
declare const
|
|
501
|
+
declare const sandbox: (pluginConfig: SandboxConfig) => Plugin;
|
|
545
502
|
//#endregion
|
|
546
|
-
export {
|
|
503
|
+
export { type DaytonaSandboxClientConfig, type E2BSandboxClientConfig, IpAllowlistConfig, LogEntry, LoggingConfig, RateLimitBucket, RateLimitConfig, RateLimitRequestContext, RateLimitStorageState, type SandboxCapabilities, type SandboxClient, type SandboxCommandParams, type SandboxCommandResult, type SandboxConfig, type SandboxCreateParams, type SandboxDesktopClient, type SandboxFileEntry, type SandboxGetHostParams, type SandboxInstance, type SandboxKillParams, type SandboxLifecycleClient, type SandboxListFilesParams, type SandboxMakeDirParams, type SandboxPTYClient, type SandboxPreviewInfo, type SandboxReadFileParams, type SandboxRemovePathParams, type SandboxSessionKeyContext, type SandboxSessionStore, type SandboxToolApprovals, type SandboxWriteFileParams, createDaytonaSandboxClient, createE2BSandboxClient, createMemorySandboxSessionStore, ipAllowlist, logging, rateLimit, sandbox };
|
|
547
504
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/ip-allowlist/types.ts","../src/ip-allowlist/plugin.ts","../src/logging/types.ts","../src/logging/plugin.ts","../src/rate-limit/types.ts","../src/rate-limit/plugin.ts","../src/sandbox/types.ts","../src/sandbox/daytona.ts","../src/sandbox/e2b.ts","../src/sandbox/memory-store.ts","../src/sandbox/plugin.ts"],"mappings":"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"}
|