personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: remove stray cpo/specs tree introduced by lode qufbiyo2

The structured-message-history decision log addendum landed in the solstone
repo by mistake; the authoritative copy is in the extro Org at
cpo/specs/shipped/generate-structured-message-history.md. Removing the stray
file and its parent directories keeps solstone clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

-21
-21
cpo/specs/in-flight/generate-structured-message-history.md
··· 1 - ## Decision Log 2 - 3 - Request: `req_h5iyql3s` 4 - 5 - - D1 — Config key name: `messages` 6 - The chat pre-hook returns a top-level `messages` key because `_run_talent()` copies non-`template_vars` keys directly onto config, `_apply_template_vars()` does not touch them, and no existing pre-hook key collides with `messages`. 7 - 8 - - D2 — Shape: plain dict 9 - Structured history uses a plain `list[dict[str, str]]` with `role` and `content` because every provider adapter already accepts dict-based message lists or can map them locally without adding shared abstractions. 10 - 11 - - D3 — Owner-turn handling 12 - `owner_message` triggers rely on the current owner turn already being present in the chat tail, while `talent_finished` and `talent_errored` triggers synthesize a final user turn like `[talent <name> finished: <summary>]` or `[talent <name> errored: <reason>]` to keep the model input user-final and explicit. 13 - 14 - - D4 — `chat.md` reconciliation 15 - The flattened `$chat_stream_tail` prompt variable is removed from `talent/chat.md` so structured history lives only in `messages`, and the preview baseline is expected to change because it reflects the raw prompt template. 16 - 17 - - D5 — Talent-event markers in structured history 18 - Mid-tail `talent_spawned`, `talent_finished`, and `talent_errored` events are dropped from the structured message list because they are side-channel metadata that disrupt conversational role alternation; only the current finished/errored trigger is preserved via the synthesized final user turn. 19 - 20 - - D6 — Google mapper 21 - Google generate paths convert structured `{role, content}` dicts into Gemini-native `types.Content` objects, mapping `assistant` to `model`, while leaving `system_instruction` on `GenerateContentConfig` and keeping the legacy string/list-of-strings path unchanged.