Repository navigation
Releases: GitLoomHQ/gitloom-go
Releases · GitLoomHQ/gitloom-go
Release list
v0.6.1 — Compact no longer panics on a shrinking history
Fixed
Compactno longer panics on a history that shrank mid-request.
Dropping the evicted turns slicedhistory[len(evicted):], which panicked
withslice bounds out of rangewhen the live history had become shorter
than the evicted slice while the compact request was in flight (seen with
concurrentAppendon one*Conversation). Both the client-side and the
server-side compaction now clamp the slice to the live history.
v0.6.0 — tags and times, listing by filter, one error contract
Breaking
http_errorbecomeshttp_<status>. An error response whose body
names no code is codedhttp_429,http_500and so on. Anyerrorobject
is the API's envelope: itscodeandmessagewin, each falling back to
http_<status>and the status text. Without one, the message is a flat
{"error":"..."}'s text, else the body'smessage, else its text up to
300 characters, else the status text.unauthorized. A 401 or 403 with noerrorobject, which is the gateway
refusing a missing or bad key, is codedunauthorized, with a message
pointing atGITLOOM_API_KEYor the key passed to the client. Before, it
washttp_errorwith the gateway's body.missing_api_keybefore any request. With no key, or only whitespace,
fromNeworGITLOOM_API_KEY, every call returns an*APIErrorcoded
missing_api_keywithStatus0, where it used to sendBearerand get
the gateway's 401. A blank key passed toNewnow falls back to
GITLOOM_API_KEY.- The key is trimmed, and
invalid_api_key.Newtrims surrounding
whitespace from the key, so a pasted trailing newline no longer fails. A
key that still holds whitespace or a control character returns an
*APIErrorcodedinvalid_api_keywithStatus0 from the first request,
and is never sent, where it used to fail with net/http's "invalid header
field value". Recallwith no query and no filter returnsErrNoQuerywithout a
request, where it used to return the API's 400missing_query.- Network failures read
gitloom: network error:,gitloom: timed out:
orgitloom: canceled:where they readgitloom: GET /v1/...:.
Added
- Tags and when it happened, on every write.
NewMemoryand
RememberOptionstakeOccurredAt, aWhen:At(t)for an instant, sent
as epoch seconds;Unix(sec);Day(y, m, d)for a calendar day; or
Date(s)for text the server reads.RememberOptionsalso takesTags,
applied to every memory drawn from the conversation, andTimezone, which
WriteOptionstakes too. TheDatefields still work and are deprecated. - Recall without a question. An empty query with any filter —
Tags,
TagsAll,Since,Until,TiersorPaths— lists every memory it
matches, newest first, each scoring 1. RecallOptions.TimeFieldandTZ.TimeField(TimeOccurred,
TimeCreatedorTimeUpdated) picks the timeSinceandUntilbound and
orders a listing.TZis sent for parity:SinceandUntilgo as UTC
instants, so it never changes the range.- Memory times. A
MemorycarriesUserTags, andCreatedAt,
UpdatedAt,OccurredAtandExpiresAtastime.Time, zero when absent,
withOccurredSourceandOccurredPrecision. TheCreatedandUpdated
strings remain, deprecated. AMemorymarshals back to the API's shape, so
a result kept as JSON reads back.StoredMemory, whatGetreturns,
carries the same. Times read from unix seconds or, should a response carry
them so, RFC 3339; the SDK never asks fortime_format. APIError.RetryAfterholds a 429'sRetry-Afterin delta-seconds,
digits only, and is zero when there is none, or it is a date or signed.
Nothing is retried for you.- Network failures say so. They stay the wrapped cause, not an
*APIError, and readgitloom: timed out:,gitloom: canceled:or
gitloom: network error:. The README's Errors section says how to tell
them apart. No error holds the API key. RecallOptionstakesRank,MaxCharsandModel, forRecalland
Answeralike.Rank(RankFusedorRankJev) retrieves on the lane
path, which also reaches conversation turns and the dates in a question;
MaxCharscaps the memory content returned;Model(ModelHaikuor
ModelSonnet) picks the reader inModeSummaryorModeAgentic. None is
sent unless set, so existing calls are unchanged.- Lane-path fields. A
MemorycarriesStore,SaidandExcerpted;
the result carriesRankandRankFallback, andTimingsthe lane path's
EmbedMillis,LanesMillis,RankMillisand per-laneLane.
v0.5.0 — direct memory primitives
- Direct memory primitives.
Write,Get,Forget,Tree,Topics
andGraph— for a caller that already knows what a memory is and where it
belongs, whereRememberhas a model decide. They lived on an unmerged
branch until now, so no release had both them and the currentRecall. NewMemoryis whatWritetakes. It is the write-side twin of the
MemorythatRecallreturns; the two branches had each named their type
Memory, and the released one keeps the name.RecallOptions.NoProvenanceandNoRelationsskip the per-memory git
history walk and the neighbour snippets. Provenance is computed by default
and dominates latency once memories have history — 3.29s against 0.40s on
one production namespace — so turn it off for anything that will not show
a citation.
v0.4.0 — recall returns memories
- Recall returns memories.
RecallResult.HitsbecomesMemories, and
each entry is one whole memory with itsContentrather than a scattering
of its sections.Matchednames the arms that found it,Sectionsthe
headings that matched,Viawhat pulled in a neighbour. - Scores mean something.
Scoreis calibrated in[0, 1]and comparable
across queries, replacing a fused rank that only ordered one response.
Scores.Coveragesays how much of the query a memory accounted for. RecallOptionscarries filters —Tiers,Paths,Tags,TagsAll,
Since,Until,MinScore,NoContext,Detail,IncludeExpired—
applied inside every retrieval arm server-side rather than after the fact.Answerreturns one text answer: a fast model over a retrieval, or with
ModeAgentica stronger model that searches the memory itself with tools
and returns itsTrace. ReturnsErrNoAnswerrather than an empty string.
Both meter as chats.- Vocabulary —
LearnTerms,Vocabulary,LookupTerm,ForgetTerms. A
learned alias makes a query for any surface form find memories written with
another; matched definitions come back asDefined. - Skills —
StoreSkillsandFindSkills, stored as memories under the
skills/tier. Candidates,FilteredOutandTimingsreport what retrieval did.