@inkeep/agents-api 0.0.0-dev-20260123202200 → 0.0.0-dev-20260123211824

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 (43) hide show
  1. package/dist/.well-known/workflow/v1/manifest.debug.json +14 -14
  2. package/dist/.well-known/workflow/v1/step.cjs +946 -26
  3. package/dist/createApp.d.ts +2 -2
  4. package/dist/data/db/runDbClient.d.ts +2 -2
  5. package/dist/domains/evals/routes/datasetTriggers.d.ts +2 -2
  6. package/dist/domains/evals/routes/index.d.ts +2 -2
  7. package/dist/domains/evals/workflow/routes.d.ts +2 -2
  8. package/dist/domains/manage/index.js +0 -2
  9. package/dist/domains/manage/routes/agent.js +5 -2
  10. package/dist/domains/manage/routes/agentFull.js +5 -2
  11. package/dist/domains/manage/routes/agentToolRelations.js +5 -2
  12. package/dist/domains/manage/routes/apiKeys.js +1 -2
  13. package/dist/domains/manage/routes/cliAuth.js +2 -2
  14. package/dist/domains/manage/routes/conversations.d.ts +2 -2
  15. package/dist/domains/manage/routes/credentials.js +1 -2
  16. package/dist/domains/manage/routes/dataComponents.js +1 -2
  17. package/dist/domains/manage/routes/evals/evaluationResults.d.ts +2 -2
  18. package/dist/domains/manage/routes/externalAgents.js +1 -2
  19. package/dist/domains/manage/routes/index.d.ts +2 -2
  20. package/dist/domains/manage/routes/index.js +4 -0
  21. package/dist/domains/manage/routes/mcp.d.ts +2 -2
  22. package/dist/domains/manage/routes/playgroundToken.js +0 -1
  23. package/dist/domains/manage/routes/projectFull.js +28 -6
  24. package/dist/domains/manage/routes/projectMembers.js +16 -35
  25. package/dist/domains/manage/routes/projectPermissions.js +17 -10
  26. package/dist/domains/manage/routes/projects.js +4 -5
  27. package/dist/domains/manage/routes/signoz.d.ts +2 -2
  28. package/dist/domains/manage/routes/userOrganizations.js +2 -2
  29. package/dist/domains/manage/routes/userProjectMemberships.d.ts +9 -0
  30. package/dist/domains/manage/routes/userProjectMemberships.js +45 -0
  31. package/dist/domains/run/agents/Agent.js +93 -2
  32. package/dist/domains/run/agents/relationTools.d.ts +2 -2
  33. package/dist/factory.d.ts +26 -26
  34. package/dist/index.d.ts +26 -26
  35. package/dist/initialization.js +2 -2
  36. package/dist/middleware/evalsAuth.d.ts +2 -2
  37. package/dist/middleware/manageAuth.d.ts +2 -2
  38. package/dist/middleware/projectAccess.d.ts +4 -11
  39. package/dist/middleware/projectAccess.js +1 -17
  40. package/dist/middleware/projectConfig.d.ts +3 -3
  41. package/dist/middleware/tenantAccess.js +4 -4
  42. package/dist/types/app.d.ts +2 -0
  43. package/package.json +3 -3
@@ -819,10 +819,12 @@ var Agent = class {
819
819
  continue;
820
820
  }
821
821
  const zodSchema = jsonSchemaToZod(functionData.inputSchema);
822
+ const toolPolicies = functionToolDef.toolPolicies;
823
+ const needsApproval = !!toolPolicies?.["*"]?.needsApproval || !!toolPolicies?.[functionToolDef.name]?.needsApproval;
822
824
  const aiTool = tool({
823
825
  description: functionToolDef.description || functionToolDef.name,
824
826
  inputSchema: zodSchema,
825
- execute: async (args, { toolCallId }) => {
827
+ execute: async (args, { toolCallId, providerMetadata }) => {
826
828
  let processedArgs;
827
829
  try {
828
830
  processedArgs = parseEmbeddedJson(args);
@@ -839,6 +841,95 @@ var Agent = class {
839
841
  processedArgs = args;
840
842
  }
841
843
  const finalArgs = processedArgs;
844
+ if (needsApproval) {
845
+ logger.info({
846
+ toolName: functionToolDef.name,
847
+ toolCallId,
848
+ args: finalArgs
849
+ }, "Function tool requires approval - waiting for user response");
850
+ const currentSpan = trace.getActiveSpan();
851
+ if (currentSpan) currentSpan.addEvent("tool.approval.requested", {
852
+ "tool.name": functionToolDef.name,
853
+ "tool.callId": toolCallId,
854
+ "subAgent.id": this.config.id
855
+ });
856
+ tracer.startActiveSpan("tool.approval_requested", { attributes: {
857
+ "tool.name": functionToolDef.name,
858
+ "tool.callId": toolCallId,
859
+ "subAgent.id": this.config.id,
860
+ "subAgent.name": this.config.name
861
+ } }, (requestSpan) => {
862
+ requestSpan.setStatus({ code: SpanStatusCode.OK });
863
+ requestSpan.end();
864
+ });
865
+ const streamHelper = this.getStreamingHelper();
866
+ if (streamHelper) await streamHelper.writeToolApprovalRequest({
867
+ approvalId: `aitxt-${toolCallId}`,
868
+ toolCallId
869
+ });
870
+ else if (this.isDelegatedAgent) {
871
+ const streamRequestId$1 = this.getStreamRequestId();
872
+ if (streamRequestId$1) await toolApprovalUiBus.publish(streamRequestId$1, {
873
+ type: "approval-needed",
874
+ toolCallId,
875
+ toolName: functionToolDef.name,
876
+ input: finalArgs,
877
+ providerMetadata,
878
+ approvalId: `aitxt-${toolCallId}`
879
+ });
880
+ }
881
+ const approvalResult = await pendingToolApprovalManager.waitForApproval(toolCallId, functionToolDef.name, args, this.conversationId || "unknown", this.config.id);
882
+ if (!approvalResult.approved) {
883
+ if (!streamHelper && this.isDelegatedAgent) {
884
+ const streamRequestId$1 = this.getStreamRequestId();
885
+ if (streamRequestId$1) await toolApprovalUiBus.publish(streamRequestId$1, {
886
+ type: "approval-resolved",
887
+ toolCallId,
888
+ approved: false
889
+ });
890
+ }
891
+ return tracer.startActiveSpan("tool.approval_denied", { attributes: {
892
+ "tool.name": functionToolDef.name,
893
+ "tool.callId": toolCallId,
894
+ "subAgent.id": this.config.id,
895
+ "subAgent.name": this.config.name
896
+ } }, (denialSpan) => {
897
+ logger.info({
898
+ toolName: functionToolDef.name,
899
+ toolCallId,
900
+ reason: approvalResult.reason
901
+ }, "Function tool execution denied by user");
902
+ denialSpan.setStatus({ code: SpanStatusCode.OK });
903
+ denialSpan.end();
904
+ return {
905
+ __inkeepToolDenied: true,
906
+ toolCallId,
907
+ reason: approvalResult.reason
908
+ };
909
+ });
910
+ }
911
+ tracer.startActiveSpan("tool.approval_approved", { attributes: {
912
+ "tool.name": functionToolDef.name,
913
+ "tool.callId": toolCallId,
914
+ "subAgent.id": this.config.id,
915
+ "subAgent.name": this.config.name
916
+ } }, (approvedSpan) => {
917
+ logger.info({
918
+ toolName: functionToolDef.name,
919
+ toolCallId
920
+ }, "Function tool approved, continuing with execution");
921
+ approvedSpan.setStatus({ code: SpanStatusCode.OK });
922
+ approvedSpan.end();
923
+ });
924
+ if (!streamHelper && this.isDelegatedAgent) {
925
+ const streamRequestId$1 = this.getStreamRequestId();
926
+ if (streamRequestId$1) await toolApprovalUiBus.publish(streamRequestId$1, {
927
+ type: "approval-resolved",
928
+ toolCallId,
929
+ approved: true
930
+ });
931
+ }
932
+ }
842
933
  logger.debug({
843
934
  toolName: functionToolDef.name,
844
935
  toolCallId,
@@ -876,7 +967,7 @@ var Agent = class {
876
967
  }
877
968
  }
878
969
  });
879
- functionTools[functionToolDef.name] = this.wrapToolWithStreaming(functionToolDef.name, aiTool, streamRequestId || "", "tool");
970
+ functionTools[functionToolDef.name] = this.wrapToolWithStreaming(functionToolDef.name, aiTool, streamRequestId || "", "tool", { needsApproval });
880
971
  }
881
972
  } catch (error) {
882
973
  logger.error({ error }, "Failed to load function tools from database");
@@ -1,6 +1,6 @@
1
1
  import { AgentConfig, DelegateRelation } from "./Agent.js";
2
2
  import { InternalRelation } from "../utils/project.js";
3
- import * as _inkeep_agents_core0 from "@inkeep/agents-core";
3
+ import * as _inkeep_agents_core1 from "@inkeep/agents-core";
4
4
  import { CredentialStoreRegistry, FullExecutionContext } from "@inkeep/agents-core";
5
5
  import * as ai0 from "ai";
6
6
 
@@ -44,7 +44,7 @@ declare function createDelegateToAgentTool({
44
44
  message: string;
45
45
  }, {
46
46
  toolCallId: any;
47
- result: _inkeep_agents_core0.Message | _inkeep_agents_core0.Task;
47
+ result: _inkeep_agents_core1.Message | _inkeep_agents_core1.Task;
48
48
  }>;
49
49
  /**
50
50
  * Parameters for building a transfer relation config
package/dist/factory.d.ts CHANGED
@@ -7,7 +7,7 @@ import * as hono0 from "hono";
7
7
  import { CredentialStore, ServerConfig } from "@inkeep/agents-core";
8
8
  import * as zod0 from "zod";
9
9
  import { SSOProviderConfig, UserAuthConfig } from "@inkeep/agents-core/auth";
10
- import * as hono_types1 from "hono/types";
10
+ import * as hono_types0 from "hono/types";
11
11
  import * as better_auth0 from "better-auth";
12
12
  import * as better_auth_plugins0 from "better-auth/plugins";
13
13
  import * as _better_auth_sso0 from "@better-auth/sso";
@@ -795,25 +795,25 @@ declare function createAgentsAuth(userAuthConfig?: UserAuthConfig): better_auth0
795
795
  ac: better_auth_plugins0.AccessControl;
796
796
  roles: {
797
797
  member: {
798
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key] | {
799
- actions: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key];
798
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
799
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key];
800
800
  connector: "OR" | "AND";
801
801
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
802
- statements: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>;
802
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>;
803
803
  };
804
804
  admin: {
805
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key] | {
806
- actions: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key];
805
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
806
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key];
807
807
  connector: "OR" | "AND";
808
808
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
809
- statements: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>;
809
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>;
810
810
  };
811
811
  owner: {
812
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key] | {
813
- actions: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key];
812
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
813
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key];
814
814
  connector: "OR" | "AND";
815
815
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
816
- statements: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>;
816
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>;
817
817
  };
818
818
  };
819
819
  membershipLimit: number;
@@ -840,13 +840,13 @@ declare function createAgentsAuth(userAuthConfig?: UserAuthConfig): better_auth0
840
840
  user: better_auth0.User & Record<string, any>;
841
841
  organization: better_auth_plugins0.Organization & Record<string, any>;
842
842
  }) => Promise<void>;
843
- afterUpdateMemberRole: ({
843
+ beforeUpdateMemberRole: ({
844
844
  member,
845
845
  organization: org,
846
- previousRole
846
+ newRole
847
847
  }: {
848
848
  member: better_auth_plugins0.Member & Record<string, any>;
849
- previousRole: string;
849
+ newRole: string;
850
850
  user: better_auth0.User & Record<string, any>;
851
851
  organization: better_auth_plugins0.Organization & Record<string, any>;
852
852
  }) => Promise<void>;
@@ -1104,25 +1104,25 @@ declare function createAgentsAuth(userAuthConfig?: UserAuthConfig): better_auth0
1104
1104
  ac: better_auth_plugins0.AccessControl;
1105
1105
  roles: {
1106
1106
  member: {
1107
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key] | {
1108
- actions: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key];
1107
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
1108
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key];
1109
1109
  connector: "OR" | "AND";
1110
1110
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
1111
- statements: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>;
1111
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>;
1112
1112
  };
1113
1113
  admin: {
1114
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key] | {
1115
- actions: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key];
1114
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
1115
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key];
1116
1116
  connector: "OR" | "AND";
1117
1117
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
1118
- statements: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>;
1118
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>;
1119
1119
  };
1120
1120
  owner: {
1121
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key] | {
1122
- actions: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>[key];
1121
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key] | {
1122
+ actions: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>[key];
1123
1123
  connector: "OR" | "AND";
1124
1124
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins0.AuthorizeResponse;
1125
- statements: better_auth_plugins0.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins0.Statements>;
1125
+ statements: better_auth_plugins0.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins0.Statements>;
1126
1126
  };
1127
1127
  };
1128
1128
  membershipLimit: number;
@@ -1149,13 +1149,13 @@ declare function createAgentsAuth(userAuthConfig?: UserAuthConfig): better_auth0
1149
1149
  user: better_auth0.User & Record<string, any>;
1150
1150
  organization: better_auth_plugins0.Organization & Record<string, any>;
1151
1151
  }) => Promise<void>;
1152
- afterUpdateMemberRole: ({
1152
+ beforeUpdateMemberRole: ({
1153
1153
  member,
1154
1154
  organization: org,
1155
- previousRole
1155
+ newRole
1156
1156
  }: {
1157
1157
  member: better_auth_plugins0.Member & Record<string, any>;
1158
- previousRole: string;
1158
+ newRole: string;
1159
1159
  user: better_auth0.User & Record<string, any>;
1160
1160
  organization: better_auth_plugins0.Organization & Record<string, any>;
1161
1161
  }) => Promise<void>;
@@ -1536,6 +1536,6 @@ declare function createAgentsApp(config?: {
1536
1536
  auth?: UserAuthConfig;
1537
1537
  sandboxConfig?: SandboxConfig;
1538
1538
  skipInitialization?: boolean;
1539
- }): hono0.Hono<hono_types1.BlankEnv, hono_types1.BlankSchema, "/">;
1539
+ }): hono0.Hono<hono_types0.BlankEnv, hono_types0.BlankSchema, "/">;
1540
1540
  //#endregion
1541
1541
  export { type SSOProviderConfig, type UserAuthConfig, createAgentsApp, createAgentsAuth, createAgentsHono, createAuth0Provider, createOIDCProvider, initializeDefaultUser };
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ import { createAuth0Provider, createOIDCProvider } from "./ssoHelpers.js";
8
8
  import { SSOProviderConfig, UserAuthConfig, createAgentsApp } from "./factory.js";
9
9
  import { Hono } from "hono";
10
10
  import * as zod205 from "zod";
11
- import * as hono_types3 from "hono/types";
11
+ import * as hono_types1 from "hono/types";
12
12
  import * as better_auth78 from "better-auth";
13
13
  import * as better_auth_plugins69 from "better-auth/plugins";
14
14
  import * as _better_auth_sso10 from "@better-auth/sso";
@@ -796,25 +796,25 @@ declare const auth: better_auth78.Auth<{
796
796
  ac: better_auth_plugins69.AccessControl;
797
797
  roles: {
798
798
  member: {
799
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key] | {
800
- actions: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key];
799
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key] | {
800
+ actions: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key];
801
801
  connector: "OR" | "AND";
802
802
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins69.AuthorizeResponse;
803
- statements: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>;
803
+ statements: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>;
804
804
  };
805
805
  admin: {
806
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key] | {
807
- actions: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key];
806
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key] | {
807
+ actions: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key];
808
808
  connector: "OR" | "AND";
809
809
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins69.AuthorizeResponse;
810
- statements: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>;
810
+ statements: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>;
811
811
  };
812
812
  owner: {
813
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key] | {
814
- actions: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key];
813
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key] | {
814
+ actions: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key];
815
815
  connector: "OR" | "AND";
816
816
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins69.AuthorizeResponse;
817
- statements: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>;
817
+ statements: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>;
818
818
  };
819
819
  };
820
820
  membershipLimit: number;
@@ -841,13 +841,13 @@ declare const auth: better_auth78.Auth<{
841
841
  user: better_auth78.User & Record<string, any>;
842
842
  organization: better_auth_plugins69.Organization & Record<string, any>;
843
843
  }) => Promise<void>;
844
- afterUpdateMemberRole: ({
844
+ beforeUpdateMemberRole: ({
845
845
  member,
846
846
  organization: org,
847
- previousRole
847
+ newRole
848
848
  }: {
849
849
  member: better_auth_plugins69.Member & Record<string, any>;
850
- previousRole: string;
850
+ newRole: string;
851
851
  user: better_auth78.User & Record<string, any>;
852
852
  organization: better_auth_plugins69.Organization & Record<string, any>;
853
853
  }) => Promise<void>;
@@ -1105,25 +1105,25 @@ declare const auth: better_auth78.Auth<{
1105
1105
  ac: better_auth_plugins69.AccessControl;
1106
1106
  roles: {
1107
1107
  member: {
1108
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key] | {
1109
- actions: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key];
1108
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key] | {
1109
+ actions: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key];
1110
1110
  connector: "OR" | "AND";
1111
1111
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins69.AuthorizeResponse;
1112
- statements: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>;
1112
+ statements: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>;
1113
1113
  };
1114
1114
  admin: {
1115
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key] | {
1116
- actions: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key];
1115
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key] | {
1116
+ actions: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key];
1117
1117
  connector: "OR" | "AND";
1118
1118
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins69.AuthorizeResponse;
1119
- statements: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>;
1119
+ statements: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>;
1120
1120
  };
1121
1121
  owner: {
1122
- authorize<K_1 extends "project" | "organization" | "team" | "member" | "ac" | "invitation">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key] | {
1123
- actions: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>[key];
1122
+ authorize<K_1 extends "organization" | "member" | "invitation" | "project" | "team" | "ac">(request: K_1 extends infer T extends K ? { [key in T]?: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key] | {
1123
+ actions: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>[key];
1124
1124
  connector: "OR" | "AND";
1125
1125
  } | undefined } : never, connector?: "OR" | "AND"): better_auth_plugins69.AuthorizeResponse;
1126
- statements: better_auth_plugins69.Subset<"project" | "organization" | "team" | "member" | "ac" | "invitation", better_auth_plugins69.Statements>;
1126
+ statements: better_auth_plugins69.Subset<"organization" | "member" | "invitation" | "project" | "team" | "ac", better_auth_plugins69.Statements>;
1127
1127
  };
1128
1128
  };
1129
1129
  membershipLimit: number;
@@ -1150,13 +1150,13 @@ declare const auth: better_auth78.Auth<{
1150
1150
  user: better_auth78.User & Record<string, any>;
1151
1151
  organization: better_auth_plugins69.Organization & Record<string, any>;
1152
1152
  }) => Promise<void>;
1153
- afterUpdateMemberRole: ({
1153
+ beforeUpdateMemberRole: ({
1154
1154
  member,
1155
1155
  organization: org,
1156
- previousRole
1156
+ newRole
1157
1157
  }: {
1158
1158
  member: better_auth_plugins69.Member & Record<string, any>;
1159
- previousRole: string;
1159
+ newRole: string;
1160
1160
  user: better_auth78.User & Record<string, any>;
1161
1161
  organization: better_auth_plugins69.Organization & Record<string, any>;
1162
1162
  }) => Promise<void>;
@@ -1531,6 +1531,6 @@ declare const auth: better_auth78.Auth<{
1531
1531
  }>;
1532
1532
  }];
1533
1533
  }> | null;
1534
- declare const app: Hono<hono_types3.BlankEnv, hono_types3.BlankSchema, "/">;
1534
+ declare const app: Hono<hono_types1.BlankEnv, hono_types1.BlankSchema, "/">;
1535
1535
  //#endregion
1536
1536
  export { type AppConfig, type AppVariables, Hono, type NativeSandboxConfig, type SSOProviderConfig, type SandboxConfig, type UserAuthConfig, type VercelSandboxConfig, auth, createAgentsApp, createAgentsHono, createAuth0Provider, createOIDCProvider, app as default, initializeDefaultUser };
@@ -1,7 +1,7 @@
1
1
  import { getLogger as getLogger$1 } from "./logger.js";
2
2
  import { env } from "./env.js";
3
3
  import runDbClient_default from "./data/db/runDbClient.js";
4
- import { addUserToOrganization, getUserByEmail, upsertOrganization } from "@inkeep/agents-core";
4
+ import { OrgRoles, addUserToOrganization, getUserByEmail, upsertOrganization } from "@inkeep/agents-core";
5
5
 
6
6
  //#region src/initialization.ts
7
7
  const logger = getLogger$1("initialization");
@@ -45,7 +45,7 @@ async function initializeDefaultUser(authInstance) {
45
45
  await addUserToOrganization(runDbClient_default)({
46
46
  userId: user.id,
47
47
  organizationId: orgId,
48
- role: "owner"
48
+ role: OrgRoles.ADMIN
49
49
  });
50
50
  logger.info({
51
51
  organizationId: orgId,
@@ -1,4 +1,4 @@
1
- import * as hono0 from "hono";
1
+ import * as hono4 from "hono";
2
2
  import { BaseExecutionContext } from "@inkeep/agents-core";
3
3
 
4
4
  //#region src/middleware/evalsAuth.d.ts
@@ -7,7 +7,7 @@ import { BaseExecutionContext } from "@inkeep/agents-core";
7
7
  * Middleware to authenticate API requests using Bearer token authentication
8
8
  * First checks if token matches INKEEP_AGENTS_EVAL_API_BYPASS_SECRET,
9
9
  */
10
- declare const evalApiKeyAuth: () => hono0.MiddlewareHandler<{
10
+ declare const evalApiKeyAuth: () => hono4.MiddlewareHandler<{
11
11
  Variables: {
12
12
  executionContext: BaseExecutionContext;
13
13
  };
@@ -1,4 +1,4 @@
1
- import * as hono1 from "hono";
1
+ import * as hono0 from "hono";
2
2
  import { BaseExecutionContext } from "@inkeep/agents-core";
3
3
  import { createAuth } from "@inkeep/agents-core/auth";
4
4
 
@@ -12,7 +12,7 @@ import { createAuth } from "@inkeep/agents-core/auth";
12
12
  * 3. Database API key
13
13
  * 4. Internal service token
14
14
  */
15
- declare const manageApiKeyAuth: () => hono1.MiddlewareHandler<{
15
+ declare const manageApiKeyAuth: () => hono0.MiddlewareHandler<{
16
16
  Variables: {
17
17
  executionContext: BaseExecutionContext;
18
18
  userId?: string;
@@ -1,16 +1,9 @@
1
1
  import { ManageAppVariables } from "../types/app.js";
2
- import * as hono2 from "hono";
2
+ import * as hono1 from "hono";
3
+ import { ProjectPermissionLevel } from "@inkeep/agents-core";
3
4
 
4
5
  //#region src/middleware/projectAccess.d.ts
5
6
 
6
- /**
7
- * Permission levels for project access
8
- *
9
- * - view: Can see project and resources (read-only)
10
- * - use: Can invoke agents, create API keys, view traces
11
- * - edit: Can modify configurations and manage members
12
- */
13
- type ProjectPermission = 'view' | 'use' | 'edit';
14
7
  /**
15
8
  * Middleware to check project-level access.
16
9
  *
@@ -26,6 +19,6 @@ declare const requireProjectPermission: <Env$1 extends {
26
19
  Variables: ManageAppVariables;
27
20
  } = {
28
21
  Variables: ManageAppVariables;
29
- }>(permission?: ProjectPermission) => hono2.MiddlewareHandler<Env$1, string, {}, Response>;
22
+ }>(permission?: ProjectPermissionLevel) => hono1.MiddlewareHandler<Env$1, string, {}, Response>;
30
23
  //#endregion
31
- export { ProjectPermission, requireProjectPermission };
24
+ export { requireProjectPermission };
@@ -44,7 +44,6 @@ const requireProjectPermission = (permission = "view") => createMiddleware(async
44
44
  switch (permission) {
45
45
  case "view":
46
46
  hasAccess = await canViewProject({
47
- tenantId,
48
47
  userId,
49
48
  projectId,
50
49
  orgRole: tenantRole
@@ -52,7 +51,6 @@ const requireProjectPermission = (permission = "view") => createMiddleware(async
52
51
  break;
53
52
  case "use":
54
53
  hasAccess = await canUseProject({
55
- tenantId,
56
54
  userId,
57
55
  projectId,
58
56
  orgRole: tenantRole
@@ -60,7 +58,6 @@ const requireProjectPermission = (permission = "view") => createMiddleware(async
60
58
  break;
61
59
  case "edit":
62
60
  hasAccess = await canEditProject({
63
- tenantId,
64
61
  userId,
65
62
  projectId,
66
63
  orgRole: tenantRole
@@ -68,20 +65,7 @@ const requireProjectPermission = (permission = "view") => createMiddleware(async
68
65
  break;
69
66
  }
70
67
  if (!hasAccess) {
71
- if (isAuthzEnabled(tenantId) && permission !== "view") {
72
- if (await canViewProject({
73
- tenantId,
74
- userId,
75
- projectId,
76
- orgRole: tenantRole
77
- })) throw createApiError({
78
- code: "forbidden",
79
- message: `Permission denied. Required: project:${permission}`,
80
- instance: c.req.path,
81
- extensions: { requiredPermissions: [`project:${permission}`] }
82
- });
83
- }
84
- if (isAuthzEnabled(tenantId)) throw createApiError({
68
+ if (isAuthzEnabled()) throw createApiError({
85
69
  code: "not_found",
86
70
  message: "Project not found",
87
71
  instance: c.req.path
@@ -1,11 +1,11 @@
1
- import * as hono3 from "hono";
1
+ import * as hono2 from "hono";
2
2
  import { BaseExecutionContext, ResolvedRef } from "@inkeep/agents-core";
3
3
 
4
4
  //#region src/middleware/projectConfig.d.ts
5
5
  /**
6
6
  * Middleware that fetches the full project definition from the Management API
7
7
  */
8
- declare const projectConfigMiddleware: hono3.MiddlewareHandler<{
8
+ declare const projectConfigMiddleware: hono2.MiddlewareHandler<{
9
9
  Variables: {
10
10
  executionContext: BaseExecutionContext;
11
11
  resolvedRef: ResolvedRef;
@@ -15,7 +15,7 @@ declare const projectConfigMiddleware: hono3.MiddlewareHandler<{
15
15
  * Creates a middleware that applies project config fetching except for specified route patterns
16
16
  * @param skipRouteCheck - Function that returns true if the route should skip the middleware
17
17
  */
18
- declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono3.MiddlewareHandler<{
18
+ declare const projectConfigMiddlewareExcept: (skipRouteCheck: (path: string) => boolean) => hono2.MiddlewareHandler<{
19
19
  Variables: {
20
20
  executionContext: BaseExecutionContext;
21
21
  resolvedRef: ResolvedRef;
@@ -1,5 +1,5 @@
1
1
  import runDbClient_default from "../data/db/runDbClient.js";
2
- import { createApiError, getUserOrganizations } from "@inkeep/agents-core";
2
+ import { OrgRoles, createApiError, getUserOrganizationsFromDb } from "@inkeep/agents-core";
3
3
  import { createMiddleware } from "hono/factory";
4
4
  import { HTTPException } from "hono/http-exception";
5
5
 
@@ -26,7 +26,7 @@ const requireTenantAccess = () => createMiddleware(async (c, next) => {
26
26
  });
27
27
  if (userId === "system") {
28
28
  c.set("tenantId", tenantId);
29
- c.set("tenantRole", "owner");
29
+ c.set("tenantRole", OrgRoles.OWNER);
30
30
  await next();
31
31
  return;
32
32
  }
@@ -37,12 +37,12 @@ const requireTenantAccess = () => createMiddleware(async (c, next) => {
37
37
  message: "API key does not have access to this organization"
38
38
  });
39
39
  c.set("tenantId", tenantId);
40
- c.set("tenantRole", "owner");
40
+ c.set("tenantRole", OrgRoles.OWNER);
41
41
  await next();
42
42
  return;
43
43
  }
44
44
  try {
45
- const organizationAccess = (await getUserOrganizations(runDbClient_default)(userId)).find((org) => org.organizationId === tenantId);
45
+ const organizationAccess = (await getUserOrganizationsFromDb(runDbClient_default)(userId)).find((org) => org.organizationId === tenantId);
46
46
  if (!organizationAccess) throw createApiError({
47
47
  code: "forbidden",
48
48
  message: "Access denied to this organization"
@@ -38,6 +38,8 @@ type ManageAppVariables = AppVariables & {
38
38
  db: AgentsManageDatabaseClient;
39
39
  auth: ReturnType<typeof createAuth> | null;
40
40
  resolvedRef: ResolvedRef;
41
+ /** Cached by projectFull middleware to avoid duplicate DB lookup for PUT upsert */
42
+ isProjectCreate?: boolean;
41
43
  };
42
44
  type AppConfig = {
43
45
  serverConfig: ServerConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/agents-api",
3
- "version": "0.0.0-dev-20260123202200",
3
+ "version": "0.0.0-dev-20260123211824",
4
4
  "description": "Unified Inkeep Agents API - combines management, runtime, and evaluation capabilities",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {
@@ -71,8 +71,8 @@
71
71
  "openid-client": "^6.8.1",
72
72
  "pg": "^8.16.3",
73
73
  "workflow": "4.0.1-beta.33",
74
- "@inkeep/agents-core": "^0.0.0-dev-20260123202200",
75
- "@inkeep/agents-manage-mcp": "^0.0.0-dev-20260123202200"
74
+ "@inkeep/agents-core": "^0.0.0-dev-20260123211824",
75
+ "@inkeep/agents-manage-mcp": "^0.0.0-dev-20260123211824"
76
76
  },
77
77
  "peerDependencies": {
78
78
  "@hono/zod-openapi": "^1.1.5",