legionio 1.4.184 → 1.4.185
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/.github/CODEOWNERS +13 -0
- data/.github/dependabot.yml +18 -0
- data/.github/workflows/ci.yml +20 -42
- data/CHANGELOG.md +11 -0
- data/CLAUDE.md +6 -5
- data/Gemfile +1 -0
- data/lib/legion/cli/connection.rb +4 -11
- data/lib/legion/service.rb +6 -23
- data/lib/legion/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f9621be53d738c0999c6bc8258cbea49d64bb52d0b3ff5ec004ab60b460d0db9
|
|
4
|
+
data.tar.gz: 4fbe9c2e3dbc4d33ef6ae6eb0631172020ce869faa75aebcae40f5606b22a5dc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 98bf4e665d4f95bfd4061340e33fd45320f3ccb967677e7bb6086df0c64b7f8fe308506765b6d0798cc504347fd1370eadb3d661c9b06c522b008b0540750da2
|
|
7
|
+
data.tar.gz: e73ee8599eaadd40dfb4c11b91034d24d76caa8c68b719d55bc21aa75346d7fef7fb9943acd8d24a638ff7fb6e264a726ff6ca4891f602f9a89c69774646887b
|
data/.github/CODEOWNERS
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Auto-generated from team-config.yml
|
|
2
|
+
# Team: core
|
|
3
|
+
#
|
|
4
|
+
# To apply: scripts/apply-codeowners.sh LegionIO
|
|
5
|
+
|
|
6
|
+
* @LegionIO/maintainers
|
|
7
|
+
* @LegionIO/core
|
|
8
|
+
|
|
9
|
+
# Path-specific reviewers
|
|
10
|
+
lib/legion/cli/chat/ @LegionIO/ai
|
|
11
|
+
lib/legion/api/ @LegionIO/core
|
|
12
|
+
lib/legion/extensions/ @LegionIO/extensions
|
|
13
|
+
.github/ @LegionIO/infra
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: bundler
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
day: monday
|
|
8
|
+
open-pull-requests-limit: 5
|
|
9
|
+
labels:
|
|
10
|
+
- "type:dependencies"
|
|
11
|
+
- package-ecosystem: github-actions
|
|
12
|
+
directory: /
|
|
13
|
+
schedule:
|
|
14
|
+
interval: weekly
|
|
15
|
+
day: monday
|
|
16
|
+
open-pull-requests-limit: 5
|
|
17
|
+
labels:
|
|
18
|
+
- "type:dependencies"
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -3,55 +3,33 @@ on:
|
|
|
3
3
|
push:
|
|
4
4
|
branches: [main]
|
|
5
5
|
pull_request:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: '0 9 * * 1'
|
|
6
8
|
|
|
7
9
|
jobs:
|
|
8
10
|
ci:
|
|
9
11
|
uses: LegionIO/.github/.github/workflows/ci.yml@main
|
|
12
|
+
with:
|
|
13
|
+
needs-rabbitmq: true
|
|
14
|
+
|
|
15
|
+
security:
|
|
16
|
+
uses: LegionIO/.github/.github/workflows/security-scan.yml@main
|
|
17
|
+
with:
|
|
18
|
+
brakeman-enabled: false
|
|
19
|
+
|
|
20
|
+
version-changelog:
|
|
21
|
+
uses: LegionIO/.github/.github/workflows/version-changelog.yml@main
|
|
22
|
+
|
|
23
|
+
dependency-review:
|
|
24
|
+
uses: LegionIO/.github/.github/workflows/dependency-review.yml@main
|
|
25
|
+
|
|
26
|
+
stale:
|
|
27
|
+
if: github.event_name == 'schedule'
|
|
28
|
+
uses: LegionIO/.github/.github/workflows/stale.yml@main
|
|
10
29
|
|
|
11
30
|
release:
|
|
12
|
-
needs: ci
|
|
31
|
+
needs: [ci]
|
|
13
32
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
14
33
|
uses: LegionIO/.github/.github/workflows/release.yml@main
|
|
15
34
|
secrets:
|
|
16
35
|
rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
|
|
17
|
-
|
|
18
|
-
trigger-homebrew:
|
|
19
|
-
needs: release
|
|
20
|
-
if: needs.release.outputs.changed == 'true'
|
|
21
|
-
runs-on: ubuntu-latest
|
|
22
|
-
steps:
|
|
23
|
-
- name: Trigger unified Homebrew build
|
|
24
|
-
env:
|
|
25
|
-
GH_TOKEN: ${{ secrets.HOMEBREW_DISPATCH_TOKEN }}
|
|
26
|
-
LEGIONIO_VERSION: ${{ needs.release.outputs.version }}
|
|
27
|
-
run: |
|
|
28
|
-
gh api repos/LegionIO/homebrew-tap/dispatches \
|
|
29
|
-
-f event_type=build-legion \
|
|
30
|
-
-f "client_payload[legionio_version]=$LEGIONIO_VERSION" \
|
|
31
|
-
-f "client_payload[ruby_version]=3.4.8" \
|
|
32
|
-
-f "client_payload[package_revision]=1"
|
|
33
|
-
|
|
34
|
-
docker-build:
|
|
35
|
-
name: Build Docker Image
|
|
36
|
-
needs: release
|
|
37
|
-
if: needs.release.outputs.changed == 'true'
|
|
38
|
-
runs-on: ubuntu-latest
|
|
39
|
-
permissions:
|
|
40
|
-
packages: write
|
|
41
|
-
steps:
|
|
42
|
-
- uses: actions/checkout@v4
|
|
43
|
-
- uses: docker/setup-buildx-action@v3
|
|
44
|
-
- uses: docker/login-action@v3
|
|
45
|
-
with:
|
|
46
|
-
registry: ghcr.io
|
|
47
|
-
username: ${{ github.actor }}
|
|
48
|
-
password: ${{ secrets.GITHUB_TOKEN }}
|
|
49
|
-
- uses: docker/build-push-action@v5
|
|
50
|
-
with:
|
|
51
|
-
context: .
|
|
52
|
-
push: true
|
|
53
|
-
tags: |
|
|
54
|
-
ghcr.io/legionio/legion:${{ needs.release.outputs.version }}
|
|
55
|
-
ghcr.io/legionio/legion:latest
|
|
56
|
-
cache-from: type=gha
|
|
57
|
-
cache-to: type=gha,mode=max
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Legion Changelog
|
|
2
2
|
|
|
3
|
+
## [1.4.185] - 2026-03-23
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- Restrict settings search paths to canonical directories (`~/.legionio/settings`, `/etc/legionio/settings`) (#25)
|
|
7
|
+
- Remove broken/dead paths from `Service#default_paths` (`~/legionio`, `$home/legionio`, `./settings`)
|
|
8
|
+
- `CLI::Connection#resolve_config_dir` now delegates to `Loader.default_directories` instead of hardcoded list
|
|
9
|
+
- Add `legion-settings` local path to Gemfile for development
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- `Service#setup_settings` loads all matching directories via `config_dirs:` instead of first-match-wins
|
|
13
|
+
|
|
3
14
|
## [1.4.184] - 2026-03-23
|
|
4
15
|
|
|
5
16
|
### Added
|
data/CLAUDE.md
CHANGED
|
@@ -9,7 +9,7 @@ The primary gem for the LegionIO framework. An extensible async job engine for s
|
|
|
9
9
|
|
|
10
10
|
**GitHub**: https://github.com/LegionIO/LegionIO
|
|
11
11
|
**Gem**: `legionio`
|
|
12
|
-
**Version**: 1.4.
|
|
12
|
+
**Version**: 1.4.185
|
|
13
13
|
**License**: Apache-2.0
|
|
14
14
|
**Docker**: `legionio/legion`
|
|
15
15
|
**Ruby**: >= 3.4
|
|
@@ -194,7 +194,7 @@ Legion (lib/legion.rb)
|
|
|
194
194
|
│ ├── Session # Multi-turn chat session with streaming
|
|
195
195
|
│ ├── SessionStore # Persistent session save/load/list/resume/fork
|
|
196
196
|
│ ├── Permissions # Tool permission model (interactive/auto_approve/read_only)
|
|
197
|
-
│ ├── ToolRegistry # Chat tool discovery and registration (
|
|
197
|
+
│ ├── ToolRegistry # Chat tool discovery and registration (40 built-in + extension tools)
|
|
198
198
|
│ ├── ExtensionTool # permission_tier DSL module for LEX chat tools (:read/:write/:shell)
|
|
199
199
|
│ ├── ExtensionToolLoader # Lazy discovery of tools/ directories from loaded extensions
|
|
200
200
|
│ ├── Context # Project awareness (git, language, instructions, extra dirs)
|
|
@@ -632,7 +632,7 @@ rack-test, rake, rspec, rubocop, rubocop-rspec, simplecov
|
|
|
632
632
|
| `lib/legion/cli/chat/session.rb` | Chat session: multi-turn conversation, streaming, tool use |
|
|
633
633
|
| `lib/legion/cli/chat/session_store.rb` | Session persistence: save, load, list, resume, fork |
|
|
634
634
|
| `lib/legion/cli/chat/permissions.rb` | Tool permission model (interactive/auto_approve/read_only) |
|
|
635
|
-
| `lib/legion/cli/chat/tool_registry.rb` | Chat tool discovery and registration (
|
|
635
|
+
| `lib/legion/cli/chat/tool_registry.rb` | Chat tool discovery and registration (40 tools) |
|
|
636
636
|
| `lib/legion/cli/chat/extension_tool.rb` | permission_tier DSL module for extension chat tools |
|
|
637
637
|
| `lib/legion/cli/chat/extension_tool_loader.rb` | Lazy discovery engine: scans loaded extensions for tools/ directories |
|
|
638
638
|
| `lib/legion/cli/chat/context.rb` | Project awareness: git info, language detection, instructions, extra dirs |
|
|
@@ -645,10 +645,11 @@ rack-test, rake, rspec, rubocop, rubocop-rspec, simplecov
|
|
|
645
645
|
| `lib/legion/cli/chat/agent_registry.rb` | Custom agent definitions from `.legion/agents/*.json` and `.yaml` |
|
|
646
646
|
| `lib/legion/cli/chat/agent_delegator.rb` | `@name` at-mention parsing and dispatch via Subagent |
|
|
647
647
|
| `lib/legion/cli/chat/chat_logger.rb` | Chat-specific logging |
|
|
648
|
+
| `lib/legion/cli/chat/context_manager.rb` | Context window management: dedup, compression, summarization strategies |
|
|
648
649
|
| `lib/legion/cli/chat/progress_bar.rb` | Progress bar rendering for long operations |
|
|
649
650
|
| `lib/legion/cli/chat/status_indicator.rb` | Status indicator (spinner, checkmark, cross) |
|
|
650
651
|
| `lib/legion/cli/chat/team.rb` | Multi-user team support for chat sessions |
|
|
651
|
-
| `lib/legion/cli/chat/tools/` |
|
|
652
|
+
| `lib/legion/cli/chat/tools/` | 40 built-in tools: read_file, write_file, edit_file, search_files, search_content, run_command, save_memory, search_memory, web_search, spawn_agent, search_traces, query_knowledge, ingest_knowledge, consolidate_memory, relate_knowledge, knowledge_maintenance, knowledge_stats, summarize_traces, list_extensions, manage_tasks, system_status, view_events, cost_summary, reflect, manage_schedules, worker_status, detect_anomalies, view_trends, trigger_dream, generate_insights, budget_status, provider_health, model_comparison, shadow_eval_status, entity_extract, arbitrage_status, escalation_status, graph_explore, scheduling_status, memory_status |
|
|
652
653
|
| `lib/legion/chat/skills.rb` | Skill discovery: parses `.legion/skills/` and `~/.legionio/skills/` YAML frontmatter files |
|
|
653
654
|
| `lib/legion/cli/graph_command.rb` | `legion graph` subcommands (show with --format mermaid\|dot, --chain, --output) |
|
|
654
655
|
| `lib/legion/cli/trace_command.rb` | `legion trace search` — NL trace search via LLM |
|
|
@@ -727,7 +728,7 @@ rack-test, rake, rspec, rubocop, rubocop-rspec, simplecov
|
|
|
727
728
|
|
|
728
729
|
```bash
|
|
729
730
|
bundle install
|
|
730
|
-
bundle exec rspec #
|
|
731
|
+
bundle exec rspec # 3194 examples, 0 failures
|
|
731
732
|
bundle exec rubocop # 0 offenses
|
|
732
733
|
```
|
|
733
734
|
|
data/Gemfile
CHANGED
|
@@ -9,6 +9,7 @@ gem 'legion-gaia', path: '../legion-gaia' if File.exist?(File.expand_path('../le
|
|
|
9
9
|
gem 'legion-llm', path: '../legion-llm' if File.exist?(File.expand_path('../legion-llm', __dir__))
|
|
10
10
|
gem 'legion-logging', path: '../legion-logging' if File.exist?(File.expand_path('../legion-logging', __dir__))
|
|
11
11
|
gem 'legion-mcp', path: '../legion-mcp' if File.exist?(File.expand_path('../legion-mcp', __dir__))
|
|
12
|
+
gem 'legion-settings', path: '../legion-settings' if File.exist?(File.expand_path('../legion-settings', __dir__))
|
|
12
13
|
|
|
13
14
|
gem 'lex-agentic-memory', path: '../extensions-agentic/lex-agentic-memory' if File.exist?(File.expand_path('../extensions-agentic/lex-agentic-memory', __dir__))
|
|
14
15
|
gem 'lex-llm-gateway', path: '../extensions-core/lex-llm-gateway' if File.exist?(File.expand_path('../extensions-core/lex-llm-gateway', __dir__))
|
|
@@ -130,19 +130,12 @@ module Legion
|
|
|
130
130
|
def resolve_config_dir
|
|
131
131
|
return @config_dir if @config_dir && Dir.exist?(@config_dir)
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"#{Dir.home}/legionio",
|
|
137
|
-
'~/legionio',
|
|
138
|
-
'./settings'
|
|
139
|
-
].each do |path|
|
|
140
|
-
expanded = File.expand_path(path)
|
|
141
|
-
return expanded if Dir.exist?(expanded)
|
|
133
|
+
require 'legion/settings/loader' unless defined?(Legion::Settings::Loader)
|
|
134
|
+
Legion::Settings::Loader.default_directories.each do |path|
|
|
135
|
+
return path if Dir.exist?(path)
|
|
142
136
|
end
|
|
143
137
|
|
|
144
|
-
|
|
145
|
-
File.expand_path('../../', __dir__)
|
|
138
|
+
nil
|
|
146
139
|
end
|
|
147
140
|
end
|
|
148
141
|
end
|
data/lib/legion/service.rb
CHANGED
|
@@ -134,30 +134,13 @@ module Legion
|
|
|
134
134
|
Legion::Logging.warn "Legion::Rbac failed to load: #{e.message}"
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
def default_paths
|
|
139
|
-
[
|
|
140
|
-
'/etc/legionio',
|
|
141
|
-
"#{Dir.home}/.legionio/settings",
|
|
142
|
-
"#{ENV.fetch('home', nil)}/legionio",
|
|
143
|
-
'~/legionio',
|
|
144
|
-
'./settings'
|
|
145
|
-
]
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def setup_settings(default_dir = __dir__)
|
|
137
|
+
def setup_settings
|
|
149
138
|
require 'legion/settings'
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
config_directory = path
|
|
156
|
-
break
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
Legion::Logging.info "Using directory #{config_directory} for settings"
|
|
160
|
-
Legion::Settings.load(config_dir: config_directory)
|
|
139
|
+
directories = Legion::Settings::Loader.default_directories
|
|
140
|
+
existing = directories.select { |d| Dir.exist?(d) }
|
|
141
|
+
Legion::Logging.info "Settings search directories: #{directories.inspect}"
|
|
142
|
+
existing.each { |d| Legion::Logging.info "Settings: will load from #{d}" }
|
|
143
|
+
Legion::Settings.load(config_dirs: existing)
|
|
161
144
|
Legion::Readiness.mark_ready(:settings)
|
|
162
145
|
Legion::Logging.info('Legion::Settings Loaded')
|
|
163
146
|
self.class.log_privacy_mode_status
|
data/lib/legion/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: legionio
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.4.
|
|
4
|
+
version: 1.4.185
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -356,6 +356,8 @@ extensions: []
|
|
|
356
356
|
extra_rdoc_files: []
|
|
357
357
|
files:
|
|
358
358
|
- ".dockerignore"
|
|
359
|
+
- ".github/CODEOWNERS"
|
|
360
|
+
- ".github/dependabot.yml"
|
|
359
361
|
- ".github/workflow-templates/eval-gate.yml"
|
|
360
362
|
- ".github/workflows/ci-cd.yml"
|
|
361
363
|
- ".github/workflows/ci.yml"
|