x_aeon_agents 2.8.1 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +4 -3
- data/TODO.md +1 -0
- data/lib/x_aeon_agents/agent_defaults.rb +47 -2
- data/lib/x_aeon_agents/agents/coder_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/documenter_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/feedback_analyst_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/plan_generator_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/about_analyzer_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/contributing_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/development_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/documentation_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/features_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/how_it_works_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/license_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/public_api_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/quick_start_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/readme/requirements_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/review_responder_agent.rb +1 -0
- data/lib/x_aeon_agents/agents/tester_agent.rb +1 -0
- data/lib/x_aeon_agents/helpers.rb +15 -0
- data/lib/x_aeon_agents/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 65a34b357014c65f6925fabe32e192a1070f0e87840967910921aa0e6aa89bc9
|
|
4
|
+
data.tar.gz: 5966f1f1c4d5bf986c2287b5bc07783f8d58f95a6abf2163ba8fb933bc5e609c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c83f42f410a60e3aa2b7ff70b2e951fa43a7609b776261fff6e607c36630d65a8d2f6dc3f88c304313f251c975e7135fa6f6d256b3fad8d6ea60b98d3449ae3f
|
|
7
|
+
data.tar.gz: b116642387232b0467145d20327be1650afe717d8e4c0b5e3f8c210dbf91fd1b1069e291d23f31e8708f706f4fba83885e52e85f1e28a0496b522aa8fe6861d1
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
# [v2.9.0](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v2.8.1...v2.9.0) (2026-11-13 11:26:58)
|
|
2
|
+
|
|
3
|
+
## Global changes
|
|
4
|
+
### Patches
|
|
5
|
+
|
|
6
|
+
* [feat(cline): constrain agent prompts, filter unused tools and bound runs with default timeout/retries](https://github.com/Muriel-Salvan/x_aeon_agents/commit/cae5e014c5f8c00212b74aa68609a5f0e94aadd3)
|
|
7
|
+
|
|
8
|
+
## Changes for agent_defaults
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* [feat(cline): constrain agent prompts, filter unused tools and bound runs with default timeout/retries](https://github.com/Muriel-Salvan/x_aeon_agents/commit/cae5e014c5f8c00212b74aa68609a5f0e94aadd3)
|
|
12
|
+
|
|
13
|
+
## Changes for agents
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* [feat(cline): constrain agent prompts, filter unused tools and bound runs with default timeout/retries](https://github.com/Muriel-Salvan/x_aeon_agents/commit/cae5e014c5f8c00212b74aa68609a5f0e94aadd3)
|
|
17
|
+
|
|
18
|
+
## Changes for cline
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* [feat(cline): constrain agent prompts, filter unused tools and bound runs with default timeout/retries](https://github.com/Muriel-Salvan/x_aeon_agents/commit/cae5e014c5f8c00212b74aa68609a5f0e94aadd3)
|
|
22
|
+
|
|
1
23
|
# [v2.8.1](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v2.8.0...v2.8.1) (2026-11-12 17:54:34)
|
|
2
24
|
|
|
3
25
|
### Patches
|
data/README.md
CHANGED
|
@@ -327,8 +327,8 @@ Files are looked up in the following locations and evaluated from the lowest pri
|
|
|
327
327
|
- **`configure_agent(agent_class_name) { |agent_config| ... }`** — define the default kwargs to be merged when initializing agents of a given class (e.g. `:CoderAgent`). The block is evaluated every time an agent of this class is instantiated: it is given the currently merged configuration (a Hash of kwargs, that can be modified in place), and returns a Hash of additional kwargs merged on top. It is re-entrant: it can be called several times for the same class, from the same file or from different ones (global, project, env-var designated), each call seeing the configuration accumulated by the previous ones. Typical kwargs keys (as used by the agent frameworks):
|
|
328
328
|
- `skills` — Array of skill names the agent should follow
|
|
329
329
|
- `model` — LLM model to use (e.g. `'deepseek/deepseek-v4-flash'`)
|
|
330
|
-
- `cli_options` — Hash of options merged into the Cline CLI invocation (e.g. `plan: true`)
|
|
331
|
-
- `configure_global` — Proc given the Cline global settings to tweak
|
|
330
|
+
- `cli_options` — Hash of options merged into the Cline CLI invocation (e.g. `plan: true`). Cline agents always get `timeout: 600` (10 minutes) and `retries: 5` by default; options given here supersede them option by option (`nil` disables one)
|
|
331
|
+
- `configure_global` — Proc given the Cline global settings to tweak. Whatever it configures, the Cline tools that X-Aeon agents don't use (agent spawning and team management tools) are always disabled, as is `ask_question` when `interactive` is off; lists are merged without duplicates
|
|
332
332
|
|
|
333
333
|
```ruby
|
|
334
334
|
configure_agent(:PlanGeneratorAgent) do |agent_config|
|
|
@@ -461,7 +461,8 @@ Each capability is implemented by an `Agents::*Agent` class built on `composable
|
|
|
461
461
|
Every agent is enriched by the [`AgentDefaults`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/lib/x_aeon_agents/agent_defaults.rb) mixin, which:
|
|
462
462
|
|
|
463
463
|
- injects `new_agent`, `task`, `step` and `step_agent` to build multi-step pipelines;
|
|
464
|
-
- auto-configures the frameworks (`setup_composable_agents`, `setup_ai_agents`, `setup_cline`) and injects per-class defaults (overridable with the `configure_agent` config DSL);
|
|
464
|
+
- auto-configures the frameworks (`setup_composable_agents`, `setup_ai_agents`, `setup_cline`) and injects per-class defaults (overridable with the `configure_agent` config DSL); for Cline agents, it also injects `timeout: 600` and `retries: 5` CLI options to bound every run (configured options supersede them);
|
|
465
|
+
- disables the Cline tools that X-Aeon agents don't use (agent spawning, team management, and `ask_question` in non-interactive mode) in the Cline global settings, merging them without duplicates with the ones configured by `configure_global`;
|
|
465
466
|
- enforces **input/output artifact contracts** and adds **resume** support (via the `ArtifactContract` + `Resumable` mixins);
|
|
466
467
|
- gives each agent a per-session directory under `Config.data_dir/sessions/<id>`.
|
|
467
468
|
|
data/TODO.md
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
* Fix the tokens metrics that seem to be wrong with Cline.
|
|
1
2
|
* Consider remove the checklists from MarkdownHeavy (maybe having MarkdownFiles?).
|
|
2
3
|
* Embed TaskStarter as an option to implement-issue CLI.
|
|
3
4
|
* Add a --tdd option to implement-issue and use a TddAgent in place of DeveloperAgent.
|
|
@@ -63,6 +63,9 @@ module XAeonAgents
|
|
|
63
63
|
AgentDefaults.root_agents << self if parent_agent.nil?
|
|
64
64
|
# If we inherit from some frameworks initialize them now.
|
|
65
65
|
Config.setup_composable_agents
|
|
66
|
+
# Possible transformation applied to the agent's kwargs once the framework defaults,
|
|
67
|
+
# the config DSL procs and the explicitly given kwargs are merged.
|
|
68
|
+
kwargs_processor = proc { |agent_kwarg_hash| agent_kwarg_hash }
|
|
66
69
|
kwargs_from_agent_defaults =
|
|
67
70
|
case self
|
|
68
71
|
when ComposableAgents::AiAgents::Agent
|
|
@@ -72,9 +75,51 @@ module XAeonAgents
|
|
|
72
75
|
}
|
|
73
76
|
when ComposableAgents::Cline::Agent
|
|
74
77
|
Config.setup_cline
|
|
78
|
+
# Default Cline CLI options bounding every agent run: no run can stall forever,
|
|
79
|
+
# and consecutive mistakes are limited. Configured options supersede them.
|
|
80
|
+
default_cline_cli_options = { timeout: 600, retries: 5 }
|
|
81
|
+
# Whatever Cline global settings are configured (through the config DSL or explicitly),
|
|
82
|
+
# always disable the Cline tools that are not used by X-Aeon agents: agents are
|
|
83
|
+
# orchestrated by ComposableAgents (letting an LLM spawn agents or manage teams would
|
|
84
|
+
# bypass this orchestration), and no human user answers questions in non-interactive mode.
|
|
85
|
+
# Merge these tools with the configured ones, without duplicates.
|
|
86
|
+
kwargs_processor = proc do |cline_agent_kwargs|
|
|
87
|
+
configured_global_settings = cline_agent_kwargs[:configure_global]
|
|
88
|
+
cline_agent_kwargs[:configure_global] = proc do |global_settings|
|
|
89
|
+
configured_global_settings&.call(global_settings)
|
|
90
|
+
disabled_tools = %w[
|
|
91
|
+
spawn_agent
|
|
92
|
+
team_attach_outcome_fragment
|
|
93
|
+
team_await_runs
|
|
94
|
+
team_broadcast
|
|
95
|
+
team_cancel_run
|
|
96
|
+
team_cleanup
|
|
97
|
+
team_create_outcome
|
|
98
|
+
team_finalize_outcome
|
|
99
|
+
team_list_outcomes
|
|
100
|
+
team_list_runs
|
|
101
|
+
team_mission_log
|
|
102
|
+
team_read_mailbox
|
|
103
|
+
team_review_outcome_fragment
|
|
104
|
+
team_run_task
|
|
105
|
+
team_send_message
|
|
106
|
+
team_shutdown_teammate
|
|
107
|
+
team_spawn_teammate
|
|
108
|
+
team_status
|
|
109
|
+
team_task
|
|
110
|
+
teams
|
|
111
|
+
]
|
|
112
|
+
disabled_tools << 'ask_question' unless Config.interactive
|
|
113
|
+
global_settings.disabled_tools = disabled_tools | Array(global_settings.disabled_tools)
|
|
114
|
+
end
|
|
115
|
+
# Always bound Cline runs, while letting the configured CLI options supersede the
|
|
116
|
+
# defaults option by option (a nil value disables a default, as cline-rb skips nil options).
|
|
117
|
+
cline_agent_kwargs[:cli_options] = default_cline_cli_options.merge(cline_agent_kwargs[:cli_options] || {})
|
|
118
|
+
cline_agent_kwargs
|
|
119
|
+
end
|
|
75
120
|
{
|
|
76
121
|
api_key: Config.cline_api_key,
|
|
77
|
-
cli_options: Config.default_cline_cli_args,
|
|
122
|
+
cli_options: Config.default_cline_cli_args.merge(default_cline_cli_options),
|
|
78
123
|
strategy: ComposableAgents::PromptRenderingStrategy::MarkdownHeavyFiles
|
|
79
124
|
}
|
|
80
125
|
else
|
|
@@ -87,7 +132,7 @@ module XAeonAgents
|
|
|
87
132
|
@session_id = session_id || AgentDefaults.singleton_session_id
|
|
88
133
|
@session_dir = "#{Config.data_dir}/sessions/#{@session_id}"
|
|
89
134
|
run_id = "#{@session_id}-#{kwargs[:name] || self.class.name.split('::').last}"
|
|
90
|
-
agent_kwargs = kwargs_from_config.merge(kwargs)
|
|
135
|
+
agent_kwargs = kwargs_processor.call(kwargs_from_config.merge(kwargs))
|
|
91
136
|
# TODO: Redesign how prompt rendering strategies are initialized with regard to the constructors and remove
|
|
92
137
|
# this code smell.
|
|
93
138
|
# The prompt rendering strategy is included in the agent's singleton class by PromptDrivenAgent's
|
|
@@ -73,6 +73,7 @@ module XAeonAgents
|
|
|
73
73
|
EO_CONSTRAINT
|
|
74
74
|
'- Always verify the files you have edited or created at the end of the task to ensure they are completed and working as expected.',
|
|
75
75
|
Helpers.repository_access_constraint(writable: true),
|
|
76
|
+
Helpers.cline_tools_constraint,
|
|
76
77
|
Helpers.non_interactive_constraint,
|
|
77
78
|
'',
|
|
78
79
|
'REMEMBER, be helpful and proactive!',
|
|
@@ -56,6 +56,7 @@ module XAeonAgents
|
|
|
56
56
|
'- Documentation describes the CURRENT STATE only.',
|
|
57
57
|
'- Documentation is NOT a changelog.',
|
|
58
58
|
Helpers.repository_access_constraint(writable: true),
|
|
59
|
+
Helpers.cline_tools_constraint,
|
|
59
60
|
Helpers.non_interactive_constraint
|
|
60
61
|
].compact.join("\n"),
|
|
61
62
|
**agent_params
|
|
@@ -66,6 +66,7 @@ module XAeonAgents
|
|
|
66
66
|
'- Write the extracted requirements to the output artifact file given in this prompt.',
|
|
67
67
|
'- If no implementation is required, write exactly `No requirements` in this file.',
|
|
68
68
|
Helpers.repository_access_constraint,
|
|
69
|
+
Helpers.cline_tools_constraint,
|
|
69
70
|
Helpers.artifacts_access_constraint(artifact_ref(:requirements)),
|
|
70
71
|
Helpers.non_interactive_constraint
|
|
71
72
|
].compact.join("\n")
|
|
@@ -53,6 +53,7 @@ module XAeonAgents
|
|
|
53
53
|
'- You may only analyze and propose plans.',
|
|
54
54
|
'- Do NOT execute the plan yourself.',
|
|
55
55
|
Helpers.repository_access_constraint,
|
|
56
|
+
Helpers.cline_tools_constraint,
|
|
56
57
|
Helpers.artifacts_access_constraint(artifact_ref(:plan)),
|
|
57
58
|
Helpers.non_interactive_constraint
|
|
58
59
|
].compact.join("\n")
|
|
@@ -57,6 +57,7 @@ module XAeonAgents
|
|
|
57
57
|
Do not try to document other parts.
|
|
58
58
|
EO_CONSTRAINT
|
|
59
59
|
Helpers.repository_access_constraint,
|
|
60
|
+
Helpers.cline_tools_constraint,
|
|
60
61
|
Helpers.artifacts_access_constraint(artifact_ref(:about), artifact_ref(:name), artifact_ref(:description)),
|
|
61
62
|
Helpers.non_interactive_constraint
|
|
62
63
|
].compact.join("\n")
|
|
@@ -49,6 +49,7 @@ module XAeonAgents
|
|
|
49
49
|
'- Do not describe the technical setup or prequisites, as they are already covered by other sections.',
|
|
50
50
|
'- Do not cover how to develop in this project: it is already covered in other sections.',
|
|
51
51
|
Helpers.repository_access_constraint,
|
|
52
|
+
Helpers.cline_tools_constraint,
|
|
52
53
|
Helpers.artifacts_access_constraint(artifact_ref(:contributing)),
|
|
53
54
|
Helpers.non_interactive_constraint
|
|
54
55
|
].compact.join("\n")
|
|
@@ -56,6 +56,7 @@ module XAeonAgents
|
|
|
56
56
|
'- Do not cover the end-user main requirements and prerequisites: they are already covered in other sections.',
|
|
57
57
|
'- Do not cover the contribution workflow (pull requests, CI, issues...): this is already covered in other sections.',
|
|
58
58
|
Helpers.repository_access_constraint,
|
|
59
|
+
Helpers.cline_tools_constraint,
|
|
59
60
|
Helpers.artifacts_access_constraint(artifact_ref(:development)),
|
|
60
61
|
Helpers.non_interactive_constraint
|
|
61
62
|
].compact.join("\n")
|
|
@@ -45,6 +45,7 @@ module XAeonAgents
|
|
|
45
45
|
Do not try to document other parts.
|
|
46
46
|
EO_CONSTRAINT
|
|
47
47
|
Helpers.repository_access_constraint,
|
|
48
|
+
Helpers.cline_tools_constraint,
|
|
48
49
|
Helpers.artifacts_access_constraint(artifact_ref(:documentation)),
|
|
49
50
|
Helpers.non_interactive_constraint
|
|
50
51
|
].compact.join("\n")
|
|
@@ -47,6 +47,7 @@ module XAeonAgents
|
|
|
47
47
|
Do not try to document other parts.
|
|
48
48
|
EO_CONSTRAINT
|
|
49
49
|
Helpers.repository_access_constraint,
|
|
50
|
+
Helpers.cline_tools_constraint,
|
|
50
51
|
Helpers.artifacts_access_constraint(artifact_ref(:features)),
|
|
51
52
|
Helpers.non_interactive_constraint
|
|
52
53
|
].compact.join("\n")
|
|
@@ -49,6 +49,7 @@ module XAeonAgents
|
|
|
49
49
|
EO_CONSTRAINT
|
|
50
50
|
'- Do not provide long paragraphs: focus on readability by splitting long paragraphs into several short ones.',
|
|
51
51
|
Helpers.repository_access_constraint,
|
|
52
|
+
Helpers.cline_tools_constraint,
|
|
52
53
|
Helpers.artifacts_access_constraint(artifact_ref(:how_it_works)),
|
|
53
54
|
Helpers.non_interactive_constraint
|
|
54
55
|
].compact.join("\n")
|
|
@@ -45,6 +45,7 @@ module XAeonAgents
|
|
|
45
45
|
Do not try to document other parts.
|
|
46
46
|
EO_CONSTRAINT
|
|
47
47
|
Helpers.repository_access_constraint,
|
|
48
|
+
Helpers.cline_tools_constraint,
|
|
48
49
|
Helpers.artifacts_access_constraint(artifact_ref(:license)),
|
|
49
50
|
Helpers.non_interactive_constraint
|
|
50
51
|
].compact.join("\n")
|
|
@@ -46,6 +46,7 @@ module XAeonAgents
|
|
|
46
46
|
EO_CONSTRAINT
|
|
47
47
|
'- Only document public API entry points: executables and library public methods belonging to yarn `Public API` group.',
|
|
48
48
|
Helpers.repository_access_constraint,
|
|
49
|
+
Helpers.cline_tools_constraint,
|
|
49
50
|
Helpers.artifacts_access_constraint(artifact_ref(:public_api)),
|
|
50
51
|
Helpers.non_interactive_constraint
|
|
51
52
|
].compact.join("\n")
|
|
@@ -52,6 +52,7 @@ module XAeonAgents
|
|
|
52
52
|
EO_CONSTRAINT
|
|
53
53
|
"- This section is not meant for developers: don't describe how to develop, test, document, package or contribute to this project.",
|
|
54
54
|
Helpers.repository_access_constraint,
|
|
55
|
+
Helpers.cline_tools_constraint,
|
|
55
56
|
Helpers.artifacts_access_constraint(artifact_ref(:quick_start)),
|
|
56
57
|
Helpers.non_interactive_constraint
|
|
57
58
|
].compact.join("\n")
|
|
@@ -45,6 +45,7 @@ module XAeonAgents
|
|
|
45
45
|
Do not try to document other parts.
|
|
46
46
|
EO_CONSTRAINT
|
|
47
47
|
Helpers.repository_access_constraint,
|
|
48
|
+
Helpers.cline_tools_constraint,
|
|
48
49
|
Helpers.artifacts_access_constraint(artifact_ref(:requirements)),
|
|
49
50
|
Helpers.non_interactive_constraint
|
|
50
51
|
].compact.join("\n")
|
|
@@ -73,6 +73,7 @@ module XAeonAgents
|
|
|
73
73
|
'- You MUST NOT ask for user confirmation.',
|
|
74
74
|
"- Write the reply text to the output artifact file `#{artifact_ref(:reply)}`.",
|
|
75
75
|
Helpers.repository_access_constraint,
|
|
76
|
+
Helpers.cline_tools_constraint,
|
|
76
77
|
Helpers.artifacts_access_constraint(artifact_ref(:reply)),
|
|
77
78
|
Helpers.non_interactive_constraint
|
|
78
79
|
].compact.join("\n")
|
|
@@ -61,6 +61,7 @@ module XAeonAgents
|
|
|
61
61
|
)
|
|
62
62
|
self.constraints = [
|
|
63
63
|
Helpers.repository_access_constraint(writable: true),
|
|
64
|
+
Helpers.cline_tools_constraint,
|
|
64
65
|
Helpers.artifacts_access_constraint(artifact_ref(:plan_modifications)),
|
|
65
66
|
Helpers.non_interactive_constraint
|
|
66
67
|
].compact.join("\n")
|
|
@@ -197,6 +197,21 @@ module XAeonAgents
|
|
|
197
197
|
'so proceed using your best judgment without asking'
|
|
198
198
|
end
|
|
199
199
|
|
|
200
|
+
# Get the constraint explaining how to use the tools that are available to agents of the Cline kind.
|
|
201
|
+
# Constraints are rendered as Markdown bullet lists: the returned sentences include their own bullet prefixes.
|
|
202
|
+
#
|
|
203
|
+
# @return [String] The constraint about using the tools available to Cline agents
|
|
204
|
+
def cline_tools_constraint
|
|
205
|
+
<<~EO_CONSTRAINT.rstrip
|
|
206
|
+
- The `run_commands` tool takes ONE shell script as a plain string.
|
|
207
|
+
- NEVER wrap it in `[ ]` or JSON.
|
|
208
|
+
- One command per call; chain commands with `&&` only on one line.
|
|
209
|
+
- Never use multi-line heredocs.
|
|
210
|
+
- Always use the `editor` tool to write files.
|
|
211
|
+
- You are a single agent: there is no team. NEVER call `team_*` tools: they will fail and count as mistakes.
|
|
212
|
+
EO_CONSTRAINT
|
|
213
|
+
end
|
|
214
|
+
|
|
200
215
|
# Allow user to review and edit content before using it
|
|
201
216
|
#
|
|
202
217
|
# When the interactive mode is disabled (Config.interactive), no review file
|