omneval-devloop 0.0.1__tar.gz → 0.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/build-agent-base-image.yml +5 -3
  2. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/ci.yml +1 -1
  3. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/publish-discord-bot-image.yml +1 -1
  4. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/publish-poller-image.yml +1 -1
  5. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/release.yml +1 -1
  6. omneval_devloop-0.0.2/PKG-INFO +11 -0
  7. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/Dockerfile +13 -11
  8. omneval_devloop-0.0.2/images/agent-base/pyproject.toml +29 -0
  9. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/Dockerfile +1 -1
  10. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/poller/Dockerfile +1 -1
  11. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/temporal-worker/Dockerfile +11 -3
  12. omneval_devloop-0.0.2/images/temporal-worker/pyproject.toml +23 -0
  13. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/pyproject.toml +12 -6
  14. omneval_devloop-0.0.2/uv.lock +1154 -0
  15. omneval_devloop-0.0.1/PKG-INFO +0 -11
  16. omneval_devloop-0.0.1/uv.lock +0 -793
  17. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/build-image.yml +0 -0
  18. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/publish-devloop-chart.yml +0 -0
  19. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.github/workflows/publish-temporal-worker-image.yml +0 -0
  20. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/.gitignore +0 -0
  21. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/CODEOWNERS +0 -0
  22. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/CONTEXT.md +0 -0
  23. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/LICENSE +0 -0
  24. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/README.md +0 -0
  25. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/Chart.yaml +0 -0
  26. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/templates/NOTES.txt +0 -0
  27. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/templates/_helpers.tpl +0 -0
  28. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/templates/discord-bot-deployment.yaml +0 -0
  29. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/templates/poller-deployment.yaml +0 -0
  30. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/templates/temporal-worker-deployment.yaml +0 -0
  31. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/templates/temporal-worker-service.yaml +0 -0
  32. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/test-values.yaml +0 -0
  33. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/charts/devloop/values.yaml +0 -0
  34. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/docs/getting-started.md +0 -0
  35. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/docs/temporal-prerequisites.md +0 -0
  36. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/entrypoint.py +0 -0
  37. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/prompts/diagnosis.md +0 -0
  38. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/prompts/implement.md +0 -0
  39. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/prompts/merge.md +0 -0
  40. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/prompts/plan.md +0 -0
  41. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/prompts/review.md +0 -0
  42. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/pytest.ini +0 -0
  43. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/test_entrypoint.py +0 -0
  44. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/test_human_question.py +0 -0
  45. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/test_project_tests.py +0 -0
  46. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/agent-base/test_run_agent.py +0 -0
  47. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/activities.py +0 -0
  48. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/discord_client.py +0 -0
  49. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/main.py +0 -0
  50. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/pyproject.toml +0 -0
  51. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/pytest.ini +0 -0
  52. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/test_text_utils.py +0 -0
  53. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/test_thread_store.py +0 -0
  54. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/text_utils.py +0 -0
  55. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/thread_store.py +0 -0
  56. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/discord-bot/uv.lock +0 -0
  57. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/poller/poll.py +0 -0
  58. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/poller/pyproject.toml +0 -0
  59. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/poller/pytest.ini +0 -0
  60. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/poller/test_poll.py +0 -0
  61. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/images/poller/uv.lock +0 -0
  62. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/plan.md +0 -0
  63. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/__init__.py +0 -0
  64. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/cluster.py +0 -0
  65. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/dev_loop.py +0 -0
  66. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/dev_loop_logic.py +0 -0
  67. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/github_ops.py +0 -0
  68. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/k8s_jobs.py +0 -0
  69. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/projects.py +0 -0
  70. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/schedules.py +0 -0
  71. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/shared.py +0 -0
  72. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/summarization.py +0 -0
  73. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/summarize_activities.py +0 -0
  74. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/webhook.py +0 -0
  75. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/worker.py +0 -0
  76. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/src/devloop/workflows.py +0 -0
  77. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_cluster.py +0 -0
  78. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_dev_loop.py +0 -0
  79. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_docs.py +0 -0
  80. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_github_ops.py +0 -0
  81. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_github_webhook.py +0 -0
  82. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_k8s_jobs.py +0 -0
  83. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_projects.py +0 -0
  84. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_pure_logic.py +0 -0
  85. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_stub_roundtrip.py +0 -0
  86. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_summarization.py +0 -0
  87. {omneval_devloop-0.0.1 → omneval_devloop-0.0.2}/tests/test_worker.py +0 -0
@@ -31,11 +31,13 @@ jobs:
31
31
  - name: Install uv
32
32
  uses: astral-sh/setup-uv@v5
33
33
  with:
34
- version: "0.9.11"
34
+ version: "0.11.18"
35
35
 
36
+ # Run from the repo root so uv uses the root project (local omneval-devloop),
37
+ # which provides devloop.shared that entrypoint.py imports — rather than the
38
+ # image's own pyproject.toml (whose heavy deps the mocked tests don't need).
36
39
  - name: Run entrypoint tests
37
- working-directory: images/agent-base
38
- run: uv run --with pytest --with pytest-asyncio pytest -q
40
+ run: uv run --with pytest --with pytest-asyncio pytest images/agent-base -q
39
41
 
40
42
  build_and_push:
41
43
  name: Build and push agent-base to GHCR
@@ -18,7 +18,7 @@ jobs:
18
18
  - name: Install uv
19
19
  uses: astral-sh/setup-uv@v5
20
20
  with:
21
- version: "0.9.11"
21
+ version: "0.11.18"
22
22
 
23
23
  - name: Install dependencies
24
24
  run: uv sync --all-groups
@@ -33,7 +33,7 @@ jobs:
33
33
  - name: Install uv
34
34
  uses: astral-sh/setup-uv@v5
35
35
  with:
36
- version: "0.9.11"
36
+ version: "0.11.18"
37
37
 
38
38
  - name: Run tests
39
39
  working-directory: images/discord-bot
@@ -34,7 +34,7 @@ jobs:
34
34
  - name: Install uv
35
35
  uses: astral-sh/setup-uv@v5
36
36
  with:
37
- version: "0.9.11"
37
+ version: "0.11.18"
38
38
 
39
39
  - name: Run tests
40
40
  working-directory: images/poller
@@ -50,7 +50,7 @@ jobs:
50
50
  - name: Install uv
51
51
  uses: astral-sh/setup-uv@v5
52
52
  with:
53
- version: "0.9.11"
53
+ version: "0.11.18"
54
54
 
55
55
  - name: Install dependencies
56
56
  run: uv sync --all-groups
@@ -0,0 +1,11 @@
1
+ Metadata-Version: 2.4
2
+ Name: omneval-devloop
3
+ Version: 0.0.2
4
+ License-File: LICENSE
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: fastapi>=0.115.6
7
+ Requires-Dist: httpx>=0.28.1
8
+ Requires-Dist: kubernetes>=33.1
9
+ Requires-Dist: pyyaml>=6.0.2
10
+ Requires-Dist: temporalio>=1.27.2
11
+ Requires-Dist: uvicorn>=0.34.0
@@ -4,7 +4,7 @@
4
4
 
5
5
  FROM python:3.12-slim
6
6
 
7
- COPY --from=ghcr.io/astral-sh/uv:0.11.17 /uv /uvx /bin/
7
+ COPY --from=ghcr.io/astral-sh/uv:0.11.18 /uv /uvx /bin/
8
8
 
9
9
  ARG GH_VERSION=2.93.0
10
10
  ARG KUBECTL_VERSION=1.34.1
@@ -45,21 +45,23 @@ RUN curl -fsSL --retry 5 --retry-delay 5 --max-time 300 \
45
45
  "https://github.com/argoproj/argo-cd/releases/download/v${ARGOCD_VERSION}/argocd-linux-amd64" \
46
46
  && chmod +x /usr/local/bin/argocd
47
47
 
48
- # Python SDKs: OpenHands agent runtime + OTLP exporter (omneval tracing).
49
- # omneval-devloop brings the shared Agent Job protocol (devloop.shared) plus its
50
- # pinned Temporal + kubernetes clients, so both the worker and this image use one
51
- # definition of the protocol.
48
+ # Runtime Python dependencies are declared in pyproject.toml (OpenHands agent
49
+ # runtime, OTLP tracing exporter, and omneval-devloop the shared Agent Job
50
+ # protocol, devloop.shared). Installed --system; no first-party package is built.
52
51
  #
53
52
  # SDK_VERSION pins omneval-devloop to the exact release on PyPI. The release
54
53
  # pipeline (release.yml) passes the tag version and only builds this image after
55
54
  # the PyPI publish has landed, so the baked SDK always matches the image's semver
56
- # tag. Left empty on continuous (main) builds, where the latest release is fine.
55
+ # tag. Left empty on continuous (main) builds, where the latest release is used.
57
56
  ARG SDK_VERSION=
58
- RUN UV_HTTP_TIMEOUT=300 uv pip install --system --no-cache \
59
- "openhands-ai==1.7.0" \
60
- "opentelemetry-sdk>=1.33.1" \
61
- "opentelemetry-exporter-otlp-proto-http>=1.33.1" \
62
- "omneval-devloop${SDK_VERSION:+==$SDK_VERSION}"
57
+ COPY pyproject.toml /tmp/agent-base/pyproject.toml
58
+ RUN if [ -n "$SDK_VERSION" ]; then \
59
+ echo "omneval-devloop==$SDK_VERSION" > /tmp/sdk-constraint.txt; \
60
+ fi; \
61
+ UV_HTTP_TIMEOUT=300 uv pip install --system --no-cache \
62
+ ${SDK_VERSION:+--constraint /tmp/sdk-constraint.txt} \
63
+ /tmp/agent-base \
64
+ && rm -rf /tmp/agent-base /tmp/sdk-constraint.txt
63
65
 
64
66
  # Agent Execution Job entrypoint (issues #18/#19). Project repos are cloned at
65
67
  # runtime; this is the only application code baked into the image.
@@ -0,0 +1,29 @@
1
+ [project]
2
+ name = "devloop-agent-base"
3
+ version = "0.1.0"
4
+ requires-python = ">=3.12"
5
+ # Runtime dependencies for the Agent Execution Job toolchain image:
6
+ # - openhands-ai: the agent runtime
7
+ # - opentelemetry-*: OTLP tracing export (omneval tracing)
8
+ # - omneval-devloop: the shared Agent Job protocol (devloop.shared); pinned to
9
+ # the released SDK at build time via the SDK_VERSION build arg (see Dockerfile)
10
+ dependencies = [
11
+ "openhands-ai==1.7.0",
12
+ "opentelemetry-sdk>=1.33.1",
13
+ "opentelemetry-exporter-otlp-proto-http>=1.33.1",
14
+ "omneval-devloop",
15
+ ]
16
+
17
+ # The only first-party code (entrypoint.py, prompts/) is COPYed into the image
18
+ # separately, so the build must not auto-discover/package modules — an empty
19
+ # py-modules list makes `uv pip install .` resolve dependencies only.
20
+ [build-system]
21
+ requires = ["setuptools>=61"]
22
+ build-backend = "setuptools.build_meta"
23
+
24
+ [tool.setuptools]
25
+ py-modules = []
26
+
27
+ # uv project commands (uv run) install dependencies but do not build this app.
28
+ [tool.uv]
29
+ package = false
@@ -1,7 +1,7 @@
1
1
  # syntax=docker/dockerfile:1
2
2
  FROM python:3.12-slim
3
3
 
4
- COPY --from=ghcr.io/astral-sh/uv:0.11.17 /uv /uvx /bin/
4
+ COPY --from=ghcr.io/astral-sh/uv:0.11.18 /uv /uvx /bin/
5
5
 
6
6
  WORKDIR /app
7
7
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  FROM python:3.12-slim
4
4
 
5
- COPY --from=ghcr.io/astral-sh/uv:0.11.17 /uv /uvx /bin/
5
+ COPY --from=ghcr.io/astral-sh/uv:0.11.18 /uv /uvx /bin/
6
6
 
7
7
  WORKDIR /app
8
8
 
@@ -15,13 +15,21 @@
15
15
 
16
16
  FROM python:3.12-slim
17
17
 
18
- COPY --from=ghcr.io/astral-sh/uv:0.11.17 /uv /uvx /bin/
18
+ COPY --from=ghcr.io/astral-sh/uv:0.11.18 /uv /uvx /bin/
19
19
 
20
20
  WORKDIR /app
21
21
 
22
+ # Runtime dependencies (just omneval-devloop) are declared in pyproject.toml.
23
+ # SDK_VERSION pins omneval-devloop to the exact release when set (release builds);
24
+ # empty on continuous builds, which take the latest release.
22
25
  ARG SDK_VERSION=
23
- RUN UV_HTTP_TIMEOUT=300 uv pip install --system --no-cache \
24
- "omneval-devloop${SDK_VERSION:+==$SDK_VERSION}"
26
+ COPY pyproject.toml ./
27
+ RUN if [ -n "$SDK_VERSION" ]; then \
28
+ echo "omneval-devloop==$SDK_VERSION" > /tmp/sdk-constraint.txt; \
29
+ fi; \
30
+ UV_HTTP_TIMEOUT=300 uv pip install --system --no-cache \
31
+ ${SDK_VERSION:+--constraint /tmp/sdk-constraint.txt} . \
32
+ && rm -f /tmp/sdk-constraint.txt
25
33
 
26
34
  # /healthz (Kubernetes probes) and the webhook receiver port.
27
35
  EXPOSE 8080 8088
@@ -0,0 +1,23 @@
1
+ [project]
2
+ name = "devloop-temporal-worker"
3
+ version = "0.1.0"
4
+ requires-python = ">=3.12"
5
+ # The reference Temporal Orchestration Worker installs only omneval-devloop, which
6
+ # brings the Dev Loop + Summarization workflows and their pinned clients. Pinned to
7
+ # the released SDK at build time via the SDK_VERSION build arg (see Dockerfile).
8
+ dependencies = [
9
+ "omneval-devloop",
10
+ ]
11
+
12
+ # No first-party package in this image — it runs `python -m devloop.worker` from
13
+ # the installed SDK — so the build resolves dependencies only.
14
+ [build-system]
15
+ requires = ["setuptools>=61"]
16
+ build-backend = "setuptools.build_meta"
17
+
18
+ [tool.setuptools]
19
+ py-modules = []
20
+
21
+ # uv project commands (uv run) install dependencies but do not build this app.
22
+ [tool.uv]
23
+ package = false
@@ -2,13 +2,19 @@
2
2
  name = "omneval-devloop"
3
3
  dynamic = ["version"]
4
4
  requires-python = ">=3.12"
5
+ # Floors, not exact pins: omneval-devloop is a library installed alongside other
6
+ # packages (e.g. openhands-ai in the agent-base image), so hard == pins cause
7
+ # resolution conflicts. kubernetes in particular must be >=33.1 to co-install with
8
+ # openhands-ai; the SDK only uses stable client surface
9
+ # (CoreV1Api/BatchV1Api/V1DeleteOptions). Applications that need reproducible
10
+ # builds pin exact versions via their own uv.lock.
5
11
  dependencies = [
6
- "temporalio==1.27.2",
7
- "pyyaml==6.0.2",
8
- "kubernetes==32.0.1",
9
- "httpx==0.28.1",
10
- "fastapi==0.115.6",
11
- "uvicorn==0.34.0",
12
+ "temporalio>=1.27.2",
13
+ "pyyaml>=6.0.2",
14
+ "kubernetes>=33.1",
15
+ "httpx>=0.28.1",
16
+ "fastapi>=0.115.6",
17
+ "uvicorn>=0.34.0",
12
18
  ]
13
19
 
14
20
  [dependency-groups]