agent-lock 2.1.0 → 3.0.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: d1f106a6394f81598c390390a2d83aeb051b9e22d799c23129eeed6aba0f0822
4
- data.tar.gz: d31b63c4c1469eee913e33ca102dcb35f108d7b1aabb24408ec8bdd8b92958d4
3
+ metadata.gz: 346f625f1722df2953c505cc28486065520780e3f85dbe45806a7605e2b73130
4
+ data.tar.gz: 74d61fc0c079449ca1b16d076eef5581fa21396b029ee0ae1c207d3f581c69e2
5
5
  SHA512:
6
- metadata.gz: 8a947455256070a8bc2eb2211f63fdcc970b64e25d479ed57724ac17dbd39a28c4317fcf28465fa91b58942f4a24231af72190c34519640c905c4e04a254b38a
7
- data.tar.gz: ce09be390c7cbbd93315e7b359fd30efbb53fb064d8b98b849fcb8e3fa59756fb85eec0c46b0c23d837aa87aa5d815d726c152bf4be56f44d48163eaa402310d
6
+ metadata.gz: a0fdd381dd171d53d14bf9e24db275c31af2036f9edb3385705dd5e40bf7c2383b5e2c2514128577551590ef965b2e28921aabd27e0c38f4c3947bfe29bf506d
7
+ data.tar.gz: 9647370b0d347701c4d425122d8b87186df7b278cbe414038cb0d601637d772f9d683a0bc29c8cdad5c8b73b47a4064c001a84e538adeae7460f2a4e849f2156
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 4.0.6
1
+ 4.1.0-preview1
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ### Changed
6
+
7
+ - Development moves to Ruby 4.1.0-preview1 (`.ruby-version`). CI runs the suite on both 4.0.6 and 4.1.0-preview1, and rubocop on whatever `.ruby-version` names. `required_ruby_version` is unchanged.
8
+ - `alock skill install` and `alock skill path` are now `alock skills install` and `alock skills path`. The old `skill` spelling is gone.
9
+ - `alock skills install --help` names every skill it installs, and renders at all: an empty example string used to crash dry-cli-help, and the launcher exited 0 with no output.
10
+
5
11
  ## [2.1.0]
6
12
 
7
13
  ### Added
data/README.md CHANGED
@@ -1,17 +1,14 @@
1
- # Agent::Lock (v2.0.1)
1
+ # Agent Lock `agent-lock` CLI
2
2
 
3
3
  [![Ruby](https://github.com/kigster/agent-lock/actions/workflows/main.yml/badge.svg)](https://github.com/kigster/agent-lock/actions/workflows/main.yml)
4
4
 
5
- Advisory locks on files and folders with pluggable backends (redis and file-system provided out the box, with redis being the default if it's available locally). This locking tool is meant to be used by the coding agents that share a checkout.
5
+ A CLI utility `alock` that supports advisory locks on files and folders with pluggable backends (redis and file-system provided out the box, with redis being the default if it's available locally). This locking tool is meant to be used by the coding agents that share a project.
6
6
 
7
7
  > [!NOTE]
8
8
  >
9
- > Please note that `agent-lock` is part of a three-part system:
9
+ > Please note that `agent-lock` is part of a three-part system: [`agentilda`](htttps://github.com/kigster/agentilda) is an AI harness workflow that works by creating specs, plans, and executing the plan until one or more PRs passing CI are created, and [`agentilda-ai-setup`](https://kigster/agentilda-ai-setup) — the GitHub repo that's a mixture of BASH and Ruby installers. It's comes with the [`configuration.yml`](https://github.com/kigster/agentilda-ai-setup/blob/main/configuration.example.yml) file, which determines what skills, commands, plugins and AI coding agents are locally installed.
10
10
  >
11
- > 1. `agentilda` is the Ruby Gem, which is a CLI tool that creates and manages the `.plans` folder, and comes with eight or so specialized agents that take a spec.md file and work through it until it's a set of PRs open, reviewed, and passing on your CI. It does not automatically merge anything.
12
- > 2. [`agentilda-ai-setup`](https://kigster/agentilda-ai-setup) is the GitHub repo that's a mixture of BASH and Ruby installers. It's comes with the [`configuration.yml`](https://github.com/kigster/agentilda-ai-setup/blob/main/configuration.example.yml) file, which lists the installation commands for the coding agents you'd like to install locally, any other executables you might want (for instance, it installs `bt` — braintrust's CLI utility), and then you can list any number of Github Repos and use them to install skills, plugins, commands from them, specifying exactly which you want to install and which you want to exclude. Moreover you can specify a sub-directory of a github repo to install from.
13
- >
14
- > Together, the three repos, after installation provide you with the consistent way to replicate your `~/.agents` and `~/.claude` folders on multiple computers, and to also replicate a consistent agentic software team workflow across many projects.
11
+ > That said, you can absolutely use `agent-lock` gem in your own environment.
15
12
 
16
13
  ## What it is
17
14
 
@@ -27,6 +24,8 @@ Git does not help here. Two agents on one branch and one working tree never prod
27
24
 
28
25
  - **Harnesses** that launch agents over a repository and need them to stay out of each other's way.
29
26
 
27
+ - **Supports multiple local nodes** with the same project directories, if `$REDIS_URL` is set to a non-local Redis instance (it needs to be set to the same value on all participating nodes)
28
+
30
29
  Not for work that can have a checkout of its own. A git worktree per agent removes the sharing altogether, which is better than coordinating it. The locks are advisory: they protect a file only from agents that check. `--enforce` exists for the few files that must not move at all.
31
30
 
32
31
  ## How to use it
@@ -35,7 +34,8 @@ Not for work that can have a checkout of its own. A git worktree per agent remov
35
34
 
36
35
  ```bash
37
36
  gem install agent-lock
38
- alock version # alock must be on PATH
37
+ hash -r
38
+ alock version # alock must be on PATH
39
39
  ```
40
40
 
41
41
  Or add `gem "agent-lock"` to a Gemfile.
@@ -107,10 +107,10 @@ Three things matter, and each one fails silently if skipped:
107
107
  The gem ships a skill that teaches an agent all of the above, so the rules reach the agents rather than living only in this README. Install it into the skills directory your agent reads:
108
108
 
109
109
  ```bash
110
- alock skill install # default: into ~/.agents/skills, for most agents
111
- alock skill install --for claude # into ~/.claude/skills instead
112
- alock skill install --into some/path # anywhere else, --for is ignored if both are given
113
- alock skill path # where the bundled copy is
110
+ alock skills install # default: into ~/.agents/skills, for most agents
111
+ alock skills install --for claude # into ~/.claude/skills instead
112
+ alock skills install --into some/path # anywhere else, --for is ignored if both are given
113
+ alock skills path # where the bundled copy is
114
114
  ```
115
115
 
116
116
  `install` refuses to overwrite a copy that differs (`--force` replaces it) and never touches a symlink, since a symlink is some other installer's.
@@ -290,8 +290,8 @@ Only live claims are counted as held. `--json` gives every record its `status` a
290
290
  | `release-all` | Everything this session and its sub-agents hold | 0 |
291
291
  | `break <scope>` | Take a live lock away from its holder | 0 |
292
292
  | `whoami` | The name this session signs locks with, and its parent | 0 |
293
- | `skill install` | Copy the bundled skill into a skills directory | 1 if a different copy or a symlink is there |
294
- | `skill path` | Where the bundled skill is | 0 |
293
+ | `skills install` | Copy the bundled skill into a skills directory | 1 if a different copy or a symlink is there |
294
+ | `skills path` | Where the bundled skill is | 0 |
295
295
  | `completion bash\|zsh` | Print a shell completion script | 1 for any other shell |
296
296
 
297
297
  Flags:
data/Rakefile CHANGED
@@ -2,11 +2,43 @@
2
2
 
3
3
  require "bundler/gem_tasks"
4
4
  require "rspec/core/rake_task"
5
+ require "timeout"
6
+ require "yard"
5
7
 
6
- RSpec::Core::RakeTask.new(:spec)
8
+ def shell(*args)
9
+ puts "running: #{args.join(" ")}"
10
+ system(args.join(" "))
11
+ end
12
+
13
+ desc "Clean all temporary files"
14
+ task :clean do
15
+ shell("rm -rf pkg/ tmp/ coverage/ doc/ ")
16
+ end
17
+
18
+ desc "Build the gem locally into pkg/"
19
+ task gem: [:build] do
20
+ shell("gem install pkg/*")
21
+ end
7
22
 
8
- require "rubocop/rake_task"
23
+ desc "Set permissions on all files so that users can read them"
24
+ task permissions: [:clean] do
25
+ # One traversal replaces a six-level glob chain that printed "No such file
26
+ # or directory" for every level this project does not have, skipped dotfiles
27
+ # entirely, and silently stopped at depth six. .git is pruned — its objects
28
+ # have no business being group-readable.
29
+ shell("find . -path ./.git -prune -o -type d -exec chmod o+rx,g+rx {} + -o -type f -exec chmod o+r,g+r {} +")
30
+ end
9
31
 
10
- RuboCop::RakeTask.new
32
+ desc "Build the gem and set the permissions"
33
+ task build: :permissions
34
+
35
+ desc "Generate yard documentation"
36
+ YARD::Rake::YardocTask.new(:doc) do |t|
37
+ t.files = %w[lib/**/*.rb exe/*.rb - README.md CHANGELOG.md AGENTS.md LICENSE.txt]
38
+ t.options.unshift("--title", '"FlowEngine — DSL + AST for buildiong complex flows in Ruby."')
39
+ t.after = -> { exec("open doc/index.html") } if RUBY_PLATFORM.match?(/darwin/)
40
+ end
41
+
42
+ RSpec::Core::RakeTask.new(:spec)
11
43
 
12
- task default: %i[spec rubocop]
44
+ task default: :spec
@@ -9,7 +9,7 @@ module Agent
9
9
  module Commands
10
10
  # Where the bundled skill is, for a harness that would rather link it
11
11
  # than copy it, or a configuration that names it by path.
12
- class SkillPath < Base
12
+ class SkillsPath < Base
13
13
  desc "Print the directory of the skill this gem ships"
14
14
 
15
15
  def call(**)
@@ -19,8 +19,8 @@ module Agent
19
19
 
20
20
  # Copy the bundled skill into a skills directory, so an agent learns
21
21
  # how to claim files before it first needs to.
22
- class SkillInstall < Base
23
- desc "Copy the skill this gem ships into a skills directory"
22
+ class SkillsInstall < Base
23
+ desc "Copy the skills this gem ships into a skills directory: #{Skill.bundled.join(", ")}"
24
24
 
25
25
  option :into, type: :string, default: nil, aliases: ["-o"],
26
26
  desc: "The skills directory, default ~/.agents/skills"
@@ -29,8 +29,13 @@ module Agent
29
29
  option :force, type: :boolean, default: false, aliases: ["-f"],
30
30
  desc: "Replace a copy that differs from this one"
31
31
 
32
- example ["", "--into ~/.claude/skills", "--force"]
33
- example ["", "--for claude"]
32
+ # An empty example crashes dry-cli-help's renderer, so the default
33
+ # install is spelled out as an option-free line with a comment.
34
+ example [
35
+ " # into ~/.agents/skills",
36
+ "--for claude # into ~/.claude/skills",
37
+ "--into ~/some/skills --force # replace a copy that differs"
38
+ ]
34
39
 
35
40
  # @param options [Hash]
36
41
  def call(**options)
@@ -63,7 +68,7 @@ module Agent
63
68
  when :current then say("UP TO DATE #{result.path}")
64
69
  when :differs
65
70
  warn_("REFUSED: #{result.path} differs from the copy this gem ships")
66
- warn_(" #{program} skill install --force # replace it")
71
+ warn_(" #{program} skills install --force # replace it")
67
72
  when :linked
68
73
  warn_("REFUSED: #{result.path} is a symlink, so something else installs it; left alone")
69
74
  end
@@ -81,7 +81,7 @@ require_relative "cli/commands/break"
81
81
  require_relative "cli/commands/note"
82
82
  require_relative "cli/commands/resume"
83
83
  require_relative "cli/commands/whoami"
84
- require_relative "cli/commands/skill"
84
+ require_relative "cli/commands/skills"
85
85
  require_relative "cli/commands/version"
86
86
  require_relative "cli/commands/completion"
87
87
 
@@ -99,8 +99,8 @@ module Agent
99
99
  "note" => [Commands::Note, []],
100
100
  "resume" => [Commands::Resume, []],
101
101
  "whoami" => [Commands::Whoami, []],
102
- "skill path" => [Commands::SkillPath, []],
103
- "skill install" => [Commands::SkillInstall, []],
102
+ "skills path" => [Commands::SkillsPath, []],
103
+ "skills install" => [Commands::SkillsInstall, []],
104
104
  "version" => [Commands::Version, %w[-v --version]]
105
105
  }.freeze
106
106
  end
@@ -30,6 +30,10 @@ module Agent
30
30
  # @return [String] the bundled skill's directory
31
31
  def source = File.join(ROOT, NAME)
32
32
 
33
+ # @return [Array<String>] the name of every skill the gem ships, so
34
+ # help text can say what `install` puts on disk
35
+ def bundled = Dir.children(ROOT).select { |name| File.directory?(File.join(ROOT, name)) }.sort
36
+
33
37
  # @return [String] where most agents other than Claude Code look for
34
38
  # a user's own skills; the CLI's `--for claude` points at
35
39
  # `~/.claude/skills` instead
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Agent
4
4
  module Lock
5
- VERSION = "2.1.0"
5
+ VERSION = "3.0.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,189 +1,187 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: agent-lock
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Konstantin Gredeskoul
7
+ - Konstantin Gredeskoul
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: dry-cli
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '1.4'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '1.4'
26
- - !ruby/object:Gem::Dependency
27
- name: dry-cli-autocomplete
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '0.5'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.5'
40
- - !ruby/object:Gem::Dependency
41
- name: dry-cli-help
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '0.5'
47
- type: :runtime
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '0.5'
54
- - !ruby/object:Gem::Dependency
55
- name: dry-cli-ui
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '0.5'
61
- type: :runtime
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '0.5'
68
- - !ruby/object:Gem::Dependency
69
- name: pastel
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '0.8'
75
- type: :runtime
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.8'
82
- - !ruby/object:Gem::Dependency
83
- name: redis
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '5.0'
89
- type: :runtime
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '5.0'
96
- description: 'This compact ruby gem is purely CLI utility: it''s meant to be used
97
- by a team of AI agentsexecuting along one or more the plans in a given repo. Using
98
- worktrees and parallelism it''s easy to 10x the speed of develpoment of software
99
- development compared to even a single agent working on it. Plus each agent can specialize.
100
- Such agents require globsl shared locking mechanism to ensure they are not working
101
- on the same directory, or the same files in same worktree. That is exactly what
102
- this gem does. The CLI binary you invoke is called ''alock''which comes with sub-command
103
- ''completion'' which you can load for BASH or ZSH. However, you are not very likely
104
- going toinvoke this gem directly. It''s used by an Agentic Workflow gem ''agentilda''
105
- to protect shared resources. To try the entire system, it''s recommended to download
106
- the repo https://github.com/kigster/agentilda-ai-setup which both installs the two
107
- gems, and offers a configuration file that installs a set of coding agents, skills,
108
- plugins, commands, from various guthub folders, or via running commands, and so
109
- on. In other words the repo''s purpose is to ensure your agentic setup is identical
110
- from machine to machine, and by modifying the config file you can pick and choose
111
- your skills, your AGENT.md/CLAUDE.md file and so on.'
12
+ - !ruby/object:Gem::Dependency
13
+ name: dry-cli
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ -
17
+ - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: "1.4"
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ -
25
+ - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: "1.4"
28
+ - !ruby/object:Gem::Dependency
29
+ name: dry-cli-autocomplete
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ -
33
+ - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "0.6"
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ -
41
+ - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: "0.6"
44
+ - !ruby/object:Gem::Dependency
45
+ name: dry-cli-help
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ -
49
+ - ~>
50
+ - !ruby/object:Gem::Version
51
+ version: "0.6"
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ -
57
+ - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: "0.6"
60
+ - !ruby/object:Gem::Dependency
61
+ name: dry-cli-ui
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ -
65
+ - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: "0.7"
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ -
73
+ - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: "0.7"
76
+ - !ruby/object:Gem::Dependency
77
+ name: pastel
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ -
81
+ - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: "0.8"
84
+ type: :runtime
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ -
89
+ - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: "0.8"
92
+ - !ruby/object:Gem::Dependency
93
+ name: redis
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ -
97
+ - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: "5.0"
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ -
105
+ - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: "5.0"
108
+ description: "This compact ruby gem is purely CLI utility: it's meant to be used by a team of AI agentsexecuting along one or more the plans in a given repo. Using worktrees and parallelism it's easy to 10x the speed of develpoment of software development compared to even a single agent working on it. Plus each agent can specialize. Such agents require globsl shared locking mechanism to ensure they are not working on the same directory, or the same files in same worktree. That is exactly what this gem does. The CLI binary you invoke is called 'alock'which comes with sub-command 'completion' which you can load for BASH or ZSH. However, you are not very likely going toinvoke this gem directly. It's used by an Agentic Workflow gem 'agentilda' to protect shared resources. To try the entire system, it's recommended to download the repo https://github.com/kigster/agentilda-ai-setup which both installs the two gems, and offers a configuration file that installs a set of coding agents, skills, plugins, commands, from various guthub folders, or via running commands, and so on. In other words the repo's purpose is to ensure your agentic setup is identical from machine to machine, and by modifying the config file you can pick and choose your skills, your AGENT.md/CLAUDE.md file and so on."
112
109
  email:
113
- - kigster@gmail.com
110
+ - kigster@gmail.com
114
111
  executables:
115
- - agent-lock
116
- - alock
112
+ - agent-lock
113
+ - alock
117
114
  extensions: []
118
115
  extra_rdoc_files: []
119
116
  files:
120
- - ".claude/CLAUDE.md"
121
- - ".ruby-version"
122
- - AGENTS.md
123
- - CHANGELOG.md
124
- - LICENSE.txt
125
- - README.md
126
- - Rakefile
127
- - exe/agent-lock
128
- - exe/alock
129
- - justfile
130
- - lib/agent/lock.rb
131
- - lib/agent/lock/cli.rb
132
- - lib/agent/lock/cli/commands/acquire.rb
133
- - lib/agent/lock/cli/commands/base.rb
134
- - lib/agent/lock/cli/commands/break.rb
135
- - lib/agent/lock/cli/commands/check.rb
136
- - lib/agent/lock/cli/commands/completion.rb
137
- - lib/agent/lock/cli/commands/list.rb
138
- - lib/agent/lock/cli/commands/mine.rb
139
- - lib/agent/lock/cli/commands/note.rb
140
- - lib/agent/lock/cli/commands/release.rb
141
- - lib/agent/lock/cli/commands/release_all.rb
142
- - lib/agent/lock/cli/commands/resume.rb
143
- - lib/agent/lock/cli/commands/skill.rb
144
- - lib/agent/lock/cli/commands/version.rb
145
- - lib/agent/lock/cli/commands/whoami.rb
146
- - lib/agent/lock/error.rb
147
- - lib/agent/lock/freeze.rb
148
- - lib/agent/lock/identity.rb
149
- - lib/agent/lock/launcher.rb
150
- - lib/agent/lock/manager.rb
151
- - lib/agent/lock/process_info.rb
152
- - lib/agent/lock/record.rb
153
- - lib/agent/lock/scope.rb
154
- - lib/agent/lock/skill.rb
155
- - lib/agent/lock/store.rb
156
- - lib/agent/lock/store/file_system_store.rb
157
- - lib/agent/lock/store/redis_store.rb
158
- - lib/agent/lock/tree.rb
159
- - lib/agent/lock/version.rb
160
- - sig/agent/lock.rbs
161
- - skills/agent-lock/SKILL.md
162
- homepage: https://github.com/kigster/agent-lock
117
+ - .claude/CLAUDE.md
118
+ - .ruby-version
119
+ - AGENTS.md
120
+ - CHANGELOG.md
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - exe/agent-lock
125
+ - exe/alock
126
+ - justfile
127
+ - lib/agent/lock.rb
128
+ - lib/agent/lock/cli.rb
129
+ - lib/agent/lock/cli/commands/acquire.rb
130
+ - lib/agent/lock/cli/commands/base.rb
131
+ - lib/agent/lock/cli/commands/break.rb
132
+ - lib/agent/lock/cli/commands/check.rb
133
+ - lib/agent/lock/cli/commands/completion.rb
134
+ - lib/agent/lock/cli/commands/list.rb
135
+ - lib/agent/lock/cli/commands/mine.rb
136
+ - lib/agent/lock/cli/commands/note.rb
137
+ - lib/agent/lock/cli/commands/release.rb
138
+ - lib/agent/lock/cli/commands/release_all.rb
139
+ - lib/agent/lock/cli/commands/resume.rb
140
+ - lib/agent/lock/cli/commands/skills.rb
141
+ - lib/agent/lock/cli/commands/version.rb
142
+ - lib/agent/lock/cli/commands/whoami.rb
143
+ - lib/agent/lock/error.rb
144
+ - lib/agent/lock/freeze.rb
145
+ - lib/agent/lock/identity.rb
146
+ - lib/agent/lock/launcher.rb
147
+ - lib/agent/lock/manager.rb
148
+ - lib/agent/lock/process_info.rb
149
+ - lib/agent/lock/record.rb
150
+ - lib/agent/lock/scope.rb
151
+ - lib/agent/lock/skill.rb
152
+ - lib/agent/lock/store.rb
153
+ - lib/agent/lock/store/file_system_store.rb
154
+ - lib/agent/lock/store/redis_store.rb
155
+ - lib/agent/lock/tree.rb
156
+ - lib/agent/lock/version.rb
157
+ - sig/agent/lock.rbs
158
+ - skills/agent-lock/SKILL.md
159
+ homepage: "https://github.com/kigster/agent-lock"
163
160
  licenses:
164
- - MIT
161
+ - MIT
165
162
  metadata:
166
- allowed_push_host: https://rubygems.org
167
- homepage_uri: https://github.com/kigster/agent-lock
168
- source_code_uri: https://github.com/kigster/agent-lock
169
- changelog_uri: https://github.com/kigster/agent-lock/blob/main/CHANGELOG.md
170
- rubygems_mfa_required: 'true'
163
+ allowed_push_host: "https://rubygems.org"
164
+ homepage_uri: "https://github.com/kigster/agent-lock"
165
+ source_code_uri: "https://github.com/kigster/agent-lock"
166
+ changelog_uri: "https://github.com/kigster/agent-lock/blob/main/CHANGELOG.md"
167
+ rubygems_mfa_required: "true"
171
168
  rdoc_options: []
172
169
  require_paths:
173
- - lib
170
+ - lib
174
171
  required_ruby_version: !ruby/object:Gem::Requirement
175
172
  requirements:
176
- - - ">="
177
- - !ruby/object:Gem::Version
178
- version: 3.2.0
173
+ -
174
+ - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: 3.2.0
179
177
  required_rubygems_version: !ruby/object:Gem::Requirement
180
178
  requirements:
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- version: '0'
179
+ -
180
+ - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: "0"
184
183
  requirements: []
185
- rubygems_version: 4.0.21
184
+ rubygems_version: 4.1.0.beta2
186
185
  specification_version: 4
187
- summary: Advisory locks to prevent race conditions and general mayhem when multiple
188
- AI agents unknowinly modify the same souce three.
186
+ summary: Advisory locks to prevent race conditions and general mayhem when multiple AI agents unknowinly modify the same souce three.
189
187
  test_files: []