CI workflow (pytest + CLI demo + live smoke on py3.10/3.13); evolve CLI now reports test evaluation; add python -m wikiskill entry; README badges

This commit is contained in:
DistributedApps.AI
2026-08-31 11:32:08 -04:00
parent 4bb6ce97c8
commit 1fa25d8c3a
5 changed files with 44 additions and 2 deletions
+27
View File
@@ -0,0 +1,27 @@
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install
run: pip install -e ".[dev,ui]"
- name: Run tests
run: pytest -q --timeout=120
- name: CLI demo (mock, end-to-end)
run: python -m wikiskill.demo --root ci_demo --iterations 3
- name: Live-server smoke test
run: python smoke_test.py
+6 -1
View File
@@ -1,5 +1,9 @@
# WikiSkill — Implementation
[![CI](https://github.com/kenhuangus/wikiskill/actions/workflows/ci.yml/badge.svg)](https://github.com/kenhuangus/wikiskill/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
![Python](https://img.shields.io/badge/python-3.9%2B-blue)
Python implementation of **"WikiSkill: Compiling Agent Experience into Persistent
Knowledge for Skill Evolution"** (arXiv:2608.27454v1, Tang et al., Google Research).
@@ -81,8 +85,9 @@ Tabs (see `ui_design.md` for the full design):
```bash
pip install -e ".[dev]"
pytest # 30 tests incl. UI + end-to-end loop
pytest # 29 tests: unit + end-to-end + UI
python -m wikiskill.demo # offline demo with the deterministic MockLLM
python -m wikiskill serve # same as `wikiskill serve`
```
Demo output: a `wikiskill_demo_workspace/` with `raw/`, `wiki/`, `skills/` populated,
+3
View File
@@ -1,5 +1,6 @@
"""Live smoke test: boots the real wikiskill serve stack and exercises it over HTTP."""
import json
import shutil
import subprocess
import sys
import time
@@ -9,6 +10,8 @@ PORT = 8765
BASE = f"http://127.0.0.1:{PORT}"
ok = True
shutil.rmtree("smoke_run", ignore_errors=True) # fresh workspace per invocation
def check(name, cond, extra=""):
global ok
+4
View File
@@ -0,0 +1,4 @@
from .cli import main
if __name__ == "__main__":
raise SystemExit(main())
+4 -1
View File
@@ -79,7 +79,10 @@ def main(argv=None) -> int:
ws=Workspace(args.root), tools=tools,
K=args.iterations)
result = orch.run()
print(json.dumps(result, indent=2))
# Paper §4: report final skills vs no-skill baseline on the test split with
# paired bootstrap significance (paper Appendix C).
evaluation = orch.evaluate_test()
print(json.dumps({**result, "evaluation": evaluation}, indent=2))
return 0