Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
31c81a0
feat(cost): per-call token + USD tracking across all four providers
abcdpdcl May 2, 2026
d067b15
ci: PyPI Trusted Publishers pipeline and 0.6.0a1 release
abcdpdcl May 2, 2026
341acb5
docs: rewrite README around v0.6 framing and add release notes
abcdpdcl May 2, 2026
bac9e40
feat(web): Streamlit Web UI MVP and Hugging Face Spaces deploy guide
abcdpdcl May 2, 2026
56ce558
docs(blog): first v0.6 post on traces, replay, cost, and verifiers
abcdpdcl May 2, 2026
09b071e
feat(verifier): self-verifying revise loop driven by a 5th agent
abcdpdcl May 2, 2026
4a39ea9
feat(researcher): reflexive query rewrite on weak first-pass results
abcdpdcl May 2, 2026
32a9c28
feat: add mid-flight plan refinement
abcdpdcl May 2, 2026
94fb8f9
feat: harden plan refinement replay and timeline
abcdpdcl May 2, 2026
350862e
feat(researcher): run task searches in parallel
abcdpdcl May 3, 2026
4f9ad25
feat(phase2): add structured prompts and benchmark results
abcdpdcl May 3, 2026
a6ed381
chore: switch development workflow to conda
abcdpdcl May 3, 2026
459c23d
docs: align v0.6 shipped status
abcdpdcl May 3, 2026
9c14c9d
feat(web): add static trace viewer
abcdpdcl May 3, 2026
3ed1603
feat(mcp): add sdk-backed transports
abcdpdcl May 3, 2026
9edff4f
feat(cli): add deployment doctor
abcdpdcl May 3, 2026
3423e61
docs(mcp): add server demo scripts
abcdpdcl May 3, 2026
80c9081
ci: publish trace viewer pages
abcdpdcl May 3, 2026
7db589c
fix(cli): harden report output on Windows
abcdpdcl May 3, 2026
4affe40
fix(replay): preserve recorded tool failures
abcdpdcl May 3, 2026
75444f3
feat(benchmark): add external public harness
abcdpdcl May 3, 2026
e38f377
feat(mcp): harden demo tool configuration
abcdpdcl May 3, 2026
b46e95a
chore(release): prepare hosted docs and package manifest
abcdpdcl May 3, 2026
e43f6f2
docs(live): record Tavily smoke blocker
abcdpdcl May 3, 2026
9031ae8
test(deploy): cover hosted entrypoints
abcdpdcl May 3, 2026
8d4dc1a
ci(release): add package smoke gates
abcdpdcl May 3, 2026
e1ec89f
feat(benchmark): label public smoke artifacts
abcdpdcl May 3, 2026
1e53668
docs(live): refresh Tavily blocker
abcdpdcl May 8, 2026
13acc6f
feat(docker): add container deployment assets
abcdpdcl May 8, 2026
be66f18
ci(release): smoke test built wheel
abcdpdcl May 8, 2026
3f5edb6
chore(release): modernize license metadata
abcdpdcl May 8, 2026
571bdc4
ci(release): harden hosted publish readiness
abcdpdcl May 8, 2026
49a8712
feat(benchmark): audit public smoke artifacts
abcdpdcl May 8, 2026
7e01545
docs(live): record final release readiness pass
abcdpdcl May 8, 2026
c701257
docs(readme): sync v0.6 readiness status
abcdpdcl May 8, 2026
6cb69a1
feat(release): add local readiness preflight
abcdpdcl May 8, 2026
4facae3
feat(benchmark): add failure analysis artifacts
abcdpdcl May 8, 2026
60ddaca
feat(benchmark): add regression analysis comparison
abcdpdcl May 11, 2026
3470a31
feat(verifier): add deterministic citation audit
abcdpdcl May 11, 2026
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
47 changes: 47 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
.env
*.env
.env.*
!.env.example

.git/
.github/
.pytest_cache/
.ruff_cache/
.mypy_cache/
__pycache__/
*.py[cod]
*.pyo

build/
dist/
*.egg-info/
wheels/

outputs/
logs/
*.log
*.tmp
*.temp
*.bak
*.backup
*.old

.venv/
venv/
env/
ENV/
.conda/
__pypackages__/

.vscode/
.idea/
*.code-workspace

.DS_Store
Thumbs.db
Desktop.ini

tests/
htmlcov/
.coverage
.coverage.*
13 changes: 13 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,21 @@ GOOGLE_API_KEY=your_google_api_key_here

# Search Tools
TAVILY_API_KEY=your_tavily_api_key_here

# MCP Tools (optional)
# legacy_http keeps the old POST /tools/<tool_name> adapter.
# stdio and streamable_http use the official MCP Python SDK from the [mcp] extra.
MCP_SERVER_URL=
MCP_API_KEY=
MCP_TRANSPORT=
MCP_TOOL_NAME=web_search
MCP_CONFIG_PATH=
MCP_SERVER_NAME=
MCP_COMMAND=
MCP_ARGS=
MCP_ENV_JSON=
MCP_QUERY_ARG=query
MCP_TOOL_ARGS_JSON=

# Workflow
MAX_ITERATIONS=5
Expand Down
1 change: 1 addition & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Testing

- [ ] `conda env update -n sdyj -f environment.yml --prune`
- [ ] `pytest`
- [ ] `ruff check SDYJ_Agents tests`

Expand Down
25 changes: 19 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,34 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
- name: Set up Conda
uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
activate-environment: sdyj-ci
python-version: ${{ matrix.python-version }}
channels: conda-forge
channel-priority: strict
auto-update-conda: true

- name: Install package
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
- name: Install Conda environment
shell: bash -el {0}
run: conda env update --name sdyj-ci --file environment.yml --prune

- name: Lint
shell: bash -el {0}
run: ruff check SDYJ_Agents tests

- name: Test
shell: bash -el {0}
env:
DEEPSEEK_API_KEY: dummy
LLM_PROVIDER: deepseek
run: pytest

- name: Benchmark gate
shell: bash -el {0}
env:
DEEPSEEK_API_KEY: dummy
LLM_PROVIDER: deepseek
run: sdyj benchmark run --max-scenarios 1 --max-iterations 2 --fail-under 0.75 --output-dir outputs/ci_benchmark
61 changes: 61 additions & 0 deletions .github/workflows/ghcr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Container Image

on:
workflow_dispatch:
inputs:
publish:
description: "Push the image to GHCR"
type: boolean
required: true
default: false
image_tag:
description: "Optional extra image tag"
type: string
required: false
default: ""

permissions:
contents: read
packages: write

jobs:
build:
name: Build Docker image
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
if: inputs.publish
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Generate image metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/hwfengcs/sdyj-multi-agents
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha,prefix=sha-
type=raw,value=${{ inputs.image_tag }},enable=${{ inputs.image_tag != '' }}

- name: Build image
uses: docker/build-push-action@v6
with:
context: .
push: ${{ inputs.publish }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
SDYJ_EXTRAS=web
cache-from: type=gha
cache-to: type=gha,mode=max
48 changes: 48 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Pages

on:
workflow_dispatch:
push:
branches: ["main"]
paths:
- "docs/**"
- "SDYJ_Agents/web/trace_viewer.html"
- ".github/workflows/pages.yml"

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Configure Pages
uses: actions/configure-pages@v5

- name: Build static site
shell: bash
run: |
mkdir -p _site/SDYJ_Agents/web
cp -R docs/. _site/
cp SDYJ_Agents/web/trace_viewer.html _site/SDYJ_Agents/web/trace_viewer.html

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: _site

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Loading
Loading