Skip to content

Storage

Triggerfish இல் அனைத்து stateful தரவும் ஒரு unified StorageProvider abstraction மூலம் ஓடுகிறது. எந்த module அதன் சொந்த storage வழிமுறையை உருவாக்குவதில்லை -- persistence தேவைப்படும் ஒவ்வொரு கூறும் dependency ஆக StorageProvider ஐ எடுக்கிறது. இந்த design business logic ஐ தொடாமல் backends ஐ swap செய்யக்கூடியதாக செய்கிறது மற்றும் அனைத்து tests ஐயும் வேகமாகவும் நிர்ணயவாதமாகவும் வைக்கிறது.

StorageProvider Interface

typescript
interface StorageProvider {
  /** Key மூலம் ஒரு மதிப்பை பெறவும். கிடைக்கவில்லை என்றால் null திரும்ப அனுப்புகிறது. */
  get(key: string): Promise<StorageValue | null>;

  /** ஒரு key இல் ஒரு மதிப்பை சேமிக்கவும். ஏதேனும் இருக்கும் மதிப்பை overwrite செய்கிறது. */
  set(key: string, value: StorageValue): Promise<void>;

  /** ஒரு key ஐ நீக்கவும். Key இல்லையென்றால் no-op. */
  delete(key: string): Promise<void>;

  /** விருப்ப prefix பொருந்தும் அனைத்து keys பட்டியலிடவும். */
  list(prefix?: string): Promise<string[]>;

  /** அனைத்து keys நீக்கவும். கவனமாக பயன்படுத்தவும். */
  clear(): Promise<void>;
}

StorageValue ஒரு string. அனைத்து structured data வும் (sessions, lineage records, configuration) storage க்கு முன் JSON க்கு serialize ஆகிறது மற்றும் படிக்கும்போது deserialize ஆகிறது. இது interface ஐ எளிமையாகவும் backend-agnostic ஆகவும் வைக்கிறது. :::

Implementations

Backendபயன்பாட்டு வழிநிலைத்தன்மைகட்டமைப்பு
MemoryStorageProviderTesting, ephemeral sessionsஇல்லை (restart இல் இழக்கப்படும்)கட்டமைப்பு தேவையில்லை
SqliteStorageProviderPersonal tier க்கு இயல்புநிலைSQLite WAL ~/.triggerfish/data/triggerfish.db இல்Zero configuration
Enterprise backendsEnterprise tierCustomer-managedPostgres, S3 அல்லது மற்ற backends

MemoryStorageProvider

வேகம் மற்றும் நிர்ணயவாதத்திற்காக அனைத்து tests இலும் பயன்படுத்தப்படுகிறது. தரவு memory இல் மட்டும் இருக்கும் மற்றும் process வெளியேறும்போது இழக்கப்படும். ஒவ்வொரு test suite புதிய MemoryStorageProvider உருவாக்கி, tests தனிமைப்படுத்தப்பட்டவை மற்றும் மீண்டும் செய்யக்கூடியவை என்று உறுதிப்படுத்துகிறது.

SqliteStorageProvider

Personal tier deployments க்கான இயல்புநிலை. ஒரே நேரத்தில் read அணுகல் மற்றும் crash safety க்காக SQLite WAL (Write-Ahead Logging) mode இல் பயன்படுத்துகிறது. Database இல் இருக்கும்:

~/.triggerfish/data/triggerfish.db

SQLite கட்டமைப்பு, server process அல்லது network தேவையில்லை. ஒரே கோப்பு அனைத்து Triggerfish நிலையையும் சேமிக்கிறது. @db/sqlite Deno package binding வழங்குகிறது, இதற்கு --allow-ffi permission தேவை.

SQLite WAL mode ஒரு single writer இருக்கும்போது பல readers ஒரே நேரத்தில் database அணுக அனுமதிக்கிறது. agent tool results எழுதும்போது Gateway session state படிக்கக்கூடியதால் இது Gateway க்கு முக்கியம். :::

Enterprise Backends

Enterprise deployments code மாற்றங்கள் இல்லாமல் வெளிப்புற storage backends (Postgres, S3, போன்றவை) plug in செய்யலாம். StorageProvider interface இன் எந்த implementation ம் செயல்படும். Backend triggerfish.yaml இல் கட்டமைக்கப்படுகிறது.

Namespaced Keys

Storage கணினியில் உள்ள அனைத்து keys தரவு வகையை அடையாளப்படுத்தும் prefix உடன் namespaced ஆகியுள்ளன. இது collisions தடுக்கிறது மற்றும் வகை மூலம் தரவை query, retain மற்றும் purge செய்வதை சாத்தியமாக்குகிறது.

Namespaceவிசை Patternவிளக்கம்
sessions:sessions:sess_abc123Session நிலை (உரையாடல் வரலாறு, metadata)
taint:taint:sess_abc123Session taint நிலை
lineage:lineage:lin_789xyzData lineage records (provenance கண்காணிப்பு)
audit:audit:2025-01-29T10:23:45Z:hook_pre_outputAudit log entries
cron:cron:job_daily_reportCron job நிலை மற்றும் execution வரலாறு
notifications:notifications:notif_456Notification queue
exec:exec:run_789Agent execution environment வரலாறு
skills:skills:skill_weatherநிறுவப்பட்ட skill metadata
config:config:v3Configuration snapshots

Retention Policies

ஒவ்வொரு namespace க்கும் இயல்புநிலை retention policy உள்ளது. Enterprise deployments இவற்றை தனிப்பயனாக்கலாம்.

Namespaceஇயல்புநிலை Retentionகாரணம்
sessions:30 நாட்கள்உரையாடல் வரலாறு காலாவதியாகும்
taint:Session retention க்கு ஒத்துSession இல்லாமல் Taint அர்த்தமற்றது
lineage:90 நாட்கள்Compliance-driven, audit trail
audit:1 வருடம்Compliance-driven, சட்ட மற்றும் regulatory
cron:30 நாட்கள்Debugging க்கான execution வரலாறு
notifications:Delivered வரை + 7 நாட்கள்Deliver செய்யப்படாத notifications நிலைத்திருக்க வேண்டும்
exec:30 நாட்கள்Debugging க்கான execution artifacts
skills:நிரந்தரமானதுநிறுவப்பட்ட skill metadata காலாவதியாக கூடாது
config:10 பதிப்புகள்Rollback க்காக rolling config வரலாறு

Design கொள்கைகள்

அனைத்து Modules ம் StorageProvider பயன்படுத்துகின்றன

Triggerfish இல் எந்த module அதன் சொந்த storage வழிமுறையை உருவாக்குவதில்லை. Session நிர்வாகம், taint கண்காணிப்பு, lineage பதிவு, audit logging, cron நிலை, notification queues, execution வரலாறு மற்றும் configuration -- அனைத்தும் StorageProvider மூலம் ஓடுகின்றன.

இதன் அர்த்தம்:

  • Backends மாற்றுவதற்கு ஒரு dependency injection புள்ளி மாற்றினால் போதும்
  • Tests வேகத்திற்காக MemoryStorageProvider பயன்படுத்துகின்றன -- SQLite அமைப்பு இல்லை, filesystem இல்லை
  • Encryption-at-rest, backup அல்லது replication implement செய்ய சரியாக ஒரே இடம் உள்ளது

Serialization

அனைத்து structured data வும் storage க்கு முன் JSON strings க்கு serialize ஆகிறது. serialize/deserialize அடுக்கு handle செய்கிறது:

  • Date objects (ISO 8601 strings ஆக serialize ஆகும் toISOString() மூலம், new Date() மூலம் deserialize ஆகும்)
  • Branded types (அவற்றின் அடிப்படை string மதிப்பாக serialize ஆகும்)
  • Nested objects மற்றும் arrays
typescript
// ஒரு session சேமிக்கவும்
const session = {
  id: "sess_abc",
  taint: "CONFIDENTIAL",
  createdAt: new Date(),
};
await storage.set("sessions:sess_abc", JSON.stringify(session));

// ஒரு session பெறவும்
const raw = await storage.get("sessions:sess_abc");
if (raw) {
  const session = JSON.parse(raw);
  session.createdAt = new Date(session.createdAt); // Date மீட்டெடு
}