@okrlinkhub/agent-bridge 0.1.0 → 0.2.0
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/client/index.d.ts +89 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +279 -4
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +4 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +103 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/channels.d.ts +83 -0
- package/dist/component/channels.d.ts.map +1 -0
- package/dist/component/channels.js +288 -0
- package/dist/component/channels.js.map +1 -0
- package/dist/component/circuitBreaker.d.ts +73 -0
- package/dist/component/circuitBreaker.d.ts.map +1 -0
- package/dist/component/circuitBreaker.js +216 -0
- package/dist/component/circuitBreaker.js.map +1 -0
- package/dist/component/gateway.d.ts +19 -3
- package/dist/component/gateway.d.ts.map +1 -1
- package/dist/component/gateway.js +82 -2
- package/dist/component/gateway.js.map +1 -1
- package/dist/component/permissions.d.ts +2 -2
- package/dist/component/registry.d.ts +3 -3
- package/dist/component/schema.d.ts +73 -3
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +46 -0
- package/dist/component/schema.js.map +1 -1
- package/package.json +5 -2
- package/src/client/index.ts +411 -4
- package/src/component/_generated/api.ts +4 -0
- package/src/component/_generated/component.ts +142 -1
- package/src/component/channels.ts +374 -0
- package/src/component/circuitBreaker.ts +250 -0
- package/src/component/gateway.ts +98 -2
- package/src/component/schema.ts +49 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { v } from "convex/values";
|
|
2
|
+
import { mutation, query } from "./_generated/server.js";
|
|
3
|
+
// --- Helpers ---
|
|
4
|
+
/**
|
|
5
|
+
* Get the current hour window string (e.g. "2026-02-08T14").
|
|
6
|
+
*/
|
|
7
|
+
function getCurrentWindowHour() {
|
|
8
|
+
return new Date().toISOString().slice(0, 13);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Calculate seconds remaining until the current hour window expires.
|
|
12
|
+
*/
|
|
13
|
+
export function secondsUntilWindowExpires() {
|
|
14
|
+
const now = new Date();
|
|
15
|
+
const nextHour = new Date(now);
|
|
16
|
+
nextHour.setMinutes(0, 0, 0);
|
|
17
|
+
nextHour.setHours(nextHour.getHours() + 1);
|
|
18
|
+
return Math.ceil((nextHour.getTime() - now.getTime()) / 1000);
|
|
19
|
+
}
|
|
20
|
+
// --- Validators ---
|
|
21
|
+
const checkResultValidator = v.object({
|
|
22
|
+
allowed: v.boolean(),
|
|
23
|
+
reason: v.optional(v.string()),
|
|
24
|
+
currentCount: v.number(),
|
|
25
|
+
currentTokens: v.number(),
|
|
26
|
+
});
|
|
27
|
+
const statusValidator = v.object({
|
|
28
|
+
agentId: v.string(),
|
|
29
|
+
appName: v.string(),
|
|
30
|
+
windowHour: v.string(),
|
|
31
|
+
requestCount: v.number(),
|
|
32
|
+
tokenEstimate: v.number(),
|
|
33
|
+
isBlocked: v.boolean(),
|
|
34
|
+
blockedReason: v.optional(v.string()),
|
|
35
|
+
blockedAt: v.optional(v.number()),
|
|
36
|
+
});
|
|
37
|
+
// --- Public functions ---
|
|
38
|
+
/**
|
|
39
|
+
* Check the circuit breaker and increment counters if allowed.
|
|
40
|
+
* This is designed to be called from within the gateway's authorizeRequest
|
|
41
|
+
* mutation, but is also exposed for direct use.
|
|
42
|
+
*
|
|
43
|
+
* Looks up or creates the counter for the current hour window, checks
|
|
44
|
+
* if the agent is already blocked, then increments request count and
|
|
45
|
+
* token estimate. If limits are exceeded, blocks the agent for the
|
|
46
|
+
* remainder of the hour window.
|
|
47
|
+
*/
|
|
48
|
+
export const checkAndIncrement = mutation({
|
|
49
|
+
args: {
|
|
50
|
+
agentId: v.string(),
|
|
51
|
+
appName: v.string(),
|
|
52
|
+
estimatedCost: v.number(),
|
|
53
|
+
limits: v.object({
|
|
54
|
+
requestsPerHour: v.number(),
|
|
55
|
+
tokenBudget: v.number(),
|
|
56
|
+
}),
|
|
57
|
+
},
|
|
58
|
+
returns: checkResultValidator,
|
|
59
|
+
handler: async (ctx, args) => {
|
|
60
|
+
const windowHour = getCurrentWindowHour();
|
|
61
|
+
// Find or create counter for this window
|
|
62
|
+
let counter = await ctx.db
|
|
63
|
+
.query("circuitCounters")
|
|
64
|
+
.withIndex("by_agentId_and_appName_and_windowHour", (q) => q
|
|
65
|
+
.eq("agentId", args.agentId)
|
|
66
|
+
.eq("appName", args.appName)
|
|
67
|
+
.eq("windowHour", windowHour))
|
|
68
|
+
.unique();
|
|
69
|
+
if (!counter) {
|
|
70
|
+
// Create new counter for this window
|
|
71
|
+
const id = await ctx.db.insert("circuitCounters", {
|
|
72
|
+
agentId: args.agentId,
|
|
73
|
+
appName: args.appName,
|
|
74
|
+
windowHour,
|
|
75
|
+
requestCount: 0,
|
|
76
|
+
tokenEstimate: 0,
|
|
77
|
+
isBlocked: false,
|
|
78
|
+
});
|
|
79
|
+
counter = (await ctx.db.get(id));
|
|
80
|
+
}
|
|
81
|
+
// If already blocked, deny immediately
|
|
82
|
+
if (counter.isBlocked) {
|
|
83
|
+
return {
|
|
84
|
+
allowed: false,
|
|
85
|
+
reason: counter.blockedReason ?? "Circuit breaker is open",
|
|
86
|
+
currentCount: counter.requestCount,
|
|
87
|
+
currentTokens: counter.tokenEstimate,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Check if this request would exceed limits
|
|
91
|
+
const newRequestCount = counter.requestCount + 1;
|
|
92
|
+
const newTokenEstimate = counter.tokenEstimate + args.estimatedCost;
|
|
93
|
+
const requestsExceeded = newRequestCount > args.limits.requestsPerHour;
|
|
94
|
+
const tokensExceeded = newTokenEstimate > args.limits.tokenBudget;
|
|
95
|
+
if (requestsExceeded || tokensExceeded) {
|
|
96
|
+
// Block the circuit breaker
|
|
97
|
+
const reason = requestsExceeded
|
|
98
|
+
? `Requests per hour exceeded (${newRequestCount}/${args.limits.requestsPerHour})`
|
|
99
|
+
: `Token budget exceeded (${newTokenEstimate}/${args.limits.tokenBudget})`;
|
|
100
|
+
await ctx.db.patch(counter._id, {
|
|
101
|
+
requestCount: newRequestCount,
|
|
102
|
+
tokenEstimate: newTokenEstimate,
|
|
103
|
+
isBlocked: true,
|
|
104
|
+
blockedReason: reason,
|
|
105
|
+
blockedAt: Date.now(),
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
allowed: false,
|
|
109
|
+
reason,
|
|
110
|
+
currentCount: newRequestCount,
|
|
111
|
+
currentTokens: newTokenEstimate,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Increment counters
|
|
115
|
+
await ctx.db.patch(counter._id, {
|
|
116
|
+
requestCount: newRequestCount,
|
|
117
|
+
tokenEstimate: newTokenEstimate,
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
allowed: true,
|
|
121
|
+
currentCount: newRequestCount,
|
|
122
|
+
currentTokens: newTokenEstimate,
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* Get the current circuit breaker status for an agent on an app.
|
|
128
|
+
* Returns the counter for the current hour window.
|
|
129
|
+
*/
|
|
130
|
+
export const getStatus = query({
|
|
131
|
+
args: {
|
|
132
|
+
agentId: v.string(),
|
|
133
|
+
appName: v.string(),
|
|
134
|
+
},
|
|
135
|
+
returns: v.union(statusValidator, v.null()),
|
|
136
|
+
handler: async (ctx, args) => {
|
|
137
|
+
const windowHour = getCurrentWindowHour();
|
|
138
|
+
const counter = await ctx.db
|
|
139
|
+
.query("circuitCounters")
|
|
140
|
+
.withIndex("by_agentId_and_appName_and_windowHour", (q) => q
|
|
141
|
+
.eq("agentId", args.agentId)
|
|
142
|
+
.eq("appName", args.appName)
|
|
143
|
+
.eq("windowHour", windowHour))
|
|
144
|
+
.unique();
|
|
145
|
+
if (!counter) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
agentId: counter.agentId,
|
|
150
|
+
appName: counter.appName,
|
|
151
|
+
windowHour: counter.windowHour,
|
|
152
|
+
requestCount: counter.requestCount,
|
|
153
|
+
tokenEstimate: counter.tokenEstimate,
|
|
154
|
+
isBlocked: counter.isBlocked,
|
|
155
|
+
blockedReason: counter.blockedReason,
|
|
156
|
+
blockedAt: counter.blockedAt,
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
/**
|
|
161
|
+
* Admin function to manually reset a blocked circuit breaker.
|
|
162
|
+
* Creates a fresh counter for the current window with zeroed values.
|
|
163
|
+
*/
|
|
164
|
+
export const resetCounter = mutation({
|
|
165
|
+
args: {
|
|
166
|
+
agentId: v.string(),
|
|
167
|
+
appName: v.string(),
|
|
168
|
+
},
|
|
169
|
+
returns: v.boolean(),
|
|
170
|
+
handler: async (ctx, args) => {
|
|
171
|
+
const windowHour = getCurrentWindowHour();
|
|
172
|
+
const counter = await ctx.db
|
|
173
|
+
.query("circuitCounters")
|
|
174
|
+
.withIndex("by_agentId_and_appName_and_windowHour", (q) => q
|
|
175
|
+
.eq("agentId", args.agentId)
|
|
176
|
+
.eq("appName", args.appName)
|
|
177
|
+
.eq("windowHour", windowHour))
|
|
178
|
+
.unique();
|
|
179
|
+
if (!counter) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
await ctx.db.patch(counter._id, {
|
|
183
|
+
requestCount: 0,
|
|
184
|
+
tokenEstimate: 0,
|
|
185
|
+
isBlocked: false,
|
|
186
|
+
blockedReason: undefined,
|
|
187
|
+
blockedAt: undefined,
|
|
188
|
+
});
|
|
189
|
+
return true;
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
/**
|
|
193
|
+
* List all currently blocked circuit breakers.
|
|
194
|
+
* Useful for admin dashboards.
|
|
195
|
+
*/
|
|
196
|
+
export const listBlocked = query({
|
|
197
|
+
args: {},
|
|
198
|
+
returns: v.array(statusValidator),
|
|
199
|
+
handler: async (ctx) => {
|
|
200
|
+
const blocked = await ctx.db
|
|
201
|
+
.query("circuitCounters")
|
|
202
|
+
.withIndex("by_isBlocked", (q) => q.eq("isBlocked", true))
|
|
203
|
+
.collect();
|
|
204
|
+
return blocked.map((c) => ({
|
|
205
|
+
agentId: c.agentId,
|
|
206
|
+
appName: c.appName,
|
|
207
|
+
windowHour: c.windowHour,
|
|
208
|
+
requestCount: c.requestCount,
|
|
209
|
+
tokenEstimate: c.tokenEstimate,
|
|
210
|
+
isBlocked: c.isBlocked,
|
|
211
|
+
blockedReason: c.blockedReason,
|
|
212
|
+
blockedAt: c.blockedAt,
|
|
213
|
+
}));
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=circuitBreaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuitBreaker.js","sourceRoot":"","sources":["../../src/component/circuitBreaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,10 @@
|
|
|
12
12
|
* Returns the function handle info if authorized, or an error.
|
|
13
13
|
*/
|
|
14
14
|
export declare const authorizeRequest: import("convex/server").RegisteredMutation<"public", {
|
|
15
|
+
estimatedCost?: number | undefined;
|
|
15
16
|
appName: string;
|
|
16
|
-
functionName: string;
|
|
17
17
|
instanceToken: string;
|
|
18
|
+
functionName: string;
|
|
18
19
|
}, Promise<{
|
|
19
20
|
authorized: false;
|
|
20
21
|
error: string;
|
|
@@ -22,6 +23,7 @@ export declare const authorizeRequest: import("convex/server").RegisteredMutatio
|
|
|
22
23
|
agentId?: undefined;
|
|
23
24
|
matchedPattern?: undefined;
|
|
24
25
|
matchedPermission?: undefined;
|
|
26
|
+
retryAfterSeconds?: undefined;
|
|
25
27
|
appName?: undefined;
|
|
26
28
|
functionHandle?: undefined;
|
|
27
29
|
functionType?: undefined;
|
|
@@ -32,6 +34,7 @@ export declare const authorizeRequest: import("convex/server").RegisteredMutatio
|
|
|
32
34
|
agentId: string;
|
|
33
35
|
matchedPattern?: undefined;
|
|
34
36
|
matchedPermission?: undefined;
|
|
37
|
+
retryAfterSeconds?: undefined;
|
|
35
38
|
appName?: undefined;
|
|
36
39
|
functionHandle?: undefined;
|
|
37
40
|
functionType?: undefined;
|
|
@@ -42,6 +45,18 @@ export declare const authorizeRequest: import("convex/server").RegisteredMutatio
|
|
|
42
45
|
agentId: string;
|
|
43
46
|
matchedPattern: string;
|
|
44
47
|
matchedPermission: "allow" | "deny" | "rate_limited";
|
|
48
|
+
retryAfterSeconds?: undefined;
|
|
49
|
+
appName?: undefined;
|
|
50
|
+
functionHandle?: undefined;
|
|
51
|
+
functionType?: undefined;
|
|
52
|
+
} | {
|
|
53
|
+
authorized: false;
|
|
54
|
+
error: string;
|
|
55
|
+
statusCode: number;
|
|
56
|
+
agentId: string;
|
|
57
|
+
matchedPattern: string;
|
|
58
|
+
matchedPermission: "rate_limited";
|
|
59
|
+
retryAfterSeconds: number;
|
|
45
60
|
appName?: undefined;
|
|
46
61
|
functionHandle?: undefined;
|
|
47
62
|
functionType?: undefined;
|
|
@@ -50,11 +65,12 @@ export declare const authorizeRequest: import("convex/server").RegisteredMutatio
|
|
|
50
65
|
agentId: string;
|
|
51
66
|
appName: string;
|
|
52
67
|
functionHandle: string;
|
|
53
|
-
functionType: "
|
|
68
|
+
functionType: "mutation" | "query" | "action";
|
|
54
69
|
error?: undefined;
|
|
55
70
|
statusCode?: undefined;
|
|
56
71
|
matchedPattern?: undefined;
|
|
57
72
|
matchedPermission?: undefined;
|
|
73
|
+
retryAfterSeconds?: undefined;
|
|
58
74
|
}>>;
|
|
59
75
|
/**
|
|
60
76
|
* Log an access attempt to the audit log.
|
|
@@ -73,8 +89,8 @@ export declare const logAccess: import("convex/server").RegisteredMutation<"publ
|
|
|
73
89
|
*/
|
|
74
90
|
export declare const queryAccessLog: import("convex/server").RegisteredQuery<"public", {
|
|
75
91
|
appName?: string | undefined;
|
|
76
|
-
agentId?: string | undefined;
|
|
77
92
|
limit?: number | undefined;
|
|
93
|
+
agentId?: string | undefined;
|
|
78
94
|
}, Promise<{
|
|
79
95
|
timestamp: number;
|
|
80
96
|
agentId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/component/gateway.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/component/gateway.ts"],"names":[],"mappings":"AA4DA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuN3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;iBAsBpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;KAwDzB,CAAC"}
|
|
@@ -37,6 +37,7 @@ const authorizeResultValidator = v.union(v.object({
|
|
|
37
37
|
agentId: v.optional(v.string()),
|
|
38
38
|
matchedPattern: v.optional(v.string()),
|
|
39
39
|
matchedPermission: v.optional(v.union(v.literal("allow"), v.literal("deny"), v.literal("rate_limited"))),
|
|
40
|
+
retryAfterSeconds: v.optional(v.number()),
|
|
40
41
|
}));
|
|
41
42
|
/**
|
|
42
43
|
* Authorize an agent request.
|
|
@@ -56,6 +57,7 @@ export const authorizeRequest = mutation({
|
|
|
56
57
|
instanceToken: v.string(),
|
|
57
58
|
functionName: v.string(),
|
|
58
59
|
appName: v.string(),
|
|
60
|
+
estimatedCost: v.optional(v.number()),
|
|
59
61
|
},
|
|
60
62
|
returns: authorizeResultValidator,
|
|
61
63
|
handler: async (ctx, args) => {
|
|
@@ -120,8 +122,86 @@ export const authorizeRequest = mutation({
|
|
|
120
122
|
matchedPermission: bestMatch?.permission,
|
|
121
123
|
};
|
|
122
124
|
}
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
+
// 3b. Circuit breaker check for rate_limited permissions
|
|
126
|
+
if (matches[0].permission === "rate_limited") {
|
|
127
|
+
const limits = matches[0].rateLimitConfig ?? {
|
|
128
|
+
requestsPerHour: 100,
|
|
129
|
+
tokenBudget: 50000,
|
|
130
|
+
};
|
|
131
|
+
const estimatedCost = args.estimatedCost ?? 100;
|
|
132
|
+
const windowHour = new Date().toISOString().slice(0, 13);
|
|
133
|
+
// Find or create counter for this hour window (inline to stay in same transaction)
|
|
134
|
+
let counter = await ctx.db
|
|
135
|
+
.query("circuitCounters")
|
|
136
|
+
.withIndex("by_agentId_and_appName_and_windowHour", (q) => q
|
|
137
|
+
.eq("agentId", agentId)
|
|
138
|
+
.eq("appName", args.appName)
|
|
139
|
+
.eq("windowHour", windowHour))
|
|
140
|
+
.unique();
|
|
141
|
+
if (!counter) {
|
|
142
|
+
const id = await ctx.db.insert("circuitCounters", {
|
|
143
|
+
agentId,
|
|
144
|
+
appName: args.appName,
|
|
145
|
+
windowHour,
|
|
146
|
+
requestCount: 0,
|
|
147
|
+
tokenEstimate: 0,
|
|
148
|
+
isBlocked: false,
|
|
149
|
+
});
|
|
150
|
+
counter = (await ctx.db.get(id));
|
|
151
|
+
}
|
|
152
|
+
if (counter.isBlocked) {
|
|
153
|
+
// Calculate retry-after (seconds until next hour window)
|
|
154
|
+
const now = new Date();
|
|
155
|
+
const nextHour = new Date(now);
|
|
156
|
+
nextHour.setMinutes(0, 0, 0);
|
|
157
|
+
nextHour.setHours(nextHour.getHours() + 1);
|
|
158
|
+
const retryAfterSeconds = Math.ceil((nextHour.getTime() - now.getTime()) / 1000);
|
|
159
|
+
return {
|
|
160
|
+
authorized: false,
|
|
161
|
+
error: `Rate limit exceeded: ${counter.blockedReason ?? "Circuit breaker is open"}`,
|
|
162
|
+
statusCode: 429,
|
|
163
|
+
agentId,
|
|
164
|
+
matchedPattern: matches[0].functionPattern,
|
|
165
|
+
matchedPermission: "rate_limited",
|
|
166
|
+
retryAfterSeconds,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const newRequestCount = counter.requestCount + 1;
|
|
170
|
+
const newTokenEstimate = counter.tokenEstimate + estimatedCost;
|
|
171
|
+
const requestsExceeded = newRequestCount > limits.requestsPerHour;
|
|
172
|
+
const tokensExceeded = newTokenEstimate > limits.tokenBudget;
|
|
173
|
+
if (requestsExceeded || tokensExceeded) {
|
|
174
|
+
const reason = requestsExceeded
|
|
175
|
+
? `Requests per hour exceeded (${newRequestCount}/${limits.requestsPerHour})`
|
|
176
|
+
: `Token budget exceeded (${newTokenEstimate}/${limits.tokenBudget})`;
|
|
177
|
+
await ctx.db.patch(counter._id, {
|
|
178
|
+
requestCount: newRequestCount,
|
|
179
|
+
tokenEstimate: newTokenEstimate,
|
|
180
|
+
isBlocked: true,
|
|
181
|
+
blockedReason: reason,
|
|
182
|
+
blockedAt: Date.now(),
|
|
183
|
+
});
|
|
184
|
+
const now = new Date();
|
|
185
|
+
const nextHour = new Date(now);
|
|
186
|
+
nextHour.setMinutes(0, 0, 0);
|
|
187
|
+
nextHour.setHours(nextHour.getHours() + 1);
|
|
188
|
+
const retryAfterSeconds = Math.ceil((nextHour.getTime() - now.getTime()) / 1000);
|
|
189
|
+
return {
|
|
190
|
+
authorized: false,
|
|
191
|
+
error: `Rate limit exceeded: ${reason}`,
|
|
192
|
+
statusCode: 429,
|
|
193
|
+
agentId,
|
|
194
|
+
matchedPattern: matches[0].functionPattern,
|
|
195
|
+
matchedPermission: "rate_limited",
|
|
196
|
+
retryAfterSeconds,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// Increment counters (within limits)
|
|
200
|
+
await ctx.db.patch(counter._id, {
|
|
201
|
+
requestCount: newRequestCount,
|
|
202
|
+
tokenEstimate: newTokenEstimate,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
125
205
|
// 4. Look up function handle
|
|
126
206
|
const fnEntry = await ctx.db
|
|
127
207
|
.query("functionRegistry")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/component/gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/component/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,8 +28,8 @@ export declare const removePermission: import("convex/server").RegisteredMutatio
|
|
|
28
28
|
*/
|
|
29
29
|
export declare const checkPermission: import("convex/server").RegisteredQuery<"public", {
|
|
30
30
|
appName: string;
|
|
31
|
-
functionName: string;
|
|
32
31
|
agentId: string;
|
|
32
|
+
functionName: string;
|
|
33
33
|
}, Promise<{
|
|
34
34
|
permission: "deny";
|
|
35
35
|
rateLimitConfig?: undefined;
|
|
@@ -70,8 +70,8 @@ export declare const clearPermissions: import("convex/server").RegisteredMutatio
|
|
|
70
70
|
*/
|
|
71
71
|
export declare const debugMatchPermission: import("convex/server").RegisteredQuery<"public", {
|
|
72
72
|
appName: string;
|
|
73
|
-
functionName: string;
|
|
74
73
|
agentId: string;
|
|
74
|
+
functionName: string;
|
|
75
75
|
}, Promise<{
|
|
76
76
|
functionName: string;
|
|
77
77
|
permissions: {
|
|
@@ -10,7 +10,7 @@ export declare const register: import("convex/server").RegisteredMutation<"publi
|
|
|
10
10
|
appName: string;
|
|
11
11
|
functionName: string;
|
|
12
12
|
functionHandle: string;
|
|
13
|
-
functionType: "
|
|
13
|
+
functionType: "mutation" | "query" | "action";
|
|
14
14
|
}, Promise<import("convex/values").GenericId<"functionRegistry">>>;
|
|
15
15
|
/**
|
|
16
16
|
* Get a specific function handle by appName + functionName.
|
|
@@ -21,7 +21,7 @@ export declare const getHandle: import("convex/server").RegisteredQuery<"public"
|
|
|
21
21
|
functionName: string;
|
|
22
22
|
}, Promise<{
|
|
23
23
|
functionHandle: string;
|
|
24
|
-
functionType: "
|
|
24
|
+
functionType: "mutation" | "query" | "action";
|
|
25
25
|
functionName: string;
|
|
26
26
|
description: string | undefined;
|
|
27
27
|
} | null>>;
|
|
@@ -32,7 +32,7 @@ export declare const listFunctions: import("convex/server").RegisteredQuery<"pub
|
|
|
32
32
|
appName: string;
|
|
33
33
|
}, Promise<{
|
|
34
34
|
functionName: string;
|
|
35
|
-
functionType: "
|
|
35
|
+
functionType: "mutation" | "query" | "action";
|
|
36
36
|
description: string | undefined;
|
|
37
37
|
registeredAt: number;
|
|
38
38
|
}[]>>;
|
|
@@ -68,16 +68,16 @@ declare const _default: import("convex/server").SchemaDefinition<{
|
|
|
68
68
|
appName: string;
|
|
69
69
|
functionName: string;
|
|
70
70
|
functionHandle: string;
|
|
71
|
-
functionType: "
|
|
71
|
+
functionType: "mutation" | "query" | "action";
|
|
72
72
|
registeredAt: number;
|
|
73
73
|
}, {
|
|
74
74
|
appName: import("convex/values").VString<string, "required">;
|
|
75
75
|
functionName: import("convex/values").VString<string, "required">;
|
|
76
76
|
functionHandle: import("convex/values").VString<string, "required">;
|
|
77
|
-
functionType: import("convex/values").VUnion<"
|
|
77
|
+
functionType: import("convex/values").VUnion<"mutation" | "query" | "action", [import("convex/values").VLiteral<"query", "required">, import("convex/values").VLiteral<"mutation", "required">, import("convex/values").VLiteral<"action", "required">], "required", never>;
|
|
78
78
|
description: import("convex/values").VString<string | undefined, "optional">;
|
|
79
79
|
registeredAt: import("convex/values").VFloat64<number, "required">;
|
|
80
|
-
}, "required", "appName" | "
|
|
80
|
+
}, "required", "appName" | "description" | "functionName" | "functionHandle" | "functionType" | "registeredAt">, {
|
|
81
81
|
by_app_and_function: ["appName", "functionName", "_creationTime"];
|
|
82
82
|
}, {}, {}>;
|
|
83
83
|
functionPermissions: import("convex/server").TableDefinition<import("convex/values").VObject<{
|
|
@@ -129,6 +129,76 @@ declare const _default: import("convex/server").SchemaDefinition<{
|
|
|
129
129
|
by_agent_and_timestamp: ["agentId", "timestamp", "_creationTime"];
|
|
130
130
|
by_app_and_function: ["appName", "functionCalled", "_creationTime"];
|
|
131
131
|
}, {}, {}>;
|
|
132
|
+
circuitCounters: import("convex/server").TableDefinition<import("convex/values").VObject<{
|
|
133
|
+
blockedReason?: string | undefined;
|
|
134
|
+
blockedAt?: number | undefined;
|
|
135
|
+
appName: string;
|
|
136
|
+
agentId: string;
|
|
137
|
+
windowHour: string;
|
|
138
|
+
requestCount: number;
|
|
139
|
+
tokenEstimate: number;
|
|
140
|
+
isBlocked: boolean;
|
|
141
|
+
}, {
|
|
142
|
+
agentId: import("convex/values").VString<string, "required">;
|
|
143
|
+
appName: import("convex/values").VString<string, "required">;
|
|
144
|
+
windowHour: import("convex/values").VString<string, "required">;
|
|
145
|
+
requestCount: import("convex/values").VFloat64<number, "required">;
|
|
146
|
+
tokenEstimate: import("convex/values").VFloat64<number, "required">;
|
|
147
|
+
isBlocked: import("convex/values").VBoolean<boolean, "required">;
|
|
148
|
+
blockedReason: import("convex/values").VString<string | undefined, "optional">;
|
|
149
|
+
blockedAt: import("convex/values").VFloat64<number | undefined, "optional">;
|
|
150
|
+
}, "required", "appName" | "agentId" | "windowHour" | "requestCount" | "tokenEstimate" | "isBlocked" | "blockedReason" | "blockedAt">, {
|
|
151
|
+
by_agentId_and_appName_and_windowHour: ["agentId", "appName", "windowHour", "_creationTime"];
|
|
152
|
+
by_isBlocked: ["isBlocked", "_creationTime"];
|
|
153
|
+
}, {}, {}>;
|
|
154
|
+
appChannels: import("convex/server").TableDefinition<import("convex/values").VObject<{
|
|
155
|
+
description?: string | undefined;
|
|
156
|
+
appName: string;
|
|
157
|
+
channelName: string;
|
|
158
|
+
isActive: boolean;
|
|
159
|
+
createdAt: number;
|
|
160
|
+
}, {
|
|
161
|
+
appName: import("convex/values").VString<string, "required">;
|
|
162
|
+
channelName: import("convex/values").VString<string, "required">;
|
|
163
|
+
description: import("convex/values").VString<string | undefined, "optional">;
|
|
164
|
+
createdAt: import("convex/values").VFloat64<number, "required">;
|
|
165
|
+
isActive: import("convex/values").VBoolean<boolean, "required">;
|
|
166
|
+
}, "required", "appName" | "channelName" | "description" | "isActive" | "createdAt">, {
|
|
167
|
+
by_appName_and_channelName: ["appName", "channelName", "_creationTime"];
|
|
168
|
+
}, {}, {}>;
|
|
169
|
+
channelMessages: import("convex/server").TableDefinition<import("convex/values").VObject<{
|
|
170
|
+
appName: string;
|
|
171
|
+
channelName: string;
|
|
172
|
+
messageId: string;
|
|
173
|
+
payload: string;
|
|
174
|
+
expiresAt: number;
|
|
175
|
+
fromAgentId: string;
|
|
176
|
+
metadata: {
|
|
177
|
+
priority: number;
|
|
178
|
+
ttl: number;
|
|
179
|
+
};
|
|
180
|
+
sentAt: number;
|
|
181
|
+
readBy: string[];
|
|
182
|
+
}, {
|
|
183
|
+
appName: import("convex/values").VString<string, "required">;
|
|
184
|
+
channelName: import("convex/values").VString<string, "required">;
|
|
185
|
+
messageId: import("convex/values").VString<string, "required">;
|
|
186
|
+
fromAgentId: import("convex/values").VString<string, "required">;
|
|
187
|
+
payload: import("convex/values").VString<string, "required">;
|
|
188
|
+
metadata: import("convex/values").VObject<{
|
|
189
|
+
priority: number;
|
|
190
|
+
ttl: number;
|
|
191
|
+
}, {
|
|
192
|
+
priority: import("convex/values").VFloat64<number, "required">;
|
|
193
|
+
ttl: import("convex/values").VFloat64<number, "required">;
|
|
194
|
+
}, "required", "priority" | "ttl">;
|
|
195
|
+
sentAt: import("convex/values").VFloat64<number, "required">;
|
|
196
|
+
expiresAt: import("convex/values").VFloat64<number, "required">;
|
|
197
|
+
readBy: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
|
|
198
|
+
}, "required", "appName" | "channelName" | "messageId" | "payload" | "expiresAt" | "fromAgentId" | "metadata" | "sentAt" | "readBy" | "metadata.priority" | "metadata.ttl">, {
|
|
199
|
+
by_appName_and_channelName_and_sentAt: ["appName", "channelName", "sentAt", "_creationTime"];
|
|
200
|
+
by_expiresAt: ["expiresAt", "_creationTime"];
|
|
201
|
+
}, {}, {}>;
|
|
132
202
|
appConfigs: import("convex/server").TableDefinition<import("convex/values").VObject<{
|
|
133
203
|
appName: string;
|
|
134
204
|
defaultPermissions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAiKG"}
|
package/dist/component/schema.js
CHANGED
|
@@ -75,6 +75,52 @@ export default defineSchema({
|
|
|
75
75
|
})
|
|
76
76
|
.index("by_agent_and_timestamp", ["agentId", "timestamp"])
|
|
77
77
|
.index("by_app_and_function", ["appName", "functionCalled"]),
|
|
78
|
+
// Circuit breaker counters (per agent, per app, per hour window)
|
|
79
|
+
circuitCounters: defineTable({
|
|
80
|
+
agentId: v.string(),
|
|
81
|
+
appName: v.string(),
|
|
82
|
+
windowHour: v.string(), // "2026-02-08T14" (ISO truncated to hour)
|
|
83
|
+
requestCount: v.number(),
|
|
84
|
+
tokenEstimate: v.number(),
|
|
85
|
+
isBlocked: v.boolean(),
|
|
86
|
+
blockedReason: v.optional(v.string()),
|
|
87
|
+
blockedAt: v.optional(v.number()),
|
|
88
|
+
})
|
|
89
|
+
.index("by_agentId_and_appName_and_windowHour", [
|
|
90
|
+
"agentId",
|
|
91
|
+
"appName",
|
|
92
|
+
"windowHour",
|
|
93
|
+
])
|
|
94
|
+
.index("by_isBlocked", ["isBlocked"]),
|
|
95
|
+
// A2A intra-app channels (thematic channels within an app)
|
|
96
|
+
appChannels: defineTable({
|
|
97
|
+
appName: v.string(),
|
|
98
|
+
channelName: v.string(),
|
|
99
|
+
description: v.optional(v.string()),
|
|
100
|
+
createdAt: v.number(),
|
|
101
|
+
isActive: v.boolean(),
|
|
102
|
+
}).index("by_appName_and_channelName", ["appName", "channelName"]),
|
|
103
|
+
// A2A channel messages
|
|
104
|
+
channelMessages: defineTable({
|
|
105
|
+
appName: v.string(),
|
|
106
|
+
channelName: v.string(),
|
|
107
|
+
messageId: v.string(), // UUID
|
|
108
|
+
fromAgentId: v.string(),
|
|
109
|
+
payload: v.string(), // JSON serialized
|
|
110
|
+
metadata: v.object({
|
|
111
|
+
priority: v.number(), // 1-10
|
|
112
|
+
ttl: v.number(), // TTL in ms
|
|
113
|
+
}),
|
|
114
|
+
sentAt: v.number(),
|
|
115
|
+
expiresAt: v.number(),
|
|
116
|
+
readBy: v.array(v.string()), // Array of agentIds that have read this message
|
|
117
|
+
})
|
|
118
|
+
.index("by_appName_and_channelName_and_sentAt", [
|
|
119
|
+
"appName",
|
|
120
|
+
"channelName",
|
|
121
|
+
"sentAt",
|
|
122
|
+
])
|
|
123
|
+
.index("by_expiresAt", ["expiresAt"]),
|
|
78
124
|
// Per-app configuration (no global singleton)
|
|
79
125
|
appConfigs: defineTable({
|
|
80
126
|
appName: v.string(),
|