agentauthlayer 0.1.8__tar.gz → 0.1.9__tar.gz

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 (115) hide show
  1. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/PKG-INFO +1 -1
  2. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/cli.py +35 -1
  3. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/client.py +14 -0
  4. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agentauthlayer.egg-info/PKG-INFO +1 -1
  5. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_user_repo.py +16 -4
  6. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/pyproject.toml +1 -1
  7. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/MANIFEST.in +0 -0
  8. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/README.md +0 -0
  9. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/__init__.py +0 -0
  10. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/__main__.py +0 -0
  11. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/agents.py +0 -0
  12. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/audit.py +0 -0
  13. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/auth.py +0 -0
  14. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/context.py +0 -0
  15. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/core.py +0 -0
  16. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/credentials.py +0 -0
  17. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/delegation.py +0 -0
  18. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/exceptions.py +0 -0
  19. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/models.py +0 -0
  20. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/policy.py +0 -0
  21. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/policy_service.py +0 -0
  22. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/principals.py +0 -0
  23. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/registry.py +0 -0
  24. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/runtime.py +0 -0
  25. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/server_runtime.py +0 -0
  26. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/session.py +0 -0
  27. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/storage.py +0 -0
  28. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/tokens.py +0 -0
  29. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/users.py +0 -0
  30. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/assets/index-BBJ7rinV.css +0 -0
  31. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/assets/index-DXUoW2DG.js +0 -0
  32. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/favicon.ico +0 -0
  33. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/grid.svg +0 -0
  34. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/index.html +0 -0
  35. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/placeholder.svg +0 -0
  36. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth/web_dist/robots.txt +0 -0
  37. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agent_auth_definitive_guide.pdf +0 -0
  38. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agentauthlayer.egg-info/SOURCES.txt +0 -0
  39. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agentauthlayer.egg-info/dependency_links.txt +0 -0
  40. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agentauthlayer.egg-info/entry_points.txt +0 -0
  41. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agentauthlayer.egg-info/requires.txt +0 -0
  42. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/agentauthlayer.egg-info/top_level.txt +0 -0
  43. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/__init__.py +0 -0
  44. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/__init__.py +0 -0
  45. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/__init__.py +0 -0
  46. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/agents.py +0 -0
  47. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/audit.py +0 -0
  48. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/auth.py +0 -0
  49. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/bootstrap.py +0 -0
  50. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/health.py +0 -0
  51. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/policy.py +0 -0
  52. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/projects.py +0 -0
  53. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/tokens.py +0 -0
  54. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/api/routes/users.py +0 -0
  55. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/core/__init__.py +0 -0
  56. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/core/config.py +0 -0
  57. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/core/db.py +0 -0
  58. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/core/errors.py +0 -0
  59. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/core/logging.py +0 -0
  60. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/dependencies/__init__.py +0 -0
  61. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/dependencies/auth.py +0 -0
  62. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/dependencies/security.py +0 -0
  63. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/dependencies/user.py +0 -0
  64. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/domain/__init__.py +0 -0
  65. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/domain/enums.py +0 -0
  66. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/domain/models.py +0 -0
  67. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/main.py +0 -0
  68. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/middleware/__init__.py +0 -0
  69. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/middleware/correlation.py +0 -0
  70. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/__init__.py +0 -0
  71. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/agent_repo.py +0 -0
  72. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/audit_repo.py +0 -0
  73. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/constraint_repo.py +0 -0
  74. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/contracts.py +0 -0
  75. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/delegation_repo.py +0 -0
  76. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/project_repo.py +0 -0
  77. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/role_repo.py +0 -0
  78. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_agent_repo.py +0 -0
  79. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_audit_repo.py +0 -0
  80. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_constraint_repo.py +0 -0
  81. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_delegation_repo.py +0 -0
  82. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_permission_repo.py +0 -0
  83. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_project_repo.py +0 -0
  84. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_role_repo.py +0 -0
  85. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/sqlite_token_repo.py +0 -0
  86. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/token_repo.py +0 -0
  87. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/repositories/user_repo.py +0 -0
  88. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/__init__.py +0 -0
  89. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/agent.py +0 -0
  90. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/audit.py +0 -0
  91. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/auth.py +0 -0
  92. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/bootstrap.py +0 -0
  93. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/device_agents.py +0 -0
  94. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/policy.py +0 -0
  95. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/project.py +0 -0
  96. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/token.py +0 -0
  97. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/schemas/user.py +0 -0
  98. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/__init__.py +0 -0
  99. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/agent_service.py +0 -0
  100. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/audit_service.py +0 -0
  101. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/device_agent_service.py +0 -0
  102. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/policy_service.py +0 -0
  103. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/project_service.py +0 -0
  104. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/token_service.py +0 -0
  105. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/auth_app/services/user_service.py +0 -0
  106. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/setup.cfg +0 -0
  107. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_agent_auth_library.py +0 -0
  108. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_auth_flow.py +0 -0
  109. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_core_first_boundary.py +0 -0
  110. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_health.py +0 -0
  111. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_iam_policy.py +0 -0
  112. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_project_flow.py +0 -0
  113. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_sqlite_repos.py +0 -0
  114. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_storage.py +0 -0
  115. {agentauthlayer-0.1.8 → agentauthlayer-0.1.9}/tests/test_tool_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentauthlayer
3
- Version: 0.1.8
3
+ Version: 0.1.9
4
4
  Summary: Library-first authentication and authorization SDK for AI agents
5
5
  Author: Vaibhav Ahluwalia
6
6
  License: MIT
@@ -6,6 +6,7 @@ import importlib
6
6
  import json
7
7
  import sys
8
8
  import webbrowser
9
+ from pathlib import Path
9
10
 
10
11
  import requests
11
12
 
@@ -125,6 +126,11 @@ def logout_command(args) -> int:
125
126
 
126
127
  def sync_command(args) -> int:
127
128
  clear_registries()
129
+
130
+ cwd = str(Path.cwd())
131
+ if cwd not in sys.path:
132
+ sys.path.insert(0, cwd)
133
+
128
134
  importlib.import_module(args.module)
129
135
 
130
136
  client = AuthAPIClient()
@@ -145,11 +151,12 @@ def sync_command(args) -> int:
145
151
  owner=agent.owner,
146
152
  role=agent.role,
147
153
  scopes=agent.scopes,
148
- project_id=agent.project_id,
154
+ project_id=args.project or agent.project_id,
149
155
  ))
150
156
 
151
157
  print(json.dumps({
152
158
  'module': args.module,
159
+ 'project': args.project,
153
160
  'synced_tools': [tool.action for tool in tools],
154
161
  'synced_agents': [agent['agent_id'] for agent in created_agents],
155
162
  }, indent=2))
@@ -163,6 +170,20 @@ def delete_agent_command(args) -> int:
163
170
  return 0
164
171
 
165
172
 
173
+ def project_list_command(args) -> int:
174
+ client = AuthAPIClient()
175
+ projects = client.list_projects()
176
+ print(json.dumps(projects, indent=2))
177
+ return 0
178
+
179
+
180
+ def project_create_command(args) -> int:
181
+ client = AuthAPIClient()
182
+ project = client.create_project(args.project_id, args.name, args.description or "")
183
+ print(json.dumps(project, indent=2))
184
+ return 0
185
+
186
+
166
187
  def ui_command(args) -> int:
167
188
  creds = load_credentials() or {}
168
189
  base_url = (args.base_url or creds.get('base_url') or DEFAULT_BASE_URL).rstrip('/')
@@ -230,8 +251,21 @@ def main():
230
251
 
231
252
  sync_parser = subparsers.add_parser('sync', help='Import a module and sync its registered tools and agents')
232
253
  sync_parser.add_argument('--module', required=True)
254
+ sync_parser.add_argument('--project', help='Override the project_id used when creating synced agents')
233
255
  sync_parser.set_defaults(func=sync_command)
234
256
 
257
+ project_parser = subparsers.add_parser('project', help='Manage projects from the CLI')
258
+ project_subparsers = project_parser.add_subparsers(dest='project_command')
259
+
260
+ project_list_parser = project_subparsers.add_parser('list', help='List available projects')
261
+ project_list_parser.set_defaults(func=project_list_command)
262
+
263
+ project_create_parser = project_subparsers.add_parser('create', help='Create a project')
264
+ project_create_parser.add_argument('--project-id', required=True)
265
+ project_create_parser.add_argument('--name', required=True)
266
+ project_create_parser.add_argument('--description')
267
+ project_create_parser.set_defaults(func=project_create_command)
268
+
235
269
  delete_agent_parser = subparsers.add_parser('delete-agent', help='Delete an agent by ID')
236
270
  delete_agent_parser.add_argument('agent_id')
237
271
  delete_agent_parser.set_defaults(func=delete_agent_command)
@@ -68,6 +68,10 @@ class AuthAPIClient:
68
68
  raise PermissionDeniedError(detail or "Permission denied")
69
69
  if response.status_code == 404 and path.startswith("/agents/"):
70
70
  raise AgentNotFoundError(detail or "Agent not found")
71
+ if response.status_code == 404 and path == "/agents" and detail and "Project not found" in detail:
72
+ raise AuthServiceError(
73
+ "Project not found. Create the project in the Agent Auth UI first, or update your agent's project_id to match an existing project."
74
+ )
71
75
  raise AuthServiceError(detail or f"Request failed with status {response.status_code}")
72
76
 
73
77
  def health(self) -> dict[str, Any]:
@@ -88,6 +92,16 @@ class AuthAPIClient:
88
92
  payload["project_id"] = project_id
89
93
  return self._request("POST", "/agents", json=payload)
90
94
 
95
+ def list_projects(self) -> list[dict[str, Any]]:
96
+ return self._request("GET", "/projects")
97
+
98
+ def create_project(self, project_id: str, name: str, description: str = "") -> dict[str, Any]:
99
+ return self._request(
100
+ "POST",
101
+ "/projects",
102
+ json={"project_id": project_id, "name": name, "description": description},
103
+ )
104
+
91
105
  def delete_agent(self, agent_id: str) -> dict[str, Any]:
92
106
  return self._request("DELETE", f"/agents/{agent_id}")
93
107
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentauthlayer
3
- Version: 0.1.8
3
+ Version: 0.1.9
4
4
  Summary: Library-first authentication and authorization SDK for AI agents
5
5
  Author: Vaibhav Ahluwalia
6
6
  License: MIT
@@ -58,14 +58,26 @@ class SQLiteUserRepository(UserRepositoryProtocol):
58
58
  return None
59
59
 
60
60
  def set_admin_hash(self, password_hash: str) -> None:
61
- user = self.get_user_by_email('admin@agent-auth.local')
62
- if user:
61
+ primary_email = 'admin@agentauth.dev'
62
+ legacy_email = 'admin@agent-auth.local'
63
+
64
+ primary_user = self.get_user_by_email(primary_email)
65
+ legacy_user = self.get_user_by_email(legacy_email)
66
+
67
+ if primary_user:
63
68
  self._conn.execute(
64
69
  "UPDATE users SET password_hash = ? WHERE email = ?",
65
- (password_hash, 'admin@agent-auth.local')
70
+ (password_hash, primary_email)
66
71
  )
67
72
  else:
68
- self.create_user('admin@agent-auth.local', password_hash, 'admin')
73
+ self.create_user(primary_email, password_hash, 'admin')
74
+
75
+ if legacy_user:
76
+ self._conn.execute(
77
+ "UPDATE users SET password_hash = ? WHERE email = ?",
78
+ (password_hash, legacy_email)
79
+ )
80
+
69
81
  self._conn.commit()
70
82
 
71
83
  def create_user(self, email: str, password_hash: str, role: str, invited_by: str | None = None) -> User:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agentauthlayer"
7
- version = "0.1.8"
7
+ version = "0.1.9"
8
8
  description = "Library-first authentication and authorization SDK for AI agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
File without changes
File without changes