Initial commit: Elydora Open Source — self-hosted audit platform for AI agents
Full self-hosted port of the Elydora tamper-evident audit protocol: - Hono API server with PostgreSQL, Redis, MinIO adapters - Ed25519 signed operations, chain hashing, Merkle epoch rollups - PBKDF2 password hashing, HMAC-SHA256 JWT, 5-role RBAC - Next.js management console - Node.js, Python, and Go SDKs - Docker Compose for local deployment - Helm chart for Kubernetes - Comprehensive security hardening and audit fixes applied Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
15547a8c35
commit
e390e68594
207 files changed
+32790
-63
No files matched your search
@@ -0,0 +1,390 @@
|
||||
{
|
||||
"common": {
|
||||
"dashboard": "Dashboard",
|
||||
"agents": "Agents",
|
||||
"operations": "Operations",
|
||||
"epochs": "Epochs",
|
||||
"auditTrail": "Audit Trail",
|
||||
"exports": "Exports",
|
||||
"jwks": "JWKS",
|
||||
"settings": "Settings",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete",
|
||||
"download": "Download",
|
||||
"continue": "Continue",
|
||||
"signOut": "Sign Out",
|
||||
"copy": "Copy",
|
||||
"copied": "Copied",
|
||||
"clickToCopy": "Click to copy",
|
||||
"viewAll": "View All",
|
||||
"home": "Home",
|
||||
"docs": "Docs",
|
||||
"console": "Console",
|
||||
"loading": "Loading...",
|
||||
"unknownError": "Unknown error.",
|
||||
"allData": "All data",
|
||||
"copyToClipboard": "Copy to clipboard",
|
||||
"copyJwks": "Copy JWKS",
|
||||
"links": "LINKS"
|
||||
},
|
||||
"sidebar": {
|
||||
"overview": "OVERVIEW",
|
||||
"management": "MANAGEMENT",
|
||||
"compliance": "COMPLIANCE",
|
||||
"system": "SYSTEM"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"subtitle": "Elydora accountability console overview",
|
||||
"totalAgents": "Total Agents",
|
||||
"registeredAgents": "Registered agents",
|
||||
"totalOperations": "Total Operations",
|
||||
"allRecordedOps": "All recorded operations",
|
||||
"activeEpochs": "Active Epochs",
|
||||
"merkleRollups": "Merkle rollup epochs",
|
||||
"pendingExports": "Pending Exports",
|
||||
"queuedOrRunning": "Queued or running",
|
||||
"quickActions": "Quick Actions",
|
||||
"registerAgent": "Register Agent",
|
||||
"viewOperations": "View Operations",
|
||||
"createExport": "Create Export",
|
||||
"recentOperations": "Recent Operations",
|
||||
"noOperations": "No operations recorded yet.",
|
||||
"agentSummary": "Agent Summary",
|
||||
"noAgentsRegistered": "No agents registered yet. Register an agent to start recording operations.",
|
||||
"latestActivity": "Latest Activity",
|
||||
"failedToLoad": "Failed to load dashboard data. Ensure the API is reachable.",
|
||||
"colOperationId": "Operation ID",
|
||||
"colAgent": "Agent",
|
||||
"colType": "Type",
|
||||
"colIssued": "Issued",
|
||||
"colSeq": "Seq"
|
||||
},
|
||||
"agents": {
|
||||
"title": "Agents",
|
||||
"subtitle": "Manage registered AI agents",
|
||||
"registerAgent": "Register Agent",
|
||||
"searchPlaceholder": "Search agents by ID...",
|
||||
"colAgent": "Agent",
|
||||
"colStatus": "Status",
|
||||
"colOperations": "Operations",
|
||||
"colLatestActivity": "Latest Activity",
|
||||
"emptyMessage": "No agents found. Register an agent to get started.",
|
||||
"failedToLoad": "Failed to load agents.",
|
||||
"deleteAgent": "Delete Agent",
|
||||
"deleteConfirmPre": "Are you sure you want to delete agent ",
|
||||
"deleteConfirmPost": "? This will permanently remove the agent and all its keys. This action cannot be undone.",
|
||||
"deleting": "Deleting...",
|
||||
"failedToDelete": "Failed to delete agent."
|
||||
},
|
||||
"agentDetail": {
|
||||
"title": "Agent Details",
|
||||
"agentId": "Agent ID",
|
||||
"status": "Status",
|
||||
"organization": "Organization",
|
||||
"displayName": "Display Name",
|
||||
"responsibleEntity": "Responsible Entity",
|
||||
"created": "Created",
|
||||
"keys": "Keys",
|
||||
"noKeys": "No keys registered for this agent.",
|
||||
"colKeyId": "Key ID",
|
||||
"colAlgorithm": "Algorithm",
|
||||
"colStatus": "Status",
|
||||
"colCreated": "Created",
|
||||
"revoke": "Revoke",
|
||||
"operations": "Operations",
|
||||
"freezeAgent": "Freeze Agent",
|
||||
"unfreezeAgent": "Unfreeze Agent",
|
||||
"freezeDescPre": "Freezing agent ",
|
||||
"freezeDescPost": " will prevent it from submitting new operations. This action is recorded in the audit trail.",
|
||||
"unfreezeDescPre": "Unfreezing agent ",
|
||||
"unfreezeDescPost": " will allow it to resume submitting operations. This action is recorded in the audit trail.",
|
||||
"reason": "Reason",
|
||||
"freezePlaceholder": "Provide a reason for freezing this agent...",
|
||||
"unfreezePlaceholder": "Provide a reason for unfreezing this agent...",
|
||||
"freezing": "Freezing...",
|
||||
"confirmFreeze": "Confirm Freeze",
|
||||
"unfreezing": "Unfreezing...",
|
||||
"confirmUnfreeze": "Confirm Unfreeze",
|
||||
"failedToFreeze": "Failed to freeze agent.",
|
||||
"failedToUnfreeze": "Failed to unfreeze agent.",
|
||||
"reasonRequired": "A reason is required.",
|
||||
"revokeKey": "Revoke Key",
|
||||
"revokeKeyDescPre": "Revoking key ",
|
||||
"revokeKeyDescPost": " will prevent it from being used to sign operations. This action cannot be undone.",
|
||||
"revokePlaceholder": "Provide a reason for revoking this key...",
|
||||
"revoking": "Revoking...",
|
||||
"confirmRevoke": "Confirm Revoke",
|
||||
"failedToRevoke": "Failed to revoke key.",
|
||||
"failedToLoad": "Failed to load agent.",
|
||||
"mayNotExist": "The agent may not exist.",
|
||||
"noOperations": "No operations recorded for this agent."
|
||||
},
|
||||
"operationDetail": {
|
||||
"title": "Operation Details",
|
||||
"failedToLoad": "Failed to load operation.",
|
||||
"mayNotExist": "The operation may not exist."
|
||||
},
|
||||
"operationCard": {
|
||||
"operationRecord": "Operation Record",
|
||||
"formatted": "Formatted",
|
||||
"rawJson": "Raw JSON",
|
||||
"operationId": "Operation ID",
|
||||
"agentId": "Agent ID",
|
||||
"orgId": "Org ID",
|
||||
"type": "Type",
|
||||
"issuedAt": "Issued At",
|
||||
"createdAt": "Created At",
|
||||
"ttlMs": "TTL (ms)",
|
||||
"nonce": "Nonce",
|
||||
"seqNo": "Seq No",
|
||||
"signingKey": "Signing Key",
|
||||
"payloadHash": "Payload Hash",
|
||||
"prevChainHash": "Prev Chain Hash",
|
||||
"chainHash": "Chain Hash",
|
||||
"r2PayloadKey": "R2 Payload Key",
|
||||
"payload": "Payload",
|
||||
"receipt": "Receipt (EAR)",
|
||||
"receiptId": "Receipt ID",
|
||||
"r2ReceiptKey": "R2 Receipt Key"
|
||||
},
|
||||
"operations": {
|
||||
"title": "Operations",
|
||||
"subtitle": "Browse and inspect recorded operations",
|
||||
"searchPlaceholder": "Search by ID, agent, or type...",
|
||||
"colOperationId": "Operation ID",
|
||||
"colAgent": "Agent",
|
||||
"colType": "Type",
|
||||
"colIssuedAt": "Issued At",
|
||||
"colSeq": "Seq",
|
||||
"agentIdFilter": "Agent ID",
|
||||
"filterByAgent": "Filter by agent",
|
||||
"typeFilter": "Type",
|
||||
"filterByType": "Filter by type",
|
||||
"emptyMessage": "No operations found matching your filters.",
|
||||
"failedToLoad": "Failed to load operations."
|
||||
},
|
||||
"epochs": {
|
||||
"title": "Epochs",
|
||||
"subtitle": "Periodic Merkle-tree rollups anchoring operations",
|
||||
"colEpochId": "Epoch ID",
|
||||
"colTimeRange": "Time Range",
|
||||
"colLeaves": "Leaves",
|
||||
"colRootHash": "Root Hash",
|
||||
"colCreated": "Created",
|
||||
"emptyMessage": "No epochs have been created yet. Epochs are generated periodically as operations are recorded.",
|
||||
"failedToLoad": "Failed to load epochs."
|
||||
},
|
||||
"epochDetail": {
|
||||
"title": "Epoch Details",
|
||||
"viewOperations": "View Operations",
|
||||
"epochMetadata": "Epoch Metadata",
|
||||
"epochId": "Epoch ID",
|
||||
"organization": "Organization",
|
||||
"startTime": "Start Time",
|
||||
"endTime": "End Time",
|
||||
"duration": "Duration",
|
||||
"durationMinutes": "{{count}} minutes",
|
||||
"createdAt": "Created At",
|
||||
"merkleTree": "Merkle Tree",
|
||||
"rootHash": "Root Hash",
|
||||
"leafCount": "Leaf Count",
|
||||
"operationsUnit": "operations",
|
||||
"tsaAnchor": "TSA Anchor",
|
||||
"tsaToken": "TSA Token",
|
||||
"tsaUrl": "TSA URL",
|
||||
"anchoredAt": "Anchored At",
|
||||
"noTsaAnchor": "No TSA anchor information available for this epoch.",
|
||||
"storage": "Storage",
|
||||
"r2EpochKey": "R2 Epoch Key",
|
||||
"failedToLoad": "Failed to load epoch.",
|
||||
"mayNotExist": "The epoch may not exist."
|
||||
},
|
||||
"audit": {
|
||||
"title": "Audit Trail",
|
||||
"subtitle": "Query and inspect the full audit log of operations",
|
||||
"exportData": "Export Data",
|
||||
"queryBuilder": "Query Builder",
|
||||
"clearFilters": "Clear Filters",
|
||||
"agentId": "Agent ID",
|
||||
"filterByAgent": "Filter by agent",
|
||||
"operationType": "Operation Type",
|
||||
"filterByType": "Filter by type",
|
||||
"startTime": "Start Time",
|
||||
"endTime": "End Time",
|
||||
"showing": "Showing {{shown}} of {{total}} results",
|
||||
"moreResults": "More results available",
|
||||
"colOperationId": "Operation ID",
|
||||
"colAgent": "Agent",
|
||||
"colType": "Type",
|
||||
"colIssuedAt": "Issued At",
|
||||
"colSeq": "Seq",
|
||||
"colChainHash": "Chain Hash",
|
||||
"emptyMessage": "No audit records match your query. Adjust your filters or clear them to see all records.",
|
||||
"failedToLoad": "Failed to load audit data."
|
||||
},
|
||||
"exports": {
|
||||
"title": "Exports",
|
||||
"subtitle": "Create and download compliance data exports",
|
||||
"createExport": "Create Export",
|
||||
"colExportId": "Export ID",
|
||||
"colStatus": "Status",
|
||||
"colFilters": "Filters",
|
||||
"colCreated": "Created",
|
||||
"colCompleted": "Completed",
|
||||
"emptyMessage": "No exports have been created yet. Create an export to download compliance data.",
|
||||
"failedToLoad": "Failed to load exports.",
|
||||
"startTime": "Start Time",
|
||||
"endTime": "End Time",
|
||||
"agentIdOptional": "Agent ID (optional)",
|
||||
"filterByAgent": "Filter by specific agent",
|
||||
"operationTypeOptional": "Operation Type (optional)",
|
||||
"filterByOperationType": "Filter by operation type",
|
||||
"format": "Format",
|
||||
"creating": "Creating...",
|
||||
"startEndRequired": "Start time and end time are required.",
|
||||
"failedToCreate": "Failed to create export."
|
||||
},
|
||||
"jwks": {
|
||||
"title": "JWKS",
|
||||
"subtitle": "JSON Web Key Set for token verification",
|
||||
"publicKeys": "Public Keys",
|
||||
"colKeyId": "Key ID",
|
||||
"colKeyType": "Key Type",
|
||||
"colAlgorithm": "Algorithm",
|
||||
"colCurve": "Curve",
|
||||
"colUse": "Use",
|
||||
"colPublicKey": "Public Key",
|
||||
"emptyMessage": "No JWKS keys available. The server may not have published any public keys.",
|
||||
"failedToLoad": "Failed to load JWKS.",
|
||||
"endpoint": "JWKS endpoint:"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"subtitle": "Account and organization details",
|
||||
"user": "User",
|
||||
"displayName": "Display Name",
|
||||
"email": "Email",
|
||||
"subject": "Subject",
|
||||
"role": "Role",
|
||||
"organization": "Organization",
|
||||
"organizationId": "Organization ID"
|
||||
},
|
||||
"login": {
|
||||
"signIn": "Sign in",
|
||||
"email": "Email",
|
||||
"emailPlaceholder": "you@company.com",
|
||||
"password": "Password",
|
||||
"signingIn": "Signing in...",
|
||||
"submitSignIn": "Sign In",
|
||||
"noAccount": "No account? ",
|
||||
"createOne": "Create one",
|
||||
"loginFailed": "Login failed"
|
||||
},
|
||||
"register": {
|
||||
"createAccount": "Create account",
|
||||
"orgName": "Organization Name",
|
||||
"orgPlaceholder": "Acme Corp",
|
||||
"displayName": "Display Name",
|
||||
"displayNamePlaceholder": "Jane Smith",
|
||||
"email": "Email",
|
||||
"emailPlaceholder": "you@company.com",
|
||||
"password": "Password",
|
||||
"passwordPlaceholder": "Minimum 8 characters",
|
||||
"creatingAccount": "Creating account...",
|
||||
"submitCreateAccount": "Create Account",
|
||||
"hasAccount": "Already have an account? ",
|
||||
"signIn": "Sign in",
|
||||
"registrationFailed": "Registration failed"
|
||||
},
|
||||
"agentRegistration": {
|
||||
"displayName": "Display Name",
|
||||
"displayNamePlaceholder": "My AI Agent",
|
||||
"displayNameRequired": "Display Name is required.",
|
||||
"responsibleEntity": "Responsible Entity (optional)",
|
||||
"responsibleEntityPlaceholder": "Person or team responsible",
|
||||
"submitting": "Registering...",
|
||||
"submit": "Register Agent",
|
||||
"failedToRegister": "Failed to register agent.",
|
||||
"agentRegistered": "Agent Registered",
|
||||
"privateKeySaveNow": "Private Key — Save This Now",
|
||||
"privateKeyWarning": "This will not be shown again. Store it as an environment variable or in a secrets manager.",
|
||||
"apiToken": "API Token",
|
||||
"apiTokenDesc": "Use this as your ELYDORA_TOKEN environment variable. This is your bearer token for API authentication.",
|
||||
"tokenExpiration": "Token Expiration",
|
||||
"customDays": "Number of days",
|
||||
"days": "days",
|
||||
"enterValidDays": "Enter a valid number of days (minimum 1).",
|
||||
"issuing": "Issuing...",
|
||||
"issueApiToken": "Issue API Token",
|
||||
"failedToIssueToken": "Failed to issue token.",
|
||||
"credAgentId": "Agent ID",
|
||||
"credKeyId": "Key ID",
|
||||
"credOrgId": "Org ID",
|
||||
"credAlgorithm": "Algorithm",
|
||||
"chooseIntegration": "Choose Integration",
|
||||
"chooseIntegrationDesc": "How will this agent connect to Elydora?",
|
||||
"supported": "Supported (one-command install)",
|
||||
"sdkIntegration": "SDK Integration",
|
||||
"install": "Install",
|
||||
"backToList": "Back",
|
||||
"sdkTutorial": "SDK Tutorial",
|
||||
"aiReadyPrompt": "AI-Ready Prompt",
|
||||
"aiReadyPromptDesc": "Copy this prompt and paste it into your AI agent to set up Elydora automatically.",
|
||||
"copyPrompt": "Copy Prompt",
|
||||
"done": "Done",
|
||||
"step": "Step {{current}} of {{total}}"
|
||||
},
|
||||
"chain": {
|
||||
"title": "Chain Visualization",
|
||||
"previous": "Previous",
|
||||
"current": "Current ({{id}})",
|
||||
"next": "Next",
|
||||
"pending": "Pending...",
|
||||
"chainBlock": "Chain block",
|
||||
"currentOperation": "Current operation"
|
||||
},
|
||||
"verification": {
|
||||
"title": "Verification",
|
||||
"verify": "Verify",
|
||||
"reVerify": "Re-verify",
|
||||
"verifying": "Verifying...",
|
||||
"verifiedSuccess": "Operation verified successfully",
|
||||
"verificationFailed": "Verification failed",
|
||||
"signature": "Signature",
|
||||
"signatureDesc": "Ed25519 signature is valid for the given public key",
|
||||
"chainCheck": "Chain",
|
||||
"chainCheckDesc": "Previous chain hash matches the expected value",
|
||||
"receiptCheck": "Receipt",
|
||||
"receiptCheckDesc": "Server receipt (EAR) is valid and matches the operation",
|
||||
"merkle": "Merkle",
|
||||
"merkleDesc": "Operation is included in the epoch Merkle tree",
|
||||
"pending": "Pending",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"errors": "Errors"
|
||||
},
|
||||
"tokenExpiration": {
|
||||
"24hours": "24 hours",
|
||||
"7days": "7 days",
|
||||
"1month": "1 month",
|
||||
"1year": "1 year",
|
||||
"custom": "Custom",
|
||||
"neverExpire": "Never expire"
|
||||
},
|
||||
"integrations": {
|
||||
"claudecode": "Anthropic CLI agent",
|
||||
"cursor": "AI-powered code editor",
|
||||
"gemini": "Google AI CLI agent",
|
||||
"kirocli": "AWS AI CLI agent",
|
||||
"kiroide": "AWS spec-driven AI IDE",
|
||||
"opencode": "Open-source TUI agent",
|
||||
"copilot": "GitHub Copilot CLI agent",
|
||||
"letta": "Letta AI CLI agent",
|
||||
"codex": "OpenAI CLI agent",
|
||||
"kimi": "Moonshot AI assistant",
|
||||
"enterprise": "Your own internal agent",
|
||||
"gui": "Desktop or web-based agent",
|
||||
"other": "Any custom integration"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user