SDK ve CLI
Yalnızca hafıza için @getera/brain, işletme API’sinin yanında @getera/sdk içindeki era.brain ve terminalde era brain.
@getera/brain
Tek başına hafıza istemcisi — yaklaşık 5 KB, bağımlılık yok; Node 18+, Bun, Deno ve edge ortamları.
npm install @getera/brainimport { createBrain, EraError } from '@getera/brain'
const brain = createBrain({ apiKey: process.env.ERA_API_KEY }) // baseUrl varsayılanı https://app.getera.io
// Hatırla — bir cümle, bir konuşma, hazır bilgiler ya da bir kayıt
await brain.add('Mavi Tekstil’den Kerem Aydın sipariş güncellemelerini WhatsApp’tan istiyor.')
await brain.add({ messages: [{ role: 'user', content: 'Vejetaryenim ve sabah erken toplantıları sevmem.' }] })
await brain.add({
facts: [{ statement: 'Kuzey Lojistik sözleşmesini 1 Mart 2027’de yeniliyor.', kind: 'commitment', about: [{ name: 'Kuzey Lojistik', type: 'company' }] }],
})
await brain.add({ record: { type: 'ticket', id: 'T-1042', title: 'Geciken teslimat', fields: { customer: 'Kuzey Lojistik', status: 'open' } } })
await brain.add('Otopark yerim B-14.', { private: true })
// Hatırla
const { results, paths } = await brain.search('Kerem’e siparişleri nasıl bildireyim?', { limit: 5, graph: true })
// Gez ve açıkla
for await (const m of brain.listAll({ kind: 'preference' })) console.log(m.content)
const why = await brain.explain('Kerem’e siparişleri nasıl bildireyim?', results[0].id)
// Çizge
await brain.entities({ q: 'Kuzey' })
await brain.graph('Ada’nın çalıştığı şirketin tedarikçisi kim?')
await brain.paths('Ada Lovelace', 'Babbage Parts')
// Değiştir
await brain.update(results[0].id, { content: 'Mavi Tekstil’den Kerem Aydın sipariş güncellemelerini WhatsApp ya da SMS ile istiyor.' })
await brain.forget(results[0].id)
try {
await brain.add({ text: 'çok kısa' })
} catch (e) {
if (e instanceof EraError) console.log(e.status, e.code, e.problems) // 422 invalid_input [{ field: 'text', … }]
}Aynı record.type ve record.id ile tekrar add, o kaydın daha önce söylediklerinin yerine geçer. Yeniden denemeyi güvenli yapmak için { idempotencyKey } ver: ilk cevap 24 saat boyunca aynen döner.
@getera/sdk içinde era.brain
Tam Era API istemcisinde siparişlerin, müşterilerin ve diğer her modülün yanında aynı ad alanı var:
import { createEra } from '@getera/sdk'
const era = createEra({ apiKey: process.env.ERA_API_KEY })
await era.brain.add({ text: 'Zeynep Arslan faturalarını her ayın 1’inde, euro olarak istiyor; ödemeyi havaleyle yapıyor.' })
const { results } = await era.brain.search('Zeynep’in fatura para birimi')era brain
npm install -g @getera/cli
era login # bir kez: tarayıcında Era’nın girişi açılır
era brain add "Zeynep faturaları euro istiyor" --wait
era brain add --file gorusme-notlari.md --label "Zeynep ile görüşme"
era brain search "Zeynep faturalarını nasıl istiyor?" --graph
era brain list --kind preference
era brain get <id>
era brain correct <id> "Zeynep ekimden beri faturaları sterlin istiyor"
era brain forget <id>
era brain graph "Ada’nın çalıştığı şirketin tedarikçisi kim?"
era brain path "Ada Lovelace" "Babbage Parts"
era brain explain "Zeynep faturalarını nasıl istiyor?" <id>
era brain setup claude --apply # ya da: codexHer komut betikler için --json alır. CI’da era login yerine ERA_API_KEY tanımla.