@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,92 +1,42 @@
1
1
  import { defineSchema, defineTable } from "convex/server";
2
2
  import { v } from "convex/values";
3
3
  export default defineSchema({
4
- // Provisioning Tokens (generated by IT admin, distributed to employees)
5
- provisioningTokens: defineTable({
6
- tokenHash: v.string(), // SHA-256 hash of the APT (e.g. "apt_live_xxx")
7
- employeeEmail: v.string(),
8
- department: v.string(),
9
- maxApps: v.number(), // How many apps this token can register (default 5)
10
- usedCount: v.number(),
11
- expiresAt: v.number(), // Token expiration timestamp
12
- isActive: v.boolean(),
13
- createdBy: v.string(), // Admin email who created the token
14
- })
15
- .index("by_token_hash", ["tokenHash"])
16
- .index("by_email", ["employeeEmail"]),
17
- // Registered agents (created on first provisioning)
18
- registeredAgents: defineTable({
19
- agentId: v.string(), // UUID generated at first provisioning
20
- employeeEmail: v.string(),
21
- department: v.string(),
22
- firstRegisteredAt: v.number(),
23
- lastSeenAt: v.number(),
24
- isActive: v.boolean(),
25
- revokedAt: v.optional(v.number()),
26
- revokedBy: v.optional(v.string()),
27
- })
28
- .index("by_agent_id", ["agentId"])
29
- .index("by_email", ["employeeEmail"]),
30
- // Per-app per-agent instances (one per app per agent)
31
- agentAppInstances: defineTable({
32
- agentId: v.string(),
33
- appName: v.string(),
34
- instanceTokenHash: v.string(), // SHA-256 hash of the instance token
35
- registeredAt: v.number(),
36
- expiresAt: v.number(),
37
- lastActivityAt: v.number(),
38
- monthlyRequests: v.number(), // Request counter for this app
4
+ agents: defineTable({
5
+ name: v.string(),
6
+ apiKeyHash: v.string(),
7
+ enabled: v.boolean(),
8
+ rateLimit: v.number(),
9
+ lastUsed: v.optional(v.number()),
10
+ createdAt: v.number(),
39
11
  })
40
- .index("by_instance_token_hash", ["instanceTokenHash"])
41
- .index("by_agent_and_app", ["agentId", "appName"]),
42
- // Function Handle Registry: maps function aliases to actual function handles
43
- functionRegistry: defineTable({
44
- appName: v.string(),
45
- functionName: v.string(), // Alias e.g. "okr:getObjectives"
46
- functionHandle: v.string(), // Function handle string from createFunctionHandle()
47
- functionType: v.union(v.literal("query"), v.literal("mutation"), v.literal("action")),
48
- description: v.optional(v.string()),
49
- registeredAt: v.number(),
50
- }).index("by_app_and_function", ["appName", "functionName"]),
51
- // Dynamic permissions: who can do what on which app
52
- functionPermissions: defineTable({
53
- agentId: v.string(),
54
- appName: v.string(),
55
- functionPattern: v.string(), // e.g. "okr:*", "okr:createObjective", "*"
12
+ .index("by_apiKeyHash", ["apiKeyHash"])
13
+ .index("by_enabled", ["enabled"]),
14
+ agentPermissions: defineTable({
15
+ agentId: v.id("agents"),
16
+ functionPattern: v.string(),
56
17
  permission: v.union(v.literal("allow"), v.literal("deny"), v.literal("rate_limited")),
57
18
  rateLimitConfig: v.optional(v.object({
58
19
  requestsPerHour: v.number(),
59
- tokenBudget: v.number(),
20
+ tokenBudget: v.optional(v.number()),
60
21
  })),
61
- createdAt: v.number(),
62
- createdBy: v.string(), // Admin email
63
- })
64
- .index("by_agent_and_app", ["agentId", "appName"])
65
- .index("by_app_and_pattern", ["appName", "functionPattern"]),
66
- // Audit log for all access attempts
67
- accessLog: defineTable({
22
+ updatedAt: v.number(),
23
+ }).index("by_agentId", ["agentId"]),
24
+ agentFunctions: defineTable({
25
+ key: v.string(),
26
+ enabled: v.boolean(),
27
+ globalRateLimit: v.optional(v.number()),
28
+ }).index("by_key", ["key"]),
29
+ agentLogs: defineTable({
30
+ agentId: v.id("agents"),
31
+ functionKey: v.string(),
32
+ args: v.any(),
33
+ result: v.optional(v.any()),
34
+ error: v.optional(v.string()),
35
+ duration: v.number(),
68
36
  timestamp: v.number(),
69
- agentId: v.string(),
70
- appName: v.string(),
71
- functionCalled: v.string(),
72
- permission: v.string(), // "allow", "deny", "rate_limited"
73
- errorMessage: v.optional(v.string()),
74
- durationMs: v.optional(v.number()),
75
37
  })
76
- .index("by_agent_and_timestamp", ["agentId", "timestamp"])
77
- .index("by_app_and_function", ["appName", "functionCalled"]),
78
- // Per-app configuration (no global singleton)
79
- appConfigs: defineTable({
80
- appName: v.string(),
81
- defaultPermissions: v.array(v.object({
82
- pattern: v.string(),
83
- permission: v.union(v.literal("allow"), v.literal("deny"), v.literal("rate_limited")),
84
- rateLimitConfig: v.optional(v.object({
85
- requestsPerHour: v.number(),
86
- tokenBudget: v.number(),
87
- })),
88
- })),
89
- configuredAt: v.number(),
90
- }).index("by_app_name", ["appName"]),
38
+ .index("by_agentId_and_timestamp", ["agentId", "timestamp"])
39
+ .index("by_functionKey", ["functionKey"])
40
+ .index("by_timestamp", ["timestamp"]),
91
41
  });
92
42
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,eAAe,YAAY,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;SACC,KAAK,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC;SACtC,KAAK,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC;IAEnC,gBAAgB,EAAE,WAAW,CAAC;QAC5B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QACvB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,UAAU,EAAE,CAAC,CAAC,KAAK,CACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAClB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAC1B;QACD,eAAe,EAAE,CAAC,CAAC,QAAQ,CACzB,CAAC,CAAC,MAAM,CAAC;YACP,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;YAC3B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACpC,CAAC,CACH;QACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC;IAEnC,cAAc,EAAE,WAAW,CAAC;QAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACxC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;IAE3B,SAAS,EAAE,WAAW,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;SACC,KAAK,CAAC,0BAA0B,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAC3D,KAAK,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,CAAC;SACxC,KAAK,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC;CACxC,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- export { AgentBridge } from "../client/index.js";
2
- export type { AgentBridgeConfig, FunctionDef, DefaultPermission, } from "../client/index.js";
1
+ export { registerRoutes, normalizeAgentBridgeConfig } from "../client/index.js";
2
+ export type { AgentBridgeConfig, AgentBridgeFunctionDefinition, AgentBridgeFunctionMetadata, AgentBridgeFunctionType, } from "../client/index.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,iBAAiB,EACjB,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
@@ -1,5 +1,4 @@
1
1
  "use client";
2
- // React hooks and components for the Agent Bridge admin panel.
3
- // These will be expanded in future versions.
4
- export { AgentBridge } from "../client/index.js";
2
+ // React helpers for Agent Bridge integrations.
3
+ export { registerRoutes, normalizeAgentBridgeConfig } from "../client/index.js";
5
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,+DAA+D;AAC/D,6CAA6C;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@okrlinkhub/agent-bridge",
3
3
  "description": "A agent bridge component for Convex.",
4
- "repository": "github:okrlinkhub/agent-bridge",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/okrlinkhub/agent-bridge.git"
7
+ },
5
8
  "homepage": "https://github.com/okrlinkhub/agent-bridge#readme",
6
9
  "bugs": {
7
10
  "url": "https://github.com/okrlinkhub/agent-bridge/issues"
8
11
  },
9
- "version": "0.1.0",
12
+ "version": "2.0.0",
10
13
  "license": "Apache-2.0",
11
14
  "keywords": [
12
15
  "convex",
@@ -39,6 +42,7 @@
39
42
  "dist",
40
43
  "src"
41
44
  ],
45
+ "bin": "./dist/cli/init.js",
42
46
  "exports": {
43
47
  "./package.json": "./package.json",
44
48
  ".": {
@@ -100,4 +104,4 @@
100
104
  },
101
105
  "types": "./dist/client/index.d.ts",
102
106
  "module": "./dist/client/index.js"
103
- }
107
+ }
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ import { access, mkdir, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+
5
+ const cwd = process.cwd();
6
+
7
+ async function exists(targetPath: string) {
8
+ try {
9
+ await access(targetPath);
10
+ return true;
11
+ } catch {
12
+ return false;
13
+ }
14
+ }
15
+
16
+ async function writeIfMissing(
17
+ relativePath: string,
18
+ content: string,
19
+ ): Promise<"created" | "skipped"> {
20
+ const absolutePath = path.join(cwd, relativePath);
21
+ if (await exists(absolutePath)) {
22
+ return "skipped";
23
+ }
24
+
25
+ await mkdir(path.dirname(absolutePath), { recursive: true });
26
+ await writeFile(absolutePath, content, "utf8");
27
+ return "created";
28
+ }
29
+
30
+ const configTemplate = `import { api } from "./convex/_generated/api";
31
+ import { defineAgentBridgeConfig } from "@okrlinkhub/agent-bridge";
32
+
33
+ export default defineAgentBridgeConfig({
34
+ functions: {
35
+ "cart.calculatePrice": {
36
+ ref: api.cart.calculatePrice,
37
+ type: "query",
38
+ },
39
+ "cart.applyDiscount": {
40
+ ref: api.cart.applyDiscount,
41
+ type: "mutation",
42
+ },
43
+ },
44
+ metadata: {
45
+ "cart.calculatePrice": {
46
+ description: "Calcola il prezzo totale del carrello",
47
+ riskLevel: "low",
48
+ category: "commerce",
49
+ },
50
+ },
51
+ });
52
+ `;
53
+
54
+ const bridgeHttpTemplate = `import { registerRoutes } from "@okrlinkhub/agent-bridge";
55
+ import { components } from "./_generated/api";
56
+ import config from "../agent-bridge.config";
57
+
58
+ export function registerAgentBridgeRoutes(
59
+ http: Parameters<typeof registerRoutes>[0],
60
+ ) {
61
+ registerRoutes(http, components.agentBridge, config, {
62
+ pathPrefix: "/agent",
63
+ });
64
+ }
65
+ `;
66
+
67
+ const integrationNotes = `
68
+ [agent-bridge] Init completed.
69
+
70
+ Next steps:
71
+ 1) Add component in convex/convex.config.ts:
72
+
73
+ import { defineApp } from "convex/server";
74
+ import agentBridge from "@okrlinkhub/agent-bridge/convex.config.js";
75
+
76
+ const app = defineApp();
77
+ app.use(agentBridge);
78
+ export default app;
79
+
80
+ 2) Mount routes in convex/http.ts:
81
+
82
+ import { httpRouter } from "convex/server";
83
+ import { registerAgentBridgeRoutes } from "./agentBridge";
84
+
85
+ const http = httpRouter();
86
+ registerAgentBridgeRoutes(http);
87
+ export default http;
88
+
89
+ 3) Create agents and permissions with component mutations:
90
+ - components.agentBridge.agents.createAgent
91
+ - components.agentBridge.permissions.setAgentPermissions
92
+ - components.agentBridge.permissions.setFunctionOverrides
93
+ `;
94
+
95
+ async function main() {
96
+ const commandArg = process.argv[2];
97
+ if (commandArg && commandArg !== "init") {
98
+ console.error(`[agent-bridge] Unknown command "${commandArg}".`);
99
+ console.error("Usage: npx @okrlinkhub/agent-bridge init");
100
+ process.exitCode = 1;
101
+ return;
102
+ }
103
+
104
+ const configResult = await writeIfMissing("agent-bridge.config.ts", configTemplate);
105
+ const bridgeResult = await writeIfMissing("convex/agentBridge.ts", bridgeHttpTemplate);
106
+
107
+ console.log(
108
+ `[agent-bridge] agent-bridge.config.ts: ${configResult === "created" ? "created" : "skipped (already exists)"}`,
109
+ );
110
+ console.log(
111
+ `[agent-bridge] convex/agentBridge.ts: ${bridgeResult === "created" ? "created" : "skipped (already exists)"}`,
112
+ );
113
+ console.log(integrationNotes.trim());
114
+ }
115
+
116
+ void main();