legionio 1.2.1 → 1.4.8

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.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +16 -0
  3. data/.gitignore +13 -1
  4. data/.rubocop.yml +45 -69
  5. data/CHANGELOG.md +128 -1
  6. data/CLAUDE.md +533 -0
  7. data/Dockerfile +2 -2
  8. data/Gemfile +292 -3
  9. data/LICENSE +1 -1
  10. data/README.md +386 -143
  11. data/completions/_legion +868 -0
  12. data/completions/legion.bash +280 -0
  13. data/docker_deploy.rb +1 -0
  14. data/docs/README.md +6 -0
  15. data/exe/legion +17 -2
  16. data/legionio.gemspec +29 -23
  17. data/lib/legion/api/chains.rb +58 -0
  18. data/lib/legion/api/coldstart.rb +39 -0
  19. data/lib/legion/api/events.rb +84 -0
  20. data/lib/legion/api/extensions.rb +89 -0
  21. data/lib/legion/api/gaia.rb +19 -0
  22. data/lib/legion/api/helpers.rb +165 -0
  23. data/lib/legion/api/hooks.rb +65 -0
  24. data/lib/legion/api/middleware/auth.rb +102 -0
  25. data/lib/legion/api/nodes.rb +25 -0
  26. data/lib/legion/api/oauth.rb +39 -0
  27. data/lib/legion/api/openapi.rb +1363 -0
  28. data/lib/legion/api/relationships.rb +46 -0
  29. data/lib/legion/api/schedules.rb +78 -0
  30. data/lib/legion/api/settings.rb +41 -0
  31. data/lib/legion/api/tasks.rb +89 -0
  32. data/lib/legion/api/token.rb +31 -0
  33. data/lib/legion/api/transport.rb +73 -0
  34. data/lib/legion/api/workers.rb +219 -0
  35. data/lib/legion/api.rb +121 -0
  36. data/lib/legion/cli/auth_command.rb +87 -0
  37. data/lib/legion/cli/chain.rb +2 -0
  38. data/lib/legion/cli/chain_command.rb +95 -0
  39. data/lib/legion/cli/chat/agent_delegator.rb +75 -0
  40. data/lib/legion/cli/chat/agent_registry.rb +93 -0
  41. data/lib/legion/cli/chat/chat_logger.rb +48 -0
  42. data/lib/legion/cli/chat/checkpoint.rb +127 -0
  43. data/lib/legion/cli/chat/context.rb +116 -0
  44. data/lib/legion/cli/chat/extension_tool.rb +32 -0
  45. data/lib/legion/cli/chat/extension_tool_loader.rb +117 -0
  46. data/lib/legion/cli/chat/markdown_renderer.rb +101 -0
  47. data/lib/legion/cli/chat/memory_store.rb +108 -0
  48. data/lib/legion/cli/chat/permissions.rb +94 -0
  49. data/lib/legion/cli/chat/session.rb +107 -0
  50. data/lib/legion/cli/chat/session_store.rb +76 -0
  51. data/lib/legion/cli/chat/status_indicator.rb +59 -0
  52. data/lib/legion/cli/chat/subagent.rb +89 -0
  53. data/lib/legion/cli/chat/tool_registry.rb +60 -0
  54. data/lib/legion/cli/chat/tools/edit_file.rb +71 -0
  55. data/lib/legion/cli/chat/tools/read_file.rb +38 -0
  56. data/lib/legion/cli/chat/tools/run_command.rb +41 -0
  57. data/lib/legion/cli/chat/tools/save_memory.rb +29 -0
  58. data/lib/legion/cli/chat/tools/search_content.rb +53 -0
  59. data/lib/legion/cli/chat/tools/search_files.rb +31 -0
  60. data/lib/legion/cli/chat/tools/search_memory.rb +28 -0
  61. data/lib/legion/cli/chat/tools/spawn_agent.rb +45 -0
  62. data/lib/legion/cli/chat/tools/web_search.rb +36 -0
  63. data/lib/legion/cli/chat/tools/write_file.rb +30 -0
  64. data/lib/legion/cli/chat/web_fetch.rb +156 -0
  65. data/lib/legion/cli/chat/web_search.rb +105 -0
  66. data/lib/legion/cli/chat_command.rb +1089 -0
  67. data/lib/legion/cli/check_command.rb +217 -0
  68. data/lib/legion/cli/cohort.rb +2 -0
  69. data/lib/legion/cli/coldstart_command.rb +224 -0
  70. data/lib/legion/cli/commit_command.rb +175 -0
  71. data/lib/legion/cli/completion_command.rb +99 -0
  72. data/lib/legion/cli/config_command.rb +262 -0
  73. data/lib/legion/cli/config_scaffold.rb +263 -0
  74. data/lib/legion/cli/connection.rb +149 -0
  75. data/lib/legion/cli/doctor/bundle_check.rb +51 -0
  76. data/lib/legion/cli/doctor/cache_check.rb +63 -0
  77. data/lib/legion/cli/doctor/config_check.rb +73 -0
  78. data/lib/legion/cli/doctor/database_check.rb +92 -0
  79. data/lib/legion/cli/doctor/extensions_check.rb +77 -0
  80. data/lib/legion/cli/doctor/permissions_check.rb +43 -0
  81. data/lib/legion/cli/doctor/pid_check.rb +59 -0
  82. data/lib/legion/cli/doctor/rabbitmq_check.rb +53 -0
  83. data/lib/legion/cli/doctor/result.rb +45 -0
  84. data/lib/legion/cli/doctor/ruby_version_check.rb +29 -0
  85. data/lib/legion/cli/doctor/vault_check.rb +76 -0
  86. data/lib/legion/cli/doctor_command.rb +180 -0
  87. data/lib/legion/cli/error.rb +7 -0
  88. data/lib/legion/cli/function.rb +4 -2
  89. data/lib/legion/cli/gaia_command.rb +104 -0
  90. data/lib/legion/cli/generate_command.rb +366 -0
  91. data/lib/legion/cli/lex/actor.rb +2 -0
  92. data/lib/legion/cli/lex/exchange.rb +2 -0
  93. data/lib/legion/cli/lex/message.rb +2 -0
  94. data/lib/legion/cli/lex/queue.rb +2 -1
  95. data/lib/legion/cli/lex/runner.rb +3 -1
  96. data/lib/legion/cli/lex/templates/base/dockerfile.erb +1 -1
  97. data/lib/legion/cli/lex_command.rb +578 -0
  98. data/lib/legion/cli/mcp_command.rb +49 -0
  99. data/lib/legion/cli/memory_command.rb +113 -0
  100. data/lib/legion/cli/openapi_command.rb +55 -0
  101. data/lib/legion/cli/output.rb +206 -0
  102. data/lib/legion/cli/plan_command.rb +187 -0
  103. data/lib/legion/cli/pr_command.rb +234 -0
  104. data/lib/legion/cli/relationship.rb +2 -0
  105. data/lib/legion/cli/review_command.rb +309 -0
  106. data/lib/legion/cli/schedule_command.rb +174 -0
  107. data/lib/legion/cli/start.rb +48 -0
  108. data/lib/legion/cli/status.rb +113 -0
  109. data/lib/legion/cli/swarm_command.rb +152 -0
  110. data/lib/legion/cli/task.rb +2 -0
  111. data/lib/legion/cli/task_command.rb +356 -0
  112. data/lib/legion/cli/telemetry_command.rb +106 -0
  113. data/lib/legion/cli/theme.rb +116 -0
  114. data/lib/legion/cli/trigger.rb +6 -3
  115. data/lib/legion/cli/version.rb +5 -2
  116. data/lib/legion/cli/worker_command.rb +172 -0
  117. data/lib/legion/cli.rb +297 -39
  118. data/lib/legion/digital_worker/lifecycle.rb +105 -0
  119. data/lib/legion/digital_worker/registry.rb +51 -0
  120. data/lib/legion/digital_worker/risk_tier.rb +77 -0
  121. data/lib/legion/digital_worker/value_metrics.rb +71 -0
  122. data/lib/legion/digital_worker.rb +47 -0
  123. data/lib/legion/events.rb +68 -0
  124. data/lib/legion/extensions/actors/base.rb +2 -0
  125. data/lib/legion/extensions/actors/defaults.rb +2 -0
  126. data/lib/legion/extensions/actors/every.rb +3 -1
  127. data/lib/legion/extensions/actors/loop.rb +2 -0
  128. data/lib/legion/extensions/actors/nothing.rb +2 -2
  129. data/lib/legion/extensions/actors/once.rb +2 -0
  130. data/lib/legion/extensions/actors/poll.rb +6 -3
  131. data/lib/legion/extensions/actors/subscription.rb +7 -9
  132. data/lib/legion/extensions/builders/actors.rb +2 -0
  133. data/lib/legion/extensions/builders/base.rb +2 -0
  134. data/lib/legion/extensions/builders/helpers.rb +2 -0
  135. data/lib/legion/extensions/builders/hooks.rb +46 -0
  136. data/lib/legion/extensions/builders/runners.rb +2 -0
  137. data/lib/legion/extensions/core.rb +34 -0
  138. data/lib/legion/extensions/data/migrator.rb +3 -1
  139. data/lib/legion/extensions/data/model.rb +2 -0
  140. data/lib/legion/extensions/data.rb +4 -5
  141. data/lib/legion/extensions/helpers/base.rb +2 -0
  142. data/lib/legion/extensions/helpers/cache.rb +2 -0
  143. data/lib/legion/extensions/helpers/core.rb +2 -0
  144. data/lib/legion/extensions/helpers/data.rb +2 -0
  145. data/lib/legion/extensions/helpers/lex.rb +2 -0
  146. data/lib/legion/extensions/helpers/logger.rb +2 -0
  147. data/lib/legion/extensions/helpers/task.rb +2 -0
  148. data/lib/legion/extensions/helpers/transport.rb +2 -0
  149. data/lib/legion/extensions/hooks/base.rb +138 -0
  150. data/lib/legion/extensions/transport.rb +11 -6
  151. data/lib/legion/extensions.rb +42 -8
  152. data/lib/legion/ingress.rb +67 -0
  153. data/lib/legion/lex.rb +2 -22
  154. data/lib/legion/mcp/resources/extension_info.rb +67 -0
  155. data/lib/legion/mcp/resources/runner_catalog.rb +63 -0
  156. data/lib/legion/mcp/server.rb +103 -0
  157. data/lib/legion/mcp/tools/create_chain.rb +50 -0
  158. data/lib/legion/mcp/tools/create_relationship.rb +51 -0
  159. data/lib/legion/mcp/tools/create_schedule.rb +64 -0
  160. data/lib/legion/mcp/tools/delete_chain.rb +52 -0
  161. data/lib/legion/mcp/tools/delete_relationship.rb +52 -0
  162. data/lib/legion/mcp/tools/delete_schedule.rb +52 -0
  163. data/lib/legion/mcp/tools/delete_task.rb +49 -0
  164. data/lib/legion/mcp/tools/describe_runner.rb +92 -0
  165. data/lib/legion/mcp/tools/disable_extension.rb +50 -0
  166. data/lib/legion/mcp/tools/enable_extension.rb +50 -0
  167. data/lib/legion/mcp/tools/get_config.rb +63 -0
  168. data/lib/legion/mcp/tools/get_extension.rb +56 -0
  169. data/lib/legion/mcp/tools/get_status.rb +50 -0
  170. data/lib/legion/mcp/tools/get_task.rb +48 -0
  171. data/lib/legion/mcp/tools/get_task_logs.rb +56 -0
  172. data/lib/legion/mcp/tools/list_chains.rb +48 -0
  173. data/lib/legion/mcp/tools/list_extensions.rb +46 -0
  174. data/lib/legion/mcp/tools/list_relationships.rb +45 -0
  175. data/lib/legion/mcp/tools/list_schedules.rb +51 -0
  176. data/lib/legion/mcp/tools/list_tasks.rb +50 -0
  177. data/lib/legion/mcp/tools/list_workers.rb +53 -0
  178. data/lib/legion/mcp/tools/routing_stats.rb +51 -0
  179. data/lib/legion/mcp/tools/run_task.rb +68 -0
  180. data/lib/legion/mcp/tools/show_worker.rb +48 -0
  181. data/lib/legion/mcp/tools/team_summary.rb +53 -0
  182. data/lib/legion/mcp/tools/update_chain.rb +54 -0
  183. data/lib/legion/mcp/tools/update_relationship.rb +55 -0
  184. data/lib/legion/mcp/tools/update_schedule.rb +65 -0
  185. data/lib/legion/mcp/tools/worker_costs.rb +55 -0
  186. data/lib/legion/mcp/tools/worker_lifecycle.rb +54 -0
  187. data/lib/legion/mcp.rb +20 -0
  188. data/lib/legion/process.rb +15 -3
  189. data/lib/legion/readiness.rb +50 -0
  190. data/lib/legion/runner/log.rb +2 -0
  191. data/lib/legion/runner/status.rb +10 -9
  192. data/lib/legion/runner.rb +4 -0
  193. data/lib/legion/service.rb +142 -19
  194. data/lib/legion/supervision.rb +2 -0
  195. data/lib/legion/version.rb +3 -1
  196. data/lib/legion.rb +5 -0
  197. data/scripts/rollout-ci-workflow.sh +120 -0
  198. data/scripts/sync-github-labels-topics.sh +281 -0
  199. metadata +268 -62
  200. data/.github/workflows/rspec.yml +0 -45
  201. data/.github/workflows/rubocop.yml +0 -28
  202. data/.github/workflows/sourcehawk-scan.yml +0 -20
  203. data/CODE_OF_CONDUCT.md +0 -75
  204. data/CONTRIBUTING.md +0 -55
  205. data/INDIVIDUAL_CONTRIBUTOR_LICENSE.md +0 -30
  206. data/NOTICE.txt +0 -9
  207. data/SECURITY.md +0 -9
  208. data/attribution.txt +0 -1
  209. data/exe/legionio +0 -53
  210. data/exe/lex_gen +0 -5
  211. data/sourcehawk.yml +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 27d7538852deb5d105fcd7e3be3d29f0681f3207d5ca3c93586360c7ac09caa2
4
- data.tar.gz: 8ce104f2e2dc5c5908030ac9c4da10cef6a9b1bda25516794d116eaed9b7ca3b
3
+ metadata.gz: 6f04739022a1b0f58b820dbcc6be1850a1830cd852b6b253c9069d9f9eba5bb1
4
+ data.tar.gz: afa47da3a0fabe43c5379e6a21552fdf65270f6a5426f1309b41e7a390281d91
5
5
  SHA512:
6
- metadata.gz: d5249f3a26128f64b9d001a84838bfcb090fb73c7a095104f5bebb87230663e58d7830433506fe681dec7320ccac874916c94539f7bac290ea45e148692428f8
7
- data.tar.gz: 7a489e733d2fa7b373f5aca7fee5ddd771a58ad1ea4d592a3d8590257e4c8ed13d7eb5fec0cab1ce2a8c3108cf9cdfc8624e9c517299252ed29ee972232a3d87
6
+ metadata.gz: 89de4e81fc89e8610b7b512390d6864dff9cb152079d1ffd02f084d5afb5086ccdf45f78a5947a5f5a3206158768d77d8651df48644bd7c98ba04c77654d11b6
7
+ data.tar.gz: b343fa58368cda584954ba83d85b55b64c2c7e64bbe5dbdcdc841ad75ae553781ddb05d22adcf98898345b4afe0a20d3c902e29a7e4fe7e558121f6c89f56d9f
@@ -0,0 +1,16 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+
7
+ jobs:
8
+ ci:
9
+ uses: LegionIO/.github/.github/workflows/ci.yml@main
10
+
11
+ release:
12
+ needs: ci
13
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
14
+ uses: LegionIO/.github/.github/workflows/release.yml@main
15
+ secrets:
16
+ rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
data/.gitignore CHANGED
@@ -12,4 +12,16 @@
12
12
  *.key
13
13
  # rspec failure tracking
14
14
  .rspec_status
15
- legionio.key
15
+ legionio.key
16
+ # runtime artifacts
17
+ .DS_Store
18
+ legionio.db
19
+ logs/
20
+ # local settings (may contain secrets)
21
+ settings/
22
+ # design reference files
23
+ legion_colors*.html
24
+ legionio_animated*.html
25
+ legionio_wallpaper*.svg
26
+ # generated executive briefs
27
+ legionio_overview*
data/.rubocop.yml CHANGED
@@ -1,90 +1,66 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.4
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
1
6
  Layout/LineLength:
2
7
  Max: 160
3
- IgnoredPatterns:
4
- - .unknown
5
- - .fatal
6
- - .error
7
- - .warn
8
- - .info
9
- - .debug
10
- - .trace
11
- Metrics:
12
- IgnorePatterns:
13
- - .unknown
14
- - .fatal
15
- - .error
16
- - .warn
17
- - .info
18
- - .debug
19
- - .trace
8
+
9
+ Layout/SpaceAroundEqualsInParameterDefault:
10
+ EnforcedStyle: space
11
+
12
+ Layout/HashAlignment:
13
+ EnforcedHashRocketStyle: table
14
+ EnforcedColonStyle: table
15
+
20
16
  Metrics/MethodLength:
21
17
  Max: 50
22
- IgnoredMethods:
23
- - .unknown
24
- - .fatal
25
- - .error
26
- - .warn
27
- - .info
28
- - .debug
29
- - .trace
18
+ Exclude:
19
+ - 'lib/legion/cli/chat_command.rb'
20
+ - 'lib/legion/api/openapi.rb'
21
+
30
22
  Metrics/ClassLength:
31
23
  Max: 1500
24
+
32
25
  Metrics/ModuleLength:
33
26
  Max: 1500
27
+
34
28
  Metrics/BlockLength:
35
29
  Max: 40
36
- IgnoredMethods:
37
- - .unknown
38
- - .fatal
39
- - .error
40
- - .warn
41
- - .info
42
- - .debug
43
- - .trace
30
+ Exclude:
31
+ - 'spec/**/*'
32
+ - 'legionio.gemspec'
33
+ - 'lib/legion/cli/chat_command.rb'
34
+ - 'lib/legion/cli/plan_command.rb'
35
+ - 'lib/legion/cli/swarm_command.rb'
36
+ - 'lib/legion/cli/gaia_command.rb'
37
+ - 'lib/legion/cli/schedule_command.rb'
38
+
44
39
  Metrics/AbcSize:
45
40
  Max: 60
46
- IgnoredMethods:
47
- - .unknown
48
- - .fatal
49
- - .error
50
- - .warn
51
- - .info
52
- - .debug
53
- - .trace
41
+ Exclude:
42
+ - 'lib/legion/cli/chat_command.rb'
43
+
54
44
  Metrics/CyclomaticComplexity:
55
45
  Max: 15
56
- IgnoredMethods:
57
- - .unknown
58
- - .fatal
59
- - .error
60
- - .warn
61
- - .info
62
- - .debug
63
- - .trace
46
+ Exclude:
47
+ - 'lib/legion/cli/chat_command.rb'
48
+
64
49
  Metrics/PerceivedComplexity:
65
50
  Max: 17
66
- IgnoredMethods:
67
- - .unknown
68
- - .fatal
69
- - .error
70
- - .warn
71
- - .info
72
- - .debug
73
- - .trace
74
- Layout/SpaceAroundEqualsInParameterDefault:
75
- EnforcedStyle: space
76
- Style/SymbolArray:
77
- Enabled: true
78
- Layout/HashAlignment:
79
- EnforcedHashRocketStyle: table
80
- EnforcedColonStyle: table
51
+
81
52
  Style/Documentation:
82
53
  Enabled: false
83
- AllCops:
84
- TargetRubyVersion: 2.5
85
- NewCops: enable
86
- SuggestExtensions: false
54
+
55
+ Style/SymbolArray:
56
+ Enabled: true
57
+
87
58
  Style/FrozenStringLiteralComment:
88
- Enabled: false
59
+ Enabled: true
60
+ EnforcedStyle: always
61
+
89
62
  Naming/FileName:
90
63
  Enabled: false
64
+
65
+ Naming/PredicateMethod:
66
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,8 +1,135 @@
1
1
  # Legion Changelog
2
2
 
3
+ ## v1.4.8
4
+
5
+ ### Fixed
6
+ - Relationships API routes now fully functional (removed 501 stub guards, backed by legion-data migration)
7
+ - Relationships MCP tool no longer checks for missing model
8
+ - Gaia API route returns 503 instead of 500 when `Legion::Gaia` is defined but lacks `started?` method
9
+
10
+ ## v1.4.7
11
+
12
+ ### Added
13
+ - Extension-powered chat tools: LEX extensions can ship optional `tools/` directories with `RubyLLM::Tool` subclasses
14
+ - `ExtensionToolLoader` lazily discovers extension tools at chat startup
15
+ - `permission_tier` DSL for extension tools (`:read`, `:write`, `:shell`) with settings override
16
+ - Session mode ceiling: read_only blocks write/shell extension tools regardless of tool declaration
17
+ - Plan mode uses tier-based filtering (no longer hardcoded tool list)
18
+ - `legion generate tool <name>` scaffolds tool + spec in current LEX
19
+ - `legion lex create` now includes empty `tools/` directory
20
+ - Tab completion updated for `legion generate tool`
21
+ - `Permissions.register_extension_tier` and `Permissions.clear_extension_tiers!` for extension tool tier management
22
+ - System prompt includes extension tool names when available
23
+
24
+ ## v1.4.6
25
+
26
+ ### Added
27
+ - `legion doctor` CLI command diagnoses the LegionIO environment and prescribes fixes
28
+ - 10 environment checks: Ruby version, bundle status, config files, RabbitMQ, database, cache, Vault, extensions, PID files, permissions
29
+ - `--fix` flag for auto-remediation of fixable issues (stale PIDs, missing gems, missing config)
30
+ - `--json` flag for machine-readable diagnosis output with pass/fail/warn/skip per check
31
+ - `Doctor::Result` value object with status, message, prescription, and auto_fixable fields
32
+ - Exit code 1 when any check fails, 0 when all checks pass or warn
33
+
34
+ ## v1.4.5
35
+
36
+ ### Added
37
+ - `legion openapi generate` CLI command outputs OpenAPI 3.1.0 spec JSON to stdout or file (-o)
38
+ - `legion openapi routes` CLI command lists all API routes with HTTP method and summary
39
+ - `GET /api/openapi.json` endpoint serves the full OpenAPI 3.1.0 spec at runtime (auth skipped)
40
+ - `Legion::API::OpenAPI` module with `.spec` (returns Hash) and `.to_json` class methods
41
+ - OpenAPI spec covers all 44 routes across 16 resource groups with request/response schemas
42
+ - Auth middleware SKIP_PATHS updated to include `/api/openapi.json`
43
+
44
+ ## v1.4.4
45
+
46
+ ### Added
47
+ - `legion completion bash` subcommand outputs bash tab completion script
48
+ - `legion completion zsh` subcommand outputs zsh tab completion script
49
+ - `legion completion install` subcommand prints shell-specific installation instructions
50
+ - `completions/legion.bash` bash completion script with full command tree coverage
51
+ - `completions/_legion` zsh completion script with descriptions for all commands and flags
52
+ - `legion lex create` now scaffolds a standalone `Client` class in new extensions
53
+
54
+ ## v1.4.3
55
+
56
+ ### Added
57
+ - `legion gaia status` CLI subcommand (probes GET /api/gaia/status, shows cognitive layer health)
58
+ - `GET /api/gaia/status` API route returns GAIA boot state, active channels, heartbeat health
59
+ - `legion schedule` CLI subcommand (list, show, add, remove, logs) wrapping /api/schedules
60
+ - `/commit` chat slash command (AI-generated commit message from staged changes)
61
+ - `/workers` chat slash command (list digital workers from running daemon)
62
+ - `/dream` chat slash command (trigger dream cycle on running daemon)
63
+
64
+ ## v1.4.2
65
+
66
+ ### Added
67
+ - Multiline input support in chat REPL via backslash continuation (end a line with `\` to continue)
68
+ - Continuation prompt (`...`) for multiline input lines
69
+ - Specs for `read_user_input` method (12 examples)
70
+
71
+ ## v1.4.1
72
+
73
+ ### Added
74
+ - CLI status indicators using TTY::Spinner for chat REPL
75
+ - Session lifecycle events (:llm_start, :llm_first_token, :llm_complete, :tool_start, :tool_complete)
76
+ - StatusIndicator class subscribes to session events and manages spinner display
77
+ - Purple-themed braille dot spinner with phase labels (thinking..., running tool_name...)
78
+ - Tool counter prefix ([1/3]) for multi-tool loops
79
+ - Graceful degradation for non-TTY output (piped, redirected)
80
+
81
+ ## v1.4.0
82
+
83
+ ### Added
84
+ - File edit checkpointing system with `/rewind` to undo edits (per-edit, N steps, or per-file)
85
+ - Persistent memory system (`/memory`, `.legion/memory.md`, `~/.legion/memory/global.md`)
86
+ - `legion memory` CLI subcommand for managing persistent memory entries
87
+ - Web search via DuckDuckGo HTML scraping (`/search` slash command)
88
+ - Background subagent spawning via headless subprocess (`/agent`, `SpawnAgent` tool)
89
+ - Custom agent definitions (`.legion/agents/*.json` or `.yaml`) with `@name` delegation
90
+ - Plan mode toggle (`/plan`) — restricts tools to read-only for exploration
91
+ - `legion plan` CLI subcommand for standalone read-only exploration sessions
92
+ - Multi-agent swarm orchestration (`/swarm`, `legion swarm` CLI subcommand)
93
+ - `SaveMemory` and `SearchMemory` LLM tools for auto-remembering
94
+ - `WebSearch` LLM tool for web search during conversations
95
+ - Checkpoint integration in `WriteFile` and `EditFile` tools (auto-save before writes)
96
+
97
+ ### Changed
98
+ - Rubocop exclusions added for plan_command.rb and swarm_command.rb (BlockLength)
99
+ - Rubocop exclusions added for chat_command.rb (MethodLength, CyclomaticComplexity)
100
+
101
+ ## v1.3.0
102
+
103
+ ### Added
104
+ - `legion chat` interactive REPL and headless prompt mode with LLM integration
105
+ - `legion commit` command for AI-generated commit messages
106
+ - `legion pr` command for AI-generated pull request descriptions
107
+ - `legion review` command for AI-powered code review
108
+ - `/fetch` slash command for injecting web page context into chat sessions
109
+ - Chat permission system with read/write/shell tiers and auto-approve mode
110
+ - Chat session persistence (save/load/list) and `/compact` context compression
111
+ - `--max-budget-usd` cost cap for chat sessions
112
+ - `--incognito` mode to disable automatic session history saving
113
+ - Markdown rendering for chat responses (via rouge)
114
+ - Purple palette theme, orbital ASCII banner, and branded CLI output
115
+ - Chat logger for structured debug/info logging
116
+
117
+ ### Changed
118
+ - Worker lifecycle CLI passes `authority_verified`/`governance_override` flags
119
+ - Worker API accepts governance flags from request body
120
+ - Config `path` command now respects `--config-dir` option
121
+
122
+ ### Fixed
123
+ - Config `sensitive_key?` false positive: `cluster_secret_timeout` no longer redacted
124
+ - `check_command` now rescues `LoadError` (missing gems no longer crash the check run)
125
+ - Config `show`/`path`/`validate` commands call `Connection.shutdown` in ensure blocks
126
+ - Config `path` and `validate` rescue `CLI::Error` properly
127
+ - Worker CLI/API handle `GovernanceRequired` and `AuthorityRequired` exceptions
128
+ - Removed unused `--json`/`--no-color` class_options from generate and mcp commands
129
+
3
130
  ## v1.2.1
4
131
  * Updating LEX CLI templates
5
132
  * Fixing issue with LEX schema migrator
6
133
 
7
134
  ## v1.2.0
8
- Moving from BitBucket to GitHub inside the Optum org. All git history is reset from this point on
135
+ Moving from BitBucket to GitHub. All git history is reset from this point on