Commit Graph

443 Commits

Author SHA1 Message Date
Cameron
b6394fb3a5 feat: client-side tool call accumulation in dedupedStream (#389) 2026-02-24 16:16:53 -08:00
Cameron
1c078421c8 docs: add Open WebUI setup guide (#390) 2026-02-24 15:49:23 -08:00
Cameron
1eb729d9fd fix: check apiError.message in non-retryable error detection (#387) 2026-02-24 12:25:34 -08:00
Cameron
d33a280d77 feat: add reaction support for Signal channel (#353) 2026-02-24 12:05:51 -08:00
Cameron
cb3a49b42b fix(core): make /reset safe across conversation keys and in-flight sessions (#386) 2026-02-24 12:00:00 -08:00
Cameron
9975568831 feat(core): proactive approval detection via SDK bootstrapState() (#383) 2026-02-24 11:58:44 -08:00
Cameron
b5e44e493a fix: skip retry/recovery for non-retryable API errors (#384) 2026-02-24 11:47:36 -08:00
dependabot[bot]
623532292c chore(deps): bump @letta-ai/letta-code-sdk from 0.1.2 to 0.1.6 (#380)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 11:22:32 -08:00
Jason Carreira
69b3d165d6 Add per-channel conversation overrides (#340)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Cameron <cameron@pfiffer.org>
2026-02-24 11:14:26 -08:00
Cameron
266ded012c fix: custom tool call display with pretty verb headers (#369) 2026-02-24 10:45:04 -08:00
Cameron
43f9b332cd fix(api): surface failed stream results and validate content types (#379) 2026-02-23 17:11:31 -08:00
Cameron
1c083201c3 feat: OpenAI-compatible /v1/chat/completions endpoint (#328) 2026-02-23 16:52:29 -08:00
Cameron
1cad6e6508 feat(core): structured logging with pino (#368) 2026-02-23 16:35:23 -08:00
Cameron
1ce869e5b7 fix(core): gate directive execution in listening mode and anchor paths to workingDir (#371) 2026-02-23 16:28:54 -08:00
Jason Carreira
1fbd6d5a2e Add send-file directive and Discord/CLI file support (#319)
Co-authored-by: Jason Carreira <jason@visotrust.com>
Co-authored-by: Cameron <cameron@pfiffer.org>
Co-authored-by: Charles Packer <packercharles@gmail.com>
Co-authored-by: Sarah Wooders <sarahwooders@gmail.com>
Co-authored-by: Letta <noreply@letta.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:44:34 -08:00
Cameron
ad4c22ba54 fix(whatsapp): fix encryption retries, session lifecycle, and group defaults (#358)
- Fix getMessage callback to return proto.IMessage for delivery retries
- Store incoming messages in messageStore for bidirectional retry
- Stop calling sock.logout() on server stop (was destroying credentials)
- Suppress noisy stack traces, surface actual disconnect reason
- Remove auto-clearing of credentials on connection failures
- Raise session failure threshold from 3 to 8
- Default group behavior to disabled when no groups config

Written by Cameron and Letta Code
2026-02-23 15:22:38 -08:00
Cameron
b1f72e0150 fix: auto-resolve LETTABOT_API_KEY from lettabot-api.json (#367) 2026-02-23 15:04:25 -08:00
Cameron
7028f042af fix: display-reasoning stream fixes and Signal compatibility (#355) 2026-02-23 15:00:17 -08:00
jamesdanielwhitford
cae5b104b3 feat: add Mistral Voxtral transcription support (#228) 2026-02-23 13:37:12 -08:00
Cameron
6bda859559 fix: default memfs to false instead of undefined (#362) 2026-02-23 12:59:13 -08:00
Cameron
e7bb2a77f1 feat: community-contributable loom displays (#361) 2026-02-23 12:39:43 -08:00
Cameron
4fa212a9a1 fix: harden agent store persistence and startup agent discovery (#357) 2026-02-23 12:06:53 -08:00
dependabot[bot]
92d8a0cf10 chore(deps): bump @letta-ai/letta-code-sdk from 0.1.1 to 0.1.2 (#352)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 11:22:07 -08:00
Cameron
0544102fe3 feat: display tool calls and reasoning in channel output (#302) 2026-02-23 09:15:43 -08:00
Cameron
a06641b08d feat: surface meaningful API error messages to users (#350) 2026-02-23 00:11:04 -08:00
github-actions[bot]
a3c944bd13 feat: expose memfs (memory filesystem) option in lettabot config and SDK session (#336)
Adds features.memfs config key that controls whether the Letta Code CLI
receives --memfs or --no-memfs when creating/resuming SDK sessions. This
enables lettabot users to opt into git-backed memory filesystem (context
repositories) for persistent local memory sync.

- Config types: memfs?: boolean on AgentConfig.features, LettaBotConfig.features, BotConfig
- Bot wiring: baseSessionOptions() and createAgent() pass memfs to SDK when defined
- Main wiring: YAML config takes precedence, LETTABOT_MEMFS env var as fallback
- Legacy fix: conversations passthrough in single-agent normalization
- Tests: 3 memfs wiring tests (true/false/undefined), 2 conversations passthrough tests
- Docs: configuration.md section with known limitations, example YAML

Fixes #335

Written by Cameron and Letta Code

"The best way to predict the future is to implement it." -- David Heinemeier Hansson
2026-02-22 05:37:01 +01:00
Jason Carreira
4e697001c0 docs: update conversation routing and group config documentation (#318)
Adds documentation for per-channel conversation routing and updated group configuration options. Fills the gap left by the implementation PRs.

Closes #304

Written by Cameron and Letta Code

"Documentation is a love letter that you write to your future self." -- Damian Conway
2026-02-21 12:38:06 +01:00
Jason Carreira
0ee044bf94 fix: reset-conversation clears per-channel conversations in v2 store (#320)
The reset-conversation CLI command was reading/writing the agent JSON file directly, missing the per-channel conversations map introduced with conversation routing. Now uses Store.clearConversation() which clears both the legacy conversationId and all per-channel conversation keys.

Also adds multi-agent awareness: prompts which agent to reset when multiple agents are configured.

Closes #316

Written by Cameron and Letta Code

"Debugging is twice as hard as writing the code in the first place." -- Brian Kernighan
2026-02-21 12:37:22 +01:00
Jason Carreira
38428c1e7c fix: parse directives before checking no-reply marker (#338)
Fixes reaction-only responses triggering spurious error messages. The <no-reply/> check now runs after directive parsing in both finalizeMessage() and the post-stream handler.

Fixes the case where <actions><react emoji="..." /></actions> as the full response would add the reaction but also send an error message.

Written by Cameron and Letta Code

"First, solve the problem. Then, write the code." -- John Johnson
2026-02-21 12:37:02 +01:00
Cameron
d4c3d32a8d fix: replace unhelpful error messages with actionable guidance (#332) 2026-02-21 12:17:12 +01:00
Cameron
6cc59708ff fix(core): harden session lifecycle around init/send failures (#333) 2026-02-21 12:16:58 +01:00
Sarah Wooders
61c2657885 fix(build): normalize executable bits for CLI bin outputs (#334)
Co-authored-by: Letta <noreply@letta.com>
2026-02-18 11:18:12 -08:00
Cameron
83da7069cf revert: remove unreviewed multi-agent routing scaffold (#330) 2026-02-18 14:57:50 +01:00
Sarah Wooders
44c5a70761 fix(core): restore gateway compatibility and unblock build (#327)
Co-authored-by: Letta <noreply@letta.com>
2026-02-17 18:58:55 -08:00
Sarah Wooders
60f70089a6 feat(core): add multi-agent routing foundation
Add config normalization, routing bindings, and per-agent instance management to support channel/account-aware dispatch with default agent fallback.

👾 Generated with [Letta Code](https://letta.com)

Co-Authored-By: Letta <noreply@letta.com>
2026-02-17 17:34:48 -08:00
Charles Packer
3e38a35736 chore: bump @letta-ai/letta-code-sdk to 0.1.1 (#315) 2026-02-16 23:48:51 -08:00
Charles Packer
d85a836ba7 test: lock SDK session reuse contract for follow-up sends (#314) 2026-02-16 19:52:17 -08:00
Charles Packer
94bd4d2d12 chore(deps): bump @letta-ai/letta-code-sdk to 0.1.0 (#313) 2026-02-16 19:41:11 -08:00
github-actions[bot]
b6bfd14cd9 fix: wire up cron job --deliver flag to actually deliver responses (#290)
Co-authored-by: letta-code <248085862+letta-code@users.noreply.github.com>
Co-authored-by: Cameron <cpfiffer@users.noreply.github.com>
Co-authored-by: Cameron <cameron@pfiffer.org>
2026-02-13 18:10:24 -08:00
Cameron
6ef987a04f fix: modernize onboarding group settings with unified modes (#296) 2026-02-13 17:59:40 -08:00
Cameron
c083638be1 feat: remote pairing approval via API (#301) 2026-02-13 17:35:56 -08:00
Cameron
560380d721 feat: per-channel conversation routing (#299) 2026-02-13 17:21:38 -08:00
Cameron
09ce3b810f fix: listen mode streaming leak + receiveBotMessages for Discord (#295) 2026-02-12 18:57:13 -08:00
Cameron
add73bdb51 feat: show version and commit hash in startup banner (#293) 2026-02-12 18:49:20 -08:00
Cameron
296db3a858 fix: expose WhatsApp/Signal connection fields in per-agent config (#294) 2026-02-12 18:40:46 -08:00
John Wessel
d0a34d209e Auto-bind to 0.0.0.0 on container platforms for health checks (#291)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:38:47 -08:00
Cameron
014c2b56aa fix: read heartbeat target from per-agent config (#292) 2026-02-12 18:36:25 -08:00
Cameron
b79d705a99 perf: reuse SDK session subprocess across messages (#289) 2026-02-12 11:24:58 -08:00
Cameron
01ed38a15d feat: per-agent todo system with heartbeat integration (#288) 2026-02-12 10:23:14 -08:00
Cameron
dcd428d598 fix: improve error logging for failed agent runs (#287) 2026-02-11 15:42:17 -08:00