agentboard 0.2.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 +7 -0
- data/CHANGELOG.md +62 -0
- data/MIT-LICENSE +20 -0
- data/README.md +316 -0
- data/Rakefile +6 -0
- data/app/assets/stylesheets/agentboard/application.css +510 -0
- data/app/controllers/agentboard/agents_controller.rb +10 -0
- data/app/controllers/agentboard/analytics_controller.rb +37 -0
- data/app/controllers/agentboard/application_controller.rb +90 -0
- data/app/controllers/agentboard/approvals_controller.rb +15 -0
- data/app/controllers/agentboard/assets_controller.rb +32 -0
- data/app/controllers/agentboard/board_controller.rb +46 -0
- data/app/controllers/agentboard/captures_controller.rb +17 -0
- data/app/controllers/agentboard/comments_controller.rb +9 -0
- data/app/controllers/agentboard/criteria_controller.rb +17 -0
- data/app/controllers/agentboard/dependencies_controller.rb +20 -0
- data/app/controllers/agentboard/executions_controller.rb +48 -0
- data/app/controllers/agentboard/milestones_controller.rb +23 -0
- data/app/controllers/agentboard/pulse_controller.rb +12 -0
- data/app/controllers/agentboard/sessions_controller.rb +19 -0
- data/app/controllers/agentboard/settings_controller.rb +9 -0
- data/app/controllers/agentboard/tickets_controller.rb +139 -0
- data/app/controllers/agentboard/workflow_runs_controller.rb +16 -0
- data/app/controllers/agentboard/workflows_controller.rb +62 -0
- data/app/helpers/agentboard/application_helper.rb +196 -0
- data/app/javascript/agentboard/application.js +227 -0
- data/app/javascript/agentboard/capture.js +299 -0
- data/app/jobs/agentboard/application_job.rb +4 -0
- data/app/models/agentboard/acceptance_criterion.rb +23 -0
- data/app/models/agentboard/agent_profile.rb +16 -0
- data/app/models/agentboard/agent_session.rb +30 -0
- data/app/models/agentboard/application_record.rb +13 -0
- data/app/models/agentboard/approval.rb +29 -0
- data/app/models/agentboard/artifact.rb +11 -0
- data/app/models/agentboard/comment.rb +9 -0
- data/app/models/agentboard/event.rb +37 -0
- data/app/models/agentboard/execution.rb +51 -0
- data/app/models/agentboard/idempotency_key.rb +5 -0
- data/app/models/agentboard/milestone.rb +7 -0
- data/app/models/agentboard/outbox_message.rb +11 -0
- data/app/models/agentboard/project.rb +43 -0
- data/app/models/agentboard/repository_snapshot.rb +5 -0
- data/app/models/agentboard/session_ticket_link.rb +18 -0
- data/app/models/agentboard/ticket.rb +81 -0
- data/app/models/agentboard/ticket_dependency.rb +34 -0
- data/app/models/agentboard/ticket_lease.rb +11 -0
- data/app/models/agentboard/usage_record.rb +10 -0
- data/app/models/agentboard/verification_result.rb +12 -0
- data/app/models/agentboard/webhook_delivery.rb +7 -0
- data/app/models/agentboard/workflow_definition.rb +20 -0
- data/app/models/agentboard/workflow_run.rb +21 -0
- data/app/models/agentboard/workflow_step.rb +12 -0
- data/app/services/agentboard/approvals.rb +76 -0
- data/app/services/agentboard/captures.rb +113 -0
- data/app/services/agentboard/completion_policy.rb +117 -0
- data/app/services/agentboard/current.rb +5 -0
- data/app/services/agentboard/data_governance.rb +68 -0
- data/app/services/agentboard/doctor.rb +133 -0
- data/app/services/agentboard/event_store.rb +88 -0
- data/app/services/agentboard/evidence.rb +52 -0
- data/app/services/agentboard/executions.rb +198 -0
- data/app/services/agentboard/hook_ingestion.rb +100 -0
- data/app/services/agentboard/idempotency.rb +28 -0
- data/app/services/agentboard/lease_service.rb +107 -0
- data/app/services/agentboard/mcp_server.rb +138 -0
- data/app/services/agentboard/mcp_tools.rb +341 -0
- data/app/services/agentboard/outbox.rb +44 -0
- data/app/services/agentboard/pull_requests.rb +65 -0
- data/app/services/agentboard/runtime/execution_runner.rb +352 -0
- data/app/services/agentboard/runtime/ipc_handler.rb +55 -0
- data/app/services/agentboard/runtime/reconciler.rb +42 -0
- data/app/services/agentboard/runtime/supervisor.rb +96 -0
- data/app/services/agentboard/session_association.rb +44 -0
- data/app/services/agentboard/session_correlation.rb +56 -0
- data/app/services/agentboard/session_credential.rb +44 -0
- data/app/services/agentboard/ticket_advisor.rb +60 -0
- data/app/services/agentboard/tickets.rb +218 -0
- data/app/services/agentboard/verification_service.rb +60 -0
- data/app/services/agentboard/workflow_engine.rb +261 -0
- data/app/views/agentboard/agents/index.html.erb +51 -0
- data/app/views/agentboard/analytics/show.html.erb +78 -0
- data/app/views/agentboard/approvals/_approval.html.erb +27 -0
- data/app/views/agentboard/approvals/index.html.erb +31 -0
- data/app/views/agentboard/board/_card.html.erb +36 -0
- data/app/views/agentboard/board/show.html.erb +73 -0
- data/app/views/agentboard/executions/index.html.erb +33 -0
- data/app/views/agentboard/executions/show.html.erb +126 -0
- data/app/views/agentboard/milestones/index.html.erb +28 -0
- data/app/views/agentboard/settings/show.html.erb +33 -0
- data/app/views/agentboard/shared/_dag.html.erb +24 -0
- data/app/views/agentboard/tickets/_form.html.erb +38 -0
- data/app/views/agentboard/tickets/edit.html.erb +5 -0
- data/app/views/agentboard/tickets/index.html.erb +51 -0
- data/app/views/agentboard/tickets/new.html.erb +6 -0
- data/app/views/agentboard/tickets/show.html.erb +343 -0
- data/app/views/agentboard/tickets/suggestions.html.erb +21 -0
- data/app/views/agentboard/workflow_runs/show.html.erb +28 -0
- data/app/views/agentboard/workflows/index.html.erb +49 -0
- data/app/views/agentboard/workflows/show.html.erb +15 -0
- data/app/views/layouts/agentboard/application.html.erb +93 -0
- data/config/routes.rb +49 -0
- data/db/migrate/20261114000001_create_agentboard_core.rb +144 -0
- data/db/migrate/20261114000002_create_agentboard_runtime.rb +213 -0
- data/db/migrate/20261115000001_create_agentboard_webhook_deliveries.rb +18 -0
- data/exe/agentboard +7 -0
- data/lib/agentboard/agent_container.rb +124 -0
- data/lib/agentboard/authorization.rb +58 -0
- data/lib/agentboard/capture/middleware.rb +54 -0
- data/lib/agentboard/capture.rb +57 -0
- data/lib/agentboard/cli.rb +818 -0
- data/lib/agentboard/command_policy.rb +44 -0
- data/lib/agentboard/configuration.rb +160 -0
- data/lib/agentboard/container_sandbox.rb +65 -0
- data/lib/agentboard/context_builder.rb +243 -0
- data/lib/agentboard/egress_proxy.rb +95 -0
- data/lib/agentboard/engine.rb +27 -0
- data/lib/agentboard/errors.rb +42 -0
- data/lib/agentboard/event_schema.rb +37 -0
- data/lib/agentboard/extensions.rb +58 -0
- data/lib/agentboard/git/repository.rb +92 -0
- data/lib/agentboard/git/worktree_manager.rb +107 -0
- data/lib/agentboard/git.rb +4 -0
- data/lib/agentboard/ids.rb +33 -0
- data/lib/agentboard/json_log_formatter.rb +28 -0
- data/lib/agentboard/path_guard.rb +27 -0
- data/lib/agentboard/process_ancestry.rb +40 -0
- data/lib/agentboard/providers/base.rb +107 -0
- data/lib/agentboard/providers/claude_code.rb +219 -0
- data/lib/agentboard/providers/codex.rb +177 -0
- data/lib/agentboard/providers/compatibility/claude.yml +13 -0
- data/lib/agentboard/providers/compatibility/codex.yml +10 -0
- data/lib/agentboard/providers/config_editor.rb +106 -0
- data/lib/agentboard/providers/cursor.rb +40 -0
- data/lib/agentboard/providers/fake.rb +59 -0
- data/lib/agentboard/providers/fake_agent_script.rb +47 -0
- data/lib/agentboard/providers/generic_cli.rb +35 -0
- data/lib/agentboard/providers/registry.rb +31 -0
- data/lib/agentboard/providers/types.rb +32 -0
- data/lib/agentboard/providers.rb +26 -0
- data/lib/agentboard/rails_introspection.rb +49 -0
- data/lib/agentboard/redactor.rb +62 -0
- data/lib/agentboard/result.rb +46 -0
- data/lib/agentboard/runtime/ipc.rb +193 -0
- data/lib/agentboard/runtime.rb +1 -0
- data/lib/agentboard/state_machines.rb +71 -0
- data/lib/agentboard/subprocess.rb +168 -0
- data/lib/agentboard/templates/Dockerfile.agent +21 -0
- data/lib/agentboard/verification.rb +79 -0
- data/lib/agentboard/version.rb +3 -0
- data/lib/agentboard/workflows/condition.rb +166 -0
- data/lib/agentboard/workflows/definition.rb +208 -0
- data/lib/agentboard/workflows.rb +2 -0
- data/lib/agentboard.rb +73 -0
- data/lib/generators/agentboard/install/install_generator.rb +67 -0
- data/lib/generators/agentboard/install/templates/config.yml +81 -0
- data/lib/generators/agentboard/install/templates/feature_delivery.yml +25 -0
- data/lib/generators/agentboard/install/templates/initializer.rb +23 -0
- data/lib/tasks/agentboard_tasks.rake +6 -0
- metadata +285 -0
data/lib/agentboard.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require "securerandom"
|
|
2
|
+
require "digest"
|
|
3
|
+
require "json"
|
|
4
|
+
require "yaml"
|
|
5
|
+
require "pathname"
|
|
6
|
+
require "set"
|
|
7
|
+
require "active_support"
|
|
8
|
+
require "active_support/core_ext/object/blank"
|
|
9
|
+
require "active_support/core_ext/string"
|
|
10
|
+
|
|
11
|
+
require "agentboard/version"
|
|
12
|
+
require "agentboard/errors"
|
|
13
|
+
require "agentboard/result"
|
|
14
|
+
require "agentboard/ids"
|
|
15
|
+
require "agentboard/redactor"
|
|
16
|
+
require "agentboard/extensions"
|
|
17
|
+
require "agentboard/command_policy"
|
|
18
|
+
require "agentboard/process_ancestry"
|
|
19
|
+
require "agentboard/json_log_formatter"
|
|
20
|
+
require "agentboard/container_sandbox"
|
|
21
|
+
require "agentboard/agent_container"
|
|
22
|
+
require "agentboard/egress_proxy"
|
|
23
|
+
require "agentboard/event_schema"
|
|
24
|
+
require "agentboard/configuration"
|
|
25
|
+
require "agentboard/state_machines"
|
|
26
|
+
require "agentboard/authorization"
|
|
27
|
+
require "agentboard/providers"
|
|
28
|
+
require "agentboard/git"
|
|
29
|
+
require "agentboard/verification"
|
|
30
|
+
require "agentboard/workflows"
|
|
31
|
+
require "agentboard/rails_introspection"
|
|
32
|
+
require "agentboard/context_builder"
|
|
33
|
+
require "agentboard/capture"
|
|
34
|
+
require "agentboard/runtime"
|
|
35
|
+
require "agentboard/engine" if defined?(Rails::Engine)
|
|
36
|
+
|
|
37
|
+
# AgentBoard: local-first, AI-native development management and orchestration.
|
|
38
|
+
#
|
|
39
|
+
# The Rails Engine (UI, API, persistence) and the runtime daemon (agent processes)
|
|
40
|
+
# are separate OS processes. Everything under lib/ is framework-independent unless
|
|
41
|
+
# it explicitly requires Active Record models from app/.
|
|
42
|
+
module Agentboard
|
|
43
|
+
class << self
|
|
44
|
+
def configuration
|
|
45
|
+
@configuration ||= Configuration.new
|
|
46
|
+
end
|
|
47
|
+
alias_method :config, :configuration
|
|
48
|
+
|
|
49
|
+
def configure
|
|
50
|
+
yield configuration
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def reset_configuration!
|
|
54
|
+
@configuration = nil
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Third-party adapter registration (spec §5):
|
|
58
|
+
# Agentboard.register_provider(:custom_agent, adapter: MyCustomAgentAdapter)
|
|
59
|
+
def register_provider(key, adapter:)
|
|
60
|
+
Providers.registry.register(key, adapter)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def logger
|
|
64
|
+
@logger ||= if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
|
|
65
|
+
Rails.logger
|
|
66
|
+
else
|
|
67
|
+
require "logger"
|
|
68
|
+
Logger.new($stderr, level: Logger::INFO)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
attr_writer :logger
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require "rails/generators"
|
|
2
|
+
require "rails/generators/active_record"
|
|
3
|
+
|
|
4
|
+
module Agentboard
|
|
5
|
+
module Generators
|
|
6
|
+
# bin/rails generate agentboard:install
|
|
7
|
+
# Idempotent: never overwrites existing files unless --force (Thor shows a diff/conflict prompt otherwise).
|
|
8
|
+
class InstallGenerator < Rails::Generators::Base
|
|
9
|
+
include ActiveRecord::Generators::Migration
|
|
10
|
+
source_root File.expand_path("templates", __dir__)
|
|
11
|
+
|
|
12
|
+
def copy_initializer
|
|
13
|
+
template "initializer.rb", "config/initializers/agentboard.rb"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def copy_config
|
|
17
|
+
template "config.yml", "config/agentboard.yml"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_local_dirs
|
|
21
|
+
%w[workflows instructions policies cache].each { |d| empty_directory ".agentboard/#{d}" }
|
|
22
|
+
copy_file "feature_delivery.yml", ".agentboard/workflows/feature_delivery.yml"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def copy_migrations
|
|
26
|
+
rake "agentboard:install:migrations"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def mount_engine
|
|
30
|
+
routes = File.join(destination_root, "config/routes.rb")
|
|
31
|
+
return if File.exist?(routes) && File.read(routes).include?("Agentboard::Engine")
|
|
32
|
+
|
|
33
|
+
route "# AgentBoard dashboard: development only by default\nif Rails.env.development?\n mount Agentboard::Engine, at: \"/agentboard\"\nend"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def ignore_local_state
|
|
37
|
+
path = File.join(destination_root, ".gitignore")
|
|
38
|
+
entries = [ "/.agentboard/worktrees/", "/.agentboard/logs/", "/.agentboard/cache/", "/.agentboard/spool/", "/.agentboard/manifests/", "*.agentboard-backup-*" ]
|
|
39
|
+
existing = File.exist?(path) ? File.read(path).lines.map(&:strip) : []
|
|
40
|
+
missing = entries - existing
|
|
41
|
+
return if missing.empty?
|
|
42
|
+
|
|
43
|
+
block = "\n# AgentBoard local state\n#{missing.join("\n")}\n"
|
|
44
|
+
File.exist?(path) ? append_to_file(".gitignore", block) : create_file(".gitignore", block.lstrip)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def write_manifest
|
|
48
|
+
create_file ".agentboard/generated_manifest.json", JSON.pretty_generate(
|
|
49
|
+
"generator" => "agentboard:install", "version" => Agentboard::VERSION,
|
|
50
|
+
"files" => %w[config/initializers/agentboard.rb config/agentboard.yml .agentboard/workflows/feature_delivery.yml]
|
|
51
|
+
) + "\n"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def show_next_steps
|
|
55
|
+
say <<~TEXT
|
|
56
|
+
|
|
57
|
+
AgentBoard installed. Next:
|
|
58
|
+
bin/rails db:migrate
|
|
59
|
+
bundle exec agentboard doctor
|
|
60
|
+
bundle exec agentboard provider setup claude # and/or codex
|
|
61
|
+
bundle exec agentboard daemon start
|
|
62
|
+
open http://localhost:3000/agentboard
|
|
63
|
+
TEXT
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# AgentBoard configuration — desired behaviour. Actual provider capabilities are detected.
|
|
2
|
+
project:
|
|
3
|
+
name: # defaults to the repository directory name
|
|
4
|
+
key: # ticket prefix, e.g. AB (defaults to initials of the name)
|
|
5
|
+
|
|
6
|
+
runtime:
|
|
7
|
+
mode: local
|
|
8
|
+
max_concurrent_executions: 1
|
|
9
|
+
workspace: .agentboard/worktrees
|
|
10
|
+
execution_timeout_seconds: 3600
|
|
11
|
+
cancel_grace_seconds: 5
|
|
12
|
+
|
|
13
|
+
providers:
|
|
14
|
+
claude: { enabled: true, passive: true, active: true }
|
|
15
|
+
codex: { enabled: true, passive: true, active: true }
|
|
16
|
+
cursor: { enabled: false, passive: true, active: false }
|
|
17
|
+
fake: { enabled: true, passive: true, active: true }
|
|
18
|
+
|
|
19
|
+
security:
|
|
20
|
+
require_review: true
|
|
21
|
+
allow_production_commands: false
|
|
22
|
+
# Agents run as your OS user; Git worktrees are NOT sandboxes. Real providers (claude,
|
|
23
|
+
# codex) only run in active mode once you explicitly trust local execution:
|
|
24
|
+
trusted_local_execution: false
|
|
25
|
+
sandbox: none # container: run verification (and, with sandbox.agents, agents) in Docker
|
|
26
|
+
|
|
27
|
+
# Container isolation (security.sandbox: container). `agentboard sandbox init && agentboard sandbox build`
|
|
28
|
+
# sandbox:
|
|
29
|
+
# runtime: docker
|
|
30
|
+
# image: agentboard-agent:<project> # verification commands, --network none
|
|
31
|
+
# agents: true # also run agents in containers
|
|
32
|
+
# agent_image: agentboard-agent:<project> # internal network + egress allowlist proxy
|
|
33
|
+
# egress_allow: [] # extra host:port pairs beyond provider APIs
|
|
34
|
+
# credential_env: [ANTHROPIC_API_KEY, OPENAI_API_KEY] # forwarded by name only
|
|
35
|
+
# claude_config_dir: ~/.agentboard-sandbox/claude # dedicated (not your personal) login
|
|
36
|
+
|
|
37
|
+
completion:
|
|
38
|
+
require_criteria_verified: true
|
|
39
|
+
require_checks: true
|
|
40
|
+
require_approval: true
|
|
41
|
+
# when_linked: tickets with an open/merged PR need that PR merged on the reviewed head;
|
|
42
|
+
# tickets without a PR complete on criteria + checks + approval. Also: always | never.
|
|
43
|
+
require_merged_pr: when_linked
|
|
44
|
+
|
|
45
|
+
# Approved command catalog. Workflows and agents reference these by name; argv is executed
|
|
46
|
+
# directly (no shell). Results are bound to the exact commit they ran against.
|
|
47
|
+
verification_commands:
|
|
48
|
+
rails_test:
|
|
49
|
+
argv: ["bin/rails", "test"]
|
|
50
|
+
timeout_seconds: 900
|
|
51
|
+
required: true
|
|
52
|
+
rubocop:
|
|
53
|
+
argv: ["bin/rubocop"]
|
|
54
|
+
timeout_seconds: 600
|
|
55
|
+
required: false
|
|
56
|
+
|
|
57
|
+
# In-app capture widget (Alt+Shift+A on any page). Development is free; other environments
|
|
58
|
+
# (e.g. staging for QA) and screenshots need AgentBoard Pro (feature: capture).
|
|
59
|
+
capture:
|
|
60
|
+
enabled: true
|
|
61
|
+
environments: [development]
|
|
62
|
+
|
|
63
|
+
retention:
|
|
64
|
+
raw_log_days: 30
|
|
65
|
+
worktree_days: 7
|
|
66
|
+
provider_output_event_days: 30
|
|
67
|
+
|
|
68
|
+
# Git hosting (AgentBoard Pro, feature git_hosting). Point a webhook for pull/merge
|
|
69
|
+
# requests at /agentboard/webhooks/<github|gitlab|bitbucket> and export the secret in the
|
|
70
|
+
# variable named below. Without a secret the endpoint does not exist.
|
|
71
|
+
git_hosts:
|
|
72
|
+
default: # github | gitlab | bitbucket — detected from `origin` when empty
|
|
73
|
+
github:
|
|
74
|
+
secret_env: AGENTBOARD_GITHUB_WEBHOOK_SECRET # HMAC (X-Hub-Signature-256)
|
|
75
|
+
gitlab:
|
|
76
|
+
secret_env: AGENTBOARD_GITLAB_WEBHOOK_TOKEN # X-Gitlab-Token
|
|
77
|
+
base_url: https://gitlab.com
|
|
78
|
+
token_env: GITLAB_TOKEN # for opening merge requests
|
|
79
|
+
bitbucket:
|
|
80
|
+
secret_env: AGENTBOARD_BITBUCKET_WEBHOOK_SECRET # HMAC (X-Hub-Signature)
|
|
81
|
+
token_env: BITBUCKET_TOKEN # repository access token
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
name: feature_delivery
|
|
3
|
+
steps:
|
|
4
|
+
- id: plan
|
|
5
|
+
type: agent
|
|
6
|
+
provider: claude
|
|
7
|
+
action: plan
|
|
8
|
+
- id: implement
|
|
9
|
+
type: agent
|
|
10
|
+
provider: codex
|
|
11
|
+
action: implement
|
|
12
|
+
depends_on: [plan]
|
|
13
|
+
# AgentBoard Pro adds: retry, timeout_seconds, condition, external and git_pull_request steps.
|
|
14
|
+
- id: test
|
|
15
|
+
type: command
|
|
16
|
+
command: rails_test
|
|
17
|
+
depends_on: [implement]
|
|
18
|
+
- id: review
|
|
19
|
+
type: agent
|
|
20
|
+
provider: claude
|
|
21
|
+
action: review
|
|
22
|
+
depends_on: [test]
|
|
23
|
+
- id: approval
|
|
24
|
+
type: human_approval
|
|
25
|
+
depends_on: [review]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# AgentBoard is usually bundled in the :development group only, so this file must be a no-op
|
|
2
|
+
# in environments (test, production) where the gem is not loaded.
|
|
3
|
+
return unless defined?(Agentboard::Engine)
|
|
4
|
+
|
|
5
|
+
# AgentBoard configuration. YAML in config/agentboard.yml and .agentboard/config.yml is
|
|
6
|
+
# loaded first; anything set here takes precedence.
|
|
7
|
+
Agentboard.configure do |config|
|
|
8
|
+
# Reuse your app's authentication for the dashboard (return an actor or nil):
|
|
9
|
+
#
|
|
10
|
+
# config.authenticate_with = ->(controller) do
|
|
11
|
+
# user = controller.send(:current_user) or next nil
|
|
12
|
+
# Agentboard::Authorization::Actor.new(type: "human", id: user.id.to_s, name: user.email, role: user.admin? ? "administrator" : "developer")
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# Without an adapter the dashboard only accepts local requests. Optionally require a token:
|
|
16
|
+
# config.dashboard_token = ENV["AGENTBOARD_DASHBOARD_TOKEN"]
|
|
17
|
+
#
|
|
18
|
+
# Extra secret patterns to redact from logs, events and exports:
|
|
19
|
+
# config.redaction_patterns = [/acme_live_[A-Za-z0-9]{24}/]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Third-party provider adapters:
|
|
23
|
+
# Agentboard.register_provider(:custom_agent, adapter: MyCustomAgentAdapter)
|
metadata
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: agentboard
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- PIRUBY
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '7.2'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '9'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '7.2'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '9'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: turbo-rails
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '2.0'
|
|
39
|
+
type: :runtime
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '2.0'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: stimulus-rails
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '1.3'
|
|
53
|
+
type: :runtime
|
|
54
|
+
prerelease: false
|
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '1.3'
|
|
60
|
+
- !ruby/object:Gem::Dependency
|
|
61
|
+
name: mcp
|
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '0.25'
|
|
67
|
+
- - "<"
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '1'
|
|
70
|
+
type: :runtime
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0.25'
|
|
77
|
+
- - "<"
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: '1'
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
81
|
+
name: thor
|
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '1.3'
|
|
87
|
+
type: :runtime
|
|
88
|
+
prerelease: false
|
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
90
|
+
requirements:
|
|
91
|
+
- - ">="
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '1.3'
|
|
94
|
+
description: |
|
|
95
|
+
AgentBoard installs into a Rails application and connects tickets to coding agents
|
|
96
|
+
(Claude Code, OpenAI Codex, Cursor and third-party adapters) through MCP, provider hooks,
|
|
97
|
+
a supervised runtime daemon, isolated Git worktrees and evidence-based completion policies.
|
|
98
|
+
executables:
|
|
99
|
+
- agentboard
|
|
100
|
+
extensions: []
|
|
101
|
+
extra_rdoc_files: []
|
|
102
|
+
files:
|
|
103
|
+
- CHANGELOG.md
|
|
104
|
+
- MIT-LICENSE
|
|
105
|
+
- README.md
|
|
106
|
+
- Rakefile
|
|
107
|
+
- app/assets/stylesheets/agentboard/application.css
|
|
108
|
+
- app/controllers/agentboard/agents_controller.rb
|
|
109
|
+
- app/controllers/agentboard/analytics_controller.rb
|
|
110
|
+
- app/controllers/agentboard/application_controller.rb
|
|
111
|
+
- app/controllers/agentboard/approvals_controller.rb
|
|
112
|
+
- app/controllers/agentboard/assets_controller.rb
|
|
113
|
+
- app/controllers/agentboard/board_controller.rb
|
|
114
|
+
- app/controllers/agentboard/captures_controller.rb
|
|
115
|
+
- app/controllers/agentboard/comments_controller.rb
|
|
116
|
+
- app/controllers/agentboard/criteria_controller.rb
|
|
117
|
+
- app/controllers/agentboard/dependencies_controller.rb
|
|
118
|
+
- app/controllers/agentboard/executions_controller.rb
|
|
119
|
+
- app/controllers/agentboard/milestones_controller.rb
|
|
120
|
+
- app/controllers/agentboard/pulse_controller.rb
|
|
121
|
+
- app/controllers/agentboard/sessions_controller.rb
|
|
122
|
+
- app/controllers/agentboard/settings_controller.rb
|
|
123
|
+
- app/controllers/agentboard/tickets_controller.rb
|
|
124
|
+
- app/controllers/agentboard/workflow_runs_controller.rb
|
|
125
|
+
- app/controllers/agentboard/workflows_controller.rb
|
|
126
|
+
- app/helpers/agentboard/application_helper.rb
|
|
127
|
+
- app/javascript/agentboard/application.js
|
|
128
|
+
- app/javascript/agentboard/capture.js
|
|
129
|
+
- app/jobs/agentboard/application_job.rb
|
|
130
|
+
- app/models/agentboard/acceptance_criterion.rb
|
|
131
|
+
- app/models/agentboard/agent_profile.rb
|
|
132
|
+
- app/models/agentboard/agent_session.rb
|
|
133
|
+
- app/models/agentboard/application_record.rb
|
|
134
|
+
- app/models/agentboard/approval.rb
|
|
135
|
+
- app/models/agentboard/artifact.rb
|
|
136
|
+
- app/models/agentboard/comment.rb
|
|
137
|
+
- app/models/agentboard/event.rb
|
|
138
|
+
- app/models/agentboard/execution.rb
|
|
139
|
+
- app/models/agentboard/idempotency_key.rb
|
|
140
|
+
- app/models/agentboard/milestone.rb
|
|
141
|
+
- app/models/agentboard/outbox_message.rb
|
|
142
|
+
- app/models/agentboard/project.rb
|
|
143
|
+
- app/models/agentboard/repository_snapshot.rb
|
|
144
|
+
- app/models/agentboard/session_ticket_link.rb
|
|
145
|
+
- app/models/agentboard/ticket.rb
|
|
146
|
+
- app/models/agentboard/ticket_dependency.rb
|
|
147
|
+
- app/models/agentboard/ticket_lease.rb
|
|
148
|
+
- app/models/agentboard/usage_record.rb
|
|
149
|
+
- app/models/agentboard/verification_result.rb
|
|
150
|
+
- app/models/agentboard/webhook_delivery.rb
|
|
151
|
+
- app/models/agentboard/workflow_definition.rb
|
|
152
|
+
- app/models/agentboard/workflow_run.rb
|
|
153
|
+
- app/models/agentboard/workflow_step.rb
|
|
154
|
+
- app/services/agentboard/approvals.rb
|
|
155
|
+
- app/services/agentboard/captures.rb
|
|
156
|
+
- app/services/agentboard/completion_policy.rb
|
|
157
|
+
- app/services/agentboard/current.rb
|
|
158
|
+
- app/services/agentboard/data_governance.rb
|
|
159
|
+
- app/services/agentboard/doctor.rb
|
|
160
|
+
- app/services/agentboard/event_store.rb
|
|
161
|
+
- app/services/agentboard/evidence.rb
|
|
162
|
+
- app/services/agentboard/executions.rb
|
|
163
|
+
- app/services/agentboard/hook_ingestion.rb
|
|
164
|
+
- app/services/agentboard/idempotency.rb
|
|
165
|
+
- app/services/agentboard/lease_service.rb
|
|
166
|
+
- app/services/agentboard/mcp_server.rb
|
|
167
|
+
- app/services/agentboard/mcp_tools.rb
|
|
168
|
+
- app/services/agentboard/outbox.rb
|
|
169
|
+
- app/services/agentboard/pull_requests.rb
|
|
170
|
+
- app/services/agentboard/runtime/execution_runner.rb
|
|
171
|
+
- app/services/agentboard/runtime/ipc_handler.rb
|
|
172
|
+
- app/services/agentboard/runtime/reconciler.rb
|
|
173
|
+
- app/services/agentboard/runtime/supervisor.rb
|
|
174
|
+
- app/services/agentboard/session_association.rb
|
|
175
|
+
- app/services/agentboard/session_correlation.rb
|
|
176
|
+
- app/services/agentboard/session_credential.rb
|
|
177
|
+
- app/services/agentboard/ticket_advisor.rb
|
|
178
|
+
- app/services/agentboard/tickets.rb
|
|
179
|
+
- app/services/agentboard/verification_service.rb
|
|
180
|
+
- app/services/agentboard/workflow_engine.rb
|
|
181
|
+
- app/views/agentboard/agents/index.html.erb
|
|
182
|
+
- app/views/agentboard/analytics/show.html.erb
|
|
183
|
+
- app/views/agentboard/approvals/_approval.html.erb
|
|
184
|
+
- app/views/agentboard/approvals/index.html.erb
|
|
185
|
+
- app/views/agentboard/board/_card.html.erb
|
|
186
|
+
- app/views/agentboard/board/show.html.erb
|
|
187
|
+
- app/views/agentboard/executions/index.html.erb
|
|
188
|
+
- app/views/agentboard/executions/show.html.erb
|
|
189
|
+
- app/views/agentboard/milestones/index.html.erb
|
|
190
|
+
- app/views/agentboard/settings/show.html.erb
|
|
191
|
+
- app/views/agentboard/shared/_dag.html.erb
|
|
192
|
+
- app/views/agentboard/tickets/_form.html.erb
|
|
193
|
+
- app/views/agentboard/tickets/edit.html.erb
|
|
194
|
+
- app/views/agentboard/tickets/index.html.erb
|
|
195
|
+
- app/views/agentboard/tickets/new.html.erb
|
|
196
|
+
- app/views/agentboard/tickets/show.html.erb
|
|
197
|
+
- app/views/agentboard/tickets/suggestions.html.erb
|
|
198
|
+
- app/views/agentboard/workflow_runs/show.html.erb
|
|
199
|
+
- app/views/agentboard/workflows/index.html.erb
|
|
200
|
+
- app/views/agentboard/workflows/show.html.erb
|
|
201
|
+
- app/views/layouts/agentboard/application.html.erb
|
|
202
|
+
- config/routes.rb
|
|
203
|
+
- db/migrate/20261114000001_create_agentboard_core.rb
|
|
204
|
+
- db/migrate/20261114000002_create_agentboard_runtime.rb
|
|
205
|
+
- db/migrate/20261115000001_create_agentboard_webhook_deliveries.rb
|
|
206
|
+
- exe/agentboard
|
|
207
|
+
- lib/agentboard.rb
|
|
208
|
+
- lib/agentboard/agent_container.rb
|
|
209
|
+
- lib/agentboard/authorization.rb
|
|
210
|
+
- lib/agentboard/capture.rb
|
|
211
|
+
- lib/agentboard/capture/middleware.rb
|
|
212
|
+
- lib/agentboard/cli.rb
|
|
213
|
+
- lib/agentboard/command_policy.rb
|
|
214
|
+
- lib/agentboard/configuration.rb
|
|
215
|
+
- lib/agentboard/container_sandbox.rb
|
|
216
|
+
- lib/agentboard/context_builder.rb
|
|
217
|
+
- lib/agentboard/egress_proxy.rb
|
|
218
|
+
- lib/agentboard/engine.rb
|
|
219
|
+
- lib/agentboard/errors.rb
|
|
220
|
+
- lib/agentboard/event_schema.rb
|
|
221
|
+
- lib/agentboard/extensions.rb
|
|
222
|
+
- lib/agentboard/git.rb
|
|
223
|
+
- lib/agentboard/git/repository.rb
|
|
224
|
+
- lib/agentboard/git/worktree_manager.rb
|
|
225
|
+
- lib/agentboard/ids.rb
|
|
226
|
+
- lib/agentboard/json_log_formatter.rb
|
|
227
|
+
- lib/agentboard/path_guard.rb
|
|
228
|
+
- lib/agentboard/process_ancestry.rb
|
|
229
|
+
- lib/agentboard/providers.rb
|
|
230
|
+
- lib/agentboard/providers/base.rb
|
|
231
|
+
- lib/agentboard/providers/claude_code.rb
|
|
232
|
+
- lib/agentboard/providers/codex.rb
|
|
233
|
+
- lib/agentboard/providers/compatibility/claude.yml
|
|
234
|
+
- lib/agentboard/providers/compatibility/codex.yml
|
|
235
|
+
- lib/agentboard/providers/config_editor.rb
|
|
236
|
+
- lib/agentboard/providers/cursor.rb
|
|
237
|
+
- lib/agentboard/providers/fake.rb
|
|
238
|
+
- lib/agentboard/providers/fake_agent_script.rb
|
|
239
|
+
- lib/agentboard/providers/generic_cli.rb
|
|
240
|
+
- lib/agentboard/providers/registry.rb
|
|
241
|
+
- lib/agentboard/providers/types.rb
|
|
242
|
+
- lib/agentboard/rails_introspection.rb
|
|
243
|
+
- lib/agentboard/redactor.rb
|
|
244
|
+
- lib/agentboard/result.rb
|
|
245
|
+
- lib/agentboard/runtime.rb
|
|
246
|
+
- lib/agentboard/runtime/ipc.rb
|
|
247
|
+
- lib/agentboard/state_machines.rb
|
|
248
|
+
- lib/agentboard/subprocess.rb
|
|
249
|
+
- lib/agentboard/templates/Dockerfile.agent
|
|
250
|
+
- lib/agentboard/verification.rb
|
|
251
|
+
- lib/agentboard/version.rb
|
|
252
|
+
- lib/agentboard/workflows.rb
|
|
253
|
+
- lib/agentboard/workflows/condition.rb
|
|
254
|
+
- lib/agentboard/workflows/definition.rb
|
|
255
|
+
- lib/generators/agentboard/install/install_generator.rb
|
|
256
|
+
- lib/generators/agentboard/install/templates/config.yml
|
|
257
|
+
- lib/generators/agentboard/install/templates/feature_delivery.yml
|
|
258
|
+
- lib/generators/agentboard/install/templates/initializer.rb
|
|
259
|
+
- lib/tasks/agentboard_tasks.rake
|
|
260
|
+
homepage: https://agent-board.live
|
|
261
|
+
licenses:
|
|
262
|
+
- MIT
|
|
263
|
+
metadata:
|
|
264
|
+
rubygems_mfa_required: 'true'
|
|
265
|
+
allowed_push_host: https://rubygems.org
|
|
266
|
+
homepage_uri: https://agent-board.live
|
|
267
|
+
documentation_uri: https://agent-board.live/docs
|
|
268
|
+
rdoc_options: []
|
|
269
|
+
require_paths:
|
|
270
|
+
- lib
|
|
271
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
272
|
+
requirements:
|
|
273
|
+
- - ">="
|
|
274
|
+
- !ruby/object:Gem::Version
|
|
275
|
+
version: '3.3'
|
|
276
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
|
+
requirements:
|
|
278
|
+
- - ">="
|
|
279
|
+
- !ruby/object:Gem::Version
|
|
280
|
+
version: '0'
|
|
281
|
+
requirements: []
|
|
282
|
+
rubygems_version: 4.0.16
|
|
283
|
+
specification_version: 4
|
|
284
|
+
summary: Local-first, AI-native ticket board and agent orchestration engine for Rails.
|
|
285
|
+
test_files: []
|