@okrlinkhub/agent-bridge 0.1.0 → 2.0.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 (58) hide show
  1. package/README.md +96 -127
  2. package/dist/cli/init.d.ts +3 -0
  3. package/dist/cli/init.d.ts.map +1 -0
  4. package/dist/cli/init.js +100 -0
  5. package/dist/cli/init.js.map +1 -0
  6. package/dist/client/index.d.ts +50 -173
  7. package/dist/client/index.d.ts.map +1 -1
  8. package/dist/client/index.js +129 -263
  9. package/dist/client/index.js.map +1 -1
  10. package/dist/component/_generated/api.d.ts +4 -4
  11. package/dist/component/_generated/api.d.ts.map +1 -1
  12. package/dist/component/_generated/component.d.ts +66 -162
  13. package/dist/component/_generated/component.d.ts.map +1 -1
  14. package/dist/component/agentBridgeUtils.d.ts +8 -0
  15. package/dist/component/agentBridgeUtils.d.ts.map +1 -0
  16. package/dist/component/agentBridgeUtils.js +33 -0
  17. package/dist/component/agentBridgeUtils.js.map +1 -0
  18. package/dist/component/agents.d.ts +27 -0
  19. package/dist/component/agents.d.ts.map +1 -0
  20. package/dist/component/agents.js +94 -0
  21. package/dist/component/agents.js.map +1 -0
  22. package/dist/component/gateway.d.ts +30 -44
  23. package/dist/component/gateway.d.ts.map +1 -1
  24. package/dist/component/gateway.js +127 -132
  25. package/dist/component/gateway.js.map +1 -1
  26. package/dist/component/permissions.d.ts +30 -84
  27. package/dist/component/permissions.d.ts.map +1 -1
  28. package/dist/component/permissions.js +80 -203
  29. package/dist/component/permissions.js.map +1 -1
  30. package/dist/component/schema.d.ts +55 -153
  31. package/dist/component/schema.d.ts.map +1 -1
  32. package/dist/component/schema.js +30 -80
  33. package/dist/component/schema.js.map +1 -1
  34. package/dist/react/index.d.ts +2 -2
  35. package/dist/react/index.d.ts.map +1 -1
  36. package/dist/react/index.js +2 -3
  37. package/dist/react/index.js.map +1 -1
  38. package/package.json +7 -3
  39. package/src/cli/init.ts +116 -0
  40. package/src/client/index.ts +228 -389
  41. package/src/component/_generated/api.ts +4 -4
  42. package/src/component/_generated/component.ts +79 -195
  43. package/src/component/agentBridgeUtils.ts +52 -0
  44. package/src/component/agents.ts +106 -0
  45. package/src/component/gateway.ts +149 -163
  46. package/src/component/permissions.ts +89 -259
  47. package/src/component/schema.ts +31 -96
  48. package/src/react/index.ts +5 -6
  49. package/dist/component/provisioning.d.ts +0 -87
  50. package/dist/component/provisioning.d.ts.map +0 -1
  51. package/dist/component/provisioning.js +0 -343
  52. package/dist/component/provisioning.js.map +0 -1
  53. package/dist/component/registry.d.ts +0 -46
  54. package/dist/component/registry.d.ts.map +0 -1
  55. package/dist/component/registry.js +0 -121
  56. package/dist/component/registry.js.map +0 -1
  57. package/src/component/provisioning.ts +0 -402
  58. package/src/component/registry.ts +0 -152
@@ -1,343 +0,0 @@
1
- import { v } from "convex/values";
2
- import { mutation, query, internalMutation } from "./_generated/server.js";
3
- // --- Token hashing utility (SHA-256, no external deps) ---
4
- async function hashToken(token) {
5
- const encoder = new TextEncoder();
6
- const data = encoder.encode(token);
7
- const hash = await crypto.subtle.digest("SHA-256", data);
8
- return Array.from(new Uint8Array(hash))
9
- .map((b) => b.toString(16).padStart(2, "0"))
10
- .join("");
11
- }
12
- // --- Public mutations ---
13
- /**
14
- * Generate a provisioning token (APT) for an employee.
15
- * Called by IT admin. Returns the plaintext token (store it securely!).
16
- */
17
- export const generateProvisioningToken = mutation({
18
- args: {
19
- employeeEmail: v.string(),
20
- department: v.string(),
21
- maxApps: v.optional(v.number()),
22
- expiresInDays: v.optional(v.number()),
23
- createdBy: v.string(),
24
- },
25
- returns: v.object({
26
- token: v.string(),
27
- expiresAt: v.number(),
28
- }),
29
- handler: async (ctx, args) => {
30
- const token = "apt_live_" + crypto.randomUUID().replace(/-/g, "");
31
- const tokenHash = await hashToken(token);
32
- const expiresAt = Date.now() + (args.expiresInDays ?? 7) * 24 * 60 * 60 * 1000;
33
- await ctx.db.insert("provisioningTokens", {
34
- tokenHash,
35
- employeeEmail: args.employeeEmail,
36
- department: args.department,
37
- maxApps: args.maxApps ?? 5,
38
- usedCount: 0,
39
- expiresAt,
40
- isActive: true,
41
- createdBy: args.createdBy,
42
- });
43
- return { token, expiresAt };
44
- },
45
- });
46
- /**
47
- * Provision an agent on a specific app.
48
- * Called by the employee (or their OpenClaw agent on bootstrap).
49
- * Validates the APT, creates/finds the agent, creates an app instance.
50
- */
51
- export const provisionAgent = mutation({
52
- args: {
53
- provisioningToken: v.string(),
54
- appName: v.string(),
55
- },
56
- returns: v.object({
57
- agentId: v.string(),
58
- instanceToken: v.string(),
59
- expiresAt: v.number(),
60
- appName: v.string(),
61
- message: v.string(),
62
- }),
63
- handler: async (ctx, args) => {
64
- const tokenHash = await hashToken(args.provisioningToken);
65
- // Find and validate the provisioning token
66
- const tokenRecord = await ctx.db
67
- .query("provisioningTokens")
68
- .withIndex("by_token_hash", (q) => q.eq("tokenHash", tokenHash))
69
- .unique();
70
- if (!tokenRecord || !tokenRecord.isActive) {
71
- throw new Error("Invalid provisioning token");
72
- }
73
- if (tokenRecord.expiresAt < Date.now()) {
74
- throw new Error("Provisioning token has expired");
75
- }
76
- if (tokenRecord.usedCount >= tokenRecord.maxApps) {
77
- throw new Error("Maximum number of apps reached for this token");
78
- }
79
- // Find or create the agent
80
- let agent = await ctx.db
81
- .query("registeredAgents")
82
- .withIndex("by_email", (q) => q.eq("employeeEmail", tokenRecord.employeeEmail))
83
- .unique();
84
- let agentId;
85
- if (!agent) {
86
- // First provisioning: create global agent record
87
- agentId = crypto.randomUUID();
88
- await ctx.db.insert("registeredAgents", {
89
- agentId,
90
- employeeEmail: tokenRecord.employeeEmail,
91
- department: tokenRecord.department,
92
- firstRegisteredAt: Date.now(),
93
- lastSeenAt: Date.now(),
94
- isActive: true,
95
- });
96
- }
97
- else {
98
- if (!agent.isActive) {
99
- throw new Error("Agent has been revoked");
100
- }
101
- agentId = agent.agentId;
102
- // Update last seen
103
- await ctx.db.patch(agent._id, { lastSeenAt: Date.now() });
104
- }
105
- // Check if instance already exists for this app
106
- const existing = await ctx.db
107
- .query("agentAppInstances")
108
- .withIndex("by_agent_and_app", (q) => q.eq("agentId", agentId).eq("appName", args.appName))
109
- .unique();
110
- if (existing && existing.expiresAt > Date.now()) {
111
- // Return existing valid instance (but we can't return the token since we only store the hash)
112
- // Generate a new token and update the hash
113
- const instanceToken = crypto.randomUUID();
114
- const instanceTokenHash = await hashToken(instanceToken);
115
- const expiresAt = Date.now() + 24 * 60 * 60 * 1000;
116
- await ctx.db.patch(existing._id, {
117
- instanceTokenHash,
118
- expiresAt,
119
- lastActivityAt: Date.now(),
120
- });
121
- return {
122
- agentId,
123
- instanceToken,
124
- expiresAt,
125
- appName: args.appName,
126
- message: "Instance refreshed with new credentials",
127
- };
128
- }
129
- if (existing) {
130
- // Expired instance: delete and recreate
131
- await ctx.db.delete(existing._id);
132
- }
133
- // Create new instance
134
- const instanceToken = crypto.randomUUID();
135
- const instanceTokenHash = await hashToken(instanceToken);
136
- const expiresAt = Date.now() + 24 * 60 * 60 * 1000; // 24h
137
- await ctx.db.insert("agentAppInstances", {
138
- agentId,
139
- appName: args.appName,
140
- instanceTokenHash,
141
- registeredAt: Date.now(),
142
- expiresAt,
143
- lastActivityAt: Date.now(),
144
- monthlyRequests: 0,
145
- });
146
- // Increment token usage
147
- await ctx.db.patch(tokenRecord._id, {
148
- usedCount: tokenRecord.usedCount + 1,
149
- });
150
- // Setup default permissions from app-specific config
151
- const config = await ctx.db
152
- .query("appConfigs")
153
- .withIndex("by_app_name", (q) => q.eq("appName", args.appName))
154
- .unique();
155
- if (config && config.defaultPermissions.length > 0) {
156
- for (const perm of config.defaultPermissions) {
157
- await ctx.db.insert("functionPermissions", {
158
- agentId,
159
- appName: args.appName,
160
- functionPattern: perm.pattern,
161
- permission: perm.permission,
162
- rateLimitConfig: perm.rateLimitConfig,
163
- createdAt: Date.now(),
164
- createdBy: "system",
165
- });
166
- }
167
- }
168
- return {
169
- agentId,
170
- instanceToken,
171
- expiresAt,
172
- appName: args.appName,
173
- message: "Provisioning successful. Configure your agent with these credentials.",
174
- };
175
- },
176
- });
177
- /**
178
- * Refresh an expired instance token.
179
- * Called by the agent when its token expires.
180
- */
181
- export const refreshInstanceToken = mutation({
182
- args: {
183
- agentId: v.string(),
184
- appName: v.string(),
185
- currentTokenHash: v.string(), // Hash of the current (expired) token for verification
186
- },
187
- returns: v.object({
188
- instanceToken: v.string(),
189
- expiresAt: v.number(),
190
- }),
191
- handler: async (ctx, args) => {
192
- // Verify the agent exists and is active
193
- const agent = await ctx.db
194
- .query("registeredAgents")
195
- .withIndex("by_agent_id", (q) => q.eq("agentId", args.agentId))
196
- .unique();
197
- if (!agent || !agent.isActive) {
198
- throw new Error("Agent not found or has been revoked");
199
- }
200
- // Find the instance
201
- const instance = await ctx.db
202
- .query("agentAppInstances")
203
- .withIndex("by_agent_and_app", (q) => q.eq("agentId", args.agentId).eq("appName", args.appName))
204
- .unique();
205
- if (!instance) {
206
- throw new Error("No instance found for this agent and app");
207
- }
208
- // Verify the current token hash matches
209
- if (instance.instanceTokenHash !== args.currentTokenHash) {
210
- throw new Error("Token hash mismatch");
211
- }
212
- // Generate new token
213
- const instanceToken = crypto.randomUUID();
214
- const instanceTokenHash = await hashToken(instanceToken);
215
- const expiresAt = Date.now() + 24 * 60 * 60 * 1000;
216
- await ctx.db.patch(instance._id, {
217
- instanceTokenHash,
218
- expiresAt,
219
- lastActivityAt: Date.now(),
220
- });
221
- return { instanceToken, expiresAt };
222
- },
223
- });
224
- /**
225
- * Revoke an agent globally (IT admin operation).
226
- * All instances become invalid immediately.
227
- */
228
- export const revokeAgent = mutation({
229
- args: {
230
- agentId: v.string(),
231
- revokedBy: v.string(),
232
- },
233
- returns: v.boolean(),
234
- handler: async (ctx, args) => {
235
- const agent = await ctx.db
236
- .query("registeredAgents")
237
- .withIndex("by_agent_id", (q) => q.eq("agentId", args.agentId))
238
- .unique();
239
- if (!agent)
240
- return false;
241
- await ctx.db.patch(agent._id, {
242
- isActive: false,
243
- revokedAt: Date.now(),
244
- revokedBy: args.revokedBy,
245
- });
246
- return true;
247
- },
248
- });
249
- /**
250
- * Revoke a specific app instance for an agent.
251
- */
252
- export const revokeAppInstance = mutation({
253
- args: {
254
- agentId: v.string(),
255
- appName: v.string(),
256
- },
257
- returns: v.boolean(),
258
- handler: async (ctx, args) => {
259
- const instance = await ctx.db
260
- .query("agentAppInstances")
261
- .withIndex("by_agent_and_app", (q) => q.eq("agentId", args.agentId).eq("appName", args.appName))
262
- .unique();
263
- if (!instance)
264
- return false;
265
- await ctx.db.delete(instance._id);
266
- return true;
267
- },
268
- });
269
- /**
270
- * List all registered agents (admin query).
271
- */
272
- export const listAgents = query({
273
- args: {
274
- activeOnly: v.optional(v.boolean()),
275
- },
276
- returns: v.array(v.object({
277
- agentId: v.string(),
278
- employeeEmail: v.string(),
279
- department: v.string(),
280
- firstRegisteredAt: v.number(),
281
- lastSeenAt: v.number(),
282
- isActive: v.boolean(),
283
- revokedAt: v.optional(v.number()),
284
- revokedBy: v.optional(v.string()),
285
- })),
286
- handler: async (ctx, args) => {
287
- const agents = await ctx.db.query("registeredAgents").collect();
288
- const filtered = args.activeOnly !== false
289
- ? agents.filter((a) => a.isActive)
290
- : agents;
291
- return filtered.map((a) => ({
292
- agentId: a.agentId,
293
- employeeEmail: a.employeeEmail,
294
- department: a.department,
295
- firstRegisteredAt: a.firstRegisteredAt,
296
- lastSeenAt: a.lastSeenAt,
297
- isActive: a.isActive,
298
- revokedAt: a.revokedAt,
299
- revokedBy: a.revokedBy,
300
- }));
301
- },
302
- });
303
- /**
304
- * Configure app defaults (per-app) for provisioning.
305
- * This is a mutation called via the client class.
306
- */
307
- export const configure = mutation({
308
- args: {
309
- appName: v.string(),
310
- defaultPermissions: v.array(v.object({
311
- pattern: v.string(),
312
- permission: v.union(v.literal("allow"), v.literal("deny"), v.literal("rate_limited")),
313
- rateLimitConfig: v.optional(v.object({
314
- requestsPerHour: v.number(),
315
- tokenBudget: v.number(),
316
- })),
317
- })),
318
- },
319
- returns: v.null(),
320
- handler: async (ctx, args) => {
321
- // Upsert: replace existing config for this app
322
- const existing = await ctx.db
323
- .query("appConfigs")
324
- .withIndex("by_app_name", (q) => q.eq("appName", args.appName))
325
- .unique();
326
- if (existing) {
327
- await ctx.db.patch(existing._id, {
328
- appName: args.appName,
329
- defaultPermissions: args.defaultPermissions,
330
- configuredAt: Date.now(),
331
- });
332
- }
333
- else {
334
- await ctx.db.insert("appConfigs", {
335
- appName: args.appName,
336
- defaultPermissions: args.defaultPermissions,
337
- configuredAt: Date.now(),
338
- });
339
- }
340
- return null;
341
- },
342
- });
343
- //# sourceMappingURL=provisioning.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../src/component/provisioning.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Register a function handle that agents can call.
3
- * The host app creates a function handle via createFunctionHandle()
4
- * and registers it here with a human-readable alias.
5
- *
6
- * If a function with the same appName + functionName already exists, it is updated.
7
- */
8
- export declare const register: import("convex/server").RegisteredMutation<"public", {
9
- description?: string | undefined;
10
- appName: string;
11
- functionName: string;
12
- functionHandle: string;
13
- functionType: "query" | "mutation" | "action";
14
- }, Promise<import("convex/values").GenericId<"functionRegistry">>>;
15
- /**
16
- * Get a specific function handle by appName + functionName.
17
- * Returns null if not found.
18
- */
19
- export declare const getHandle: import("convex/server").RegisteredQuery<"public", {
20
- appName: string;
21
- functionName: string;
22
- }, Promise<{
23
- functionHandle: string;
24
- functionType: "query" | "mutation" | "action";
25
- functionName: string;
26
- description: string | undefined;
27
- } | null>>;
28
- /**
29
- * List all registered functions for a given app.
30
- */
31
- export declare const listFunctions: import("convex/server").RegisteredQuery<"public", {
32
- appName: string;
33
- }, Promise<{
34
- functionName: string;
35
- functionType: "query" | "mutation" | "action";
36
- description: string | undefined;
37
- registeredAt: number;
38
- }[]>>;
39
- /**
40
- * Unregister a function handle.
41
- */
42
- export declare const unregister: import("convex/server").RegisteredMutation<"public", {
43
- appName: string;
44
- functionName: string;
45
- }, Promise<boolean>>;
46
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/component/registry.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ;;;;;;kEA0CnB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;;UAmCpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;KA6BxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;oBAmBrB,CAAC"}
@@ -1,121 +0,0 @@
1
- import { v } from "convex/values";
2
- import { mutation, query } from "./_generated/server.js";
3
- /**
4
- * Register a function handle that agents can call.
5
- * The host app creates a function handle via createFunctionHandle()
6
- * and registers it here with a human-readable alias.
7
- *
8
- * If a function with the same appName + functionName already exists, it is updated.
9
- */
10
- export const register = mutation({
11
- args: {
12
- appName: v.string(),
13
- functionName: v.string(),
14
- functionHandle: v.string(),
15
- functionType: v.union(v.literal("query"), v.literal("mutation"), v.literal("action")),
16
- description: v.optional(v.string()),
17
- },
18
- returns: v.string(),
19
- handler: async (ctx, args) => {
20
- // Check if already registered (upsert)
21
- const existing = await ctx.db
22
- .query("functionRegistry")
23
- .withIndex("by_app_and_function", (q) => q.eq("appName", args.appName).eq("functionName", args.functionName))
24
- .unique();
25
- if (existing) {
26
- await ctx.db.patch(existing._id, {
27
- functionHandle: args.functionHandle,
28
- functionType: args.functionType,
29
- description: args.description,
30
- registeredAt: Date.now(),
31
- });
32
- return existing._id;
33
- }
34
- const id = await ctx.db.insert("functionRegistry", {
35
- appName: args.appName,
36
- functionName: args.functionName,
37
- functionHandle: args.functionHandle,
38
- functionType: args.functionType,
39
- description: args.description,
40
- registeredAt: Date.now(),
41
- });
42
- return id;
43
- },
44
- });
45
- /**
46
- * Get a specific function handle by appName + functionName.
47
- * Returns null if not found.
48
- */
49
- export const getHandle = query({
50
- args: {
51
- appName: v.string(),
52
- functionName: v.string(),
53
- },
54
- returns: v.union(v.null(), v.object({
55
- functionHandle: v.string(),
56
- functionType: v.union(v.literal("query"), v.literal("mutation"), v.literal("action")),
57
- functionName: v.string(),
58
- description: v.optional(v.string()),
59
- })),
60
- handler: async (ctx, args) => {
61
- const entry = await ctx.db
62
- .query("functionRegistry")
63
- .withIndex("by_app_and_function", (q) => q.eq("appName", args.appName).eq("functionName", args.functionName))
64
- .unique();
65
- if (!entry)
66
- return null;
67
- return {
68
- functionHandle: entry.functionHandle,
69
- functionType: entry.functionType,
70
- functionName: entry.functionName,
71
- description: entry.description,
72
- };
73
- },
74
- });
75
- /**
76
- * List all registered functions for a given app.
77
- */
78
- export const listFunctions = query({
79
- args: {
80
- appName: v.string(),
81
- },
82
- returns: v.array(v.object({
83
- functionName: v.string(),
84
- functionType: v.union(v.literal("query"), v.literal("mutation"), v.literal("action")),
85
- description: v.optional(v.string()),
86
- registeredAt: v.number(),
87
- })),
88
- handler: async (ctx, args) => {
89
- const entries = await ctx.db
90
- .query("functionRegistry")
91
- .withIndex("by_app_and_function", (q) => q.eq("appName", args.appName))
92
- .collect();
93
- return entries.map((entry) => ({
94
- functionName: entry.functionName,
95
- functionType: entry.functionType,
96
- description: entry.description,
97
- registeredAt: entry.registeredAt,
98
- }));
99
- },
100
- });
101
- /**
102
- * Unregister a function handle.
103
- */
104
- export const unregister = mutation({
105
- args: {
106
- appName: v.string(),
107
- functionName: v.string(),
108
- },
109
- returns: v.boolean(),
110
- handler: async (ctx, args) => {
111
- const existing = await ctx.db
112
- .query("functionRegistry")
113
- .withIndex("by_app_and_function", (q) => q.eq("appName", args.appName).eq("functionName", args.functionName))
114
- .unique();
115
- if (!existing)
116
- return false;
117
- await ctx.db.delete(existing._id);
118
- return true;
119
- },
120
- });
121
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/component/registry.ts"],"names":[],"mappings":"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"}