x_aeon_agents 2.0.3 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b67cf75df4c815c149f95a620890b4ce9f40f66d3acbc0d2fe2cf7cc2b13dda2
4
- data.tar.gz: 8c0c2bfd55c721dd5b1d7f0058e562aea9282468e4c80e2b09bbe5669384282c
3
+ metadata.gz: 8b1e7041fddfc65c38861e98fbfc8fda9ea487cb11559f4303632536ca36b6f1
4
+ data.tar.gz: 20e83d9866bd6c2bbb373cfa264341b37e3c19e88d23192fef88eda253bf273f
5
5
  SHA512:
6
- metadata.gz: f1850231c29ca7b7be041751e50dff42caae4990bc2310bcba12d0037d003f724d97dbbfe2ef269cd2e031e41ff8b04ef22e53e9ee5adcedae0e25dda6cab4e0
7
- data.tar.gz: e3447fab7001c38a7a4ec44d78922f62ab370ea828b181493476cee7558cce62e1c7af0259ce402f672f07e70bb348385bcce9e41ca7312c59962432d487d763
6
+ metadata.gz: a7b20717c0585a4e4ee6e95f818c22e0c7ebafc98d302c3af4beb1899fb0406dbac3f5ec59050523702cb0a7e26946072ecebb171e6f9fee5c5aee26adcbe2d1
7
+ data.tar.gz: 318d0c1d1dbdd6d3e2dfef4626f1e1c227b491db5536eeda6cad082398036d1d25f757c350e54f8defcffe388eedfe922c4d64a7dbb2815ca2e53b27d3f28577
data/CHANGELOG.md CHANGED
@@ -1,3 +1,21 @@
1
+ # [v2.1.0](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v2.0.4...v2.1.0) (2026-10-22 13:25:41)
2
+
3
+ ## Global changes
4
+ ### Patches
5
+
6
+ * [feat(skill-installer): add global skills installation support](https://github.com/Muriel-Salvan/x_aeon_agents/commit/165088bc2cbd077cb3ccd781c51d9a590cef0b80)
7
+
8
+ ## Changes for skill-installer
9
+ ### Features
10
+
11
+ * [feat(skill-installer): add global skills installation support](https://github.com/Muriel-Salvan/x_aeon_agents/commit/165088bc2cbd077cb3ccd781c51d9a590cef0b80)
12
+
13
+ # [v2.0.4](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v2.0.3...v2.0.4) (2026-10-22 11:31:50)
14
+
15
+ ### Patches
16
+
17
+ * [refactor(agents): enrich tester plan_modifications contract with type metadata](https://github.com/Muriel-Salvan/x_aeon_agents/commit/2dabb5da11150c89d62d93b631b917c5ca330b49)
18
+
1
19
  # [v2.0.3](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v2.0.2...v2.0.3) (2026-10-21 16:35:35)
2
20
 
3
21
  ## Global changes
@@ -10,7 +10,13 @@ module XAeonAgents
10
10
  #
11
11
  # @return [Hash{Symbol => Object}] Set of input artifacts description, per artifact name
12
12
  def input_artifacts_contracts
13
- { agent: 'Agent name to be used to install skills' }
13
+ {
14
+ agent: 'Agent name to be used to install skills',
15
+ global: {
16
+ description: 'Install skills globally instead of in the project',
17
+ optional: true
18
+ }
19
+ }
14
20
  end
15
21
 
16
22
  # Constructor
@@ -22,9 +28,10 @@ module XAeonAgents
22
28
 
23
29
  # Execute the agent to install skills from the .skills manifest.
24
30
  #
25
- # @param agent [String] Agent name to be used to install skills
31
+ # @param agent [String, Symbol] Agent name to be used to install skills
32
+ # @param global [Boolean] Install skills globally (in the user home directory) instead of in the project
26
33
  # @return [Hash{Symbol => Object}] Output artifacts content
27
- def run(agent: 'cline')
34
+ def run(agent: 'cline', global: false)
28
35
  super
29
36
  agent_name = agent.to_sym
30
37
  original_no_color = ENV.fetch('NO_COLOR', nil)
@@ -39,7 +46,8 @@ module XAeonAgents
39
46
  install_skills_recursive(
40
47
  repo_desc[4..].strip,
41
48
  skills_desc[12..].split(',').map(&:strip),
42
- agent_name
49
+ agent_name,
50
+ global:
43
51
  )
44
52
  end
45
53
 
@@ -49,22 +57,34 @@ module XAeonAgents
49
57
 
50
58
  private
51
59
 
60
+ # Directory in which skills are installed for the given agent.
61
+ #
62
+ # @param _agent [Symbol] Agent to use
63
+ # @param global [Boolean] Whether skills are installed globally
64
+ # @return [String] Skills directory path
65
+ def skills_dir_for(_agent, global)
66
+ # TODO: Adapt to other kinds of agents, or get the directory from skillkit itself.
67
+ if global
68
+ File.join(Dir.home, '.cline', 'skills')
69
+ else
70
+ File.join(Dir.pwd, '.cline', 'skills')
71
+ end
72
+ end
73
+
52
74
  # Install skills using skillkit, including dependencies recursively.
53
75
  #
54
76
  # @param repo [String] Repository
55
77
  # @param skills [Array<String>] Skills to install
56
78
  # @param agent [Symbol] Agent to use
57
- def install_skills_recursive(repo, skills, agent)
79
+ # @param global [Boolean] Whether skills are installed globally
80
+ def install_skills_recursive(repo, skills, agent, global: false)
58
81
  return if skills.empty?
59
82
 
60
- agents_config = {
61
- cline: { skills_dir: '.cline/skills' }
62
- }
63
- skills_dir = agents_config[agent][:skills_dir]
83
+ skills_dir = skills_dir_for(agent, global)
64
84
 
65
85
  task(:install_skills, name: 'Install skills', intent: "Install skills #{repo} / #{skills.join(',')}") do
66
- Helpers.run_cmd("skillkit install #{repo} --yes --skills=#{skills.join(',')} --agent=#{agent}")
67
- fix_skills_metadata(skills, agent)
86
+ Helpers.run_cmd("skillkit install #{repo} --yes --skills=#{skills.join(',')} --agent=#{agent}#{' --global' if global}")
87
+ fix_skills_metadata(skills, skills_dir)
68
88
 
69
89
  # Resolve dependencies
70
90
  deps_per_repo = {}
@@ -82,20 +102,17 @@ module XAeonAgents
82
102
  end
83
103
  end
84
104
 
85
- deps_per_repo.each { |dep_repo, dep_skills| install_skills_recursive(dep_repo, dep_skills, agent) }
105
+ deps_per_repo.each { |dep_repo, dep_skills| install_skills_recursive(dep_repo, dep_skills, agent, global:) }
86
106
  end
87
107
  end
88
108
 
89
109
  # Fix the .skillkit.json subpath property after skillkit install.
90
110
  #
91
111
  # @param skills [Array<String>] Installed skills
92
- # @param agent [Symbol] Agent used
93
- def fix_skills_metadata(skills, agent)
112
+ # @param skills_dir [String] Directory in which skills are installed
113
+ def fix_skills_metadata(skills, skills_dir)
94
114
  require 'json'
95
115
 
96
- agents_config = { cline: { skills_dir: '.cline/skills' } }
97
- skills_dir = agents_config[agent][:skills_dir]
98
-
99
116
  skills.each do |skill_name|
100
117
  json_file = "#{skills_dir}/#{skill_name}/.skillkit.json"
101
118
  json = JSON.parse(File.read(json_file))
@@ -23,7 +23,12 @@ module XAeonAgents
23
23
  #
24
24
  # @return [Hash{Symbol => Object}] Set of output artifacts description, per artifact name
25
25
  def output_artifacts_contracts
26
- super.merge(plan_modifications: 'The modification or divergence you considered from the implementation plan')
26
+ super.merge(
27
+ plan_modifications: {
28
+ description: 'The modification or divergence you considered from the implementation plan',
29
+ type: :markdown
30
+ }
31
+ )
27
32
  end
28
33
 
29
34
  # Constructor
@@ -333,13 +333,16 @@ module XAeonAgents
333
333
  $ xaa install-skills
334
334
 
335
335
  $ xaa install-skills --agent cline
336
+
337
+ $ xaa install-skills --global
336
338
  LONGDESC
337
339
  option :agent, type: :string, default: 'cline', desc: 'Agent name to be used to install skills'
340
+ option :global, type: :boolean, default: false, desc: 'Install skills globally instead of in the project'
338
341
  # Installs skills and their dependencies from the .skills manifest.
339
342
  def install_skills
340
- Agents::SkillInstallerAgent.new(session_id: options[:session_id]).run(
341
- agent: options[:agent].to_sym
342
- )
343
+ kwargs = { agent: options[:agent].to_sym }
344
+ kwargs[:global] = true if options[:global]
345
+ Agents::SkillInstallerAgent.new(session_id: options[:session_id]).run(**kwargs)
343
346
  end
344
347
 
345
348
  # --------------------------------------------------------------------------- #
@@ -2,5 +2,5 @@ module XAeonAgents
2
2
  # @!group Global API
3
3
 
4
4
  # Gem version
5
- VERSION = '2.0.3'
5
+ VERSION = '2.1.0'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: x_aeon_agents
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muriel Salvan