Skip to content

Sesi & Taint

Sesi adalah unit asas keadaan perbualan dalam Triggerfish. Setiap sesi menjejak tahap taint secara bebas — tera air pengkelasan yang merekodkan kepekaan tertinggi data yang diakses semasa sesi. Taint memacu keputusan output enjin dasar: jika sesi dicemarkan pada CONFIDENTIAL, tiada data daripada sesi tersebut boleh mengalir ke saluran yang dikelaskan di bawah CONFIDENTIAL.

Model Taint Sesi

Cara Taint Berfungsi

Apabila sesi mengakses data pada tahap pengkelasan, keseluruhan sesi dicemarkan pada tahap tersebut. Taint mengikut tiga peraturan:

  1. Per-perbualan: Setiap sesi mempunyai tahap taint sendiri yang bebas
  2. Eskalasi sahaja: Taint boleh meningkat, tidak pernah berkurang dalam sesi
  3. Reset penuh mengosongkan semua: Taint DAN sejarah perbualan dikosongkan bersama
Eskalasi taint: PUBLIC → INTERNAL → CONFIDENTIAL → RESTRICTED. Taint hanya boleh meningkat, tidak pernah berkurang.

KESELAMATAN Taint tidak pernah boleh dikurangkan secara selektif. Tiada mekanisme untuk "menyahcemarkan" sesi tanpa mengosongkan keseluruhan sejarah perbualan. Ini mencegah kebocoran konteks — jika sesi mengingati melihat data sulit, taint mesti mencerminkan itu. :::

Mengapa Taint Tidak Boleh Berkurang

Walaupun data yang dikelaskan tidak lagi dipaparkan, tetingkap konteks LLM masih mengandunginya. Model mungkin merujuk, meringkaskan, atau bergema maklumat yang dikelaskan dalam respons masa depan. Satu-satunya cara yang selamat untuk menurunkan taint adalah menghapuskan konteks sepenuhnya — itulah yang dilakukan oleh reset penuh.

Jenis Sesi

Triggerfish mengurus beberapa jenis sesi, setiap satu dengan penjejakan taint yang bebas:

Jenis SesiKeteranganTaint AwalBerterusan Merentasi Pemulaan Semula
UtamaPerbualan langsung utama dengan pemilikPUBLICYa
SaluranSatu per saluran yang disambungkan (Telegram, Slack, dll.)PUBLICYa
Latar BelakangDilahirkan untuk tugas autonomi (cron, webhooks)PUBLICTempoh tugas
EjenSesi per-ejen untuk penghalaan berbilang ejenPUBLICYa
KumpulanSesi chat kumpulanPUBLICYa

Sesi latar belakang sentiasa bermula dengan taint PUBLIC, tanpa mengira tahap taint sesi induk. Ini adalah reka bentuk yang disengajakan — cron jobs dan tugas yang dicetuskan webhook tidak seharusnya mewarisi taint sesi yang berlaku menjanakan mereka. :::

Mekanisme Reset Penuh

Reset sesi adalah satu-satunya cara untuk menurunkan taint. Ia adalah operasi yang disengajakan dan merosakkan:

  1. Arkibkan rekod keturunan — Semua data keturunan daripada sesi dipelihara dalam storan audit
  2. Kosongkan sejarah perbualan — Keseluruhan tetingkap konteks dihapuskan
  3. Tetapkan semula taint kepada PUBLIC — Sesi bermula segar
  4. Perlukan pengesahan pengguna — Hook SESSION_RESET memerlukan pengesahan eksplisit sebelum melaksanakan

Selepas reset, sesi tidak dapat dibezakan daripada sesi baharu. Ejen tidak mempunyai memori tentang perbualan sebelumnya. Ini adalah satu-satunya cara untuk menjamin bahawa data yang dikelaskan tidak boleh bocor melalui konteks LLM.

Komunikasi Antara-Sesi

Apabila ejen menghantar data antara sesi menggunakan sessions_send, peraturan write-down yang sama terpakai:

Taint Sesi SumberSaluran Sesi SasaranKeputusan
PUBLICSaluran PUBLICALLOW
CONFIDENTIALSaluran CONFIDENTIALALLOW
CONFIDENTIALSaluran PUBLICBLOCK
RESTRICTEDSaluran CONFIDENTIALBLOCK

Alat sesi yang tersedia kepada ejen:

AlatKeteranganImpak Taint
sessions_listSenaraikan sesi aktif dengan penapisTiada perubahan taint
sessions_historyDapatkan semula transkrip untuk sesiTaint diwarisi daripada sesi yang dirujuk
sessions_sendHantar mesej ke sesi lainTertakluk kepada semakan write-down
sessions_spawnCipta sesi tugas latar belakangSesi baru bermula pada PUBLIC
session_statusSemak keadaan dan metadata sesi semasaTiada perubahan taint

Keturunan Data

Setiap elemen data yang diproses oleh Triggerfish membawa metadata provenance — rekod lengkap asal usul data, cara ia diubah suai, dan ke mana ia pergi. Keturunan adalah jejak audit yang menjadikan keputusan pengkelasan boleh disahkan.

Struktur Rekod Keturunan

json
{
  "lineage_id": "lin_789xyz",
  "content_hash": "sha256:a1b2c3d4...",
  "origin": {
    "source_type": "integration",
    "source_name": "salesforce",
    "record_id": "opp_00123ABC",
    "record_type": "Opportunity",
    "accessed_at": "2025-01-29T10:23:45Z",
    "accessed_by": "user_456",
    "access_method": "plugin_query"
  },
  "classification": {
    "level": "CONFIDENTIAL",
    "reason": "source_system_default",
    "assigned_at": "2025-01-29T10:23:45Z",
    "can_be_downgraded": false
  },
  "transformations": [
    {
      "type": "extraction",
      "description": "Medan yang dipilih: nama, jumlah, peringkat",
      "timestamp": "2025-01-29T10:23:46Z",
      "agent_id": "agent_123"
    }
  ]
}

Peraturan Penjejakan Keturunan

PeristiwaTindakan Keturunan
Data dibaca daripada integrasiCipta rekod keturunan dengan asal usul
Data diubah suai oleh LLMTambah pengubahan, hubungkan keturunan input
Data diagregat daripada pelbagai sumberGabungkan keturunan, pengkelasan = max(input)
Data dihantar ke saluranRekod destinasi, sahkan pengkelasan
Reset sesiArkibkan rekod keturunan, kosongkan daripada konteks

Pengkelasan Agregasi

Apabila data daripada pelbagai sumber digabungkan (cth., ringkasan LLM rekod daripada integrasi yang berbeza), hasil agregat mewarisi pengkelasan maksimum semua input:

Input 1: INTERNAL    (wiki dalaman)
Input 2: CONFIDENTIAL (rekod Salesforce)
Input 3: PUBLIC      (API cuaca)

Pengkelasan output agregat: CONFIDENTIAL (max input)

Kegigihan Taint

Taint sesi dikekalkan melalui StorageProvider di bawah namespace taint:. Ini bermakna taint bertahan merentasi pemulaan semula daemon — sesi yang CONFIDENTIAL sebelum pemulaan semula masih CONFIDENTIAL selepasnya.

Rekod keturunan dikekalkan di bawah namespace lineage: dengan pengekalan yang dipacu pematuhan (lalai 90 hari).