@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.
Files changed (35) hide show
  1. package/dist/client/index.d.ts +89 -0
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +279 -4
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/component/_generated/api.d.ts +4 -0
  6. package/dist/component/_generated/api.d.ts.map +1 -1
  7. package/dist/component/_generated/api.js.map +1 -1
  8. package/dist/component/_generated/component.d.ts +103 -0
  9. package/dist/component/_generated/component.d.ts.map +1 -1
  10. package/dist/component/channels.d.ts +83 -0
  11. package/dist/component/channels.d.ts.map +1 -0
  12. package/dist/component/channels.js +288 -0
  13. package/dist/component/channels.js.map +1 -0
  14. package/dist/component/circuitBreaker.d.ts +73 -0
  15. package/dist/component/circuitBreaker.d.ts.map +1 -0
  16. package/dist/component/circuitBreaker.js +216 -0
  17. package/dist/component/circuitBreaker.js.map +1 -0
  18. package/dist/component/gateway.d.ts +19 -3
  19. package/dist/component/gateway.d.ts.map +1 -1
  20. package/dist/component/gateway.js +82 -2
  21. package/dist/component/gateway.js.map +1 -1
  22. package/dist/component/permissions.d.ts +2 -2
  23. package/dist/component/registry.d.ts +3 -3
  24. package/dist/component/schema.d.ts +73 -3
  25. package/dist/component/schema.d.ts.map +1 -1
  26. package/dist/component/schema.js +46 -0
  27. package/dist/component/schema.js.map +1 -1
  28. package/package.json +5 -2
  29. package/src/client/index.ts +411 -4
  30. package/src/component/_generated/api.ts +4 -0
  31. package/src/component/_generated/component.ts +142 -1
  32. package/src/component/channels.ts +374 -0
  33. package/src/component/circuitBreaker.ts +250 -0
  34. package/src/component/gateway.ts +98 -2
  35. 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEzD,kBAAkB;AAElB;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,qBAAqB;AAErB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,2BAA2B;AAE3B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACxC,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;YAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC;KACH;IACD,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;QAE1C,yCAAyC;QACzC,IAAI,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACvB,KAAK,CAAC,iBAAiB,CAAC;aACxB,SAAS,CAAC,uCAAuC,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC;aACE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aAC3B,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aAC3B,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAChC;aACA,MAAM,EAAE,CAAC;QAEZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,qCAAqC;YACrC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE;gBAChD,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,UAAU;gBACV,YAAY,EAAE,CAAC;gBACf,aAAa,EAAE,CAAC;gBAChB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAE,CAAC;QACpC,CAAC;QAED,uCAAuC;QACvC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,OAAO,CAAC,aAAa,IAAI,yBAAyB;gBAC1D,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEpE,MAAM,gBAAgB,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QACvE,MAAM,cAAc,GAAG,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAElE,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;YACvC,4BAA4B;YAC5B,MAAM,MAAM,GAAG,gBAAgB;gBAC7B,CAAC,CAAC,+BAA+B,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG;gBAClF,CAAC,CAAC,0BAA0B,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC;YAE7E,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC9B,YAAY,EAAE,eAAe;gBAC7B,aAAa,EAAE,gBAAgB;gBAC/B,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,MAAM;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,YAAY,EAAE,eAAe;gBAC7B,aAAa,EAAE,gBAAgB;aAChC,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9B,YAAY,EAAE,eAAe;YAC7B,aAAa,EAAE,gBAAgB;SAChC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,eAAe;YAC7B,aAAa,EAAE,gBAAgB;SAChC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;IAC7B,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;QAE1C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,iBAAiB,CAAC;aACxB,SAAS,CAAC,uCAAuC,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC;aACE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aAC3B,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aAC3B,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAChC;aACA,MAAM,EAAE,CAAC;QAEZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;IACnC,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB;IACD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;QAE1C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,iBAAiB,CAAC;aACxB,SAAS,CAAC,uCAAuC,EAAE,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC;aACE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aAC3B,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;aAC3B,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAChC;aACA,MAAM,EAAE,CAAC;QAEZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YAC9B,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,SAAS;YACxB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IACjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,iBAAiB,CAAC;aACxB,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;aACzD,OAAO,EAAE,CAAC;QAEb,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC,CAAC"}
@@ -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: "query" | "mutation" | "action";
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":"AA2DA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwH3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;iBAsBpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;KAwDzB,CAAC"}
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
- // TODO: For rate_limited permissions, check rate counters here
124
- // (circuit breaker - deferred to post-MVP)
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: "query" | "mutation" | "action";
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: "query" | "mutation" | "action";
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: "query" | "mutation" | "action";
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: "query" | "mutation" | "action";
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<"query" | "mutation" | "action", [import("convex/values").VLiteral<"query", "required">, import("convex/values").VLiteral<"mutation", "required">, import("convex/values").VLiteral<"action", "required">], "required", never>;
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" | "functionName" | "description" | "functionHandle" | "functionType" | "registeredAt">, {
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAgHG"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAiKG"}
@@ -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(),