actionagent 1.8.1 → 1.9.1
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 +4 -4
- data/app/assets/builds/action_agent.css +1 -1
- data/app/assets/builds/action_agent.js +76 -73
- data/app/assets/builds/action_agent_recorder.js +78 -0
- data/app/assets/builds/action_agent_replay.js +226 -0
- data/app/controllers/action_agent/api/agent_runs_controller.rb +3 -1
- data/app/controllers/action_agent/api/agents_controller.rb +1 -0
- data/app/controllers/action_agent/api/api_keys_controller.rb +12 -2
- data/app/controllers/action_agent/api/base_controller.rb +63 -2
- data/app/controllers/action_agent/api/claude_logins_controller.rb +93 -0
- data/app/controllers/action_agent/api/code_sessions_controller.rb +53 -6
- data/app/controllers/action_agent/api/dashboard_assistant_controller.rb +2 -2
- data/app/controllers/action_agent/api/draft_pull_requests_controller.rb +248 -0
- data/app/controllers/action_agent/api/evaluation_fixes_controller.rb +27 -0
- data/app/controllers/action_agent/api/evaluations_controller.rb +9 -4
- data/app/controllers/action_agent/api/explorations_controller.rb +213 -0
- data/app/controllers/action_agent/api/feedback_ingest_controller.rb +34 -0
- data/app/controllers/action_agent/api/feedbacks_controller.rb +40 -0
- data/app/controllers/action_agent/api/github_app_manifests_controller.rb +125 -0
- data/app/controllers/action_agent/api/github_connections_controller.rb +40 -2
- data/app/controllers/action_agent/api/github_installations_controller.rb +280 -0
- data/app/controllers/action_agent/api/input_requests_controller.rb +77 -0
- data/app/controllers/action_agent/api/mcp_controller.rb +46 -12
- data/app/controllers/action_agent/api/members_controller.rb +36 -0
- data/app/controllers/action_agent/api/project_explorations_controller.rb +80 -0
- data/app/controllers/action_agent/api/project_install_pull_requests_controller.rb +305 -0
- data/app/controllers/action_agent/api/project_secrets_controller.rb +96 -0
- data/app/controllers/action_agent/api/project_setup_controller.rb +151 -0
- data/app/controllers/action_agent/api/project_sign_ins_controller.rb +112 -0
- data/app/controllers/action_agent/api/projects_controller.rb +512 -0
- data/app/controllers/action_agent/api/provider_keys_controller.rb +176 -24
- data/app/controllers/action_agent/api/provider_models_controller.rb +37 -15
- data/app/controllers/action_agent/api/recording_event_ingest_controller.rb +67 -0
- data/app/controllers/action_agent/api/sandbox_browser_tickets_controller.rb +50 -0
- data/app/controllers/action_agent/api/sandbox_browsers_controller.rb +65 -0
- data/app/controllers/action_agent/api/sandboxes_controller.rb +140 -8
- data/app/controllers/action_agent/api/scenario_catalog_entries_controller.rb +188 -0
- data/app/controllers/action_agent/api/scenario_catalogs_controller.rb +302 -0
- data/app/controllers/action_agent/api/session_recordings_controller.rb +165 -34
- data/app/controllers/action_agent/api/sessions_controller.rb +111 -0
- data/app/controllers/action_agent/api/telemetry_keys_controller.rb +21 -0
- data/app/controllers/action_agent/dashboard_controller.rb +17 -6
- data/app/controllers/action_agent/session_player_controller.rb +58 -0
- data/app/controllers/concerns/action_agent/api/agent_serialization.rb +1 -0
- data/app/controllers/concerns/action_agent/api/mcp_dashboard_tools.rb +623 -18
- data/app/controllers/concerns/action_agent/api/project_browser.rb +46 -0
- data/app/controllers/concerns/action_agent/api/project_secret_authorization.rb +57 -0
- data/app/jobs/action_agent/agent_execution_job.rb +9 -39
- data/app/jobs/action_agent/agent_resume_job.rb +84 -0
- data/app/jobs/action_agent/code_session_job.rb +26 -2
- data/app/jobs/action_agent/draft_pull_request_job.rb +43 -0
- data/app/jobs/action_agent/exploration_job.rb +80 -0
- data/app/jobs/action_agent/input_request_expiry_job.rb +22 -0
- data/app/jobs/action_agent/project_evaluation_job.rb +59 -0
- data/app/jobs/action_agent/project_setup_job.rb +21 -0
- data/app/jobs/action_agent/sandbox_cleanup_job.rb +20 -3
- data/app/jobs/action_agent/sandbox_provision_job.rb +77 -10
- data/app/jobs/action_agent/sandbox_run_job.rb +9 -37
- data/app/jobs/action_agent/verify_evaluation_fix_job.rb +37 -0
- data/app/models/action_agent/agent.rb +39 -26
- data/app/models/action_agent/agent_run.rb +134 -23
- data/app/models/action_agent/agent_template.rb +35 -1
- data/app/models/action_agent/api_key.rb +14 -0
- data/app/models/action_agent/catalog_scenario.rb +75 -0
- data/app/models/action_agent/code_session.rb +16 -4
- data/app/models/action_agent/draft_pull_request.rb +131 -0
- data/app/models/action_agent/evaluation.rb +84 -0
- data/app/models/action_agent/exploration.rb +847 -0
- data/app/models/action_agent/github_installation.rb +159 -0
- data/app/models/action_agent/input_request.rb +291 -0
- data/app/models/action_agent/interaction_feedback.rb +24 -0
- data/app/models/action_agent/project.rb +789 -0
- data/app/models/action_agent/project_secret.rb +339 -0
- data/app/models/action_agent/provider_key.rb +200 -3
- data/app/models/action_agent/recording_event.rb +145 -0
- data/app/models/action_agent/recording_snapshot.rb +7 -7
- data/app/models/action_agent/sandbox_session.rb +297 -14
- data/app/models/action_agent/scenario_catalog.rb +172 -0
- data/app/models/action_agent/scenario_product.rb +57 -0
- data/app/models/action_agent/scenario_set.rb +138 -0
- data/app/models/action_agent/session_recording.rb +121 -14
- data/app/models/action_agent/telemetry_trace.rb +74 -19
- data/app/models/concerns/action_agent/ownable.rb +84 -13
- data/app/serializers/action_agent/input_request_serializer.rb +47 -0
- data/app/serializers/action_agent/scenario_catalog_serializer.rb +23 -0
- data/app/serializers/action_agent/session_summary_serializer.rb +146 -0
- data/app/services/action_agent/agent_execution_service.rb +450 -72
- data/app/services/action_agent/agent_sync.rb +5 -2
- data/app/services/action_agent/agent_tool_roster.rb +19 -4
- data/app/services/action_agent/agent_toolbox.rb +215 -9
- data/app/services/action_agent/browser_live_ticket.rb +78 -0
- data/app/services/action_agent/browser_sidecar.rb +213 -0
- data/app/services/action_agent/browser_sign_in.rb +163 -0
- data/app/services/action_agent/browser_tool_redaction.rb +92 -0
- data/app/services/action_agent/claude_code_auth.rb +70 -4
- data/app/services/action_agent/dashboard_assistant_service.rb +24 -10
- data/app/services/action_agent/draft_pull_request_publisher.rb +719 -0
- data/app/services/action_agent/evaluation_fix.rb +101 -0
- data/app/services/action_agent/evaluation_fix_comparison.rb +66 -0
- data/app/services/action_agent/evaluation_runner_service.rb +4 -5
- data/app/services/action_agent/evaluation_standing.rb +15 -8
- data/app/services/action_agent/explorer_execution_service.rb +517 -0
- data/app/services/action_agent/github_client.rb +405 -64
- data/app/services/action_agent/live_updates.rb +31 -0
- data/app/services/action_agent/local_sandbox_backend.rb +1218 -83
- data/app/services/action_agent/local_sandbox_claude_login.rb +151 -0
- data/app/services/action_agent/mcp_client.rb +6 -2
- data/app/services/action_agent/mcp_recording_middleware.rb +104 -145
- data/app/services/action_agent/mcp_tool_dispatcher.rb +36 -13
- data/app/services/action_agent/mock_sandbox_backend.rb +3 -1
- data/app/services/action_agent/playwright_mcp_client.rb +7 -0
- data/app/services/action_agent/project_boot_fix.rb +309 -0
- data/app/services/action_agent/project_capabilities.rb +200 -0
- data/app/services/action_agent/project_install_pull_request.rb +225 -0
- data/app/services/action_agent/project_preflight.rb +178 -0
- data/app/services/action_agent/project_secret_discovery.rb +142 -0
- data/app/services/action_agent/project_setup.rb +429 -0
- data/app/services/action_agent/provider_credentials.rb +102 -0
- data/app/services/action_agent/recording_event_ingest.rb +181 -0
- data/app/services/action_agent/runtime_tool_roster.rb +52 -0
- data/app/services/action_agent/sample_data/conference_ticket.rb +516 -0
- data/app/services/action_agent/sandbox_boot_spec.rb +558 -0
- data/app/services/action_agent/sandbox_browser.rb +299 -0
- data/app/services/action_agent/sandbox_browser_driver.rb +85 -0
- data/app/services/action_agent/sandbox_credential_paths.rb +26 -0
- data/app/services/action_agent/sandbox_mail.rb +103 -0
- data/app/services/action_agent/sandbox_manifest.rb +166 -13
- data/app/services/action_agent/sandbox_orchestrator.rb +276 -22
- data/app/services/action_agent/sandbox_patch.rb +253 -0
- data/app/services/action_agent/scenario_catalog_import.rb +255 -0
- data/app/services/action_agent/scenario_catalog_repository_import.rb +81 -0
- data/app/services/action_agent/scenario_evaluation_runner.rb +119 -16
- data/app/services/action_agent/secret_scrubber.rb +33 -4
- data/app/services/action_agent/session_index.rb +270 -0
- data/app/services/action_agent/session_recording_service.rb +11 -0
- data/app/services/action_agent/session_timeline.rb +505 -0
- data/app/views/action_agent/github_app_manifests/created.html.erb +55 -0
- data/app/views/action_agent/session_player/show.html.erb +19 -0
- data/config/routes.rb +155 -1
- data/lib/action_agent/claude_login_process.rb +107 -0
- data/lib/action_agent/engine.rb +55 -5
- data/lib/action_agent/secret_requests.rb +80 -0
- data/lib/action_agent/version.rb +1 -1
- data/lib/action_agent.rb +507 -22
- data/lib/generators/action_agent/install_generator.rb +37 -0
- data/lib/generators/action_agent/templates/action_agent.rb.erb +158 -0
- data/lib/generators/action_agent/templates/migrations/015_add_provider_key_scope.rb.erb +72 -0
- data/lib/generators/action_agent/templates/migrations/016_create_active_agent_input_requests.rb.erb +85 -0
- data/lib/generators/action_agent/templates/migrations/017_create_active_agent_recording_events.rb.erb +57 -0
- data/lib/generators/action_agent/templates/migrations/018_add_browser_to_active_agent_sandbox_sessions.rb.erb +25 -0
- data/lib/generators/action_agent/templates/migrations/019_create_active_agent_projects.rb.erb +79 -0
- data/lib/generators/action_agent/templates/migrations/020_add_github_app_installations.rb.erb +62 -0
- data/lib/generators/action_agent/templates/migrations/021_create_active_agent_explorations.rb.erb +63 -0
- data/lib/generators/action_agent/templates/migrations/023_create_active_agent_draft_pull_requests.rb.erb +75 -0
- data/lib/generators/action_agent/templates/migrations/024_add_kind_to_active_agent_project_secrets.rb.erb +14 -0
- data/lib/generators/action_agent/templates/migrations/025_create_active_agent_scenario_catalogs.rb.erb +110 -0
- data/lib/generators/action_agent/templates/migrations/026_add_evaluation_fixes_to_code_sessions.rb.erb +21 -0
- data/lib/generators/action_agent/templates/migrations/027_create_active_agent_interaction_feedbacks.rb.erb +17 -0
- data/lib/tasks/action_agent.rake +33 -0
- data/lib/tasks/browser.rake +22 -0
- data/lib/tasks/sandbox.rake +1 -1
- data/lib/tasks/scenario_catalogs.rake +71 -0
- metadata +100 -2
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Draft pull requests opened from a checkout sandbox's changes (Settings ->
|
|
4
|
+
# Integrations -> Open draft PR), and the state GitHub last reported for each.
|
|
5
|
+
#
|
|
6
|
+
# Table names follow ActionAgent.table_name_prefix, and JSON columns are
|
|
7
|
+
# jsonb on PostgreSQL and json elsewhere, the same way as
|
|
8
|
+
# create_active_agent_dashboard_tables.
|
|
9
|
+
class CreateActiveAgentDraftPullRequests < ActiveRecord::Migration<%= migration_version %>
|
|
10
|
+
def change
|
|
11
|
+
prefix = ActionAgent.table_name_prefix
|
|
12
|
+
|
|
13
|
+
create_table "#{prefix}draft_pull_requests" do |t|
|
|
14
|
+
t.bigint :sandbox_session_id, null: false
|
|
15
|
+
# "owner/name" on GitHub.
|
|
16
|
+
t.string :repository, null: false
|
|
17
|
+
# The branch the pull request merges into, and the branch published.
|
|
18
|
+
t.string :base_branch
|
|
19
|
+
t.string :branch, null: false
|
|
20
|
+
# The commit the sandbox checked out, and the last commit published.
|
|
21
|
+
t.string :base_commit, null: false
|
|
22
|
+
t.string :head_commit
|
|
23
|
+
t.string :title, null: false
|
|
24
|
+
t.text :body
|
|
25
|
+
# The message of the last update's commit.
|
|
26
|
+
t.text :commit_message
|
|
27
|
+
# The files of the last publish, each { path, status, mode, digest }.
|
|
28
|
+
t.column :files, json_type, **json_default([])
|
|
29
|
+
# What the last publish did ("create", "update", "open_draft",
|
|
30
|
+
# "open_regular") and how it went ("queued", "publishing", "published",
|
|
31
|
+
# "draft_refused", "failed").
|
|
32
|
+
t.string :operation, null: false, default: "create"
|
|
33
|
+
t.string :status, null: false, default: "queued"
|
|
34
|
+
# Why the last publish failed: a word the dashboard acts on (see
|
|
35
|
+
# DraftPullRequestPublisher::Refused), and a message for the user.
|
|
36
|
+
t.string :error_code
|
|
37
|
+
t.text :error_message
|
|
38
|
+
# "app" (a GitHub App installation) or "oauth" (the OAuth connection).
|
|
39
|
+
t.string :credential_kind
|
|
40
|
+
t.integer :number
|
|
41
|
+
t.string :url
|
|
42
|
+
t.string :compare_url
|
|
43
|
+
# "open", "closed" or "merged", and whether it is a draft, as GitHub
|
|
44
|
+
# last reported them.
|
|
45
|
+
t.string :state
|
|
46
|
+
t.boolean :draft
|
|
47
|
+
t.datetime :last_checked_at
|
|
48
|
+
# The user who published, and the owner.
|
|
49
|
+
t.bigint :user_id
|
|
50
|
+
t.bigint :account_id
|
|
51
|
+
t.timestamps
|
|
52
|
+
t.index :sandbox_session_id, name: "index_#{prefix}draft_pull_requests_on_sandbox_session"
|
|
53
|
+
t.index :account_id, name: "index_#{prefix}draft_pull_requests_on_account"
|
|
54
|
+
t.index :user_id, name: "index_#{prefix}draft_pull_requests_on_user"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def json_type
|
|
61
|
+
@json_type ||= postgres? ? :jsonb : :json
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# MySQL rejects a default on a JSON column outright, so the column is
|
|
65
|
+
# created without one there.
|
|
66
|
+
def json_default(value, null: nil)
|
|
67
|
+
return {} unless postgres?
|
|
68
|
+
|
|
69
|
+
null.nil? ? { default: value } : { default: value, null: null }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def postgres?
|
|
73
|
+
connection.adapter_name.to_s.downcase.include?("postgres")
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Project secrets of three kinds: an environment variable a boot hands to
|
|
4
|
+
# the app ("env", every secret before this migration), the credentials the
|
|
5
|
+
# explorer signs in with ("sign_in"), and a browser's saved sign-in
|
|
6
|
+
# ("storage_state"). Only env secrets reach the sandbox's environment.
|
|
7
|
+
#
|
|
8
|
+
# Table names follow ActionAgent.table_name_prefix, the same way as
|
|
9
|
+
# create_active_agent_dashboard_tables.
|
|
10
|
+
class AddKindToActiveAgentProjectSecrets < ActiveRecord::Migration<%= migration_version %>
|
|
11
|
+
def change
|
|
12
|
+
add_column "#{ActionAgent.table_name_prefix}project_secrets", :kind, :string, null: false, default: "env"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Scenario catalogs: the YAML catalogs of evaluation scenarios an owner keeps
|
|
4
|
+
# in the dashboard, each a set of products (an agent or a project under test)
|
|
5
|
+
# with named sets of scenarios. A catalog remembers the document it was
|
|
6
|
+
# imported from and its digest, so a re-import of the same file changes
|
|
7
|
+
# nothing, and a set remembers the evaluation it was last materialized as.
|
|
8
|
+
#
|
|
9
|
+
# Table names follow ActionAgent.table_name_prefix, and JSON columns are
|
|
10
|
+
# jsonb on PostgreSQL and json elsewhere, the same way as
|
|
11
|
+
# create_active_agent_dashboard_tables.
|
|
12
|
+
class CreateActiveAgentScenarioCatalogs < ActiveRecord::Migration<%= migration_version %>
|
|
13
|
+
def change
|
|
14
|
+
prefix = ActionAgent.table_name_prefix
|
|
15
|
+
|
|
16
|
+
create_table "#{prefix}scenario_catalogs" do |t|
|
|
17
|
+
t.string :key, null: false
|
|
18
|
+
t.string :name, null: false
|
|
19
|
+
t.text :description
|
|
20
|
+
# upload: pasted or uploaded YAML; repository: read from a connected
|
|
21
|
+
# repository at a ref; api: built through the API or MCP tools.
|
|
22
|
+
t.string :source_kind, null: false, default: "upload"
|
|
23
|
+
# For a repository: "owner/name@ref:path".
|
|
24
|
+
t.string :source_path
|
|
25
|
+
# SHA-256 of the canonical document, and the document itself.
|
|
26
|
+
t.string :digest
|
|
27
|
+
t.text :document
|
|
28
|
+
# When the document was last written to Active Storage, and the digest
|
|
29
|
+
# it carried then.
|
|
30
|
+
t.datetime :synced_at
|
|
31
|
+
t.string :synced_digest
|
|
32
|
+
t.column :metadata, json_type, **json_default({})
|
|
33
|
+
t.bigint :account_id
|
|
34
|
+
t.bigint :user_id
|
|
35
|
+
t.timestamps
|
|
36
|
+
t.index :key
|
|
37
|
+
t.index :account_id
|
|
38
|
+
t.index :user_id
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
create_table "#{prefix}scenario_products" do |t|
|
|
42
|
+
t.bigint :scenario_catalog_id, null: false
|
|
43
|
+
t.string :key, null: false
|
|
44
|
+
t.string :name, null: false
|
|
45
|
+
t.text :description
|
|
46
|
+
# What the product's sets run against: a dashboard agent, a project
|
|
47
|
+
# (whose sandbox the replays reach), or neither yet. agent_name keeps
|
|
48
|
+
# the document's `agent:` reference for an agent that is not here.
|
|
49
|
+
t.bigint :agent_id
|
|
50
|
+
t.bigint :project_id
|
|
51
|
+
t.string :agent_name
|
|
52
|
+
t.integer :position
|
|
53
|
+
t.column :metadata, json_type, **json_default({})
|
|
54
|
+
t.timestamps
|
|
55
|
+
t.index [ :scenario_catalog_id, :key ], unique: true
|
|
56
|
+
t.index :agent_id
|
|
57
|
+
t.index :project_id
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
create_table "#{prefix}scenario_sets" do |t|
|
|
61
|
+
t.bigint :scenario_product_id, null: false
|
|
62
|
+
t.string :key, null: false
|
|
63
|
+
t.string :name, null: false
|
|
64
|
+
t.text :description
|
|
65
|
+
# { kind, model }: the judge of the evaluation the set becomes.
|
|
66
|
+
t.column :judge, json_type, **json_default({})
|
|
67
|
+
t.column :criteria, json_type, **json_default([])
|
|
68
|
+
t.column :metadata, json_type, **json_default({})
|
|
69
|
+
# The evaluation this set was last materialized as, if any.
|
|
70
|
+
t.bigint :evaluation_id
|
|
71
|
+
t.integer :position
|
|
72
|
+
t.timestamps
|
|
73
|
+
t.index [ :scenario_product_id, :key ], unique: true
|
|
74
|
+
t.index :evaluation_id
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
create_table "#{prefix}catalog_scenarios" do |t|
|
|
78
|
+
t.bigint :scenario_set_id, null: false
|
|
79
|
+
t.string :key, null: false
|
|
80
|
+
t.text :prompt, null: false
|
|
81
|
+
t.text :notes
|
|
82
|
+
t.column :expectations, json_type, **json_default({})
|
|
83
|
+
t.column :tags, json_type, **json_default([])
|
|
84
|
+
t.column :params, json_type, **json_default({})
|
|
85
|
+
t.boolean :production_only, null: false, default: false
|
|
86
|
+
t.boolean :enabled, null: false, default: true
|
|
87
|
+
t.integer :position
|
|
88
|
+
t.timestamps
|
|
89
|
+
t.index [ :scenario_set_id, :key ], unique: true
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
def json_type
|
|
96
|
+
@json_type ||= postgres? ? :jsonb : :json
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# MySQL rejects a default on a JSON column outright, so the column is
|
|
100
|
+
# created without one there.
|
|
101
|
+
def json_default(value, null: nil)
|
|
102
|
+
return {} unless postgres?
|
|
103
|
+
|
|
104
|
+
null.nil? ? { default: value } : { default: value, null: null }
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def postgres?
|
|
108
|
+
connection.adapter_name.to_s.downcase.include?("postgres")
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Links a Claude Code session to the evaluation fix it implements (the run,
|
|
4
|
+
# the fix card, the follow-up it retries) and to the run that verified it,
|
|
5
|
+
# and records which user signed in to Claude Code inside a sandbox.
|
|
6
|
+
class AddEvaluationFixesToCodeSessions < ActiveRecord::Migration<%= migration_version %>
|
|
7
|
+
def change
|
|
8
|
+
sessions = "#{ActionAgent.table_name_prefix}code_sessions"
|
|
9
|
+
sandboxes = "#{ActionAgent.table_name_prefix}sandbox_sessions"
|
|
10
|
+
add_column sessions, :evaluation_run_id, :bigint
|
|
11
|
+
add_column sessions, :verification_run_id, :bigint
|
|
12
|
+
add_column sessions, :previous_code_session_id, :bigint
|
|
13
|
+
# jsonb on PostgreSQL and json elsewhere, like the dashboard tables.
|
|
14
|
+
add_column sessions, :fix_item, connection.adapter_name.to_s.downcase.include?("postgres") ? :jsonb : :json
|
|
15
|
+
add_column sessions, :credential_mode, :string
|
|
16
|
+
add_column sessions, :verification_error, :text
|
|
17
|
+
add_index sessions, :evaluation_run_id
|
|
18
|
+
add_index sessions, :verification_run_id
|
|
19
|
+
add_column sandboxes, :claude_login_user_id, :bigint
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class CreateActiveAgentInteractionFeedbacks < ActiveRecord::Migration<%= migration_version %>
|
|
4
|
+
def change
|
|
5
|
+
create_table "#{ActionAgent.table_name_prefix}interaction_feedbacks" do |t|
|
|
6
|
+
t.references :telemetry_trace, null: false, foreign_key: { to_table: :active_agent_telemetry_traces, on_delete: :cascade }
|
|
7
|
+
t.string :feedback_id, null: false, limit: 128
|
|
8
|
+
t.string :rating, null: false, limit: 16
|
|
9
|
+
t.string :span_id, limit: 128
|
|
10
|
+
t.string :user_reference, limit: 255
|
|
11
|
+
t.text :comment
|
|
12
|
+
t.timestamps
|
|
13
|
+
end
|
|
14
|
+
add_index "#{ActionAgent.table_name_prefix}interaction_feedbacks",
|
|
15
|
+
[ :telemetry_trace_id, :feedback_id ], unique: true, name: "index_feedback_on_trace_and_feedback_id"
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/tasks/action_agent.rake
CHANGED
|
@@ -6,6 +6,39 @@ namespace :action_agent do
|
|
|
6
6
|
ActionAgent::AgentTemplate.seed_defaults!
|
|
7
7
|
puts "Agent template library: #{ActionAgent::AgentTemplate.count} templates"
|
|
8
8
|
end
|
|
9
|
+
|
|
10
|
+
# Sample data a workspace can show before it has run anything of its own.
|
|
11
|
+
# On a multi-tenant install name the workspace: ACCOUNT_ID=<id> (or
|
|
12
|
+
# USER_ID=<id> where agents belong to users).
|
|
13
|
+
namespace :sample do
|
|
14
|
+
desc "Seed the conference-ticket sample: an agent, a week of runs and traces, a replayable handoff, and an evaluation history"
|
|
15
|
+
task conference_ticket: :environment do
|
|
16
|
+
ActionAgent::AgentTemplate.seed_defaults!
|
|
17
|
+
agent = ActionAgent::SampleData::ConferenceTicket.seed!(owner: action_agent_sample_owner)
|
|
18
|
+
traces = ActionAgent.trace_model.where(agent_id: agent.id).count
|
|
19
|
+
evaluation = agent.evaluations.find_by(name: ActionAgent::SampleData::ConferenceTicket::EVALUATION_NAME)
|
|
20
|
+
puts "Conference ticket sample: agent ##{agent.id} (#{agent.slug})"
|
|
21
|
+
puts " #{agent.agent_runs.count} runs, #{traces} traces, " \
|
|
22
|
+
"#{ActionAgent::SessionRecording.where(agent_run_id: agent.agent_runs.select(:id)).count} session recording"
|
|
23
|
+
puts " evaluation \"#{evaluation&.name}\": #{evaluation&.evaluation_runs&.count} runs over #{evaluation&.scenarios&.count} scenarios"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
desc "Remove the conference-ticket sample and everything it created"
|
|
27
|
+
task clear: :environment do
|
|
28
|
+
removed = ActionAgent::SampleData::ConferenceTicket.clear!(owner: action_agent_sample_owner)
|
|
29
|
+
puts removed.zero? ? "No conference ticket sample to remove" : "Conference ticket sample removed"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# The workspace the sample belongs to, from ACCOUNT_ID or USER_ID; nil on a
|
|
35
|
+
# single-user install.
|
|
36
|
+
def action_agent_sample_owner
|
|
37
|
+
if ENV["ACCOUNT_ID"].present?
|
|
38
|
+
ActionAgent.account_class.to_s.constantize.find(ENV["ACCOUNT_ID"])
|
|
39
|
+
elsif ENV["USER_ID"].present?
|
|
40
|
+
ActionAgent.user_class.to_s.constantize.find(ENV["USER_ID"])
|
|
41
|
+
end
|
|
9
42
|
end
|
|
10
43
|
|
|
11
44
|
namespace :action_agent do
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :action_agent do
|
|
4
|
+
namespace :browser do
|
|
5
|
+
desc "Install the browser sidecar and its Chromium for the :local sandbox backend, under the local sandbox root"
|
|
6
|
+
task install: :environment do
|
|
7
|
+
ActionAgent::BrowserSidecar.install!
|
|
8
|
+
puts "Installed the browser sidecar under #{ActionAgent::BrowserSidecar.root}"
|
|
9
|
+
rescue ActionAgent::BrowserSidecar::Error => e
|
|
10
|
+
abort "action_agent:browser:install: #{e.message}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc "Check that a sandbox's browser can start on this machine: Node.js, the browser sidecar and Chromium"
|
|
14
|
+
task doctor: :environment do
|
|
15
|
+
checks = ActionAgent::BrowserSidecar.checks
|
|
16
|
+
checks.each { |check| puts "#{check.ok ? '[ok] ' : '[missing]'} #{check.name}: #{check.message}" }
|
|
17
|
+
abort "Browser sessions cannot start on this machine yet." unless checks.all?(&:ok)
|
|
18
|
+
|
|
19
|
+
puts "Browser sessions can start on this machine."
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/tasks/sandbox.rake
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
namespace :action_agent do
|
|
4
4
|
namespace :sandbox do
|
|
5
|
-
desc "Write this app's checkout sandbox runtime manifest ({mcp_path, mcp_token}) to " \
|
|
5
|
+
desc "Write this app's checkout sandbox runtime manifest ({mcp_path, mcp_token, models}) to " \
|
|
6
6
|
"$ACTION_AGENT_SANDBOX_MANIFEST, or print it"
|
|
7
7
|
task manifest: :environment do
|
|
8
8
|
manifest = JSON.generate(ActionAgent::SandboxManifest.generate)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Scenario catalogs from the command line, for a repository that keeps its
|
|
4
|
+
# scenarios in YAML. On a multi-tenant install name the workspace with
|
|
5
|
+
# ACCOUNT_ID=<id> (or USER_ID=<id> where catalogs belong to users).
|
|
6
|
+
#
|
|
7
|
+
# bin/rails action_agent:catalogs:import FILE=config/evals/support.yml
|
|
8
|
+
# bin/rails action_agent:catalogs:export KEY=support FILE=tmp/support.yml
|
|
9
|
+
# bin/rails action_agent:catalogs:run KEY=support PRODUCT=triage SET=smoke [AGENT_ID=1 | PROJECT_ID=2]
|
|
10
|
+
namespace :action_agent do
|
|
11
|
+
namespace :catalogs do
|
|
12
|
+
desc "Import a scenario catalog from a YAML file (FILE=path); re-importing the same file changes nothing"
|
|
13
|
+
task import: :environment do
|
|
14
|
+
path = ENV.fetch("FILE") { abort "Name the file: FILE=config/evals/support.yml" }
|
|
15
|
+
abort "No file at #{path}" unless File.file?(path)
|
|
16
|
+
|
|
17
|
+
owner = action_agent_catalog_owner
|
|
18
|
+
catalog = ActionAgent::ScenarioCatalogImport.new(
|
|
19
|
+
owner: owner, document: File.read(path), name: File.basename(path, File.extname(path)),
|
|
20
|
+
source_kind: "upload", source_path: path,
|
|
21
|
+
agents: ActionAgent.agents_for(owner), projects: ActionAgent::Project.for_owner(owner)
|
|
22
|
+
).call
|
|
23
|
+
puts "Catalog #{catalog.key}: #{catalog.products.count} products, #{catalog.scenario_count} scenarios" \
|
|
24
|
+
"#{catalog.synced? ? ', synced to Active Storage' : ''}"
|
|
25
|
+
rescue ActionAgent::ScenarioCatalogImport::Invalid => e
|
|
26
|
+
abort "Import refused: #{e.message}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
desc "Write a catalog's canonical YAML (KEY=catalog key, FILE=path; standard output without FILE)"
|
|
30
|
+
task export: :environment do
|
|
31
|
+
catalog = action_agent_catalog!
|
|
32
|
+
yaml = catalog.export_yaml
|
|
33
|
+
if ENV["FILE"].present?
|
|
34
|
+
File.write(ENV["FILE"], yaml)
|
|
35
|
+
puts "Wrote #{catalog.key} (#{catalog.scenario_count} scenarios) to #{ENV['FILE']}"
|
|
36
|
+
else
|
|
37
|
+
puts yaml
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc "Run one set of a catalog (KEY, PRODUCT, SET) against AGENT_ID or PROJECT_ID, or the product's own target"
|
|
42
|
+
task run: :environment do
|
|
43
|
+
catalog = action_agent_catalog!
|
|
44
|
+
product = catalog.products.find_by!(key: ENV.fetch("PRODUCT") { abort "Name the product: PRODUCT=<key>" })
|
|
45
|
+
set = product.sets.find_by!(key: ENV.fetch("SET") { abort "Name the set: SET=<key>" })
|
|
46
|
+
agent = ENV["AGENT_ID"].present? ? ActionAgent::Agent.find(ENV["AGENT_ID"]) : nil
|
|
47
|
+
project = ENV["PROJECT_ID"].present? ? ActionAgent::Project.find(ENV["PROJECT_ID"]) : nil
|
|
48
|
+
|
|
49
|
+
run = set.run!(agent: agent, project: project)
|
|
50
|
+
puts "Run ##{run.id} of #{set.evaluation_name} is #{run.status} (evaluation ##{run.evaluation_id})"
|
|
51
|
+
rescue ActionAgent::ScenarioSet::NoAgent => e
|
|
52
|
+
abort e.message
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# The workspace a catalog belongs to, from ACCOUNT_ID or USER_ID; nil on a
|
|
58
|
+
# single-user install.
|
|
59
|
+
def action_agent_catalog_owner
|
|
60
|
+
if ENV["ACCOUNT_ID"].present?
|
|
61
|
+
ActionAgent.account_class.to_s.constantize.find(ENV["ACCOUNT_ID"])
|
|
62
|
+
elsif ENV["USER_ID"].present?
|
|
63
|
+
ActionAgent.user_class.to_s.constantize.find(ENV["USER_ID"])
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def action_agent_catalog!
|
|
68
|
+
key = ENV.fetch("KEY") { abort "Name the catalog: KEY=<catalog key>" }
|
|
69
|
+
ActionAgent::ScenarioCatalog.for_owner(action_agent_catalog_owner).find_by(key: key) ||
|
|
70
|
+
abort("No catalog #{key.inspect}#{ENV['ACCOUNT_ID'].present? || ENV['USER_ID'].present? ? ' in that workspace' : ''}")
|
|
71
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: actionagent
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Bowen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activeagent
|
|
@@ -124,26 +124,51 @@ files:
|
|
|
124
124
|
- README.md
|
|
125
125
|
- app/assets/builds/action_agent.css
|
|
126
126
|
- app/assets/builds/action_agent.js
|
|
127
|
+
- app/assets/builds/action_agent_recorder.js
|
|
128
|
+
- app/assets/builds/action_agent_replay.js
|
|
127
129
|
- app/controllers/action_agent/api/agent_runs_controller.rb
|
|
128
130
|
- app/controllers/action_agent/api/agents_controller.rb
|
|
129
131
|
- app/controllers/action_agent/api/analytics_controller.rb
|
|
130
132
|
- app/controllers/action_agent/api/api_keys_controller.rb
|
|
131
133
|
- app/controllers/action_agent/api/base_controller.rb
|
|
134
|
+
- app/controllers/action_agent/api/claude_logins_controller.rb
|
|
132
135
|
- app/controllers/action_agent/api/code_sessions_controller.rb
|
|
133
136
|
- app/controllers/action_agent/api/dashboard_assistant_controller.rb
|
|
137
|
+
- app/controllers/action_agent/api/draft_pull_requests_controller.rb
|
|
138
|
+
- app/controllers/action_agent/api/evaluation_fixes_controller.rb
|
|
134
139
|
- app/controllers/action_agent/api/evaluation_reports_controller.rb
|
|
135
140
|
- app/controllers/action_agent/api/evaluations_controller.rb
|
|
141
|
+
- app/controllers/action_agent/api/explorations_controller.rb
|
|
142
|
+
- app/controllers/action_agent/api/feedback_ingest_controller.rb
|
|
143
|
+
- app/controllers/action_agent/api/feedbacks_controller.rb
|
|
144
|
+
- app/controllers/action_agent/api/github_app_manifests_controller.rb
|
|
136
145
|
- app/controllers/action_agent/api/github_connections_controller.rb
|
|
146
|
+
- app/controllers/action_agent/api/github_installations_controller.rb
|
|
147
|
+
- app/controllers/action_agent/api/input_requests_controller.rb
|
|
137
148
|
- app/controllers/action_agent/api/instance_tiers_controller.rb
|
|
138
149
|
- app/controllers/action_agent/api/interaction_messages_controller.rb
|
|
139
150
|
- app/controllers/action_agent/api/interactions_controller.rb
|
|
140
151
|
- app/controllers/action_agent/api/mcp_controller.rb
|
|
141
152
|
- app/controllers/action_agent/api/mcp_servers_controller.rb
|
|
153
|
+
- app/controllers/action_agent/api/members_controller.rb
|
|
142
154
|
- app/controllers/action_agent/api/metrics_controller.rb
|
|
155
|
+
- app/controllers/action_agent/api/project_explorations_controller.rb
|
|
156
|
+
- app/controllers/action_agent/api/project_install_pull_requests_controller.rb
|
|
157
|
+
- app/controllers/action_agent/api/project_secrets_controller.rb
|
|
158
|
+
- app/controllers/action_agent/api/project_setup_controller.rb
|
|
159
|
+
- app/controllers/action_agent/api/project_sign_ins_controller.rb
|
|
160
|
+
- app/controllers/action_agent/api/projects_controller.rb
|
|
143
161
|
- app/controllers/action_agent/api/provider_keys_controller.rb
|
|
144
162
|
- app/controllers/action_agent/api/provider_models_controller.rb
|
|
163
|
+
- app/controllers/action_agent/api/recording_event_ingest_controller.rb
|
|
164
|
+
- app/controllers/action_agent/api/sandbox_browser_tickets_controller.rb
|
|
165
|
+
- app/controllers/action_agent/api/sandbox_browsers_controller.rb
|
|
145
166
|
- app/controllers/action_agent/api/sandboxes_controller.rb
|
|
167
|
+
- app/controllers/action_agent/api/scenario_catalog_entries_controller.rb
|
|
168
|
+
- app/controllers/action_agent/api/scenario_catalogs_controller.rb
|
|
146
169
|
- app/controllers/action_agent/api/session_recordings_controller.rb
|
|
170
|
+
- app/controllers/action_agent/api/sessions_controller.rb
|
|
171
|
+
- app/controllers/action_agent/api/telemetry_keys_controller.rb
|
|
147
172
|
- app/controllers/action_agent/api/templates_controller.rb
|
|
148
173
|
- app/controllers/action_agent/api/tools_controller.rb
|
|
149
174
|
- app/controllers/action_agent/api/trace_reports_controller.rb
|
|
@@ -151,21 +176,31 @@ files:
|
|
|
151
176
|
- app/controllers/action_agent/api/usage_controller.rb
|
|
152
177
|
- app/controllers/action_agent/application_controller.rb
|
|
153
178
|
- app/controllers/action_agent/dashboard_controller.rb
|
|
179
|
+
- app/controllers/action_agent/session_player_controller.rb
|
|
154
180
|
- app/controllers/action_agent/traces_controller.rb
|
|
155
181
|
- app/controllers/concerns/action_agent/api/agent_serialization.rb
|
|
156
182
|
- app/controllers/concerns/action_agent/api/evaluation_run_starting.rb
|
|
157
183
|
- app/controllers/concerns/action_agent/api/ingest_authentication.rb
|
|
158
184
|
- app/controllers/concerns/action_agent/api/mcp_dashboard_tools.rb
|
|
185
|
+
- app/controllers/concerns/action_agent/api/project_browser.rb
|
|
186
|
+
- app/controllers/concerns/action_agent/api/project_secret_authorization.rb
|
|
159
187
|
- app/controllers/concerns/action_agent/api/run_sandbox.rb
|
|
160
188
|
- app/jobs/action_agent/agent_execution_job.rb
|
|
189
|
+
- app/jobs/action_agent/agent_resume_job.rb
|
|
161
190
|
- app/jobs/action_agent/application_job.rb
|
|
162
191
|
- app/jobs/action_agent/code_session_job.rb
|
|
192
|
+
- app/jobs/action_agent/draft_pull_request_job.rb
|
|
163
193
|
- app/jobs/action_agent/evaluation_run_job.rb
|
|
194
|
+
- app/jobs/action_agent/exploration_job.rb
|
|
195
|
+
- app/jobs/action_agent/input_request_expiry_job.rb
|
|
164
196
|
- app/jobs/action_agent/process_telemetry_traces_job.rb
|
|
197
|
+
- app/jobs/action_agent/project_evaluation_job.rb
|
|
198
|
+
- app/jobs/action_agent/project_setup_job.rb
|
|
165
199
|
- app/jobs/action_agent/sandbox_cleanup_job.rb
|
|
166
200
|
- app/jobs/action_agent/sandbox_provision_job.rb
|
|
167
201
|
- app/jobs/action_agent/sandbox_run_job.rb
|
|
168
202
|
- app/jobs/action_agent/trace_retention_job.rb
|
|
203
|
+
- app/jobs/action_agent/verify_evaluation_fix_job.rb
|
|
169
204
|
- app/models/action_agent/agent.rb
|
|
170
205
|
- app/models/action_agent/agent_context.rb
|
|
171
206
|
- app/models/action_agent/agent_generation.rb
|
|
@@ -177,19 +212,31 @@ files:
|
|
|
177
212
|
- app/models/action_agent/agent_version.rb
|
|
178
213
|
- app/models/action_agent/api_key.rb
|
|
179
214
|
- app/models/action_agent/application_record.rb
|
|
215
|
+
- app/models/action_agent/catalog_scenario.rb
|
|
180
216
|
- app/models/action_agent/code_session.rb
|
|
217
|
+
- app/models/action_agent/draft_pull_request.rb
|
|
181
218
|
- app/models/action_agent/evaluation.rb
|
|
182
219
|
- app/models/action_agent/evaluation_run.rb
|
|
183
220
|
- app/models/action_agent/evaluation_scenario.rb
|
|
184
221
|
- app/models/action_agent/evaluation_scenario_result.rb
|
|
222
|
+
- app/models/action_agent/exploration.rb
|
|
185
223
|
- app/models/action_agent/github_connection.rb
|
|
224
|
+
- app/models/action_agent/github_installation.rb
|
|
225
|
+
- app/models/action_agent/input_request.rb
|
|
226
|
+
- app/models/action_agent/interaction_feedback.rb
|
|
186
227
|
- app/models/action_agent/model_pricing.rb
|
|
228
|
+
- app/models/action_agent/project.rb
|
|
229
|
+
- app/models/action_agent/project_secret.rb
|
|
187
230
|
- app/models/action_agent/provider_key.rb
|
|
188
231
|
- app/models/action_agent/recording_action.rb
|
|
232
|
+
- app/models/action_agent/recording_event.rb
|
|
189
233
|
- app/models/action_agent/recording_snapshot.rb
|
|
190
234
|
- app/models/action_agent/sandbox_instance_tier.rb
|
|
191
235
|
- app/models/action_agent/sandbox_run.rb
|
|
192
236
|
- app/models/action_agent/sandbox_session.rb
|
|
237
|
+
- app/models/action_agent/scenario_catalog.rb
|
|
238
|
+
- app/models/action_agent/scenario_product.rb
|
|
239
|
+
- app/models/action_agent/scenario_set.rb
|
|
193
240
|
- app/models/action_agent/session_recording.rb
|
|
194
241
|
- app/models/action_agent/telemetry_trace.rb
|
|
195
242
|
- app/models/concerns/action_agent/adapter_aware.rb
|
|
@@ -199,7 +246,10 @@ files:
|
|
|
199
246
|
- app/queries/action_agent/metrics_report.rb
|
|
200
247
|
- app/serializers/action_agent/agent_message_serializer.rb
|
|
201
248
|
- app/serializers/action_agent/evaluation_serializer.rb
|
|
249
|
+
- app/serializers/action_agent/input_request_serializer.rb
|
|
202
250
|
- app/serializers/action_agent/interaction_preview.rb
|
|
251
|
+
- app/serializers/action_agent/scenario_catalog_serializer.rb
|
|
252
|
+
- app/serializers/action_agent/session_summary_serializer.rb
|
|
203
253
|
- app/serializers/action_agent/telemetry_trace_serializer.rb
|
|
204
254
|
- app/serializers/action_agent/trace_interaction_serializer.rb
|
|
205
255
|
- app/services/action_agent/agent_execution_service.rb
|
|
@@ -209,17 +259,27 @@ files:
|
|
|
209
259
|
- app/services/action_agent/agent_sync.rb
|
|
210
260
|
- app/services/action_agent/agent_tool_roster.rb
|
|
211
261
|
- app/services/action_agent/agent_toolbox.rb
|
|
262
|
+
- app/services/action_agent/browser_live_ticket.rb
|
|
263
|
+
- app/services/action_agent/browser_sidecar.rb
|
|
264
|
+
- app/services/action_agent/browser_sign_in.rb
|
|
265
|
+
- app/services/action_agent/browser_tool_redaction.rb
|
|
212
266
|
- app/services/action_agent/claude_code_auth.rb
|
|
213
267
|
- app/services/action_agent/codex_session_events.rb
|
|
214
268
|
- app/services/action_agent/dashboard_assistant_service.rb
|
|
269
|
+
- app/services/action_agent/draft_pull_request_publisher.rb
|
|
215
270
|
- app/services/action_agent/evaluation_evidence.rb
|
|
271
|
+
- app/services/action_agent/evaluation_fix.rb
|
|
272
|
+
- app/services/action_agent/evaluation_fix_comparison.rb
|
|
216
273
|
- app/services/action_agent/evaluation_report_import.rb
|
|
217
274
|
- app/services/action_agent/evaluation_run_cost.rb
|
|
218
275
|
- app/services/action_agent/evaluation_runner_service.rb
|
|
219
276
|
- app/services/action_agent/evaluation_standing.rb
|
|
220
277
|
- app/services/action_agent/evaluation_tool_resolver.rb
|
|
278
|
+
- app/services/action_agent/explorer_execution_service.rb
|
|
221
279
|
- app/services/action_agent/github_client.rb
|
|
280
|
+
- app/services/action_agent/live_updates.rb
|
|
222
281
|
- app/services/action_agent/local_sandbox_backend.rb
|
|
282
|
+
- app/services/action_agent/local_sandbox_claude_login.rb
|
|
223
283
|
- app/services/action_agent/local_sandbox_databases.rb
|
|
224
284
|
- app/services/action_agent/mcp_catalog.rb
|
|
225
285
|
- app/services/action_agent/mcp_client.rb
|
|
@@ -229,13 +289,35 @@ files:
|
|
|
229
289
|
- app/services/action_agent/ollama_host_probe.rb
|
|
230
290
|
- app/services/action_agent/payload_bounds.rb
|
|
231
291
|
- app/services/action_agent/playwright_mcp_client.rb
|
|
292
|
+
- app/services/action_agent/project_boot_fix.rb
|
|
293
|
+
- app/services/action_agent/project_capabilities.rb
|
|
294
|
+
- app/services/action_agent/project_install_pull_request.rb
|
|
295
|
+
- app/services/action_agent/project_preflight.rb
|
|
296
|
+
- app/services/action_agent/project_secret_discovery.rb
|
|
297
|
+
- app/services/action_agent/project_setup.rb
|
|
298
|
+
- app/services/action_agent/provider_credentials.rb
|
|
299
|
+
- app/services/action_agent/recording_event_ingest.rb
|
|
300
|
+
- app/services/action_agent/runtime_tool_roster.rb
|
|
301
|
+
- app/services/action_agent/sample_data/conference_ticket.rb
|
|
302
|
+
- app/services/action_agent/sandbox_boot_spec.rb
|
|
303
|
+
- app/services/action_agent/sandbox_browser.rb
|
|
304
|
+
- app/services/action_agent/sandbox_browser_driver.rb
|
|
305
|
+
- app/services/action_agent/sandbox_credential_paths.rb
|
|
306
|
+
- app/services/action_agent/sandbox_mail.rb
|
|
232
307
|
- app/services/action_agent/sandbox_manifest.rb
|
|
233
308
|
- app/services/action_agent/sandbox_orchestrator.rb
|
|
309
|
+
- app/services/action_agent/sandbox_patch.rb
|
|
310
|
+
- app/services/action_agent/scenario_catalog_import.rb
|
|
311
|
+
- app/services/action_agent/scenario_catalog_repository_import.rb
|
|
234
312
|
- app/services/action_agent/scenario_evaluation_runner.rb
|
|
235
313
|
- app/services/action_agent/secret_scrubber.rb
|
|
314
|
+
- app/services/action_agent/session_index.rb
|
|
236
315
|
- app/services/action_agent/session_recording_service.rb
|
|
316
|
+
- app/services/action_agent/session_timeline.rb
|
|
237
317
|
- app/services/action_agent/tool_discovery.rb
|
|
238
318
|
- app/views/action_agent/dashboard/index.html.erb
|
|
319
|
+
- app/views/action_agent/github_app_manifests/created.html.erb
|
|
320
|
+
- app/views/action_agent/session_player/show.html.erb
|
|
239
321
|
- app/views/action_agent/traces/_trace_detail.html.erb
|
|
240
322
|
- app/views/action_agent/traces/index.html.erb
|
|
241
323
|
- app/views/action_agent/traces/metrics.html.erb
|
|
@@ -245,8 +327,10 @@ files:
|
|
|
245
327
|
- config/routes.rb
|
|
246
328
|
- lib/action_agent.rb
|
|
247
329
|
- lib/action_agent/assistant_request_filter.rb
|
|
330
|
+
- lib/action_agent/claude_login_process.rb
|
|
248
331
|
- lib/action_agent/compatibility.rb
|
|
249
332
|
- lib/action_agent/engine.rb
|
|
333
|
+
- lib/action_agent/secret_requests.rb
|
|
250
334
|
- lib/action_agent/version.rb
|
|
251
335
|
- lib/actionagent.rb
|
|
252
336
|
- lib/generators/action_agent/install_generator.rb
|
|
@@ -262,9 +346,23 @@ files:
|
|
|
262
346
|
- lib/generators/action_agent/templates/create_active_agent_github_connections.rb.erb
|
|
263
347
|
- lib/generators/action_agent/templates/create_active_agent_telemetry_traces.rb.erb
|
|
264
348
|
- lib/generators/action_agent/templates/ensure_agent_release_columns.rb.erb
|
|
349
|
+
- lib/generators/action_agent/templates/migrations/015_add_provider_key_scope.rb.erb
|
|
350
|
+
- lib/generators/action_agent/templates/migrations/016_create_active_agent_input_requests.rb.erb
|
|
351
|
+
- lib/generators/action_agent/templates/migrations/017_create_active_agent_recording_events.rb.erb
|
|
352
|
+
- lib/generators/action_agent/templates/migrations/018_add_browser_to_active_agent_sandbox_sessions.rb.erb
|
|
353
|
+
- lib/generators/action_agent/templates/migrations/019_create_active_agent_projects.rb.erb
|
|
354
|
+
- lib/generators/action_agent/templates/migrations/020_add_github_app_installations.rb.erb
|
|
355
|
+
- lib/generators/action_agent/templates/migrations/021_create_active_agent_explorations.rb.erb
|
|
356
|
+
- lib/generators/action_agent/templates/migrations/023_create_active_agent_draft_pull_requests.rb.erb
|
|
357
|
+
- lib/generators/action_agent/templates/migrations/024_add_kind_to_active_agent_project_secrets.rb.erb
|
|
358
|
+
- lib/generators/action_agent/templates/migrations/025_create_active_agent_scenario_catalogs.rb.erb
|
|
359
|
+
- lib/generators/action_agent/templates/migrations/026_add_evaluation_fixes_to_code_sessions.rb.erb
|
|
360
|
+
- lib/generators/action_agent/templates/migrations/027_create_active_agent_interaction_feedbacks.rb.erb
|
|
265
361
|
- lib/tasks/action_agent.rake
|
|
362
|
+
- lib/tasks/browser.rake
|
|
266
363
|
- lib/tasks/claude_code.rake
|
|
267
364
|
- lib/tasks/sandbox.rake
|
|
365
|
+
- lib/tasks/scenario_catalogs.rake
|
|
268
366
|
homepage: https://activeagents.ai
|
|
269
367
|
licenses:
|
|
270
368
|
- MIT
|