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 மீட்டெடு
}