iarjunganesh/continuum

GitHub: iarjunganesh/continuum

Continuum 是一个事件响应 Agent 记忆系统,通过 CockroachDB 持久化每一步状态,确保 Agent 在进程中断后能从精确断点恢复执行。

Stars: 0 | Forks: 0

## 标题:Continuum emoji: 🔁 colorFrom: purple colorTo: blue sdk: gradio sdk_version: 5.4.0 app_file: ui/app.py pinned: false license: mit # Continuum

Continuum — memory that outlives the failure.

一个事件响应 Agent,它的记忆能够在其正在诊断的中断中存活下来。

[![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/c2/c230072e0a11e8df44d339aaf4f56abf277d19ff80049621b71636628f68ee03.svg)](https://github.com/iarjanganesh/continuum/actions/workflows/ci.yml) [![Coverage](https://codecov.io/gh/iarjunganesh/continuum/graph/badge.svg)](https://codecov.io/gh/iarjunganesh/continuum) [![Release](https://img.shields.io/badge/release-0.2.0-2ea44f)](CHANGELOG.md) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Watch Video](https://img.shields.io/badge/%E2%96%B6_Watch-3--min_demo-FF0000?logo=youtube&logoColor=white)](#live-demo) [![CockroachDB Managed MCP Server](https://img.shields.io/badge/CockroachDB-Managed_MCP_Server-6933FF?logo=cockroachlabs&logoColor=white)](https://cockroachlabs.cloud/mcp) [![CockroachDB Vector Index](https://img.shields.io/badge/CockroachDB-Vector_Index-6933FF?logo=cockroachlabs&logoColor=white)](https://www.cockroachlabs.com/docs/stable/vector-indexes) [![ccloud CLI](https://img.shields.io/badge/ccloud-CLI_(stretch)-6933FF)](https://www.cockroachlabs.com/docs/cockroachcloud/ccloud-get-started) [![Amazon Bedrock](https://img.shields.io/badge/Amazon-Bedrock-FF9900?logo=amazonwebservices&logoColor=white)](https://aws.amazon.com/bedrock/) [![AWS Lambda](https://img.shields.io/badge/AWS-Lambda-FF9900?logo=awslambda&logoColor=white)](https://aws.amazon.com/lambda/) [![Gradio](https://img.shields.io/badge/Gradio-Demo_UI-F97316?logo=gradio&logoColor=white)](https://gradio.app/) [![HF Spaces](https://img.shields.io/badge/🤗_HF_Spaces-Live_Demo-FFD21E)](https://huggingface.co/spaces/iarjunganesh/continuum) [![Python](https://img.shields.io/badge/Python-3.14-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115+-009688?logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/) [![psycopg 3](https://img.shields.io/badge/psycopg-3.2+-336791?logo=postgresql&logoColor=white)](https://www.psycopg.org/psycopg3/) ## 这是什么? 大多数“Agent 记忆”演示只是存储聊天记录。Continuum 存储的是在压力下真正关键的内容:**当前正在执行哪个修复步骤、哪个告警与过去的事件相关,以及在系统崩溃前那一瞬间的确切恢复状态。** 导致生产环境中断的条件——资源耗尽、节点故障、部署回滚——恰恰也是导致响应这些问题的 Agent 终止的条件。Continuum 的设计约束是: 每一次状态转换在发生前后都会被提交到 **CockroachDB**。在步骤执行中途终止进程——没有优雅关闭,也没有检查点调用——下一次冷启动调用会读取持久化的状态,发现某个步骤冻结在 `executing` 状态,并从*该确切步骤*恢复执行。没有丢失上下文,没有重复工作,也不需要人工重新输入。 **所有事件和告警数据均为合成数据。** 不包含任何真实的生产系统、凭证或客户数据。 ## 工作原理 1. 一个**合成告警**触发(延迟飙升、错误率违规、连接饱和) 2. **Orchestrator** (AWS Lambda) 开始冷启动——它的*第一个动作永远是*通过 CockroachDB 恢复读取,查找与此告警匹配的未解决事件状态 3. **Correlation Agent** 通过 **Amazon Bedrock**(Titan v2,1024 维)对告警进行嵌入,并查询 CockroachDB 的 **C-SPANN 向量索引**以寻找语义相似的历史事件——在单次 SQL 往返中完成结构化过滤和语义排序 4. **Remediation Agent** 对匹配的先例进行推理(使用 Bedrock 上的 Claude),并提出下一步建议 5. **Memory Agent**——*唯一*被允许写入状态的模块——提交每一次转换:`proposed → executing → executed`,然后在最后一步执行后变为 `resolved` 6. **`chaos_kill.py`** 在执行过程中强制终止进程;该步骤在 CockroachDB 中保持持久的 `executing` 状态——这就是下一次调用恢复时使用的指纹 7. 所有一切都可以通过 **CockroachDB Cloud Managed MCP Server** 进行实时查询:*“向我展示所有未解决的事件及其当前的修复步骤”* ## 架构 ``` graph LR classDef aws fill:#FF9900,stroke:#B36B00,color:#fff classDef crdb fill:#6933FF,stroke:#4B21C2,color:#fff classDef agent fill:#2563EB,stroke:#1D4ED8,color:#fff classDef chaos fill:#DC2626,stroke:#991B1B,color:#fff classDef tool fill:#8B5CF6,stroke:#6D28D9,color:#fff A(["🚨 Synthetic Alert"]) --> L K["💀 chaos_kill.py
hard-kill, no shutdown"]:::chaos -.->|kills mid-step| L subgraph lambda["⚡ AWS Lambda — stateless, cold by design"] direction TB L["🧭 Orchestrator
recovery read FIRST"]:::aws C["🔗 Correlation Agent"]:::agent R["🛠️ Remediation Agent"]:::agent M["🧠 Memory Agent
single write path"]:::agent L --> C --> R --> M end B["🤖 Amazon Bedrock
Titan embeddings · Claude reasoning"]:::aws C -.-> B R -.-> B subgraph crdb["🪳 CockroachDB Cloud — the memory that survives"] direction TB T[("incidents
remediation_steps
SERIALIZABLE txns")]:::crdb V[("incident_embeddings
VECTOR(1024) · C-SPANN index")]:::crdb end M ==>|every transition committed| T C ==>|ANN search| V MCP["🔍 Managed MCP Server
read-only live queries"]:::tool CC["🩺 ccloud CLI
backup / replication pre-flight"]:::tool T --- MCP T --- CC lambda --> crdb style lambda fill:transparent,stroke:#FF9900,stroke-width:2px,stroke-dasharray:6 3 style crdb fill:transparent,stroke:#6933FF,stroke-width:2px,stroke-dasharray:6 3 ``` 完整规范:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) ## 使用的 CockroachDB 工具——以及 Agent 实际使用它们的方式 - **分布式向量索引** — `incident_embeddings.embedding VECTOR(1024)` 带有以 `service` 为前缀的 C-SPANN 索引,因此 ANN 搜索按 service 进行分区。Correlation Agent 的实时查询在单次往返中过滤结构化列*并*按 `<->` 距离进行排序。参见 [`infra/schema.sql`](infra/schema.sql)。 - **CockroachDB Cloud Managed MCP Server** — 只读模式;演示的查询接口节奏将实时问题(“未解决的事件及其当前步骤”)通过 Claude Code 在集群上运行,服务器的审计日志兼作 Agent 查阅记录的痕迹。 - ***(扩展目标)* ccloud CLI** — 将脚本化备份/复制健康检查作为混沌演示的预检:无法验证的记忆就不是真正的记忆(ADR 004)。 ## 使用的 AWS 服务 - **AWS Lambda** — orchestrator 执行;特意**没有配置预置并发**,因此每次调用都证明状态来自于 CockroachDB,而不是常驻进程内存(ADR 002) - **Amazon Bedrock** — Titan Text Embeddings V2 用于告警转向量;Claude 用于对匹配先例进行修复推理(带有确定性的先例重放回退机制,以便即使在限流时控制流也能进行演示) 评审标准映射和完整的提交说明:[`docs/DEVPOST.md`](docs/DEVPOST.md) ## 技术栈 | 层级 | 技术 | 角色 | | --- | --- | --- | | **Memory** | [![CockroachDB](https://img.shields.io/badge/CockroachDB-Cloud-6933FF?logo=cockroachlabs&logoColor=white)](https://cockroachlabs.cloud) | 事务性事件状态 + 向量嵌入,统一存储 | | **LLM / Embeddings** | [![Bedrock](https://img.shields.io/badge/Amazon-Bedrock-FF9900?logo=amazonwebservices&logoColor=white)](https://aws.amazon.com/bedrock/) | Titan v2 embeddings · Claude 推理 | | **Compute** | [![Lambda](https://img.shields.io/badge/AWS-Lambda-FF9900?logo=awslambda&logoColor=white)](https://aws.amazon.com/lambda/) | 无状态 orchestrator,设计为冷启动 (SAM: [`infra/template.yaml`](infra/template.yaml)) | | **Agents** | [![Python](https://img.shields.io/badge/Python-3.14-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![psycopg3](https://img.shields.io/badge/psycopg-3-336791?logo=postgresql&logoColor=white)](https://www.psycopg.org/psycopg3/) | Orchestrator · Correlation · Memory · Remediation | | **API** | [![FastAPI](https://img.shields.io/badge/FastAPI-009688?logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/) | 围绕 orchestrator 的版本化网关 (`/api/v1`) | | **Demo UI** | [![Gradio](https://img.shields.io/badge/Gradio-F97316?logo=gradio&logoColor=white)](https://gradio.app/) [![HF Spaces](https://img.shields.io/badge/🤗-Spaces-FFD21E)](https://huggingface.co/spaces/iarjunganesh/continuum) | 直接从 CockroachDB 读取的实时事件流 | | **Observability** | [![structlog](https://img.shields.io/badge/structlog-JSON-4A90E2)](https://www.structlog.org/) | 跨所有 Agent 的结构化事件日志 | | **Quality** | [![Ruff](https://img.shields.io/badge/Ruff-lint-D7FF64)](https://docs.astral.sh/ruff/) [![pytest](https://img.shields.io/badge/pytest-coverage-0A9EDC?logo=pytest&logoColor=white)](https://pytest.org) | CI 门禁 + Codecov | ## 快速开始 ``` # 1. Clone git clone https://github.com/iarjunganesh/continuum.git cd continuum # 2. Configure (CockroachDB Cloud 免费层 + AWS credentials) cp .env.example .env # fill in COCKROACH_DATABASE_URL + AWS keys # 3. Install (需要 Python 3.14) make install # 4. Apply schema + seed 合成 incident 历史 (带有 embeddings) make migrate make seed-data # 5. 运行 API + demo UI make run-api make run-ui # 6. resilience demo —— 在 step 中终止 agent,证明恢复能力 make chaos-demo ``` 在 Windows 上,通过 PowerShell 运行混沌演示: ``` .\scripts\chaos_demo.ps1 ``` API 在 `/api/v1` 下进行了版本化——例如 `GET /api/v1/health`、`POST /api/v1/alert`——这样网络协议契约的演进就不会破坏 Gradio UI 或演示脚本。 ## 项目结构 ``` continuum/ ├── agents/ │ ├── orchestrator.py # Lambda entrypoint — recovery read FIRST, one step per invocation │ ├── correlation_agent.py # Bedrock Titan embeddings + CockroachDB vector search │ ├── memory_agent.py # THE single write path to incidents/remediation_steps │ └── remediation_agent.py # Claude-on-Bedrock reasoning + precedent-replay fallback ├── api/main.py # FastAPI gateway, versioned under /api/v1 ├── infra/ │ ├── schema.sql # incidents · remediation_steps · incident_embeddings VECTOR(1024) │ ├── lambda_handler.py # Lambda package entrypoint │ └── template.yaml # AWS SAM — deliberately NO provisioned concurrency (ADR 002) ├── scripts/ │ ├── generate_synthetic_incidents.py # corpus incl. historical remediation paths │ ├── seed_memory.py # loads incidents + step history + embeddings │ ├── chaos_kill.py # cross-platform hard kill (psutil) — the demo beat │ ├── chaos_demo.ps1 # Windows kill-and-recover sequence │ └── demo_run.py # drives one remediation step per --tick ├── ui/app.py # Gradio — live incident feed from CockroachDB ├── tests/ │ ├── unit/ # recovery-semantics tests (all I/O mocked) │ └── integration/ # full kill-and-recover cycle vs a real cluster ├── observability/structured_logger.py ├── docs/ │ ├── ARCHITECTURE.md · DEMO_RUNBOOK.md · SUBMISSION.md · DEVPOST.md · DEPLOY.md │ └── adr/ # 6 Architecture Decision Records └── .github/workflows/ # ci.yml (lint → test → coverage → Codecov) · sync-to-hf-space.yml ``` ## 架构决策记录 | ADR | 决策 | | --- | --- | | [001](docs/adr/001-dual-memory-model.md) | 在单一 CockroachDB 存储中实现双重事务 + 向量记忆——无需单独的向量数据库,避免数据漂移 | | [002](docs/adr/002-stateless-lambda-recovery.md) | 无状态 Lambda,无预置并发——每次调用都必须冷启动恢复 | | [003](docs/adr/003-mcp-readonly-queries.md) | MCP Server 处于只读模式,作为实时查询接口 | | [004](docs/adr/004-ccloud-cli-audit-role.md) | ccloud CLI 作为持久性预检,而不仅仅是例行的集成 | | [005](docs/adr/005-synthetic-incident-data.md) | 仅限合成事件语料库——绝不使用真实的基础设施 | | [006](docs/adr/006-scope-cuts.md) | 明确范围裁剪,文档化记录而非隐藏 | ## 合成演示数据 涵盖 5 个虚构服务(`checkout-api`、`auth-service`、`recommendation-engine`、`search-index`、`billing-worker`)的 40 个已解决的历史事件,每个事件都植入其**实际的修复路径**(例如 `drain_connection_pool → restart_connection_pool → verify_connections_healthy`)——因此当实时告警与先例关联时,Remediation Agent 有真实的步骤可以重放,而不仅仅是摘要。随时重新生成: ``` python scripts/generate_synthetic_incidents.py --out data/synthetic/incidents_seed.jsonl --count 40 ``` ## CI / CD ``` push → ruff lint → pytest (recovery-semantics unit tests) → coverage → Codecov push to main → auto-sync to Hugging Face Space (public demo) ``` 参见 [`.github/workflows/ci.yml`](.github/workflows/ci.yml) 和 [`docs/DEPLOY.md`](docs/DEPLOY.md)。单元测试套件锁定了演示所依赖的核心特性:恢复读取发生在任何写入之前,被中断的步骤会被重新执行(既不会被跳过,也不会重复),并且事件在最后一步完成后得到解决。 ## 在线演示 | | | | --- | --- | | **App** | [https://huggingface.co/spaces/iarjunganesh/continuum](https://huggingface.co/spaces/iarjunganesh/continuum) *(推送至 `main` 时部署)* | | **Demo Video** | `https://youtu.be/TBD` *(≤ 3 分钟,在提交前录制——脚本:[`docs/DEMO_RUNBOOK.md`](docs/DEMO_RUNBOOK.md))* | | **Try It Now** | `make chaos-demo` — 在事件处理中途终止 Agent,观察其从 CockroachDB 恢复执行 | 提交核对清单:[`docs/SUBMISSION.md`](docs/SUBMISSION.md) · 评审对齐 + 项目故事:[`docs/DEVPOST.md`](docs/DEVPOST.md) ## 截图 *(在提交前捕获——面向评委的证明材料存放在 [`assets/`](assets/) 中。)* | 恢复流程 | 记忆层 | | --- | --- | | 终止并恢复的终端序列 | CockroachDB 控制台:崩溃中途的 `remediation_steps` | | Gradio 实时事件流 | MCP Server 在 Claude Code 中回答实时查询 | ## 路线图(黑客松后) - 真实告警源集成(PagerDuty/Opsgenie webhook 摄取) - 多区域事件关联(`REGIONAL BY ROW` 事件表) - 跨重复事件模式的矛盾/漂移检测 - Slack/Teams 修复审批循环 ## 披露与免责声明 在提交期间(2026 年 6 月 30 日 – 8 月 18 日)由个人使用 **Claude Code** 作为 AI 编码助手独立构建,符合黑客松的披露要求。未引入任何既有代码。所有事件、告警和修复数据均为合成数据;Continuum 是一个技术演示,并非生产环境的事件管理工具,也不隶属于任何公司的真实基础设施。
标签:AI智能体, Amazon Bedrock, CockroachDB, Gradio, 安全规则引擎, 运维工具, 逆向工具