aigency 0.3.0 → 0.4.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/README.md +7 -15
  4. data/lib/aigency/aigent/current_time.rb +33 -0
  5. data/lib/aigency/aigent/shell.rb +108 -0
  6. data/lib/aigency/aigent.rb +52 -35
  7. data/lib/aigency/delegator.rb +11 -0
  8. data/lib/aigency/plugin/shell.rb +11 -0
  9. data/lib/aigency/plugin.rb +6 -2
  10. data/lib/aigency/rake.rb +13 -0
  11. data/lib/aigency/sandbox/exec.rb +2 -2
  12. data/lib/aigency/sandbox.rb +5 -4
  13. data/lib/aigency/shell.rb +4 -11
  14. data/lib/aigency/tempdir/helpers.rb +15 -0
  15. data/lib/aigency/tempdir/list.rb +17 -0
  16. data/lib/aigency/tempdir/read.rb +32 -0
  17. data/lib/aigency/tempdir/size.rb +27 -0
  18. data/lib/aigency/tempdir/write.rb +28 -0
  19. data/lib/aigency/tempdir.rb +19 -0
  20. data/lib/aigency/tool.rb +5 -0
  21. data/lib/aigency/usability.rb +1 -0
  22. data/lib/aigency/version.rb +1 -1
  23. data/lib/aigency/workspace/cat.rb +2 -2
  24. data/lib/aigency/workspace/{shell.rb → cmd.rb} +2 -2
  25. data/lib/aigency/workspace/copy_tempdir_file.rb +28 -0
  26. data/lib/aigency/workspace/cp.rb +2 -2
  27. data/lib/aigency/workspace/diff.rb +2 -2
  28. data/lib/aigency/workspace/grep.rb +2 -2
  29. data/lib/aigency/workspace/head.rb +2 -2
  30. data/lib/aigency/workspace/ls.rb +2 -2
  31. data/lib/aigency/workspace/mkdir.rb +2 -2
  32. data/lib/aigency/workspace/mv.rb +2 -2
  33. data/lib/aigency/workspace/rm.rb +2 -2
  34. data/lib/aigency/workspace/tail.rb +2 -2
  35. data/lib/aigency/workspace/wc.rb +2 -2
  36. data/lib/aigency/workspace/write.rb +2 -2
  37. data/lib/aigency/workspace.rb +3 -4
  38. data/lib/aigency.rb +16 -14
  39. data/scaffold/{Rakefile → aigent/aigent.rake} +1 -10
  40. data/scaffold/{.gitignore → enlist/.gitignore} +1 -0
  41. data/scaffold/{README.md → enlist/README.md} +7 -3
  42. data/scaffold/enlist/Rakefile +9 -0
  43. data/scaffold/enlist/bin/aigent +11 -0
  44. data/scaffold/{config → enlist/config}/schedule.rb +5 -0
  45. data/scaffold/sandbox/Dockerfile +37 -0
  46. data/scaffold/sandbox/docker-compose.yml +37 -0
  47. data/{lib/aigency/sandbox/squid.conf.tpl → scaffold/sandbox/squid.conf} +4 -2
  48. data/scaffold/sandbox/ssh_config +2 -0
  49. metadata +43 -15
  50. data/lib/aigency/sandbox/Dockerfile.tpl +0 -13
  51. data/lib/aigency/sandbox/docker-compose.yml.tpl +0 -26
  52. data/scaffold/config/aigent.yml +0 -9
  53. /data/scaffold/{.env.example → enlist/.env.example} +0 -0
  54. /data/scaffold/{Gemfile → enlist/Gemfile} +0 -0
  55. /data/scaffold/{IDENTITY.md → enlist/IDENTITY.md} +0 -0
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tmpdir'
4
+ require 'fileutils'
5
+
6
+ module Aigency
7
+ module Tempdir
8
+ require 'aigency/tempdir/helpers'
9
+ require 'aigency/tempdir/list'
10
+ require 'aigency/tempdir/read'
11
+ require 'aigency/tempdir/write'
12
+ require 'aigency/tempdir/size'
13
+
14
+ PATH = Dir.mktmpdir
15
+ TOOLS = [List, Read, Write, Size]
16
+
17
+ at_exit { FileUtils.rm_rf PATH }
18
+ end
19
+ end
data/lib/aigency/tool.rb CHANGED
@@ -5,5 +5,10 @@ module Aigency
5
5
  #
6
6
  class Tool < RubyLLM::Tool
7
7
  include Usability
8
+
9
+ # class << self
10
+ # alias desc description
11
+ # alias params parameters
12
+ # end
8
13
  end
9
14
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Aigency
4
4
  module Usability
5
+ # @return [Aigent]
5
6
  attr_reader :aigent
6
7
 
7
8
  def initialize(aigent)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aigency
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Cat < Shell
6
- desc 'Run the `cat` shell command in your workspace'
5
+ class Cat < Cmd
6
+ description 'Run the `cat` shell command in your workspace'
7
7
 
8
8
  def command = 'cat'
9
9
  end
@@ -4,7 +4,7 @@ require 'open3'
4
4
 
5
5
  module Aigency
6
6
  module Workspace
7
- class Shell < Tool
7
+ class Cmd < Tool
8
8
  include Helpers
9
9
 
10
10
  # @abstract
@@ -34,7 +34,7 @@ module Aigency
34
34
  end
35
35
 
36
36
  def self.inherited other
37
- other.params do
37
+ other.parameters do
38
38
  string :directory, description: "The working directory relative to workspace", required: false
39
39
  array :arguments, of: :string, description: "Command arguments", required: false
40
40
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+
5
+ module Aigency
6
+ module Workspace
7
+ class CopyTempdirFile < Tool
8
+ include Tempdir::Helpers
9
+ include Workspace::Helpers
10
+
11
+ description 'Copy a file from tempdir to workspace'
12
+
13
+ parameters do
14
+ string :tempdir_source, description: "A source filename in tempdir", required: true
15
+ string :workspace_dest, description: "A destination filename in workspace", required: true
16
+ end
17
+
18
+ def execute(tempdir_source:, workspace_dest:)
19
+ aigent.log.puts "[Workspace::CopyTempdirFile] #{tempdir_source.inspect} #{workspace_dest.inspect}"
20
+ abs_tempdir = expand_in_tempdir(tempdir_source)
21
+ abs_workspace = expand_in_workspace(workspace_dest)
22
+ FileUtils.copy_file abs_tempdir, abs_workspace
23
+ rescue StandardError => e
24
+ { success: false, error: "[#{e.class}] #{e.message}"}
25
+ end
26
+ end
27
+ end
28
+ end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Cp < Shell
6
- desc 'Run the `cp` shell command in your workspace'
5
+ class Cp < Cmd
6
+ description 'Run the `cp` shell command in your workspace'
7
7
 
8
8
  def command = 'cp'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Diff < Shell
6
- desc 'Run the `diff` shell command in your workspace'
5
+ class Diff < Cmd
6
+ description 'Run the `diff` shell command in your workspace'
7
7
 
8
8
  def command = 'diff'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Grep < Shell
6
- desc 'Run the `grep` shell command in your workspace'
5
+ class Grep < Cmd
6
+ description 'Run the `grep` shell command in your workspace'
7
7
 
8
8
  def command = 'grep'
9
9
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Head < Shell
6
- desc 'Run the `head` shell command in your workspace'
5
+ class Head < Cmd
6
+ description 'Run the `head` shell command in your workspace'
7
7
 
8
8
  def command = 'head'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Ls < Shell
6
- desc 'Run the `ls` shell command in your workspace'
5
+ class Ls < Cmd
6
+ description 'Run the `ls` shell command in your workspace'
7
7
 
8
8
  def command = 'ls'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Mkdir < Shell
6
- desc 'Run the `mkdir` shell command in your workspace'
5
+ class Mkdir < Cmd
6
+ description 'Run the `mkdir` shell command in your workspace'
7
7
 
8
8
  def command = 'mkdir'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Mv < Shell
6
- desc 'Run the `mv` shell command in your workspace'
5
+ class Mv < Cmd
6
+ description 'Run the `mv` shell command in your workspace'
7
7
 
8
8
  def command = 'mv'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Rm < Shell
6
- desc 'Run the `rm` shell command in your workspace'
5
+ class Rm < Cmd
6
+ description 'Run the `rm` shell command in your workspace'
7
7
 
8
8
  def command = 'rm'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Tail < Shell
6
- desc 'Run the `tail` shell command in your workspace'
5
+ class Tail < Cmd
6
+ description 'Run the `tail` shell command in your workspace'
7
7
 
8
8
  def command = 'tail'
9
9
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class Wc < Shell
6
- desc 'Run the `wc` shell command in your workspace'
5
+ class Wc < Cmd
6
+ description 'Run the `wc` shell command in your workspace'
7
7
 
8
8
  def command = 'wc'
9
9
 
@@ -10,9 +10,9 @@ module Aigency
10
10
  class Write < Tool
11
11
  include Helpers
12
12
 
13
- desc 'Write or append to a file in the workspace'
13
+ description 'Write or append to a file in the workspace'
14
14
 
15
- params do
15
+ parameters do
16
16
  string :filename, description: "The filename relative to the workspace", required: true
17
17
  string :content, description: "The data to write to the file", required: true
18
18
  string :append, description: "Append if true or overwrite if false", required: true
@@ -2,10 +2,8 @@
2
2
 
3
3
  module Aigency
4
4
  module Workspace
5
- class PathError < ArgumentError; end
6
-
7
5
  require 'aigency/workspace/helpers'
8
- require 'aigency/workspace/shell'
6
+ require 'aigency/workspace/cmd'
9
7
  require 'aigency/workspace/cat'
10
8
  require 'aigency/workspace/cp'
11
9
  require 'aigency/workspace/diff'
@@ -16,11 +14,12 @@ module Aigency
16
14
  require 'aigency/workspace/rm'
17
15
  require 'aigency/workspace/wc'
18
16
  require 'aigency/workspace/write'
17
+ require 'aigency/workspace/copy_tempdir_file'
19
18
 
20
19
  Plugin.register Plugin.new(
21
20
  'workspace',
22
21
  directories: ['data/workspace'],
23
- tools: [Cat, Cp, Diff, Grep, Ls, Mkdir, Mv, Rm, Wc, Write],
22
+ tools: [Cat, Cp, Diff, Grep, Ls, Mkdir, Mv, Rm, Wc, Write, CopyTempdirFile],
24
23
  config: <<~FILE
25
24
  prompt: "The workspace tools provide access to a readable and writeable directory."
26
25
  FILE
data/lib/aigency.rb CHANGED
@@ -2,21 +2,23 @@
2
2
 
3
3
  require 'ruby_llm'
4
4
 
5
- # Core
6
- require 'aigency/version'
7
- require 'aigency/usability'
8
- require 'aigency/tool'
9
- require 'aigency/aigent'
10
- require 'aigency/plugin'
11
- require 'aigency/shell'
12
-
13
- # Extensions
14
- require 'aigency/workspace'
15
- require 'aigency/sandbox'
16
-
17
5
  module Aigency
6
+ class PathError < ArgumentError; end
7
+
18
8
  GEM_PATH = File.absolute_path(File.join(__dir__, '..'))
19
9
 
20
- class Error < StandardError; end
21
- # Your code goes here...
10
+ # Core
11
+ require 'aigency/version'
12
+ require 'aigency/usability'
13
+ require 'aigency/tool'
14
+ require 'aigency/delegator'
15
+ require 'aigency/plugin'
16
+ require 'aigency/aigent'
17
+ require 'aigency/shell'
18
+ require 'aigency/rake'
19
+
20
+ # Plugins and Tools
21
+ require 'aigency/sandbox'
22
+ require 'aigency/tempdir'
23
+ require 'aigency/workspace'
22
24
  end
@@ -1,7 +1,4 @@
1
- require "bundler/setup"
2
- require 'yaml'
3
- require 'dotenv/load'
4
- require 'aigency'
1
+ # frozen_string_literal: true
5
2
 
6
3
  desc "Run a prompt from a file"
7
4
  task :load, [:filename] do |_, args|
@@ -17,12 +14,6 @@ task :load, [:filename] do |_, args|
17
14
  end
18
15
  end
19
16
 
20
- desc "Talk to the aigent"
21
- task :say, [:text] do |_, args|
22
- aigent = Aigency::Aigent.new('.')
23
- aigent.stream args[:text]
24
- end
25
-
26
17
  desc "Set up aigent plugins"
27
18
  task :setup do
28
19
  aigent = Aigency::Aigent.new('.')
@@ -1 +1,2 @@
1
1
  data
2
+ .env
@@ -38,7 +38,7 @@ The `workspace` plugin gives your aigent a directory where it can manage its own
38
38
 
39
39
  The `sandbox` plugin provides a container where the aigent can not only manage files, but also run commands and scripts.
40
40
 
41
- The `workspace` plugin is sufficient for many aigents. Switch to `sandbox` if you need your aigent to perform complex tasks.
41
+ The `workspace` plugin is sufficient for many aigents. Switch to `sandbox` if you need your aigent to perform software development or other complex tasks.
42
42
 
43
43
  ### 5. Run setup
44
44
 
@@ -50,10 +50,10 @@ rake setup
50
50
 
51
51
  ### Interactive Mode
52
52
 
53
- Talk to your aigent using the Rake task:
53
+ Talk to your aigent using the `say` command:
54
54
 
55
55
  ```bash
56
- rake say["How many fibers are intertwined in a shredded wheat biscuit?"]
56
+ bin/aigent say "How many fibers are intertwined in a shredded wheat biscuit?"
57
57
  ```
58
58
 
59
59
  ### Scheduling Tasks
@@ -84,3 +84,7 @@ If you enable the `sandbox` plugin, you'll need to start the container:
84
84
  ```bash
85
85
  docker compose up -d
86
86
  ```
87
+
88
+ The sandbox app is initialized with an egress that only allows network access to domains that are whitelisted in `squid.conf`. See the `http_targets` and `ssh_targets` ACLs.
89
+
90
+ Manage the sandbox user's SSH configuration in `data/sandbox_ssh`.
@@ -0,0 +1,9 @@
1
+ require "bundler/setup"
2
+ require 'dotenv/load'
3
+ Bundler.require(:default)
4
+
5
+ Aigency::Rake.define('.')
6
+
7
+ # Run `rake --tasks` for a list of tasks provided by aigent plugins.
8
+
9
+ # Custom rake tasks can be added below.
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # turn off warning diagnostics from Ruby
5
+ $VERBOSE=nil
6
+
7
+ require "bundler/setup"
8
+ require 'dotenv/load'
9
+ Bundler.require(:default)
10
+
11
+ Aigency::Aigent::Shell.start(ARGV)
@@ -19,6 +19,11 @@
19
19
 
20
20
  # Learn more: http://github.com/javan/whenever
21
21
 
22
+ job_type :rake, "cd :path && :environment_variable=:environment :bundle_command rake :task :output"
23
+
24
+ set :output, File.join(Dir.pwd, 'data', 'log', 'cron.log')
25
+
26
+ # Example job: run a prompt from a file named `DAILY.md` once a day
22
27
  # every 1.day do
23
28
  # rake "load[DAILY.md]"
24
29
  # end
@@ -0,0 +1,37 @@
1
+ FROM alpine:latest
2
+
3
+ RUN apk update && apk upgrade && apk add --no-cache \
4
+ autoconf \
5
+ bash \
6
+ bison \
7
+ build-base \
8
+ curl \
9
+ git \
10
+ libffi-dev \
11
+ linux-headers \
12
+ mise \
13
+ musl-dev \
14
+ netcat-openbsd \
15
+ nodejs \
16
+ openssh \
17
+ openssl \
18
+ openssl-dev \
19
+ perl \
20
+ pkgconf \
21
+ python3 \
22
+ tzdata \
23
+ xz \
24
+ yaml-dev \
25
+ zlib-dev
26
+
27
+ RUN adduser -D -h /sandbox user \
28
+ && mkdir -p /opt/mise \
29
+ && chown -R user:user /opt/mise
30
+ USER user
31
+ ENV MISE_DATA_DIR=/opt/mise \
32
+ MISE_CONFIG_DIR=/opt/mise/config \
33
+ MISE_TRUSTED_CONFIG_PATHS=/sandbox \
34
+ PATH=/opt/mise/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
35
+ RUN mise use -g ruby@3.4 && mise install --yes
36
+
37
+ CMD ["sleep", "infinity"]
@@ -0,0 +1,37 @@
1
+ services:
2
+ app:
3
+ build:
4
+ context: .
5
+ dockerfile: ./sandbox/Dockerfile
6
+ networks: [sandbox]
7
+ restart: unless-stopped
8
+ depends_on:
9
+ - egress
10
+ volumes:
11
+ - ./data/sandbox:/sandbox
12
+ - ./data/sandbox_ssh:/sandbox/.ssh
13
+ working_dir: /sandbox
14
+ environment:
15
+ - http_proxy=http://egress:3128
16
+ - https_proxy=http://egress:3128
17
+ - HTTP_PROXY=http://egress:3128
18
+ - HTTPS_PROXY=http://egress:3128
19
+ - no_proxy=localhost,127.0.0.1,::1
20
+ - NO_PROXY=localhost,127.0.0.1,::1
21
+ command: ["sleep", "infinity"]
22
+
23
+ egress:
24
+ image: ubuntu/squid
25
+ networks: [sandbox, outside]
26
+ volumes:
27
+ - ./sandbox/squid.conf:/etc/squid/squid.conf:ro
28
+
29
+ networks:
30
+ sandbox:
31
+ internal: true
32
+ driver: bridge
33
+ driver_opts:
34
+ com.docker.network.bridge.gateway_mode_ipv4: isolated
35
+ com.docker.network.bridge.gateway_mode_ipv6: isolated
36
+ outside:
37
+ driver: bridge
@@ -11,10 +11,12 @@ forwarded_for off # don't leak the container's IP downstream
11
11
 
12
12
  acl SSL_ports port 443
13
13
  acl Safe_ports port 80 443
14
- acl http_targets dstdomain example.com
14
+ acl http_targets dstdomain \
15
+ www.example.com
15
16
 
16
17
  acl SSH_ports port 22
17
- acl ssh_targets dstdomain example.com
18
+ acl ssh_targets dstdomain \
19
+ ssh.example.com
18
20
 
19
21
  http_access allow CONNECT ssh_targets SSH_ports
20
22
  http_access deny !Safe_ports
@@ -0,0 +1,2 @@
1
+ Host *
2
+ ProxyCommand nc -X connect -x egress:3128 %h %p
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aigency
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '3.2'
26
+ - !ruby/object:Gem::Dependency
27
+ name: faraday
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.15'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.15'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: fileutils
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -43,14 +57,14 @@ dependencies:
43
57
  requirements:
44
58
  - - "~>"
45
59
  - !ruby/object:Gem::Version
46
- version: '1.15'
60
+ version: '2.1'
47
61
  type: :runtime
48
62
  prerelease: false
49
63
  version_requirements: !ruby/object:Gem::Requirement
50
64
  requirements:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
- version: '1.15'
67
+ version: '2.1'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: thor
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -120,18 +134,28 @@ files:
120
134
  - exe/aigency
121
135
  - lib/aigency.rb
122
136
  - lib/aigency/aigent.rb
137
+ - lib/aigency/aigent/current_time.rb
138
+ - lib/aigency/aigent/shell.rb
139
+ - lib/aigency/delegator.rb
123
140
  - lib/aigency/plugin.rb
141
+ - lib/aigency/plugin/shell.rb
142
+ - lib/aigency/rake.rb
124
143
  - lib/aigency/sandbox.rb
125
- - lib/aigency/sandbox/Dockerfile.tpl
126
- - lib/aigency/sandbox/docker-compose.yml.tpl
127
144
  - lib/aigency/sandbox/exec.rb
128
- - lib/aigency/sandbox/squid.conf.tpl
129
145
  - lib/aigency/shell.rb
146
+ - lib/aigency/tempdir.rb
147
+ - lib/aigency/tempdir/helpers.rb
148
+ - lib/aigency/tempdir/list.rb
149
+ - lib/aigency/tempdir/read.rb
150
+ - lib/aigency/tempdir/size.rb
151
+ - lib/aigency/tempdir/write.rb
130
152
  - lib/aigency/tool.rb
131
153
  - lib/aigency/usability.rb
132
154
  - lib/aigency/version.rb
133
155
  - lib/aigency/workspace.rb
134
156
  - lib/aigency/workspace/cat.rb
157
+ - lib/aigency/workspace/cmd.rb
158
+ - lib/aigency/workspace/copy_tempdir_file.rb
135
159
  - lib/aigency/workspace/cp.rb
136
160
  - lib/aigency/workspace/diff.rb
137
161
  - lib/aigency/workspace/grep.rb
@@ -141,18 +165,22 @@ files:
141
165
  - lib/aigency/workspace/mkdir.rb
142
166
  - lib/aigency/workspace/mv.rb
143
167
  - lib/aigency/workspace/rm.rb
144
- - lib/aigency/workspace/shell.rb
145
168
  - lib/aigency/workspace/tail.rb
146
169
  - lib/aigency/workspace/wc.rb
147
170
  - lib/aigency/workspace/write.rb
148
- - scaffold/.env.example
149
- - scaffold/.gitignore
150
- - scaffold/Gemfile
151
- - scaffold/IDENTITY.md
152
- - scaffold/README.md
153
- - scaffold/Rakefile
154
- - scaffold/config/aigent.yml
155
- - scaffold/config/schedule.rb
171
+ - scaffold/aigent/aigent.rake
172
+ - scaffold/enlist/.env.example
173
+ - scaffold/enlist/.gitignore
174
+ - scaffold/enlist/Gemfile
175
+ - scaffold/enlist/IDENTITY.md
176
+ - scaffold/enlist/README.md
177
+ - scaffold/enlist/Rakefile
178
+ - scaffold/enlist/bin/aigent
179
+ - scaffold/enlist/config/schedule.rb
180
+ - scaffold/sandbox/Dockerfile
181
+ - scaffold/sandbox/docker-compose.yml
182
+ - scaffold/sandbox/squid.conf
183
+ - scaffold/sandbox/ssh_config
156
184
  - sig/aigency.rbs
157
185
  licenses: []
158
186
  metadata: {}
@@ -1,13 +0,0 @@
1
- FROM alpine:latest
2
-
3
- RUN apk add --no-cache \
4
- build-base \
5
- musl-dev \
6
- linux-headers \
7
- git \
8
- curl
9
-
10
- RUN adduser -D -h /sandbox user
11
- USER user
12
-
13
- CMD ["sleep", "infinity"]
@@ -1,26 +0,0 @@
1
- services:
2
- app:
3
- build:
4
- context: .
5
- dockerfile: Dockerfile
6
- volumes:
7
- - ./data/sandbox:/sandbox
8
- - ./data/sandbox_ssh:/sandbox/.ssh:ro
9
- working_dir: /sandbox
10
- command: ["sleep", "infinity"]
11
-
12
- egress:
13
- image: ubuntu/squid
14
- networks: [sandbox, outside]
15
- volumes:
16
- - ./squid.conf:/etc/squid/squid.conf:ro
17
-
18
- networks:
19
- sandbox:
20
- internal: true
21
- driver: bridge
22
- driver_opts:
23
- com.docker.network.bridge.gateway_mode_ipv4: isolated
24
- com.docker.network.bridge.gateway_mode_ipv6: isolated
25
- outside:
26
- driver: bridge
@@ -1,9 +0,0 @@
1
- name: Aigent
2
- openai_api_base: ${OPENAI_API_BASE}
3
- openai_api_key: ${OPENAI_API_KEY}
4
- # max_tokens: 65536
5
- plugins:
6
- # You should only need either a workspace or a sandbox, not both. If you
7
- # enable one, it's recommended that you disable the other.
8
- # - sandbox
9
- - workspace
File without changes
File without changes
File without changes