Module: Ace::LLM::Providers::CLI::Atoms::InteractiveStartupPolicy
- Defined in:
- lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb
Class Method Summary collapse
- .codex_overlay_home(working_dir:, subprocess_env: nil) ⇒ Object
- .codex_trust_override(working_dir:, subprocess_env: nil) ⇒ Object
- .escape_toml_basic_string(value) ⇒ Object
- .normalized_env(subprocess_env) ⇒ Object
- .prepare_codex_overlay_home(overlay_home:, working_dir:) ⇒ Object
- .sync_codex_overlay_links(codex_dir) ⇒ Object
- .tmux_context?(subprocess_env = nil) ⇒ Boolean
- .tmux_session_name(env) ⇒ Object
- .write_codex_overlay_config(codex_dir:, working_dir:) ⇒ Object
Class Method Details
.codex_overlay_home(working_dir:, subprocess_env: nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 28 def (working_dir:, subprocess_env: nil) return nil unless tmux_context?(subprocess_env) root = working_dir.to_s.strip return nil if root.empty? = File.join(root, ".ace-local", "llm", "codex-home", Digest::SHA256.hexdigest(root)[0, 12]) (overlay_home: , working_dir: root) end |
.codex_trust_override(working_dir:, subprocess_env: nil) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 19 def codex_trust_override(working_dir:, subprocess_env: nil) return nil unless tmux_context?(subprocess_env) path = working_dir.to_s.strip return nil if path.empty? %{projects."#{escape_toml_basic_string(path)}".trust_level="trusted"} end |
.escape_toml_basic_string(value) ⇒ Object
55 56 57 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 55 def escape_toml_basic_string(value) value.to_s.gsub("\\", "\\\\\\\\").gsub("\"", "\\\\\"") end |
.normalized_env(subprocess_env) ⇒ Object
39 40 41 42 43 44 45 46 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 39 def normalized_env(subprocess_env) env = ENV.to_h return env unless subprocess_env subprocess_env.each_with_object(env) do |(key, value), memo| memo[key.to_s] = value end end |
.prepare_codex_overlay_home(overlay_home:, working_dir:) ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 59 def (overlay_home:, working_dir:) codex_dir = File.join(, ".codex") FileUtils.mkdir_p(codex_dir) (codex_dir) (codex_dir: codex_dir, working_dir: working_dir) end |
.sync_codex_overlay_links(codex_dir) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 67 def (codex_dir) source_dir = File.("~/.codex") return unless Dir.exist?(source_dir) %w[auth.json installation_id version.json skills rules memories].each do |entry| source = File.join(source_dir, entry) next unless File.exist?(source) target = File.join(codex_dir, entry) next if File.exist?(target) || File.symlink?(target) File.symlink(source, target) end end |
.tmux_context?(subprocess_env = nil) ⇒ Boolean
14 15 16 17 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 14 def tmux_context?(subprocess_env = nil) env = normalized_env(subprocess_env) !tmux_session_name(env).empty? end |
.tmux_session_name(env) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 48 def tmux_session_name(env) explicit = env["ACE_TMUX_SESSION"].to_s.strip return explicit unless explicit.empty? env["TMUX"].to_s.strip end |
.write_codex_overlay_config(codex_dir:, working_dir:) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/ace/llm/providers/cli/atoms/interactive_startup_policy.rb', line 82 def (codex_dir:, working_dir:) source_config = File.("~/.codex/config.toml") base = File.exist?(source_config) ? File.read(source_config) : "" trust_block = <<~TOML [projects."#{escape_toml_basic_string(working_dir)}"] trust_level = "trusted" TOML target = File.join(codex_dir, "config.toml") content = base.include?(trust_block.strip) ? base : "#{base.rstrip}#{trust_block}" File.write(target, content) end |