Commit Graph

69 Commits

Author SHA1 Message Date
Ettore Di Giacinto e4cc5598e3 fixup tests
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 23:05:51 +00:00
Ettore Di Giacinto aa7fa3e148 Drop last message from subtasks in plan execution
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 23:05:51 +00:00
Ettore Di Giacinto 165ea204c7 fix tests
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 23:05:51 +00:00
Ettore Di Giacinto 7a37056d12 feat: improve control loop
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 23:05:51 +00:00
Ettore Di Giacinto af34921ff5 chore: consume reasoning (#34)
* chore: consume reasoning

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* break instead

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Refactor

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Adapt tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 22:34:13 +01:00
Ettore Di Giacinto da0d4ceb2b Return last message when no tools are selected (#33)
* Return last message when no tools are selected

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve logging

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Allow agent to disengage also without sink state

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* ask when needed

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Allow to keep old behavior

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* tests fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-14 21:17:34 +01:00
Ettore Di Giacinto a5346975d4 chore: return any result from tools in the status (#32)
This allows to put arbitrary data as results of any tool and be later
picked up when inspecting the execution results of the agent.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-06 16:34:01 +01:00
Ettore Di Giacinto b5fa1ef9ec chore: add message manipulator callback (#31)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-05 22:40:59 +01:00
Ettore Di Giacinto 1321987e12 feat(tools): add parallel tool support (#30)
* feat(tools): add parallel tool support

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* linting

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-01-19 23:12:45 +01:00
Ettore Di Giacinto ef0538f67c feat(planning): support multiple reviewers (#29)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-01-19 22:41:19 +01:00
Ettore Di Giacinto 2ec99d0648 fix(plan): add description in the schema
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.8.1
2026-01-15 20:36:24 +00:00
Ettore Di Giacinto f195b2553f feat(todo): add todo-based goal execution similar to cursor agent mode (#25)
* feat(todo): add todo-based goal execution similar to cursor agent mode

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* reinforce tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Bump timeout for tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat: guided tools

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.8.0
2026-01-15 21:19:15 +01:00
Ettore Di Giacinto 35b0d01edb feat: guided tools (#26)
* feat: guided tools

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Update docs

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-01-15 21:19:01 +01:00
Ettore Di Giacinto 7a0768f167 go fmt v0.7.2 2025-12-19 23:04:26 +01:00
Ettore Di Giacinto 1a6237e2ec chore: move logging to its own package so can be shared across repos (#23)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-12-19 23:02:17 +01:00
Ettore Di Giacinto ab4090ff35 chore(logging): allow to set programmatically log level (#22)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.7.1
2025-12-16 21:45:42 +01:00
Ettore Di Giacinto 19ffb31772 chore: return status if we terminate for other reasons (#19)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-12-16 21:45:32 +01:00
Ettore Di Giacinto 2324131eaa feat: add state and feedback (#18)
* feat: allow to adjust tool call with user feedback

Expand the callback signature such as we accept a string for adjusting
the toolcall. If an adjustment is provided and we should continue, then
cogito prompts again the selection process with the user feedback to
improve the tool call.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat: return a state such as the execution can be resumed

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* chore: style changes

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* chore: add tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.7.0
2025-12-07 23:42:24 +01:00
Ettore Di Giacinto ab5e39c511 feat(sink): allow to configure and disable sink state (#17)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.6.0
2025-12-03 22:57:05 +01:00
Grant Foster d7a0254ef1 fix: ensure tool call IDs are properly set and matched between tool calls and results (#15)
* fix: chat id

* fix: format code (gofmt)

* chore: test comment change
v0.5.1
2025-11-07 22:02:37 +01:00
Ettore Di Giacinto d8926243e1 Refactor README for custom tools and annotations
Removed redundant section on creating custom tools and added field annotations for tool arguments.
2025-10-30 18:19:08 +01:00
Ettore Di Giacinto 875c615613 Change iteration expectation to be greater than or equal 2025-10-30 18:16:12 +01:00
Ettore Di Giacinto 8859641f81 feat: declare tool args via struct (#14)
* feat: declare tool args via struct

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* simplify even more the API

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.5.0
2025-10-29 19:20:17 +01:00
Ettore Di Giacinto d94e0bd20e fix: make sure we propagate reasoning
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.4.2
2025-10-28 18:47:21 +01:00
Ettore Di Giacinto 3196b1a2c3 fix: add default reasoning callback
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.4.1
2025-10-28 09:13:53 +01:00
Ettore Di Giacinto 3f982f8fe7 chore: add Reasoning to ToolChoice
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-27 13:24:54 +01:00
Ettore Di Giacinto 933e11d826 chore: add a way to track tool calls
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-27 13:17:52 +01:00
Ettore Di Giacinto 2d07420497 chore: add a way to track reasoning only
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-27 12:45:00 +01:00
Ettore Di Giacinto 23c7064141 feat: enhance tool selection (#13)
* feat: enhance tool selection

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* try to adapt tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Make tests more stable

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add autoplan test

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Don't load MCP prompts if we don't have any

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Reorder things

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* TEST

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Revert "TEST"

This reverts commit b08bbc56d5.

* TEST

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* TEST2

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Try to fix tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add back guidelines

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve next action logic

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* tests

* tests2

* forcereasoning

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* maxiterations

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Fix tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Better error handling

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test

* error handling

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Force text reply

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Two-step param generation approach

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Code cleanup

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add a small note/comment

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Small refinements

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.4.0
2025-10-26 21:37:24 +01:00
Ettore Di Giacinto 5f46a5b9e3 fix: make fragment status a pointer (#12)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-22 17:19:54 +02:00
Ettore Di Giacinto 8b24a604fc Fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 22:58:07 +02:00
Ettore Di Giacinto 1f801b9354 fix(plan): always update plan status also in case of error (#11)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 22:31:10 +02:00
Ettore Di Giacinto 550aad0fa0 Consistently return fragments in case of errors
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.3.3
2025-10-21 22:16:04 +02:00
Ettore Di Giacinto 921ed81d33 Small refactorings
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 20:00:18 +02:00
Ettore Di Giacinto a49cf79c2e feat: re-attempt plans only if enabled, emit ErrgoalNotAchieved
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 18:49:11 +02:00
Ettore Di Giacinto 6da5735ef0 fix: better error propagation
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 18:46:33 +02:00
Ettore Di Giacinto cfcdd18e82 fix: do not always return ErrNoToolSelected
Let's check first if we actually didn't run any tool before assuming so
v0.3.2
2025-10-21 16:14:29 +02:00
Ettore Di Giacinto 6e542ad1b1 chore: track plan description (#10)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 16:07:10 +02:00
Ettore Di Giacinto 9c04ac0b45 Correctly handle errors
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 12:48:53 +02:00
Ettore Di Giacinto 9dba7e36fd fix(tests): adapt to plan behavioral changes
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-20 22:57:48 +02:00
Ettore Di Giacinto f21710b138 chore(plans): improve planning when no tool calls are called
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-20 22:40:43 +02:00
Ettore Di Giacinto 3832318bdf chore: add debugging calls
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-20 22:33:03 +02:00
Ettore Di Giacinto 940ed46607 chore(plan): propagate plans to fragment
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-20 11:09:02 +02:00
Ettore Di Giacinto a22dd87a31 chore(plan): record executed plans
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-20 10:04:18 +02:00
Ettore Di Giacinto 08f259a3a3 fix: correctly pass by tool status results
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.3.1
2025-10-19 21:23:00 +02:00
Ettore Di Giacinto 2f0f800d95 feat(tools): allow to automatically plan (#9)
* feat(tools): allow to automatically plan

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(mcp): display MCPs prompts during tool selection

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feature gate mcp prompts

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add test

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix plans, strict tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.3.0
2025-10-13 09:11:13 +02:00
Ettore Di Giacinto 6307cdecae feat(mcp): Support MCP sessions to source available tools (#8)
* feat(mcp): Support MCP sessions to source available tools

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* chore: docs

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* add e2e test

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* docs

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Update README

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Style cleanup

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.2.0
2025-10-08 23:40:41 +02:00
Ettore Di Giacinto f802d93341 Refactor example code in README.md
Updated code snippets for clarity and error handling.
2025-10-05 18:27:10 +02:00
Ettore Di Giacinto 1a22167f25 Update README
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
v0.1.0
2025-10-03 12:12:53 +02:00
Ettore Di Giacinto 6bb97feb18 feat: add guidelines to steer tool selection (#6)
* feat: add guidelines to steer tool selection

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Display suggested tools

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-03 00:07:19 +02:00