Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: ci

# agent-ops's own CI — the framework eats its own dog food. Lints the shell,
# runs the stdlib tests for the triage composer, the mara observer, and the
# olympus's own CI — the framework eats its own dog food. Lints the shell,
# runs the stdlib tests for the triage composer, the argus observer, and the
# config loader, and runs the leakage gate on this repo itself.

on:
Expand All @@ -28,8 +28,8 @@ jobs:
- name: triage composer tests
run: python3 scripts/agent-bot/tests/test_triage.py

- name: mara observer tests
run: python3 scripts/agent-bot/tests/test_mara.py
- name: argus observer tests
run: python3 scripts/agent-bot/tests/test_argus.py

- name: config loader tests
run: python3 scripts/agent-bot/tests/test_config.py
Expand All @@ -45,3 +45,6 @@ jobs:

- name: leakage gate (self)
run: bash scripts/lint/check-leakage.sh

- name: legacy-naming regression guard (rename to Olympus stays clean)
run: bash scripts/lint/check-legacy-naming.sh
17 changes: 10 additions & 7 deletions .github/workflows/guard.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
name: agent-ops-guard
name: olympus-guard

# Reusable hygiene gate. No LLM, no self-hosted runner — pure linters that
# catch the mechanical PR failure classes agent-ops was built around:
# catch the mechanical PR failure classes olympus was built around:
# - leakage : no private IP / key material / machine path in tracked files
# - secrets : every referenced GitHub secret is actually provisioned
# - secret-values : provisioned secret values are sane (non-empty, not "-")
#
# Consumer wrapper (triggers on pull_request + push):
# jobs:
# guard:
# uses: Netis/agent-ops/.github/workflows/guard.yml@v0.1.0
# uses: Netis/olympus/.github/workflows/guard.yml@v0.1.0
# secrets: inherit # only needed if check-secrets queries the API
#
# Runs on GitHub-hosted ubuntu; safe for fork PRs (read-only).

on:
workflow_call:
inputs:
agent_ops_ref:
olympus_repo:
type: string
default: Netis/olympus
olympus_ref:
type: string
default: main
run_secret_checks:
Expand All @@ -34,11 +37,11 @@ jobs:
- name: Checkout consumer repo
uses: actions/checkout@v4

- name: Fetch agent-ops scripts
- name: Fetch olympus scripts
uses: actions/checkout@v4
with:
repository: Netis/agent-ops
ref: ${{ inputs.agent_ops_ref }}
repository: ${{ inputs.olympus_repo }}
ref: ${{ inputs.olympus_ref }}
token: ${{ secrets.AGENT_GH_TOKEN || github.token }}
path: _agentops

Expand Down
25 changes: 14 additions & 11 deletions .github/workflows/implement.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: agent-ops-implement
name: olympus-implement

# Reusable dev-agent workflow. The consumer triggers it when the triage agent
# (or a human) adds the `agent:try` label to an issue:
Expand All @@ -8,29 +8,32 @@ name: agent-ops-implement
# jobs:
# implement:
# if: github.event.label.name == 'agent:try'
# uses: Netis/agent-ops/.github/workflows/implement.yml@v0.1.0
# uses: Netis/olympus/.github/workflows/implement.yml@v0.1.0
# permissions: { contents: write, issues: write, pull-requests: write }
# with:
# runner_labels: '["self-hosted","my-runner"]'
# secrets: inherit
#
# The dev agent branches off the default branch, implements within the triaged
# scope, runs the project's build+test command (from .agent-ops.json), and
# scope, runs the project's build+test command (from .olympus.json), and
# opens a DRAFT PR labelled `auto-agent`. Review/merge is the review workflow's
# job. Nothing here is project-specific.

on:
workflow_call:
inputs:
agent_ops_ref:
olympus_repo:
type: string
default: Netis/olympus
olympus_ref:
type: string
default: main
runner_labels:
type: string
default: '["self-hosted"]'
config_path:
type: string
default: .agent-ops.json
default: .olympus.json
model:
type: string
default: claude-3-5-sonnet-20241022
Expand All @@ -45,7 +48,7 @@ on:
AUTO_MERGE_TEAM: { required: false }

concurrency:
group: agent-ops-implement-${{ github.event.issue.number }}
group: olympus-implement-${{ github.event.issue.number }}
cancel-in-progress: false

jobs:
Expand Down Expand Up @@ -73,20 +76,20 @@ jobs:
# are suppressed by GitHub's anti-recursion rule).
token: ${{ secrets.AGENT_GH_TOKEN }}

- name: Fetch agent-ops scripts
- name: Fetch olympus scripts
uses: actions/checkout@v4
with:
repository: Netis/agent-ops
ref: ${{ inputs.agent_ops_ref }}
repository: ${{ inputs.olympus_repo }}
ref: ${{ inputs.olympus_ref }}
token: ${{ secrets.AGENT_GH_TOKEN }}
path: _agentops

- name: Implement
env:
AGENT_OPS_CONFIG: ${{ inputs.config_path }}
OLYMPUS_CONFIG: ${{ inputs.config_path }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
ISSUE_TITLE: ${{ github.event.issue.title }}
ISSUE_AUTHOR: ${{ github.event.issue.user.login }}
GH_TOKEN: ${{ secrets.AGENT_GH_TOKEN }}
AUTO_MERGE_TEAM: ${{ secrets.AUTO_MERGE_TEAM }}
run: bash _agentops/scripts/agent-bot/run_wiwi.sh
run: bash _agentops/scripts/agent-bot/run_hephaestus.sh
39 changes: 21 additions & 18 deletions .github/workflows/observe.yml
Original file line number Diff line number Diff line change
@@ -1,48 +1,51 @@
name: agent-ops-observe
name: olympus-observe

# Reusable production observer. One health poll of a deployed service; on a
# SUSTAINED failure (confirm-debounce filters deploy/restart blips) it files a
# scrubbed, deduplicated incident issue that the triage→dev loop can pick up.
#
# Two ways to run mara:
# Two ways to run argus:
# 1. This scheduled workflow (simplest; runs on the self-hosted runner).
# 2. The systemd timer units in scripts/agent-bot/ (mara.service/.timer) on a
# 2. The systemd timer units in scripts/agent-bot/ (argus.service/.timer) on a
# host ISOLATED from prod — preferred for real isolation, since a GHA run
# can't observe an outage that also takes down the runner.
#
# Consumer wrapper:
# on: { schedule: [{ cron: '*/5 * * * *' }], workflow_dispatch: {} }
# jobs:
# observe:
# uses: Netis/agent-ops/.github/workflows/observe.yml@v0.1.0
# uses: Netis/olympus/.github/workflows/observe.yml@v0.1.0
# permissions: { issues: write }
# with:
# runner_labels: '["self-hosted","my-runner"]'
# secrets: inherit
#
# Health URL + readiness come from .agent-ops.json (observer.*); the issue is
# Health URL + readiness come from .olympus.json (observer.*); the issue is
# filed on observer.repo.

on:
workflow_call:
inputs:
agent_ops_ref:
olympus_repo:
type: string
default: Netis/olympus
olympus_ref:
type: string
default: main
runner_labels:
type: string
default: '["self-hosted"]'
config_path:
type: string
default: .agent-ops.json
default: .olympus.json
dry_run:
type: boolean
default: false
secrets:
AGENT_GH_TOKEN: { required: true }

concurrency:
group: agent-ops-observe
group: olympus-observe
cancel-in-progress: false

jobs:
Expand All @@ -55,24 +58,24 @@ jobs:
with:
fetch-depth: 1

- name: Fetch agent-ops scripts
- name: Fetch olympus scripts
uses: actions/checkout@v4
with:
repository: Netis/agent-ops
ref: ${{ inputs.agent_ops_ref }}
repository: ${{ inputs.olympus_repo }}
ref: ${{ inputs.olympus_ref }}
token: ${{ secrets.AGENT_GH_TOKEN }}
path: _agentops

- name: Observe
env:
AGENT_OPS_CONFIG: ${{ inputs.config_path }}
MARA_DRY_RUN: ${{ inputs.dry_run && '1' || '0' }}
MARA_STATE_DIR: ${{ github.workspace }}/.mara-state
OLYMPUS_CONFIG: ${{ inputs.config_path }}
ARGUS_DRY_RUN: ${{ inputs.dry_run && '1' || '0' }}
ARGUS_STATE_DIR: ${{ github.workspace }}/.argus-state
GH_TOKEN: ${{ secrets.AGENT_GH_TOKEN }}
# config.sh (sourced by a tiny shim) maps observer.* → MARA_*; mara.sh
# itself reads MARA_*. We source config here so a GHA run gets the same
# config.sh (sourced by a tiny shim) maps observer.* → ARGUS_*; argus.sh
# itself reads ARGUS_*. We source config here so a GHA run gets the same
# observer.* mapping the systemd path would get from its EnvironmentFile.
run: |
source _agentops/scripts/lib/config.sh
agent_ops_load_config
bash _agentops/scripts/agent-bot/mara.sh
olympus_load_config
bash _agentops/scripts/agent-bot/argus.sh
27 changes: 15 additions & 12 deletions .github/workflows/review.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: agent-ops-review
name: olympus-review

# Reusable PR-review workflow (the review bot). Fires after the consumer's CI
# succeeds on a PR, reviews the diff, posts a structured review, then — for
Expand All @@ -12,27 +12,30 @@ name: agent-ops-review
# workflow_dispatch: { inputs: { pr_number: { required: true, type: number } } }
# jobs:
# review:
# uses: Netis/agent-ops/.github/workflows/review.yml@v0.1.0
# uses: Netis/olympus/.github/workflows/review.yml@v0.1.0
# permissions: { contents: write, issues: write, pull-requests: write, statuses: read }
# with:
# runner_labels: '["self-hosted","my-runner"]'
# secrets: inherit
#
# The review bot's identity, the auto-agent label, and the default branch all
# come from the consumer's .agent-ops.json.
# come from the consumer's .olympus.json.

on:
workflow_call:
inputs:
agent_ops_ref:
olympus_repo:
type: string
default: Netis/olympus
olympus_ref:
type: string
default: main
runner_labels:
type: string
default: '["self-hosted"]'
config_path:
type: string
default: .agent-ops.json
default: .olympus.json
model:
type: string
default: claude-3-5-sonnet-20241022
Expand All @@ -57,7 +60,7 @@ on:
AUTO_MERGE_TEAM: { required: false }

concurrency:
group: agent-ops-review-${{ github.event.workflow_run.pull_requests[0].number || inputs.pr_number }}
group: olympus-review-${{ github.event.workflow_run.pull_requests[0].number || inputs.pr_number }}
cancel-in-progress: true

jobs:
Expand Down Expand Up @@ -111,18 +114,18 @@ jobs:
- name: Fetch base for diff
run: git fetch origin "${{ steps.pr.outputs.base_ref }}" --depth 200

- name: Fetch agent-ops scripts
- name: Fetch olympus scripts
uses: actions/checkout@v4
with:
repository: Netis/agent-ops
ref: ${{ inputs.agent_ops_ref }}
repository: ${{ inputs.olympus_repo }}
ref: ${{ inputs.olympus_ref }}
token: ${{ secrets.AGENT_GH_TOKEN }}
path: _agentops

- name: Run review agent
id: review
env:
AGENT_OPS_CONFIG: ${{ inputs.config_path }}
OLYMPUS_CONFIG: ${{ inputs.config_path }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ steps.pr.outputs.pr_number }}
run: bash _agentops/scripts/pr-review/run_review.sh "$PR_NUMBER"
Expand All @@ -140,7 +143,7 @@ jobs:
- name: Auto-merge if eligible
if: ${{ steps.review.outcome == 'success' }}
env:
AGENT_OPS_CONFIG: ${{ inputs.config_path }}
OLYMPUS_CONFIG: ${{ inputs.config_path }}
GH_TOKEN: ${{ secrets.AGENT_GH_TOKEN }}
PR_NUMBER: ${{ steps.pr.outputs.pr_number }}
AUTO_MERGE_TEAM: ${{ secrets.AUTO_MERGE_TEAM }}
Expand All @@ -149,7 +152,7 @@ jobs:
- name: Dispatch revise if changes requested
if: ${{ steps.review.outcome == 'success' }}
env:
AGENT_OPS_CONFIG: ${{ inputs.config_path }}
OLYMPUS_CONFIG: ${{ inputs.config_path }}
GH_TOKEN: ${{ secrets.AGENT_GH_TOKEN }}
PR_NUMBER: ${{ steps.pr.outputs.pr_number }}
run: bash _agentops/scripts/agent-bot/revise_dispatch.sh
Expand Down
Loading
Loading