cardinal-ai 0.2.10 → 0.2.12

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: 946e61403c6624f73d9ec439f536c8fb8cf2b2f1b1fca371e0fefb5f7c4e054b
4
- data.tar.gz: f183a370982f4deb6e4b158f72dbf25cd23252563424ed593752c5c2505c5c79
3
+ metadata.gz: f5de65391dbbc134c135b57117a6990eaba2d7eb3709d0aed36ec88339b0914d
4
+ data.tar.gz: 491173f9b09dfc3705d9284942613d600f66e5b3029a0a9f093f13a44f593338
5
5
  SHA512:
6
- metadata.gz: 68234ba5c060c9e1601099d5865e278f0f347ae8733d7dc4fc55c1d3f9fdfc8e6c9557bb076be5a68f450be20bc3b72d592f80bd37778a83b92915b4ddb6bd5c
7
- data.tar.gz: fff0c846ab54f0cfccd43ba75311b74441d1b89a93e8ce88eb6726571cd22dd23d084d27ffbbeac7fa159d6df1e48d1e51b1cf8f729636a822ddbc7e56dda999
6
+ metadata.gz: 01d43d3097647dac81ed27b68a6d790645098f2f95184fa378dbc03b22ae1ad49693e4af9d2af1b479f309a40a3f6b650af95daf94821bc83c73966004537571
7
+ data.tar.gz: c8bd131ff74e579fb784bc661286f3db5606d82cc0c644402043de7b12847f36882bbcf6bf8426f201009d1333d47f505771c0147ea0903b594d8d4f5d8b5185
data/README.md CHANGED
@@ -20,6 +20,18 @@ merged. You never leave the board.
20
20
  gem install cardinal-ai
21
21
  ```
22
22
 
23
+ **If `cardinal` says "command not found" afterwards:** on many systems (Arch, Fedora,
24
+ any install without sudo) gems land in a per-user folder your shell doesn't look in —
25
+ the install output even warns about it, easy to miss. Add it to your PATH once:
26
+
27
+ ```sh
28
+ # bash / zsh — add to ~/.bashrc or ~/.zshrc:
29
+ export PATH="$(ruby -e 'puts Gem.user_dir')/bin:$PATH"
30
+
31
+ # fish — run once, it sticks:
32
+ fish_add_path (ruby -e 'puts Gem.user_dir')/bin
33
+ ```
34
+
23
35
  ## Use it
24
36
 
25
37
  Go to any project and start Cardinal (a brand-new folder is fine — it offers to
@@ -33,6 +45,9 @@ cardinal
33
45
  The first time, a browser window asks **which Claude account this board should work as** —
34
46
  pick one, and it's remembered for this project only. Then open **http://localhost:4000**.
35
47
 
48
+ Running boards on two projects at once? Give the second one its own port:
49
+ `cardinal 4001` (or `-p 4001`).
50
+
36
51
  That's the whole setup. Now:
37
52
 
38
53
  1. **Add a card** for something you want done, in plain English.
data/app/models/board.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Board < ApplicationRecord
2
- # Captured from the author's live board (2026-07-05) — the battle-tested
2
+ # Captured from the author's live board (2026-07-04, second capture) — the battle-tested
3
3
  # layout. accepts_from is stored as NAMES here and resolved to column ids
4
4
  # by install_default_columns! (ids don't exist until creation).
5
5
  DEFAULT_COLUMNS = [
@@ -32,7 +32,8 @@ class Board < ApplicationRecord
32
32
  "on_entry" => [{ "action" => "mark_pr_ready" }] } },
33
33
  { name: "Done", archetype: "terminal",
34
34
  policy: { "ai" => false, "plan_approval" => false, "arrivals" => "top",
35
- "accepts_from_names" => ["Review", "QA", "Planning"],
35
+ "accepts_from_names" => ["Tasks", "Planning", "Review", "QA"],
36
+ "footer" => [{ "label" => "Total cost:", "compute" => "sum_cost" }],
36
37
  "on_entry" => [{ "action" => "merge_pr" }] } }
37
38
  ].freeze
38
39
 
data/exe/cardinal CHANGED
@@ -4,6 +4,7 @@
4
4
  # cardinal — spin up a Cardinal AI board for the repo you're standing in.
5
5
  #
6
6
  # cardinal # or `cardinal up` — first run links a Claude account
7
+ # cardinal 4001 # same, on a different port (also: -p/--port 4001)
7
8
  # cardinal login # redo the account link (switch accounts)
8
9
  # cardinal logout # unlink this instance's account
9
10
  #
@@ -22,7 +23,24 @@ TOKEN_FILE = File.join(AUTH_DIR, "oauth-token")
22
23
  def say(msg) = puts("cardinal ▸ #{msg}")
23
24
  def die(msg) = abort("cardinal: #{msg}")
24
25
 
25
- cmd = ARGV[0] || "up"
26
+ # Port: `cardinal 4001`, `-p 4001`, `--port 4001`, or `--port=4001`.
27
+ # Explicit choice beats the PORT env var; default (4000) is applied later.
28
+ args = ARGV.dup
29
+ port = nil
30
+ if (i = args.index("-p") || args.index("--port"))
31
+ args.delete_at(i)
32
+ port = args.delete_at(i) or die("#{ARGV[i]} needs a port number")
33
+ elsif (flag = args.find { |a| a.start_with?("--port=") })
34
+ args.delete(flag)
35
+ port = flag.split("=", 2).last
36
+ elsif (bare = args.find { |a| a.match?(/\A\d+\z/) })
37
+ args.delete(bare)
38
+ port = bare
39
+ end
40
+ die "invalid port: #{port}" if port && !port.match?(/\A\d+\z/)
41
+ ENV["PORT"] = port if port
42
+
43
+ cmd = args[0] || "up"
26
44
  unless File.directory?(File.join(TARGET, ".git"))
27
45
  # A brand-new project shouldn't need ceremony — cards are branches and PRs,
28
46
  # so a repo must exist, but Cardinal can lay that rail itself.
@@ -47,7 +65,7 @@ when "login"
47
65
  FileUtils.rm_f(TOKEN_FILE)
48
66
  when "up" # continue
49
67
  else
50
- die "usage: cardinal [up|login|logout]"
68
+ die "usage: cardinal [up|login|logout] [-p PORT]"
51
69
  end
52
70
 
53
71
  # Hide .cardinal/ from the host repo without touching its .gitignore.
@@ -1,3 +1,3 @@
1
1
  module Cardinal
2
- VERSION = "0.2.10"
2
+ VERSION = "0.2.12"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cardinal-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Ellis