Skip to content
Open
Show file tree
Hide file tree
Changes from 130 commits
Commits
Show all changes
320 commits
Select commit Hold shift + click to select a range
c0a1909
refactor(agent-vault): fold the remove-password action back into the …
saifsmailbox98 Sep 3, 2026
08f6ab6
fix(agent-vault): strip the implied :443 everywhere a host pattern is…
saifsmailbox98 Sep 3, 2026
e5c1f42
feat(agent-vault): sort the connections table and default both tables…
saifsmailbox98 Sep 3, 2026
d595a54
fix(agent-vault): grant the creator their new bundle, and match the h…
saifsmailbox98 Sep 3, 2026
dd38d46
fix(agent-vault): tint the shared access control page with the produc…
saifsmailbox98 Sep 3, 2026
5e3d469
feat(agent-vault): add product membership endpoints, mirroring PAM
saifsmailbox98 Sep 3, 2026
2c78778
feat(agent-vault): give Agent Vault its own Access Control page
saifsmailbox98 Sep 3, 2026
1063c6e
chore(agent-vault): stop adapting the shared access control page for …
saifsmailbox98 Sep 3, 2026
aa5da16
chore(agent-vault): restore the shared access control page to its ori…
saifsmailbox98 Sep 3, 2026
d1e52ca
refactor(agent-vault): name the access control tabs after what they hold
saifsmailbox98 Sep 3, 2026
b5b540e
fix(agent-vault): invalidate the generic caches an access control wri…
saifsmailbox98 Sep 3, 2026
fea1c89
chore(agent-vault): satisfy the lint gate
saifsmailbox98 Sep 3, 2026
518c98f
test(agent-vault): cover the product membership endpoints
saifsmailbox98 Sep 3, 2026
3f9c17a
refactor(agent-vault): pick the product role from radio cards, not a …
saifsmailbox98 Sep 3, 2026
a68b510
refactor(agent-vault): drop helper text that describes the implementa…
saifsmailbox98 Sep 3, 2026
ab2c366
refactor(agent-vault): say what the proxy settings do
saifsmailbox98 Sep 3, 2026
25fde2a
docs(agent-vault): describe bypass as the fallback it now is
saifsmailbox98 Sep 3, 2026
8d9f25b
docs(agent-vault): correct the bypass ordering in the schema comment …
saifsmailbox98 Sep 3, 2026
7efa2f9
docs(agent-vault): describe the bypass list as an exception to deny
saifsmailbox98 Sep 3, 2026
3f0df55
refactor(agent-vault): show bypass hosts only when the proxy denies
saifsmailbox98 Sep 3, 2026
2284679
refactor(agent-vault): move the poll interval explanation to a tooltip
saifsmailbox98 Sep 3, 2026
b1ff98a
fix(agent-vault): restore the proxy dialog's spacing
saifsmailbox98 Sep 3, 2026
0e7a909
refactor(agent-vault): drop implementation detail from the proxies pa…
saifsmailbox98 Sep 3, 2026
ac48677
feat(agent-vault): show the exact last-seen time on the proxy status …
saifsmailbox98 Sep 3, 2026
dfef505
fix(agent-vault): correct the bypass-host copy and explain it in a to…
saifsmailbox98 Sep 3, 2026
aa95024
refactor(agent-vault): surface the proxy save delay in an info alert
saifsmailbox98 Sep 3, 2026
b1b8358
refactor(agent-vault): say poll in the proxy save alert
saifsmailbox98 Sep 3, 2026
72a1a4d
refactor(agent-vault): cut the reissue dialog down to one sentence
saifsmailbox98 Sep 3, 2026
73bb2e9
fix(agent-vault): validate the poll interval through the form, not th…
saifsmailbox98 Sep 3, 2026
6759127
refactor(agent-vault): use one name for uncovered hosts
saifsmailbox98 Sep 3, 2026
1e3230e
refactor(agent-vault): add a CLI tab to the enrollment dialog and tri…
saifsmailbox98 Sep 3, 2026
e101326
fix(agent-vault): drop the Kubernetes enrollment snippet
saifsmailbox98 Sep 3, 2026
c2bc89e
docs(agent-vault): show how to keep the enrollment token off the comm…
saifsmailbox98 Sep 3, 2026
ec0fc15
refactor(agent-vault): say an hour in the enrollment dialog
saifsmailbox98 Sep 3, 2026
6af3567
refactor(agent-vault): drop the docs link from the enrollment dialog
saifsmailbox98 Sep 3, 2026
98a7feb
feat(agent-vault): add a Created column to the proxies table and sort…
saifsmailbox98 Sep 3, 2026
7bfd23b
refactor(agent-vault): explain the fingerprint on its column header
saifsmailbox98 Sep 3, 2026
e39e0cc
refactor(agent-vault): match the Users tab to its label and simplify …
saifsmailbox98 Sep 3, 2026
5ff3b49
feat(agent-vault): create machine identities from Access Control
saifsmailbox98 Sep 3, 2026
0ec4c63
refactor(agent-vault): say machine identity throughout its tab
saifsmailbox98 Sep 3, 2026
7143d3e
fix(agent-vault): stop a deactivated actor's session from resolving
saifsmailbox98 Sep 4, 2026
0cfd972
refactor(agent-vault): drop the resolve audit event and its change de…
saifsmailbox98 Sep 4, 2026
52bef56
docs(agent-vault): streaming responses are carried, not cut at 30 min…
saifsmailbox98 Sep 4, 2026
18523f6
docs(agent-vault): write the proxy as a host agents connect to
saifsmailbox98 Sep 4, 2026
05297dc
docs(agent-vault): say when the keychain step is skipped
saifsmailbox98 Sep 4, 2026
4da3295
fix(agent-vault): stop a member enumerating the product's rosters
saifsmailbox98 Sep 4, 2026
6d9eb59
fix(agent-vault): refuse a member who is not in the organization
saifsmailbox98 Sep 4, 2026
fa2c86d
docs(agent-vault): drop the last two lines that read as if bypass tun…
saifsmailbox98 Sep 4, 2026
597bbe2
docs(agent-vault): an internal host is a destination like any other
saifsmailbox98 Sep 4, 2026
47f76ee
fix(agent-vault): say what to send instead of 500ing on an empty edit
saifsmailbox98 Sep 4, 2026
cec63d2
docs(agent-vault): say that av run does not clean up a process tree
saifsmailbox98 Sep 4, 2026
9cb8813
fix(agent-vault): a heartbeat without a version keeps the last one
saifsmailbox98 Sep 4, 2026
c96b74c
refactor(agent-vault): drop the proxy version column
saifsmailbox98 Sep 4, 2026
4d751a2
refactor(agent-vault): keep the host pattern as typed, derive the can…
saifsmailbox98 Sep 4, 2026
858b0b2
docs(agent-vault): drop the whoami endpoint
saifsmailbox98 Sep 4, 2026
dee96a6
fix(agent-vault): cap the invite arrays at 100
saifsmailbox98 Sep 4, 2026
171ffe4
docs(agent-vault): correct nine claims against the shipped UI
saifsmailbox98 Sep 4, 2026
0fe4b27
style(agent-vault): sort the agentVault import where it belongs
saifsmailbox98 Sep 4, 2026
2276882
style(agent-vault): sort the orgDAL import
saifsmailbox98 Sep 4, 2026
dbe9dea
fix(agent-vault): narrow the predefined role list for Agent Vault only
saifsmailbox98 Sep 4, 2026
b06a067
fix(agent-vault): reap bundle grants when a user leaves the organization
saifsmailbox98 Sep 4, 2026
92ff892
fix(agent-vault): show product membership events on the audit page
saifsmailbox98 Sep 4, 2026
d6a7375
fix(agent-vault): require exactly one actor on a membership call
saifsmailbox98 Sep 4, 2026
56ca513
feat(agent-vault): name the actor in membership audit events
saifsmailbox98 Sep 5, 2026
36ead13
docs(agent-vault): say where to run the proxy, not what an attacker c…
saifsmailbox98 Sep 5, 2026
5d8f128
feat(agent-vault): name the actor and mark deleted bundles in the ses…
saifsmailbox98 Sep 5, 2026
3a7b753
chore(agent-vault): fix lint and vale failures
saifsmailbox98 Sep 5, 2026
e8afea5
fix(agent-vault): pick the cert manager project by type in the bdd bo…
saifsmailbox98 Sep 5, 2026
1737777
fix(agent-vault): match the cert manager project by slug in the bdd b…
saifsmailbox98 Sep 5, 2026
710a6f1
fix(agent-vault): correct the Anthropic and Gemini auth headers and d…
saifsmailbox98 Sep 5, 2026
d059970
fix(agent-vault): refuse a basic credential with neither half on a ty…
saifsmailbox98 Sep 5, 2026
a8c484e
docs(agent-vault): give Agent Vault its own icon and list it on the g…
saifsmailbox98 Sep 5, 2026
5f109f4
docs(agent-vault): lead with the dashboard-minted session token in th…
saifsmailbox98 Sep 5, 2026
a585ccc
fix(agent-vault): reject a header name the proxy could never send
saifsmailbox98 Sep 5, 2026
f3df436
docs(agent-vault): say the proxy stops serving a session, not just it…
saifsmailbox98 Sep 5, 2026
558d51c
fix(agent-vault): audit an invite-granted member under the product's …
saifsmailbox98 Sep 5, 2026
5877176
chore(agent-vault): drop two dead lines and surface the bare-wildcard…
saifsmailbox98 Sep 5, 2026
77340f6
fix(agent-vault): seal the basic-auth username with the password
saifsmailbox98 Sep 5, 2026
256a63a
fix(agent-vault): stop resolving once a time-limited role has lapsed
saifsmailbox98 Sep 5, 2026
e3289d3
fix(agent-vault): revoke a proxy through the shared revoke so pending…
saifsmailbox98 Sep 5, 2026
760d340
fix(agent-vault): say why a group-inherited member cannot be granted …
saifsmailbox98 Sep 5, 2026
9d25f2f
fix(agent-vault): compare an IPv4-mapped IPv6 pattern as the IPv4 hos…
saifsmailbox98 Sep 5, 2026
f19e11c
docs(agent-vault): describe what av run actually does with the enviro…
saifsmailbox98 Sep 5, 2026
484c65d
refactor(agent-vault): store bundle grants as resource-scoped members…
saifsmailbox98 Sep 6, 2026
437d3cf
refactor(agent-vault): stop computing reachable bundles where session…
saifsmailbox98 Sep 6, 2026
6529cc3
test(agent-vault): cover grants as memberships rows
saifsmailbox98 Sep 6, 2026
91fe720
docs(agent-vault): describe grants as memberships rows in the concept…
saifsmailbox98 Sep 6, 2026
0f6dcd7
test(agent-vault): build the real permission service inside the resol…
saifsmailbox98 Sep 6, 2026
09487b4
fix(agent-vault): list only active grant rows, as the count and the m…
saifsmailbox98 Sep 6, 2026
725ce85
refactor(agent-vault): order access control as users, machine identit…
saifsmailbox98 Sep 6, 2026
dbf9278
fix(agent-vault): drop the full-bleed separator above Grant Access
saifsmailbox98 Sep 6, 2026
6a7d924
fix(agent-vault): color the add machine identity submit with the prod…
saifsmailbox98 Sep 6, 2026
0db63e0
docs(agent-vault): leave the revoke timing to the revoke dialog
saifsmailbox98 Sep 6, 2026
842b064
fix(agent-vault): a group's grants count only while the group's role …
saifsmailbox98 Sep 6, 2026
dca1530
refactor(agent-vault): drop proxy talk from the connection sheet
saifsmailbox98 Sep 6, 2026
bfa8dfc
docs(agent-vault): describe the product roles without naming a project
saifsmailbox98 Sep 6, 2026
2562ca6
docs(agent-vault): match the sibling products' role wording
saifsmailbox98 Sep 6, 2026
f193e6c
fix(agent-vault): offer Agent Vault when inviting an org member
saifsmailbox98 Sep 6, 2026
4d84929
fix(agent-vault): fold bypass hosts into the unmatched hosts column
saifsmailbox98 Sep 6, 2026
3329316
fix(agent-vault): rename av run --token to --session-token
saifsmailbox98 Sep 7, 2026
291bfeb
fix(agent-vault): audit proxy enrollment as the proxy, not an unknown…
saifsmailbox98 Sep 7, 2026
50877fc
docs(agent-vault): a revoked or deleted proxy exits
saifsmailbox98 Sep 7, 2026
cb1b467
fix(agent-vault): mount the proxy's data directory in the Docker snippet
saifsmailbox98 Sep 7, 2026
c5abf0f
docs(agent-vault): rewrite for people setting it up
saifsmailbox98 Sep 7, 2026
d7ed09b
docs(agent-vault): match the voice of the Agent Proxy pages
saifsmailbox98 Sep 7, 2026
d25638c
docs(agent-vault): broker vocabulary on the concept pages, contractio…
saifsmailbox98 Sep 7, 2026
cd5edd0
docs(agent-vault): frame the product around what an agent needs, with…
saifsmailbox98 Sep 7, 2026
7b35cd5
docs(agent-vault): trim the overview to what, why, how, and where to …
saifsmailbox98 Sep 7, 2026
3217f9e
docs(agent-vault): align the overview diagram
saifsmailbox98 Sep 7, 2026
a0d3d42
docs(agent-vault): keep the overview to the pitch
saifsmailbox98 Sep 7, 2026
6eb818f
docs(agent-vault): overview speaks of Agent Vault, not a proxy, and k…
saifsmailbox98 Sep 7, 2026
f1e510c
docs(agent-vault): align the diagram labels
saifsmailbox98 Sep 7, 2026
e42ccf2
docs(agent-vault): contractions, for the Vale rule CI now enforces
saifsmailbox98 Sep 7, 2026
8a6f51a
docs(agent-vault): concept map covers the enroll actor, the proxy exi…
saifsmailbox98 Sep 7, 2026
4e6d8a2
docs(agent-vault): rewrite the concept map to what the code cannot say
saifsmailbox98 Sep 7, 2026
29c0125
chore(agent-vault): give the migration a real timestamp
saifsmailbox98 Sep 7, 2026
2f3f1ae
feat(agent-vault): one access bundle per session
saifsmailbox98 Sep 7, 2026
076e8b0
chore(agent-vault): cut the comments that only say what the code says
saifsmailbox98 Sep 7, 2026
8cfae76
docs(agent-vault): drop the audience callouts
saifsmailbox98 Sep 7, 2026
aa00bc1
test(agent-vault): keep the host grammar cases in each repo's own tests
saifsmailbox98 Sep 7, 2026
5486b3f
docs(agent-vault): say how to set up the machine identity that mints
saifsmailbox98 Sep 7, 2026
ef0f38d
fix(agent-vault): trim the access bundle dialog description
saifsmailbox98 Sep 7, 2026
a7ab742
refactor(frontend): put the org-scoped product switches behind one re…
saifsmailbox98 Sep 8, 2026
fd15ed5
fix(agent-vault): let non-members request access from the products page
saifsmailbox98 Sep 8, 2026
d17d0d1
fix(agent-vault): resolve the product and project on the access-restr…
saifsmailbox98 Sep 8, 2026
3e1f33d
fix(agent-vault): open the invite dialog for an access requester
saifsmailbox98 Sep 8, 2026
ae12546
fix(frontend): keep the requester callout as one sentence
saifsmailbox98 Sep 8, 2026
045d139
fix(frontend): match an access requester by username before email
saifsmailbox98 Sep 8, 2026
215448b
fix(agent-vault): don't re-select a requester the admin removed
saifsmailbox98 Sep 8, 2026
f319d5a
fix(frontend): don't offer to grant access a requester already has
saifsmailbox98 Sep 8, 2026
7e5b9df
Revert "fix(frontend): don't offer to grant access a requester alread…
saifsmailbox98 Sep 8, 2026
8b079bf
Revert "fix(agent-vault): don't re-select a requester the admin removed"
saifsmailbox98 Sep 8, 2026
2eec91c
Revert "fix(frontend): match an access requester by username before e…
saifsmailbox98 Sep 8, 2026
4d75fb6
Revert "fix(frontend): keep the requester callout as one sentence"
saifsmailbox98 Sep 8, 2026
1b8889c
Revert "fix(agent-vault): open the invite dialog for an access reques…
saifsmailbox98 Sep 8, 2026
b2b402d
Revert "fix(agent-vault): resolve the product and project on the acce…
saifsmailbox98 Sep 8, 2026
44e9a0a
Revert "fix(agent-vault): let non-members request access from the pro…
saifsmailbox98 Sep 8, 2026
f2eb459
Revert "refactor(frontend): put the org-scoped product switches behin…
saifsmailbox98 Sep 8, 2026
7c1a1b1
fix(agent-vault): let non-members request access from the products page
saifsmailbox98 Sep 8, 2026
22b2ec6
fix(agent-vault): resolve Agent Vault on the access-restricted page
saifsmailbox98 Sep 8, 2026
569faca
fix(agent-vault): open the invite dialog for an access requester
saifsmailbox98 Sep 8, 2026
2691c56
fix(agent-vault): pad brand logos in the connection icon stack
saifsmailbox98 Sep 8, 2026
c70c6a2
feat(agent-vault): grant an access bundle to several members at once
saifsmailbox98 Sep 8, 2026
d35f8a4
fix(agent-vault): validate proxy bypass hosts in the form
saifsmailbox98 Sep 8, 2026
70ceda8
fix(agent-vault): show unmatched host handling as plain text
saifsmailbox98 Sep 8, 2026
9863cd0
fix(frontend): require typed confirmation to revoke access
saifsmailbox98 Sep 8, 2026
1d69d94
fix(agent-vault): surface the enrollment token's one-time use and expiry
saifsmailbox98 Sep 8, 2026
24bb630
fix(agent-vault): surface the session command's one-time use
saifsmailbox98 Sep 8, 2026
d1f60d5
fix(agent-vault): show the proxy port in the session run command
saifsmailbox98 Sep 8, 2026
e9848a9
fix(agent-vault): trim the session run command hint
saifsmailbox98 Sep 8, 2026
537ee0b
fix(frontend): drop Agent Vault and PAM caches on org switch
saifsmailbox98 Sep 8, 2026
5e743ba
fix(agent-vault): scope its query keys to the organization
saifsmailbox98 Sep 8, 2026
27d20bb
fix(agent-vault): reword the connection review step hint
saifsmailbox98 Sep 8, 2026
b476552
fix(agent-vault): keep the Bearer header defaults when editing a conn…
saifsmailbox98 Sep 8, 2026
9657cb4
fix(agent-vault): show the credential preview in a code block
saifsmailbox98 Sep 8, 2026
e7f9c78
fix(agent-vault): preview the basic auth header too
saifsmailbox98 Sep 8, 2026
119496f
fix(agent-vault): let the credential fields reveal what was typed
saifsmailbox98 Sep 8, 2026
2ff8afd
fix(agent-vault): drop the secret filters from its audit log search
saifsmailbox98 Sep 8, 2026
60b55a9
fix(agent-vault): thread the transaction into the grant dedupe read
saifsmailbox98 Sep 8, 2026
2154905
fix(agent-vault): invalidate the identity table after create and delete
saifsmailbox98 Sep 8, 2026
73c83fd
fix(agent-vault): return 400 when a name collides on a race
saifsmailbox98 Sep 8, 2026
e050376
fix(agent-vault): mark invalid form fields on every input
saifsmailbox98 Sep 8, 2026
7cb0778
fix(agent-vault): allow filtering audit logs by proxy actor id
saifsmailbox98 Sep 8, 2026
777550c
fix(agent-vault): validate the user members request like PAM does
saifsmailbox98 Sep 8, 2026
5238d5a
fix(agent-vault): reject a heartbeat for a proxy that is gone
saifsmailbox98 Sep 8, 2026
d58a8bd
perf(agent-vault): drop two lookups from the proxy poll path
saifsmailbox98 Sep 8, 2026
9b51eae
refactor(agent-vault): name the member in the URL, not the body
saifsmailbox98 Sep 8, 2026
eebc5ca
docs(agent-vault): say what the resolve limit is actually sized for
saifsmailbox98 Sep 8, 2026
4fc1b37
fix(agent-vault): stop treating it as a project on the identity surfaces
saifsmailbox98 Sep 9, 2026
0e8a04c
fix(agent-vault): give the identity surfaces the product's own colour…
saifsmailbox98 Sep 9, 2026
4a27248
fix(agent-vault): restore the three membership guards lost in the cop…
saifsmailbox98 Sep 9, 2026
b47fcd3
fix(agent-vault): guard the access control page, not just the nav entry
saifsmailbox98 Sep 9, 2026
cbdedc7
feat(agent-vault): mint a session by naming the bundle, not its id
saifsmailbox98 Sep 9, 2026
bfd9606
fix(agent-vault): answer accurately on the access bundle routes
saifsmailbox98 Sep 9, 2026
4b18695
fix(agent-vault): close the small gaps around sessions and bundles
saifsmailbox98 Sep 9, 2026
501197b
refactor(agent-vault): say what the bundle list query adds, and where…
saifsmailbox98 Sep 9, 2026
5b1d2a9
fix(agent-vault): reject non admin/member roles on the generic member…
saifsmailbox98 Sep 9, 2026
83d89d3
fix(agent-vault): refuse the inputs that used to fail silently
saifsmailbox98 Sep 9, 2026
ef8682d
fix(agent-vault): call PAM by its product name in the role error
saifsmailbox98 Sep 9, 2026
2fa1e37
fix(agent-vault): make the surfaces say what is actually happening
saifsmailbox98 Sep 9, 2026
c67472a
fix(agent-vault): only offer a tooltip for the hosts that are not on …
saifsmailbox98 Sep 9, 2026
f5855a3
fix(agent-vault): say why a session stopped resolving
saifsmailbox98 Sep 9, 2026
6ab5f8e
fix(agent-vault): stop the product layout flashing ErrorPage on navig…
saifsmailbox98 Sep 9, 2026
ada90c7
refactor(agent-vault): resolve the implicit project id in one subscri…
saifsmailbox98 Sep 9, 2026
d18fe11
refactor(agent-vault): gate the org-scoped products on matches, like …
saifsmailbox98 Sep 9, 2026
0dc6b4d
fix(agent-vault): make the audit trail match what happened
saifsmailbox98 Sep 9, 2026
9008b6f
fix(agent-vault): keep what a delete or a rename should not take away
saifsmailbox98 Sep 9, 2026
4c91e3b
chore(agent-vault): sort the imports the new hook added
saifsmailbox98 Sep 9, 2026
d700b94
Merge remote-tracking branch 'origin/main' into agent-vault
saifsmailbox98 Sep 9, 2026
977df00
fix(agent-vault): search the whole list of sessions, not the page you…
saifsmailbox98 Sep 9, 2026
1c2fc24
fix(agent-vault): close the guards that could be walked past
saifsmailbox98 Sep 9, 2026
004c2fd
test(agent-vault): match the batch grant contract the members route m…
saifsmailbox98 Sep 9, 2026
4c5ccdc
test(agent-vault): add the outside-org user through the route that st…
saifsmailbox98 Sep 9, 2026
3aea027
fix(agent-vault): say what happened, and let delegated tokens in
saifsmailbox98 Sep 9, 2026
5b670d6
refactor(agent-vault): name the actor type in the field, not in a rule
saifsmailbox98 Sep 9, 2026
64fc80c
fix(agent-vault): judge a proxy by the interval it is running, not th…
saifsmailbox98 Sep 9, 2026
9b884e3
fix(agent-vault): put the generated proxy schema in migration order
saifsmailbox98 Sep 9, 2026
2769e8a
fix(agent-vault): bootstrap the project empty and let org admins join…
saifsmailbox98 Sep 9, 2026
4e429c0
feat(agent-vault): take a session lifetime as a duration, not one of …
saifsmailbox98 Sep 9, 2026
16c89ff
fix(agent-vault): tell a typo apart from an empty picker, and mark in…
saifsmailbox98 Sep 9, 2026
b8c3d26
fix(agent-vault): stop the access bundles page explaining itself twice
saifsmailbox98 Sep 9, 2026
a0273e3
docs(agent-vault): show the proxy URL an agent started without the CL…
saifsmailbox98 Sep 10, 2026
e04bff0
fix(agent-vault): stop putting Bearer in a header that never asked fo…
saifsmailbox98 Sep 10, 2026
8aaafdb
fix(agent-vault): send cmd+k to sessions, not a KMS overview URL
saifsmailbox98 Sep 10, 2026
1030dd7
fix(agent-vault): draw a loading tile per product, not five
saifsmailbox98 Sep 10, 2026
cfd7057
docs(agent-vault): one CA file per proxy, CA written before the session
saifsmailbox98 Sep 10, 2026
a5c6e32
fix(agent-vault): name the proxy-token rejection so the CLI can tell …
saifsmailbox98 Sep 10, 2026
38f29a2
docs(agent-vault): let the reader do the work, and say when a session…
saifsmailbox98 Sep 10, 2026
40d36cd
fix(agent-vault): reject control characters in the session search param
saifsmailbox98 Sep 10, 2026
3575fb5
docs(agent-vault): flags before env vars, and correct the grant body
saifsmailbox98 Sep 10, 2026
04b8da3
feat(agent-vault): make issuing a proxy enrollment token its own perm…
saifsmailbox98 Sep 10, 2026
8e06170
refactor(agent-vault): name the bundle-grant audit events after the r…
saifsmailbox98 Sep 10, 2026
0695258
docs(agent-vault): flatten the av reference and draw the flow with me…
saifsmailbox98 Sep 10, 2026
639670a
fix(agent-vault): join an org admin who invites with Agent Vault acce…
saifsmailbox98 Sep 10, 2026
f7d434f
refactor(agent-vault): one identity member list, at PAM's URL
saifsmailbox98 Sep 10, 2026
0f97649
fix(agent-vault): keep the last admin through the generic membership …
saifsmailbox98 Sep 10, 2026
719acd6
refactor(agent-vault): name the token route like gateway, relay and K…
saifsmailbox98 Sep 10, 2026
ef978f3
refactor(agent-vault): give both batch adds the same response shape
saifsmailbox98 Sep 10, 2026
be55b46
feat(agent-vault): list user and group members from the product API, …
saifsmailbox98 Sep 10, 2026
645523a
refactor(agent-vault): enroll a proxy through POST /proxy/login, shap…
saifsmailbox98 Sep 10, 2026
59717bb
docs(agent-vault): review round on the product docs
saifsmailbox98 Sep 10, 2026
c456735
fix(agent-vault): refuse a session whose actor has been deleted
saifsmailbox98 Sep 10, 2026
f004d96
fix(agent-vault): show the revoke session action as destructive
scott-ray-wilson Sep 11, 2026
f5151ff
feat(agent-vault): link session access bundle badges to the bundle
scott-ray-wilson Sep 11, 2026
6374924
fix(agent-vault): widen the session created dialog so the run command…
scott-ray-wilson Sep 11, 2026
5a6cea3
fix(agent-vault): name the reason a custom session TTL is rejected
scott-ray-wilson Sep 11, 2026
0fee2c3
fix(agent-vault): give every action menu an icon, and mark the destru…
scott-ray-wilson Sep 11, 2026
e5b957e
fix(agent-vault): mark the access control remove actions as destructive
scott-ray-wilson Sep 11, 2026
0d4670c
fix(agent-vault): use the product icon on the managed-by badge
scott-ray-wilson Sep 11, 2026
3d7c58c
fix(agent-vault): use the product icon on the identity details manage…
scott-ray-wilson Sep 11, 2026
bd9a0a0
fix(agent-vault): keep long names from stretching the access control …
scott-ray-wilson Sep 11, 2026
09e770a
fix(agent-vault): match the bundle list actions to the detail page
scott-ray-wilson Sep 11, 2026
c6e6c7c
fix(agent-vault): stop the access control tables leaving a dead gap
scott-ray-wilson Sep 11, 2026
8203f19
fix(agent-vault): truncate long bundle descriptions in the list
scott-ray-wilson Sep 11, 2026
7295f61
fix(agent-vault): use an ID card icon for sessions
scott-ray-wilson Sep 11, 2026
c7adcb4
fix(agent-vault): add a plus icon to the create session button
scott-ray-wilson Sep 11, 2026
6857cc3
fix(agent-vault): stack the bundle connections as shaded chips
scott-ray-wilson Sep 11, 2026
e45e549
fix(agent-vault): keep the connection chip ring on the row hover color
scott-ray-wilson Sep 11, 2026
3494ed9
fix(agent-vault): open session creation in a dialog
scott-ray-wilson Sep 11, 2026
6ec24b4
fix(agent-vault): confirm bundle access revocation with a click
scott-ray-wilson Sep 11, 2026
e7160a9
fix(agent-vault): keep the manage-access empty state at content height
scott-ray-wilson Sep 11, 2026
49d307d
fix(agent-vault): confirm session revocation by typing revoke
scott-ray-wilson Sep 11, 2026
a38f2ad
fix(frontend): gate the command menu on the implicit product, not the…
saifsmailbox98 Sep 10, 2026
b015a56
docs(agent-vault): show the three enrollment snippets, not just the C…
saifsmailbox98 Sep 10, 2026
7331837
refactor(agent-vault): drop PRODUCT from the membership audit event keys
saifsmailbox98 Sep 11, 2026
395ee64
docs(agent-vault): give Agent Vault its own access control page
saifsmailbox98 Sep 11, 2026
1eb7312
docs(agent-vault): say access bundle and create a session, and add th…
saifsmailbox98 Sep 11, 2026
579f18f
fix(agent-vault): use the ID card icon for sessions in the command me…
saifsmailbox98 Sep 11, 2026
5502591
Merge remote-tracking branch 'origin/main' into agent-vault
saifsmailbox98 Sep 11, 2026
4f90b31
fix(agent-vault): make the membership test's transaction mock callable
saifsmailbox98 Sep 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ Run `make lint-docs-branch` after any change under `docs/`. It runs [Vale](https

Auth modes (JWT, IDENTITY_ACCESS_TOKEN, SCIM_TOKEN) are extracted in `backend/src/server/plugins/auth/`. Authorization uses CASL (`@casl/ability`) with project-level and org-level permission checks — see `backend/CLAUDE.md` for backend details and `frontend/CLAUDE.md` for frontend permission hooks/HOCs. Note: `API_KEY` and `SERVICE_TOKEN` auth modes are deprecated — do not use them in new code.

### Org-Scoped Products

PAM and Agent Vault are products over one implicit project per organization, not projects a user creates. Their URLs are `/organizations/$orgId/<product>/…` with no `$projectId`, the frontend resolves the project from the org (`useImplicitProjectId`), the backend bootstraps it lazily and blocks generic create and delete, their roles are admin or member only, and each has its own metered identities dimension (`pam_identities`, `agent_vault_identities`). When you add a `ProjectType.PAM` arm anywhere, add the Agent Vault arm beside it. See `backend/src/ee/services/pam/CLAUDE.md` and `backend/src/ee/services/agent-vault/CLAUDE.md`.

### Service Factory + Manual DI (Backend)

No IoC container in either backend. Every service is a factory function with explicit dependencies.
Expand Down
4 changes: 3 additions & 1 deletion backend/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ Uses CASL (`@casl/ability`) with MongoDB-style rules. Permission logic lives in

**Project permission actions** include standard CRUD plus specialized ones like `DescribeSecret` (see metadata without value), `ReadValue`, `GrantPrivileges`, `AssumePrivileges`, `Lease` (for dynamic secrets). See `ProjectPermissionActions`, `ProjectPermissionSecretActions`, `ProjectPermissionDynamicSecretActions`, and `ProjectPermissionIdentityActions` enums in `project-permission.ts`.

Built-in roles: `Admin`, `Member`, `Viewer`, `NoAccess`. Custom roles use unpacked CASL rules stored in the database. Rules can include conditions with operators `$IN`, `$EQ`, `$NEQ`, `$GLOB` (for pattern matching like `prod-*`). See `PermissionConditionSchema` in `permission-types.ts`.
Built-in roles: `Admin`, `Member`, `Viewer`, `NoAccess`. For PAM and Agent Vault `getPredefinedRoles` (`project-role-fns.ts`) returns only `Admin` and `Member`, because their permission dispatch resolves every other slug to the member set; the role factory delegates to that one function, so every role picker follows. Custom roles use unpacked CASL rules stored in the database. Rules can include conditions with operators `$IN`, `$EQ`, `$NEQ`, `$GLOB` (for pattern matching like `prod-*`). See `PermissionConditionSchema` in `permission-types.ts`.

**Project permission caching** uses a fingerprint-based two-tier cache (`withCacheFingerprint` in `src/lib/cache/with-cache.ts`):
- **Short-lived marker** (10s TTL) in Redis — while present, cached data is served with 0 DB reads.
Expand Down Expand Up @@ -626,6 +626,8 @@ EE routes register before community routes so they can override/extend endpoints

**PAM**: Before working on any `pam-*` service or router, read [`src/ee/services/pam/CLAUDE.md`](src/ee/services/pam/CLAUDE.md) for a high-level map of the PAM backend — module layout, permission model, and non-obvious invariants. It is intentionally a concept map, not a spec: read the referenced code for implementation detail. If you add a feature, keep any addition there brief (a concept or invariant, not code mechanics).

**Agent Vault**: the same applies to the `agent-vault-*` services and routers; the concept map is [`src/ee/services/agent-vault/CLAUDE.md`](src/ee/services/agent-vault/CLAUDE.md). PAM and Agent Vault are the two **org-scoped products**: one implicit project per org, resolved lazily, whose roles collapse to admin or member. Anything that branches on `ProjectType.PAM` (metering emits, predefined roles, the billable-project count, invite grants) almost always needs an Agent Vault arm too.

### Server Plugins

Key plugins in `src/server/plugins/`:
Expand Down
834 changes: 834 additions & 0 deletions backend/e2e-test/routes/v1/agent-vault.spec.ts

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions backend/src/@types/fastify.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ import { TUsers } from "@app/db/schemas";
import { TAccessApprovalPolicyServiceFactory } from "@app/ee/services/access-approval-policy/access-approval-policy-types";
import { TAccessApprovalRequestServiceFactory } from "@app/ee/services/access-approval-request/access-approval-request-types";
import { TAgentProxyCaServiceFactory } from "@app/ee/services/agent-proxy-ca/agent-proxy-ca-service";
import { TAgentVaultAccessBundleServiceFactory } from "@app/ee/services/agent-vault-access-bundle/agent-vault-access-bundle-service";
import { TAgentVaultMembershipCleanupServiceFactory } from "@app/ee/services/agent-vault-member/agent-vault-membership-cleanup-service";
import { TAgentVaultMembershipServiceFactory } from "@app/ee/services/agent-vault-member/agent-vault-membership-service";
import { TAgentVaultProjectResolverFactory } from "@app/ee/services/agent-vault-project/agent-vault-project-resolver";
import { TAgentVaultProxyServiceFactory } from "@app/ee/services/agent-vault-proxy/agent-vault-proxy-service";
import { TAgentVaultSessionServiceFactory } from "@app/ee/services/agent-vault-session/agent-vault-session-service";
import { TAssumePrivilegeServiceFactory } from "@app/ee/services/assume-privilege/assume-privilege-types";
import { TAuditLogServiceFactory, TCreateAuditLogDTO } from "@app/ee/services/audit-log/audit-log-types";
import { TAuditLogStreamServiceFactory } from "@app/ee/services/audit-log-stream/audit-log-stream-service";
Expand Down Expand Up @@ -277,6 +283,7 @@ declare module "fastify" {
auditLogInfo: Pick<TCreateAuditLogDTO, "userAgent" | "userAgentType" | "ipAddress" | "actor" | "orgId">;
internalCertManagerProjectId: string;
internalPamProjectId: string;
internalAgentVaultProjectId: string;
ssoConfig: Awaited<ReturnType<TSamlConfigServiceFactory["getSaml"]>>;
ldapConfig: Awaited<ReturnType<TLdapConfigServiceFactory["getLdapCfg"]>> & {
allowedFields?: TAllowedFields[];
Expand Down Expand Up @@ -359,6 +366,12 @@ declare module "fastify" {
pkiApplicationEnrollment: TPkiApplicationEnrollmentServiceFactory;
certManagerProjectResolver: TCertManagerProjectResolverFactory;
pamProjectResolver: TPamProjectResolverFactory;
agentVaultProjectResolver: TAgentVaultProjectResolverFactory;
agentVaultAccessBundle: TAgentVaultAccessBundleServiceFactory;
agentVaultProxy: TAgentVaultProxyServiceFactory;
agentVaultSession: TAgentVaultSessionServiceFactory;
agentVaultMembershipCleanup: TAgentVaultMembershipCleanupServiceFactory;
agentVaultMembership: TAgentVaultMembershipServiceFactory;
certManagerInstance: TCertManagerInstanceServiceFactory;
certManagerExport: TCertManagerExportServiceFactory;
certificateAuthority: TCertificateAuthorityServiceFactory;
Expand Down
48 changes: 48 additions & 0 deletions backend/src/@types/knex.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,24 @@ import {
TAdditionalPrivileges,
TAdditionalPrivilegesInsert,
TAdditionalPrivilegesUpdate,
TAgentVaultAccessBundleMembers,
TAgentVaultAccessBundleMembersInsert,
TAgentVaultAccessBundleMembersUpdate,
TAgentVaultAccessBundles,
TAgentVaultAccessBundlesInsert,
TAgentVaultAccessBundlesUpdate,
TAgentVaultConnections,
TAgentVaultConnectionsInsert,
TAgentVaultConnectionsUpdate,
TAgentVaultProxies,
TAgentVaultProxiesInsert,
TAgentVaultProxiesUpdate,
TAgentVaultSessionAccessBundles,
TAgentVaultSessionAccessBundlesInsert,
TAgentVaultSessionAccessBundlesUpdate,
TAgentVaultSessions,
TAgentVaultSessionsInsert,
TAgentVaultSessionsUpdate,
TAlertChannelMemberships,
TAlertChannelMembershipsInsert,
TAlertChannelMembershipsUpdate,
Expand Down Expand Up @@ -1760,6 +1778,36 @@ declare module "knex/types/tables" {
>;
[TableName.PamDomain]: KnexOriginal.CompositeTableType<TPamDomains, TPamDomainsInsert, TPamDomainsUpdate>;
[TableName.PamAccount]: KnexOriginal.CompositeTableType<TPamAccounts, TPamAccountsInsert, TPamAccountsUpdate>;
[TableName.AgentVaultAccessBundle]: KnexOriginal.CompositeTableType<
TAgentVaultAccessBundles,
TAgentVaultAccessBundlesInsert,
TAgentVaultAccessBundlesUpdate
>;
[TableName.AgentVaultConnection]: KnexOriginal.CompositeTableType<
TAgentVaultConnections,
TAgentVaultConnectionsInsert,
TAgentVaultConnectionsUpdate
>;
[TableName.AgentVaultAccessBundleMember]: KnexOriginal.CompositeTableType<
TAgentVaultAccessBundleMembers,
TAgentVaultAccessBundleMembersInsert,
TAgentVaultAccessBundleMembersUpdate
>;
[TableName.AgentVaultSession]: KnexOriginal.CompositeTableType<
TAgentVaultSessions,
TAgentVaultSessionsInsert,
TAgentVaultSessionsUpdate
>;
[TableName.AgentVaultSessionAccessBundle]: KnexOriginal.CompositeTableType<
TAgentVaultSessionAccessBundles,
TAgentVaultSessionAccessBundlesInsert,
TAgentVaultSessionAccessBundlesUpdate
>;
[TableName.AgentVaultProxy]: KnexOriginal.CompositeTableType<
TAgentVaultProxies,
TAgentVaultProxiesInsert,
TAgentVaultProxiesUpdate
>;
[TableName.PamAccountPolicy]: KnexOriginal.CompositeTableType<
TPamAccountPolicies,
TPamAccountPoliciesInsert,
Expand Down
Loading
Loading