Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 67 additions & 79 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

10 changes: 8 additions & 2 deletions src/agent/agent_loop/run_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1272,10 +1272,16 @@ impl MemoryProvider for PreCompressRecorder {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(&self, _: &str, _: &str, _kind: Option<&str>) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down
10 changes: 8 additions & 2 deletions src/agent/builder/reminder_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -379,10 +379,16 @@ fn memory_preamble_injection_uses_trait_dispatch() {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(&self, _: &str, _: &str, _kind: Option<&str>) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down
78 changes: 68 additions & 10 deletions src/agent/review.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ const COMBINED_REVIEW_PROMPT: &str = r#"Review the conversation above and update
- Were there any user corrections about how things should be done?
- Was something tried and failed? Capture what was attempted and WHY it failed.

Classify every entry you save with the `kind` parameter — it drives how memory ranks and what gets evicted first when the budget is full:
• `semantic` — a durable fact or preference ("this project pins the MSRV in rust-toolchain.toml").
• `procedural` — a how-to rule or convention ("run `cargo fmt --all` before committing"). Default for AGENTS.md-style guidance.
• `episodic` — a specific past event worth recalling ("the 0.3 cut broke because the lockfile wasn't regenerated").
• `identity` — who the user/agent is ("operator prefers terse, no-preamble handoffs").
• `working` — short-lived task context. Rarely worth saving and the FIRST to be evicted under budget pressure — prefer not to persist it.
When unsure, use `semantic` for facts and `procedural` for rules.

**2. Update SKILLS (procedural improvements):**
Be ACTIVE — most sessions produce at least one skill update. A pass that does nothing is a missed learning opportunity.

Expand Down Expand Up @@ -768,10 +776,16 @@ mod tests {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(&self, _: &str, _: &str, _kind: Option<&str>) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down Expand Up @@ -861,10 +875,21 @@ mod tests {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(
&self,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down Expand Up @@ -1182,10 +1207,21 @@ mod tests {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(
&self,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down Expand Up @@ -1215,10 +1251,21 @@ mod tests {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(
&self,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down Expand Up @@ -1250,10 +1297,21 @@ mod tests {
fn view(&self, _: &str) -> serde_json::Value {
serde_json::Value::Null
}
fn add(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn add(
&self,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn replace(&self, _: &str, _: &str, _: &str) -> Result<serde_json::Value, String> {
fn replace(
&self,
_: &str,
_: &str,
_: &str,
_kind: Option<&str>,
) -> Result<serde_json::Value, String> {
Ok(serde_json::Value::Null)
}
fn remove(&self, _: &str, _: &str) -> Result<serde_json::Value, String> {
Expand Down
Loading
Loading