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
41 changes: 41 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,47 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

publish-crates:
name: Publish to crates.io
needs: create-release
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Publish crates in dependency order
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
# Crates in dependency order (leaf dependencies first)
CRATES=(
"aof-core"
"aof-mcp"
"aof-llm"
"aof-memory"
"aof-tools"
"aof-runtime"
"aof-triggers"
"aofctl"
)

# Wait time between publishes to allow crates.io index to update
WAIT_SECONDS=30

for crate in "${CRATES[@]}"; do
echo "📦 Publishing $crate..."
cargo publish -p "$crate" --no-verify || true
echo "⏳ Waiting ${WAIT_SECONDS}s for crates.io index to update..."
sleep $WAIT_SECONDS
done

echo "✅ All crates published!"

deploy-install-script:
name: Deploy install.sh to web
needs: create-release
Expand Down
69 changes: 69 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,74 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.4.0-beta] - 2026-01-23

### Added
- **Interactive TUI Mode** - Full-featured terminal user interface for agent conversations
- Launch with `aofctl run agent <config.yaml>` (no `--input` flag)
- Chat panel with syntax-highlighted conversation history
- Activity log showing real-time agent events (thinking, analyzing, tool use, LLM calls)
- Context gauge displaying token usage and execution time
- Help overlay with keyboard shortcuts (press `?`)
- LazyGit-inspired styling with clear visual hierarchy

- **Agent Cancellation** - Stop running agents with ESC key
- Graceful cancellation using tokio CancellationToken
- Clean abort of LLM calls and tool executions
- Status indicator shows "Cancelling..." during abort

- **Session Persistence** - Conversation history saved automatically
- Sessions stored in `~/.aof/sessions/<agent-name>/`
- Includes complete message history, token usage, activity logs
- JSON format for easy inspection and backup

- **Session Resume** - Continue previous conversations
- `--resume` flag to continue latest session: `aofctl run agent config.yaml --resume`
- `--session <id>` flag to resume specific session
- Restored sessions show previous context to the agent

- **Session Management Commands**
- `aofctl get sessions` - List all saved sessions across agents
- `aofctl get sessions <agent>` - List sessions for specific agent
- Output shows session ID, agent, model, message count, tokens, age
- Supports `-o json` and `-o yaml` output formats

- **Activity Event System** - Real-time agent activity tracking
- New `ActivityEvent` enum in aof-core with event types:
- Thinking, Analyzing, LlmCall, ToolUse, ToolComplete, Warning, Error
- `ActivitySender` for emitting events from runtime
- `ActivityReceiver` for consuming events in TUI

### Changed
- TUI keyboard shortcuts updated:
- `ESC` now cancels running agent (was: do nothing)
- `Ctrl+S` saves session manually
- `Ctrl+L` clears chat and starts new session
- `Shift+↑/↓` scrolls chat history
- `PageUp/Down` scrolls 5 lines

### Documentation
- Updated getting-started guide with interactive mode examples
- Added TUI keyboard shortcuts to CLI reference
- Added session management documentation
- Updated aofctl reference with --resume and --session flags

## [0.3.2-beta] - 2026-01-02

### Added
- Built-in command handler support via `agent: builtin` in trigger command bindings
- Use `agent: builtin` for `/help`, `/agent`, `/fleet` to get interactive menus
- Interactive menus include fleet/agent selection buttons (Telegram/Slack)
- Keeps built-in UI handlers separate from LLM-routed commands
- Stale message filtering for webhook handlers
- Messages older than 60 seconds are silently dropped
- Prevents processing of queued messages when daemon restarts
- Configurable via `max_message_age_secs` in handler config
- `cargo install aofctl` support via crates.io publishing
- All AOF crates now published to crates.io
- Automated publishing on tagged releases
- New documentation: Built-in Commands Guide (`docs/guides/builtin-commands.md`)

### Fixed
- `aofctl serve` now produces visible startup output
- Changed from tracing (default level: error) to println for critical startup messages
Expand All @@ -16,6 +84,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Intermediate acknowledgment messages ("Thinking...", "Processing...") are skipped for Git platforms
- Only the final response is posted, keeping PR threads clean
- Slack/Telegram/Discord still show real-time progress indicators
- Improved `library://` URI path resolution for agent library

## [0.3.1-beta] - 2025-12-26

Expand Down
26 changes: 15 additions & 11 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@ members = [
]

[workspace.package]
version = "0.3.1-beta"
version = "0.4.0-beta"
edition = "2021"
rust-version = "1.75"
license = "Apache-2.0"
repository = "https://github.com/yourusername/aof"
authors = ["Your Name <you@example.com>"]
repository = "https://github.com/agenticdevops/aof"
authors = ["Gourav Shah <gjs@opsflow.sh>"]
keywords = ["ai", "agents", "llm", "devops", "kubernetes"]
categories = ["command-line-utilities", "development-tools"]
homepage = "https://aof.sh"
documentation = "https://docs.aof.sh"

[workspace.dependencies]
# Async runtime
Expand Down Expand Up @@ -72,14 +76,14 @@ rand = "0.8"
# Regex
regex = "1.10"

# Internal workspace dependencies
aof-core = { path = "crates/aof-core" }
aof-mcp = { path = "crates/aof-mcp" }
aof-llm = { path = "crates/aof-llm" }
aof-runtime = { path = "crates/aof-runtime" }
aof-memory = { path = "crates/aof-memory" }
aof-triggers = { path = "crates/aof-triggers" }
aof-tools = { path = "crates/aof-tools" }
# Internal workspace dependencies (path for local dev, version for crates.io)
aof-core = { path = "crates/aof-core", version = "0.3.2-beta" }
aof-mcp = { path = "crates/aof-mcp", version = "0.3.2-beta" }
aof-llm = { path = "crates/aof-llm", version = "0.3.2-beta" }
aof-runtime = { path = "crates/aof-runtime", version = "0.3.2-beta" }
aof-memory = { path = "crates/aof-memory", version = "0.3.2-beta" }
aof-triggers = { path = "crates/aof-triggers", version = "0.3.2-beta" }
aof-tools = { path = "crates/aof-tools", version = "0.3.2-beta" }

# File utilities
glob = "0.3"
Expand Down
146 changes: 93 additions & 53 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ AOF is designed as a **modular, pluggable framework** where components are reusa
│ │ WhatsApp │ │ Agent │ │ Discord │ │
│ │ Telegram │ │ Conditional │ │ HTTP │ │
│ │ GitHub │ │ Parallel │ │ Email │ │
│ │ HTTP │ │ Join │ │ File │ │
│ │ Schedule │ │ Wait │ │ ... │ │
│ │ PagerDuty │ │ Approval │ └────────────┘ │
│ │ Kafka │ │ Loop │ │
│ │ ... │ │ ... │ │
│ │ Jira │ │ Join │ │ File │ │
│ │ HTTP │ │ Wait │ │ ... │ │
│ │ Schedule │ │ Approval │ └────────────┘ │
│ │ PagerDuty │ │ Loop │ │
│ │ Opsgenie │ │ ... │ │
│ └─────────────┘ └──────────────┘ │
│ │
│ AGENTS MEMORY TOOLS │
Expand All @@ -33,6 +33,8 @@ AOF is designed as a **modular, pluggable framework** where components are reusa
│ │ Context │ │ SQLite │ │ FileSystem │ │
│ │ Tools │ │ Redis │ │ MCP │ │
│ └─────────────┘ └──────────────┘ │ kubectl │ │
│ │ Grafana │ │
│ │ Datadog │ │
│ └────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ ORCHESTRATION │
Expand Down Expand Up @@ -72,7 +74,7 @@ trait NodeExecutor {

---

## Current Release: v0.1.15
## Current Release: v0.3.2-beta

### Implemented Features

Expand All @@ -85,21 +87,41 @@ trait NodeExecutor {
| Built-in tools (Shell, HTTP, FileSystem) | ✅ Complete | |
| AgentFleet multi-agent coordination | ✅ Complete | |
| AgentFlow workflow orchestration | ✅ Complete | v1 schema with nodes/connections |
| Agent Library (30 pre-built agents) | ✅ Complete | K8s, Observability, Incident, CI/CD, Security, Cloud |

#### Trigger Types
| Trigger | Status | Priority | Notes |
|---------|--------|----------|-------|
| Slack | ✅ Complete | - | app_mention, message, slash_command |
| HTTP/Webhook | ✅ Complete | - | POST/GET with variable access |
| Schedule (Cron) | ✅ Complete | - | With timezone support |
| Manual (CLI) | ✅ Complete | - | `aofctl run` |
| Discord | ⚠️ Partial | P2 | message_create events only |
| Telegram | 🔄 Planned | P1 | [Issue #24](https://github.com/agenticdevops/aof/issues/24) |
| WhatsApp | 🔄 Planned | P1 | [Issue #23](https://github.com/agenticdevops/aof/issues/23) |
| GitHub | 🔄 Planned | P1 | [Issue #25](https://github.com/agenticdevops/aof/issues/25) |
| PagerDuty | 🔄 Planned | P3 | [Issue #26](https://github.com/agenticdevops/aof/issues/26) |
| Kafka | 🔄 Planned | P3 | Issue TBD |
| SQS | 🔄 Planned | P3 | Issue TBD |
| Trigger | Status | Notes |
|---------|--------|-------|
| Slack | ✅ Complete | app_mention, message, slash_command |
| HTTP/Webhook | ✅ Complete | POST/GET with variable access |
| Schedule (Cron) | ✅ Complete | With timezone support |
| Manual (CLI) | ✅ Complete | `aofctl run` |
| Telegram | ✅ Complete | Messages, inline keyboards |
| WhatsApp | ✅ Complete | Messages, interactive buttons |
| GitHub | ✅ Complete | PR, Issues, Push, Reviews |
| Jira | ✅ Complete | Issues, Comments, Automation webhooks |
| GitLab | ✅ Complete | MR, Issues, Push |
| Bitbucket | ✅ Complete | PR, Push |
| PagerDuty | ✅ Complete | Incidents, alerts |
| Opsgenie | ✅ Complete | Alerts, on-call |
| Discord | ⚠️ Partial | message_create events only |
| ServiceNow | 🔄 Planned | [Issue #48] |
| Kafka | 🔄 Planned | Event streaming |
| SQS | 🔄 Planned | AWS queue integration |

#### Tools
| Tool | Status | Notes |
|------|--------|-------|
| Shell | ✅ Complete | Command execution |
| HTTP | ✅ Complete | REST API calls |
| FileSystem | ✅ Complete | File operations |
| MCP | ✅ Complete | Model Context Protocol |
| Grafana | ✅ Complete | Dashboards, alerts |
| Datadog | ✅ Complete | Metrics, monitors |
| Prometheus | ✅ Complete | Metrics queries |
| Loki | ⚠️ Partial | Basic log queries |
| Jaeger | 🔄 Planned | [Issue #50] |
| Jenkins | 🔄 Planned | [Issue #55] |

#### Node Types (AgentFlow)
| Node | Status | Notes |
Expand All @@ -125,35 +147,41 @@ trait NodeExecutor {
| Bot self-approval prevention | ✅ Complete | Auto-detects bot_user_id |
| Conversation memory | ✅ Complete | Per-channel/thread isolation |
| Multi-tenant routing | ✅ Complete | FlowRouter with priorities |
| Built-in commands | ✅ Complete | /help, /agent, /fleet menus |
| Stale message filtering | ✅ Complete | Drops old queued messages |
| Config hot-reload | 🔄 Planned | [Issue #22] |

---

## Roadmap by Priority

### P0 - Critical (Current Sprint)
### P0 - Current Focus (v0.3.3)
- [x] Slack approval workflow
- [x] Conversation memory
- [x] Multi-tenant routing
- [ ] Fix/organize flow examples

### P1 - High Priority (Individual Users)
- [ ] **WhatsApp trigger** - Interactive buttons for approval
- [ ] **Telegram trigger** - Inline keyboards for bots
- [ ] **GitHub trigger** - PR/Issue webhooks
- [ ] Tutorial documentation for individual users

### P2 - Medium Priority
- [ ] Discord full implementation
- [ ] Loop node for batch operations
- [ ] HTTP node full implementation
- [ ] State persistence (checkpointing)

### P3 - Lower Priority (Enterprise/SRE)
- [ ] PagerDuty trigger
- [x] GitHub/Jira triggers
- [ ] **Structured I/O Schemas** - Standardize agent outputs ([#74], [#75], [#76])
- [ ] **MCP Server Catalog** - Document available integrations ([#71])

### P1 - Developer Experience
- [ ] Structured output schemas for agents
- [ ] MCP server catalog documentation
- [ ] More real-world flow examples
- [ ] Improved error messages (serde_path_to_error)

### P2 - Enterprise Features
- [ ] **Horizontal scaling** - Redis/NATS message queue ([#47])
- [ ] **Multi-org support** - Per-org credentials ([#46])
- [ ] **Config hot-reload** - No restart updates ([#22])
- [ ] **ServiceNow trigger** - Enterprise ITSM ([#48])

### P3 - Additional Integrations
- [ ] Kafka trigger
- [ ] SQS trigger
- [ ] AgentFleet integration in flows (v1alpha1 syntax)
- [ ] Jaeger tool ([#50])
- [ ] Jenkins tool ([#55])
- [ ] Loki enhancement ([#49])
- [ ] Loop node for batch operations

---

Expand Down Expand Up @@ -205,32 +233,44 @@ spec:
| `multi-tenant/slack-prod-k8s-bot.yaml` | Slack | Channel filtering |
| `multi-tenant/slack-staging-k8s-bot.yaml` | Slack | Environment context |
| `multi-tenant/slack-dev-local-bot.yaml` | Slack | Local development |
| `flows/github/pr-review-flow.yaml` | GitHub | PR review automation |
| `flows/github/issue-triage-flow.yaml` | GitHub | Issue labeling |

### Planned Examples (v1alpha1 schema)
These examples demonstrate future syntax and require additional implementation:

### Planned Examples
| Example | Requires | Status |
|---------|----------|--------|
| `planned/incident-auto-remediation-flow.yaml` | PagerDuty, Fleet | Planned |
| `planned/pr-review-flow.yaml` | GitHub, Fleet | Planned |
| `planned/daily-standup-report-flow.yaml` | Cron, Fleet, Jira | Planned |
| `planned/slack-qa-bot-flow.yaml` | Inline agent spec | Planned |
| `planned/cost-optimization-flow.yaml` | Schedule, Fleet | Planned |
| `planned/deploy-notification-flow.yaml` | GitHub, Fleet | Planned |
| `incident-auto-remediation-flow.yaml` | PagerDuty, Fleet | Planned |
| `daily-standup-report-flow.yaml` | Cron, Fleet, Jira | Planned |
| `cost-optimization-flow.yaml` | Schedule, Fleet | Planned |

---

## GitHub Issues

Track progress on GitHub: https://github.com/agenticdevops/aof/issues

| Issue | Title | Priority | Labels |
|-------|-------|----------|--------|
| [#22](https://github.com/agenticdevops/aof/issues/22) | Config hot-reload | P2 | enhancement |
| [#23](https://github.com/agenticdevops/aof/issues/23) | WhatsApp trigger support | P1 | enhancement |
| [#24](https://github.com/agenticdevops/aof/issues/24) | Telegram trigger support | P1 | enhancement |
| [#25](https://github.com/agenticdevops/aof/issues/25) | GitHub webhook trigger | P1 | enhancement |
| [#26](https://github.com/agenticdevops/aof/issues/26) | PagerDuty trigger | P3 | enhancement |
### Open Issues
| Issue | Title | Priority |
|-------|-------|----------|
| [#22](https://github.com/agenticdevops/aof/issues/22) | Config hot-reload | P2 |
| [#46](https://github.com/agenticdevops/aof/issues/46) | Multi-org support | P1 |
| [#47](https://github.com/agenticdevops/aof/issues/47) | Horizontal scaling | P1 |
| [#48](https://github.com/agenticdevops/aof/issues/48) | ServiceNow trigger | P2 |
| [#49](https://github.com/agenticdevops/aof/issues/49) | Loki enhancement | P1 |
| [#50](https://github.com/agenticdevops/aof/issues/50) | Jaeger tool | P2 |
| [#55](https://github.com/agenticdevops/aof/issues/55) | Jenkins tool | P2 |
| [#71](https://github.com/agenticdevops/aof/issues/71) | MCP Server Catalog | P0 |
| [#74](https://github.com/agenticdevops/aof/issues/74) | Structured I/O | P0 |

### Recently Closed
| Issue | Title | Release |
|-------|-------|---------|
| [#78](https://github.com/agenticdevops/aof/issues/78) | Grafana tool | v0.3.0 |
| [#79](https://github.com/agenticdevops/aof/issues/79) | PagerDuty trigger | v0.3.0 |
| [#80](https://github.com/agenticdevops/aof/issues/80) | Datadog tool | v0.3.0 |
| [#81](https://github.com/agenticdevops/aof/issues/81) | Incident agents | v0.3.0 |
| [#82](https://github.com/agenticdevops/aof/issues/82) | Opsgenie trigger | v0.3.0 |
| [#98](https://github.com/agenticdevops/aof/issues/98) | Jira Automation | v0.3.3 |

---

Expand Down
Loading