* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
25 KiB
Compliance & Audit (ខ្មែរ)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
ប្រភពយោងចម្បង:
src/lib/compliance/,src/app/api/compliance/បានធ្វើបច្ចុប្បន្នភាពចុងក្រោយ: 2026-06-28 — v3.8.40
OmniRoute កត់ត្រាសកម្មភាពរដ្ឋបាល ព្រឹត្តិការណ៍ផ្ទៀងផ្ទាត់អត្តសញ្ញាណ ការផ្លាស់ប្តូរវដ្តជីវិតព័ត៌មានសម្ងាត់របស់អ្នកផ្តល់សេវា និងការហៅប្រើឧបករណ៍ MCP ទៅក្នុងតារាងសវនកម្មដែលគាំទ្រដោយ SQLite។ ទំព័រនេះពន្យល់អំពីអ្វីដែលត្រូវបានកត់ត្រា ទីតាំងដែលទិន្នន័យត្រូវបានរក្សាទុក រយៈពេលរក្សាទុក របៀបដែល API keys អាចជ្រើសរើសមិនចូលរួម និងរបៀបសួររកទិន្នន័យ។
ការអនុវត្តមាននៅក្នុង src/lib/compliance/index.ts (T-43 — "ការគ្រប់គ្រងអនុលោមភាព") និង src/lib/compliance/providerAudit.ts។ ការសរសេរទិន្នន័យសវនកម្មមិនបង្កើតកំហុសដែលត្រូវបោះចេញទេ៖ នៅពេលមានបរាជ័យណាមួយ ការហៅនោះត្រូវបានរំលងដោយស្ងាត់ស្ងៀម ដើម្បីកុំឱ្យការកត់ត្រាសវនកម្មបង្អាក់លំហូរសំណើចម្បង។
អ្វីដែលត្រូវបានកត់ត្រា
ព្រឹត្តិការណ៍សវនកម្មរដ្ឋបាល (audit_log)
រាល់ការហៅទៅកាន់ logAuditEvent({ action, actor, target, details, ... }) បង្កើតបានមួយជួរ។ ខ្សែអក្សរសកម្មភាពអនុវត្តតាមលំនាំ domain.verb (ឬ domain.verb.outcome)។ ប្រភេទសកម្មភាពដែលបានបញ្ជាក់ថាមាននៅក្នុងមែកធាងប្រភពរួមមាន៖
| សកម្មភាព | ប្រភព |
|---|---|
auth.login.success |
src/app/api/auth/login/route.ts |
auth.login.failed |
src/app/api/auth/login/route.ts |
auth.login.locked |
src/app/api/auth/login/route.ts |
auth.login.error |
src/app/api/auth/login/route.ts |
auth.login.misconfigured |
src/app/api/auth/login/route.ts |
auth.login.setup_required |
src/app/api/auth/login/route.ts |
auth.logout.success |
src/app/api/auth/logout/route.ts |
provider.credentials.created |
src/app/api/providers/route.ts |
provider.credentials.updated |
src/app/api/providers/[id]/route.ts |
provider.credentials.revoked |
src/app/api/providers/[id]/route.ts |
provider.credentials.batch_revoked |
src/app/api/providers/route.ts |
sync.token.created |
src/app/api/sync/tokens/route.ts |
sync.token.revoked |
src/app/api/sync/tokens/[id]/route.ts |
compliance.cleanup |
src/lib/compliance/index.ts |
ធាតុនីមួយៗកត់ត្រា action, actor (តម្លៃលំនាំដើមគឺ "system"), target, details/metadata (JSON), ip_address, resource_type, status, request_id និង timestamp។ កូនសោរសើប (apiKey, accessToken, refreshToken, password, និងអ្វីៗដែលត្រូវគ្នានឹង *token/*secret/*apikey ជាដើម) ត្រូវបានលាក់ជាបន្តបន្ទាប់នៅគ្រប់កម្រិតទៅជា "[redacted]" មុនពេលជួរទិន្នន័យត្រូវបានសរសេរ។
ការហៅឧបករណ៍ MCP (mcp_tool_audit)
រាល់ការហៅប្រើឧបករណ៍ MCP នីមួយៗសរសេរមួយជួរតាមរយៈ open-sse/mcp-server/audit.ts។ គ្រោងការណ៍ (មកពី src/lib/db/migrations/002_mcp_a2a_tables.sql)៖
| ជួរឈរ | កំណត់សម្គាល់ |
|---|---|
id |
កើនឡើងដោយស្វ័យប្រវត្តិ |
tool_name |
ឧបករណ៍កំណត់អត្តសញ្ញាណ MCP |
input_hash |
sha256 នៃធាតុបញ្ចូល (មិនរក្សាទុក payload ទេ) |
output_summary |
សេចក្តីសង្ខេបខ្លីដែលត្រូវបានកាត់ឱ្យខ្លី |
duration_ms |
រយៈពេលជាក់ស្តែង |
api_key_id |
អ្នកហៅ (អាចជា null) |
success |
1 / 0 |
error_code |
កូដកំហុសចុងក្រោយនៅពេលបរាជ័យ |
created_at |
ISO timestamp |
កំណត់ហេតុសំណើ / ការប្រើប្រាស់
ទាំងនេះជាទិន្នន័យតាមដានប្រតិបត្តិការ (មិនមែនជាសវនកម្មរដ្ឋបាលតឹងរ៉ឹងទេ) ប៉ុន្តែប្រើបំពង់ដំណើរការរក្សាទុកដូចគ្នា៖
usage_history— ការបូកសរុបការប្រើប្រាស់តាមសំណើនីមួយៗcall_logs— កំណត់ហេតុពេញលេញតាមសំណើនីមួយៗ (ស្ថិតក្រោមដែនកំណត់ចំនួនជួរ សូមមើលខាងក្រោម)proxy_logs— កំណត់ហេតុចរាចរណ៍ proxy (ស្ថិតក្រោមដែនកំណត់ចំនួនជួរ)request_detail_logs— កំណត់ហេតុលម្អិតរបស់សំណើជំនាន់ចាស់ (នៅតែត្រូវបានសម្អាត ប្រសិនបើមាន)
គ្រោងការណ៍ផ្ទុកទិន្នន័យ
audit_log ត្រូវបានបង្កើតដោយពន្យារពេលតាមរយៈ ensureAuditLogSchema() នៅពេលប្រើប្រាស់លើកដំបូង៖
CREATE TABLE IF NOT EXISTS audit_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL DEFAULT (datetime('now')),
action TEXT NOT NULL,
actor TEXT NOT NULL DEFAULT 'system',
target TEXT,
details TEXT,
ip_address TEXT,
resource_type TEXT,
status TEXT,
request_id TEXT,
metadata TEXT
);
លិបិក្រមត្រូវបានបង្កើតលើ timestamp, action, actor, resource_type,
status និង request_id។ ជួរឈរដែលបាត់នៅក្នុង DB ចាស់ៗ ត្រូវបានបន្ថែមតាមរយៈ
ALTER TABLE នៅពេលចាំបាច់។
ការរក្សាទុក និងការសម្អាត
រយៈពេលរក្សាទុកពីរដាច់ដោយឡែកពីគ្នាត្រូវបានគោរព៖
| អថេរបរិស្ថាន | លំនាំដើម | អនុវត្តចំពោះ |
|---|---|---|
APP_LOG_RETENTION_DAYS |
7 |
audit_log, mcp_tool_audit |
CALL_LOG_RETENTION_DAYS |
7 |
usage_history, call_logs, proxy_logs, request_detail_logs |
CALL_LOGS_TABLE_MAX_ROWS |
100000 |
ការកាត់តម្រឹមតាមដែនកំណត់ចំនួនជួរដេកសម្រាប់ call_logs |
PROXY_LOGS_TABLE_MAX_ROWS |
100000 |
ការកាត់តម្រឹមតាមដែនកំណត់ចំនួនជួរដេកសម្រាប់ proxy_logs |
cleanupExpiredLogs() ដំណើរការជំហានរក្សាទុក។ វាត្រូវបានហៅនៅពេលចាប់ផ្ដើមម៉ាស៊ីនមេ
ពី src/instrumentation-node.ts។ ការដំណើរការនីមួយៗកត់ត្រាព្រឹត្តិការណ៍សវនកម្ម
compliance.cleanup ជាមួយនឹងចំនួនដែលបានលុបសម្រាប់តារាងនីមួយៗ។ ការកាត់តម្រឹមកំណត់ហេតុប្រូកស៊ី/ការហៅ
ត្រូវបានធ្វើជាបាច់ (BATCH_SIZE = 5000) ដើម្បីជៀសវាងការចាក់សោការសរសេររយៈពេលយូរ។
ការសម្អាតប្រវត្តិសំណើដោយដៃ គឺដាច់ដោយឡែកពីការរក្សាទុក។ ទំព័រកំណត់ហេតុសំណើ
ហៅ POST /api/settings/purge-request-history ដែលលុប call_logs,
request_detail_logs ចាស់ និងវត្ថុបង្កើតពីសំណើក្នុងមូលដ្ឋានក្រោម
${DATA_DIR}/call_logs/។
តម្លៃលំនាំដើមត្រូវបានកំណត់នៅក្នុង src/lib/logEnv.ts
(DEFAULT_APP_LOG_RETENTION_DAYS = 7, DEFAULT_CALL_LOG_RETENTION_DAYS = 7)។
ការបដិសេធ noLog (សម្រាប់ API key នីមួយៗ)
API key អាចត្រូវបានដាក់ទង់សម្គាល់ ដើម្បីកុំឱ្យចរាចរណ៍ការហៅបន្តរបស់វាត្រូវបានកត់ត្រា។ ទង់សម្គាល់នេះ
ស្ថិតនៅលើតារាង api_keys (no_log INTEGER DEFAULT 0) និងត្រូវបានឆ្លុះបញ្ចាំង
ទៅក្នុងសំណុំក្នុងអង្គចងចាំ សម្រាប់ការស្វែងរកលើផ្លូវដំណើរការដែលញឹកញាប់។
# បង្កើត key ដែលមិនកត់ត្រា (តម្រូវឱ្យមានការផ្ទៀងផ្ទាត់សម្រាប់ការគ្រប់គ្រង)
curl -X POST http://localhost:20128/api/keys \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{"name": "Privacy key", "noLog": true}'
មុខងារជំនួយ (src/lib/compliance/index.ts)៖
setNoLog(apiKeyId, true|false)— បិទបើកធាតុក្នុងអង្គចងចាំisNoLog(apiKeyId)— ត្រូវបានពិនិត្យនៅលើផ្លូវសំណើ; ប្រសិនបើមិនអាចពិនិត្យបាន វានឹងប្រើការអានដែលរក្សាទុកក្នុងឃ្លាំងសម្ងាត់រយៈពេល 30 វិនាទី ពីapi_keys.no_logNO_LOG_API_KEY_IDS(អថេរបរិស្ថាន បំបែកដោយសញ្ញាក្បៀស) — ត្រូវបានផ្ទុកជាមុនទៅក្នុងសំណុំក្នុងអង្គចងចាំ នៅពេលចាប់ផ្ដើម; មានប្រយោជន៍នៅពេលអ្នកមិនអាចបិទបើកជួរឈរដោយផ្ទាល់
ព្រឹត្តិការណ៍សវនកម្មផ្នែករដ្ឋបាល (ការចូលប្រើ ការផ្លាស់ប្ដូរអ្នកផ្ដល់សេវា ការហៅឧបករណ៍ MCP ជាដើម)
មិន រងផលប៉ះពាល់ដោយ noLog ទេ — មានតែការកត់ត្រាចរាចរណ៍សម្រាប់សំណើនីមួយៗប៉ុណ្ណោះ
ដែលត្រូវបានបដិសេធ។
REST API
| ចំណុចបញ្ចប់ | វិធីសាស្ត្រ | ការពិពណ៌នា | ការផ្ទៀងផ្ទាត់ |
|---|---|---|---|
/api/compliance/audit-log |
GET |
កំណត់ត្រាសវនកម្មរបស់អ្នកគ្រប់គ្រងដែលបែងចែកជាទំព័រ និងមានតម្រង | management |
/api/mcp/audit |
GET |
កំណត់ត្រាសវនកម្មឧបករណ៍ MCP ដែលបែងចែកជាទំព័រ | (open-sse) |
/api/mcp/audit/stats |
GET |
ស្ថិតិសវនកម្ម MCP ដែលបានប្រមូលផ្តុំ | (open-sse) |
បច្ចុប្បន្នមិនមានចំណុចបញ្ចប់សម្រាប់នាំចេញជា CSV ទេ — សូមនាំចេញពីផ្ទាំងគ្រប់គ្រង ឬធ្វើសំណួរ ទៅកាន់មូលដ្ឋានទិន្នន័យ SQLite ដោយផ្ទាល់។
ការធ្វើសំណួរទៅកាន់ /api/compliance/audit-log
ប៉ារ៉ាម៉ែត្រសំណួរដែលគាំទ្រ (ទាំងអស់សុទ្ធតែជាជម្រើស ហើយតម្រងអត្ថបទទាំងអស់ប្រើការផ្គូផ្គង
LIKE %value%)៖
action,actor,target,resourceType(ឬresource_type),status,requestId(ឬrequest_id)from/since,to/until— ត្រាពេលវេលា ISOlimit(លំនាំដើម50, អប្បបរមា1, អតិបរមា500)offset(លំនាំដើម0, អតិបរមា10_000)
ការឆ្លើយតបគឺជាអារេ JSON។ ទិន្នន័យមេតានៃការបែងចែកទំព័រត្រូវបានត្រឡប់មកវិញក្នុងបឋមកថា៖
x-total-count, x-page-limit, x-page-offset។
curl "http://localhost:20128/api/compliance/audit-log?action=provider.credentials&from=2026-05-01" \
-H "Cookie: auth_token=..."
ផ្ទាំងគ្រប់គ្រង
ផ្ទាំងគ្រប់គ្រងបង្ហាញទិន្នន័យសវនកម្មនៅ /dashboard/audit
(src/app/(dashboard)/dashboard/audit/page.tsx)។ ទំព័រនេះមានផ្ទាំងពីរ៖
- អនុលោមភាព (
ComplianceTab.tsx) — ព្រឹត្តិការណ៍សវនកម្មរបស់អ្នកគ្រប់គ្រងពី/api/compliance/audit-log។ តម្រងតាមប្រភេទព្រឹត្តិការណ៍ កម្រិតធ្ងន់ធ្ងរ (ព័ត៌មាន / ការព្រមាន / ធ្ងន់ធ្ងរ ដែលបានកំណត់ពីសកម្មភាព + ស្ថានភាព) និងចន្លោះកាលបរិច្ឆេទ។ កម្រិតធ្ងន់ធ្ងរត្រូវបាន គណនានៅផ្នែកកម្មវិធីភាគីអតិថិជនពីខ្សែអក្សរសកម្មភាព/ស្ថានភាព។ - MCP (
McpAuditTab.tsx) — សវនកម្មឧបករណ៍ MCP ពី/api/mcp/auditជាមួយ តម្រងតាមឈ្មោះឧបករណ៍ និងជោគជ័យ/បរាជ័យ។
ផ្ទាំងទាំងពីរបែងចែកជាទំព័រដែលមានទំហំទំព័រ 50 (អនុលោមភាព) និង 25 (MCP)។
អនុគមន៍ជំនួយសម្រាប់ព័ត៌មានសម្ងាត់របស់អ្នកផ្តល់សេវា
src/lib/compliance/providerAudit.ts ផ្តល់អនុគមន៍ជំនួយសម្រាប់រៀបចំទិន្នន័យ ដែលប្រើដោយ
ផ្លូវគ្រប់គ្រងអ្នកផ្តល់សេវា នៅពេលពួកវាបញ្ចេញព្រឹត្តិការណ៍ព័ត៌មានសម្ងាត់៖
summarizeProviderConnectionForAudit(connection)— ដកapiKey,accessToken,refreshToken,idTokenនិងproviderSpecificData.consoleApiKeyចេញ មុនពេលសំណៅភ្ជាប់ត្រូវបាន សរសេរទៅក្នុងdetails។getProviderAuditTarget(connection)— បង្កើតខ្សែអក្សរថេរ"<provider>:<name|id>"សម្រាប់វាលtarget។extractProviderWarnings(...payloads)— ស្កេនការឆ្លើយតបរបស់អ្នកផ្តល់សេវា ដើម្បីរក ការព្រមានអំពីគោលការណ៍/សុវត្ថិភាព ([sanitizer],prompt injection detected,content has been filtered,safety filter,policy violation) និង បង្ហាញលទ្ធផលដែលរកឃើញរហូតដល់ 5 ដោយលទ្ធផលនីមួយៗត្រូវបានកាត់ត្រឹម 400 តួអក្សរ។
ការអនុវត្តល្អបំផុត
- សម្គាល់ API key ដែលគ្រប់គ្រង PII (ច្បាប់ វេជ្ជសាស្ត្រ ជាដើម) ដោយប្រើ
noLog: true។ - កែសម្រួល
APP_LOG_RETENTION_DAYS/CALL_LOG_RETENTION_DAYSដើម្បីបំពេញតាម គោលការណ៍រក្សាទុកទិន្នន័យរបស់អ្នក។ តម្លៃលំនាំដើម 7 ថ្ងៃគឺមានលក្ខណៈប្រុងប្រយ័ត្ន។ - នាំចេញតារាងសវនកម្មទៅក្រៅវេទិកា (
sqlite3 dump) តាមកាលវិភាគណាមួយដែល កម្មវិធីអនុលោមភាពរបស់អ្នកតម្រូវ — មិនមានមុខងាររក្សាទុកជាបណ្ណសារដែលភ្ជាប់មកជាមួយទេ។ - តាមដានចំនួន
auth.login.failedនិងauth.login.lockedដើម្បីរកឃើញ ការវាយប្រហារដោយសាកល្បងពាក្យសម្ងាត់ជាបន្តបន្ទាប់។ - នៅពេលបន្ថែមចំណុចបញ្ចប់ថ្មីសម្រាប់អ្នកគ្រប់គ្រង សូមហៅ
logAuditEvent({ ... })ជាមួយខ្សែអក្សរ សកម្មភាពdomain.verb.outcomeដែលមានស្ថិរភាព ហើយបញ្ជូនបរិបទសំណើតាមរយៈgetAuditRequestContext(request)ដើម្បីឱ្យ IP និងrequestIdត្រូវបានចាប់យក ដោយស្វ័យប្រវត្តិ។
សូមមើលផងដែរ
docs/security/GUARDRAILS.md— ការបិទបាំង PII, ការបញ្ចូល prompt ដោយបង្កប់docs/frameworks/MCP-SERVER.md— កាតាឡុកឧបករណ៍ MCP និងវិសាលភាពdocs/reference/ENVIRONMENT.md— ឯកសារយោងពេញលេញអំពីអថេរបរិស្ថាន- កូដប្រភព៖
src/lib/compliance/,src/app/api/compliance/,src/app/api/mcp/audit/,src/lib/logEnv.ts