logicsrc/docs
Anthony Ettinger f057589d66 feat(credential-sharing): end-to-end-encrypted team credential sharing
Adds a `team` credential provider + team/member management so teammates can
share secrets by email instead of passing .env files over chat. Fully E2E:
the server only ever stores ciphertext, per-member sealed vault keys, and
public keys — it never sees a plaintext value or the vault DEK.

Plugin (@logicsrc/plugin-credential-sharing)
- crypto.ts: X25519 identity keys, per-vault DEK (secretbox), DEK sealed to
  each member's pubkey (crypto_box_seal), value encrypt/decrypt (libsodium)
- identity.ts: local ~/.logicsrc/identity.json (0600) holding the device key
  + API token; never uploads the secret key
- client.ts: typed /api/credshare client
- providers/team.ts: `team:<slug>/<vault>` CredentialProvider (inspect,
  readValues=decrypt, write=encrypt, rollback); fingerprints match env so
  env<->team diffs line up
- fixes latent libsodium-wrappers ESM load bug (createRequire) here + in
  github-secrets

Server (commandboard-api /api/credshare)
- zero-knowledge router: email-code auth, keys, teams, members, invites,
  vaults, sealed grants, ciphertext secrets, audit; membership authz in app
- CredShareStore abstraction: in-memory (dev/tests) + Supabase (prod)
- Resend email transport for login codes + invites (no-op -> echoes locally)
- supabase migration: credshare_* tables, deny-by-default RLS

CLI
- real `logicsrc login` (email code -> token + key upload)
- `logicsrc teams create/list/invite/accept/members/vaults/grant/push/pull`

Web (logicsrc.com/teams + /teams/accept)
- management surface only (browser holds no private key, never decrypts):
  login, view teams/members/vaults, invite, accept

Tests: crypto round-trip, server contract (invite->accept->push->grant->pull
+ authz boundaries), and a real HTTP+client+crypto E2E asserting the server
never holds plaintext. Full workspace build + tests green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 13:11:32 +00:00
..
openprd feat(openprd): revise standard to DIP-style numbered proposals (0.2) (#96) 2026-07-12 08:55:19 -07:00
agent-screening.md Add AgentByte screening plugin spec 2026-06-06 15:54:08 +00:00
agentad-marketplace.md feat(agentad): AgentAd Marketplace PRD + reference exchange (M5) 2026-07-01 10:29:36 +00:00
agentad.md feat(agentad): AgentAd Marketplace PRD + reference exchange (M5) 2026-07-01 10:29:36 +00:00
agentgit.md Add AgentGit M1: agent-native git layer over a Forgejo backend 2026-06-14 15:15:06 +00:00
agentstack.md feat(agentstack): add @logicsrc/agentstack coordination module (#5) 2026-06-10 16:39:32 -07:00
ans-sdk.md docs(ans): spec the @logicsrc/ans TypeScript SDK 2026-06-24 14:41:00 +00:00
arcade.md Add waiting arcade MVP 2026-06-06 22:09:22 +00:00
cli.md Add communication account plugin scaffolds 2026-06-09 10:02:07 +00:00
communication-accounts.md Add communication account plugin scaffolds 2026-06-09 10:02:07 +00:00
config.md Add waiting arcade MVP 2026-06-06 22:09:22 +00:00
credential-sharing.md feat(credential-sharing): end-to-end-encrypted team credential sharing 2026-07-13 13:11:32 +00:00
data-model.md Add communication account plugin scaffolds 2026-06-09 10:02:07 +00:00
openapi.yaml Add communication account plugin scaffolds 2026-06-09 10:02:07 +00:00
openprd.md feat(openprd): revise standard to DIP-style numbered proposals (0.2) (#96) 2026-07-12 08:55:19 -07:00
openspec-comparison.md feat(agentstack): add @logicsrc/agentstack coordination module (#5) 2026-06-10 16:39:32 -07:00
permissions.md Add communication account plugin scaffolds 2026-06-09 10:02:07 +00:00
plugins.md Add AgentGit M1: agent-native git layer over a Forgejo backend 2026-06-14 15:15:06 +00:00
positioning.md Add credential sharing openspec 2026-06-06 18:47:41 +00:00
roadmap.md Add communication account plugin scaffolds 2026-06-09 10:02:07 +00:00
tui.md Add waiting arcade MVP 2026-06-06 22:09:22 +00:00