Skip to content

Storan

Semua data berkeadaan dalam Triggerfish mengalir melalui abstraksi StorageProvider yang bersatu. Tiada modul yang mencipta mekanisme storanan sendiri — setiap komponen yang memerlukan kegigihan mengambil StorageProvider sebagai kebergantungan. Reka bentuk ini menjadikan backend boleh ditukar tanpa menyentuh logik perniagaan dan memastikan semua ujian cepat dan deterministik.

Antara Muka StorageProvider

typescript
interface StorageProvider {
  /** Dapatkan semula nilai mengikut kunci. Mengembalikan null jika tidak dijumpai. */
  get(key: string): Promise<StorageValue | null>;

  /** Simpan nilai pada kunci. Menggantikan sebarang nilai yang sedia ada. */
  set(key: string, value: StorageValue): Promise<void>;

  /** Padamkan kunci. Tiada-op jika kunci tidak wujud. */
  delete(key: string): Promise<void>;

  /** Senaraikan semua kunci yang sepadan dengan awalan pilihan. */
  list(prefix?: string): Promise<string[]>;

  /** Padamkan semua kunci. Gunakan dengan berhati-hati. */
  clear(): Promise<void>;
}

StorageValue adalah rentetan. Semua data berstruktur (sesi, rekod keturunan, konfigurasi) disiri ke JSON sebelum storan dan dinyahsiri semasa pembacaan. Ini memastikan antara muka mudah dan bebas backend. :::

Pelaksanaan

BackendKes PenggunaanKegigihanKonfigurasi
MemoryStorageProviderUjian, sesi sementaraTiada (hilang semasa pemulaan semula)Tiada konfigurasi diperlukan
SqliteStorageProviderLalai untuk peringkat peribadiSQLite WAL di ~/.triggerfish/data/triggerfish.dbKonfigurasi sifar
Backend enterprisePeringkat enterpriseDiuruskan pelangganPostgres, S3, atau backend lain

MemoryStorageProvider

Digunakan dalam semua ujian untuk kelajuan dan determinisme. Data hanya wujud dalam memori dan hilang apabila proses keluar. Setiap suite ujian mencipta MemoryStorageProvider baharu, memastikan ujian adalah terpencil dan boleh diulang.

SqliteStorageProvider

Lalai untuk penyebaran peringkat peribadi. Menggunakan SQLite dalam mod WAL (Write-Ahead Logging) untuk akses baca serentak dan keselamatan kerosakan. Pangkalan data berada di:

~/.triggerfish/data/triggerfish.db

SQLite tidak memerlukan konfigurasi, tiada proses pelayan, dan tiada rangkaian. Satu fail menyimpan semua keadaan Triggerfish.

Mod SQLite WAL membolehkan berbilang pembaca mengakses pangkalan data secara serentak dengan satu penulis. Ini penting untuk Gateway, yang mungkin membaca keadaan sesi semasa ejen menulis keputusan alat. :::

Backend Enterprise

Penyebaran enterprise boleh memasang backend storan luaran (Postgres, S3, dll.) tanpa perubahan kod. Sebarang pelaksanaan antara muka StorageProvider berfungsi. Backend dikonfigurasi dalam triggerfish.yaml.

Kunci Bernamespace

Semua kunci dalam sistem storan diruang nama dengan awalan yang mengenal pasti jenis data. Ini mencegah perlanggaran dan membolehkan pertanyaan, pengekalan, dan penyucian data mengikut kategori.

NamespaceCorak KunciKeterangan
sessions:sessions:sess_abc123Keadaan sesi (sejarah perbualan, metadata)
taint:taint:sess_abc123Tahap taint sesi
lineage:lineage:lin_789xyzRekod keturunan data (penjejakan provenance)
audit:audit:2025-01-29T10:23:45Z:hook_pre_outputEntri log audit
cron:cron:job_daily_reportKeadaan cron job dan sejarah pelaksanaan
notifications:notifications:notif_456Baris gilir pemberitahuan
exec:exec:run_789Sejarah persekitaran pelaksanaan ejen
skills:skills:skill_weatherMetadata kemahiran yang dipasang
config:config:v3Petikan konfigurasi

Dasar Pengekalan

Setiap namespace mempunyai dasar pengekalan lalai. Penyebaran enterprise boleh menyesuaikan ini.

NamespacePengekalan LalaiRasional
sessions:30 hariSejarah perbualan tamat tempoh
taint:Sepadan dengan pengekalan sesiTaint tidak bermakna tanpa sesinya
lineage:90 hariDipacu pematuhan, jejak audit
audit:1 tahunDipacu pematuhan, undang-undang dan kawal selia
cron:30 hariSejarah pelaksanaan untuk penyahpepijatan
notifications:Sehingga dihantar + 7 hariPemberitahuan yang tidak dihantar mesti berterusan
exec:30 hariArtifak pelaksanaan untuk penyahpepijatan
skills:KekalMetadata kemahiran yang dipasang tidak seharusnya tamat tempoh
config:10 versiSejarah konfigurasi bergulir untuk rollback

Prinsip Reka Bentuk

Semua Modul Menggunakan StorageProvider

Tiada modul dalam Triggerfish yang mencipta mekanisme storanan sendiri. Pengurusan sesi, penjejakan taint, rakaman keturunan, pengelogan audit, keadaan cron, baris gilir pemberitahuan, sejarah pelaksanaan, dan konfigurasi — semua mengalir melalui StorageProvider.

Ini bermakna:

  • Menukar backend memerlukan perubahan satu titik suntikan kebergantungan
  • Ujian menggunakan MemoryStorageProvider untuk kelajuan — tiada persediaan SQLite, tiada sistem fail
  • Terdapat tepat satu tempat untuk melaksanakan penyulitan-semasa-rehat, sandaran, atau replikasi

Kebolehubahan

Operasi sesi adalah tidak boleh diubah. Membaca sesi, mengubahnya, dan menulisnya semula sentiasa menghasilkan objek baru. Fungsi tidak pernah mengubah objek yang disimpan di tempatnya. Ini selaras dengan prinsip Triggerfish yang lebih luas bahawa fungsi mengembalikan objek baru dan tidak pernah mengubah.

Struktur Direktori

~/.triggerfish/
  config/          # Konfigurasi ejen, SPINE.md, TRIGGER.md
  data/            # triggerfish.db (SQLite)
  workspace/       # Persekitaran exec ejen
    <agent-id>/    # Ruang kerja per-ejen (berterusan)
    background/    # Ruang kerja sesi latar belakang
  skills/          # Kemahiran yang dipasang
  logs/            # Log audit
  secrets/         # Stor kelayakan yang disulitkan

KESELAMATAN Direktori secrets/ mengandungi kelayakan yang disulitkan yang diuruskan oleh integrasi keychain OS. Jangan simpan rahsia dalam fail konfigurasi atau dalam StorageProvider. Gunakan keychain OS (peringkat peribadi) atau integrasi vault (peringkat enterprise). :::