The `IdleReleaseDecorator.destroy()` and `PersistenceDecorator.destroy()`
methods spawned or referenced background tasks (`_deferred_release`,
`_on_server_stop`, `resume_task`) but returned before those tasks
completed. With the module-scoped event loop used by the tests, those
orphaned tasks could still be running on a subsequent test's loop,
which made `test_multistep_hitl_multiple_restarts_at_same_wait_point`
intermittently fail when a stale idle-release task raced the new
server.
Cancel and await all pending background tasks during destroy so shutdown
is synchronous by the time the context manager exits. Tighten the
related destroy-focused tests to assert the post-condition immediately
and add a regression test that destroy() cancels in-flight
deferred-release tasks.
The publish workflow's docker-build step for the operator image was
spending ~2 minutes of every run exporting cache to GHA (per build
log: `sending cache export 88.3s done`, total step 3m37s). The
`golang:1.24` base + builder-stage layers were being uploaded to GHA
cache on every push because `cache-to` was hardcoded to `mode=max`.
Changes:
- Add `cacheMode` to `DockerConfig` (defaults to `max` — the Python
images still benefit from caching every intermediate stage).
- Plumb it through `DockerBuildAction` and into the `--cache-to`
flag in `_execute_docker_build`.
- Always emit `compression=zstd` and `ignore-error=true` on the
cache-to directive: smaller blobs to upload, and a flaky cache
push no longer fails a build whose image is already on the registry.
- Set `"cacheMode": "min"` on `operator/package.json`. The operator
is a tiny static Go binary in distroless; caching the golang base
+ module download layers costs more upload time than the rebuild
saves.
Co-authored-by: Claude <noreply@anthropic.com>
* fix(ci): publish operator image and push tags explicitly
- Mark llama-agents-operator as non-private so the release pipeline
includes its docker image in the publish plan.
- Replace 'git push --tags' (which silently reported 'Everything
up-to-date' and left new tags on the local runner) with an explicit
verbose push of the tags created by 'changeset tag' at HEAD.
* fix(ci): use changesets/action in publish mode for tags + releases
Replaces the bespoke 'changeset tag + git push' step with a
changesets/action call in publish mode. The publish script is
'pnpm exec changeset tag' — the fan-out jobs already handled the
real publishing. The action parses 'New tag: pkg@version' lines
from the publish output, pushes each tag, and creates a GitHub
Release populated from the package's CHANGELOG.md entry. This
restores the per-package release behavior that was in place before
the publish-pipeline refactor (#489) and also fixes the silent
'Everything up-to-date' tag-push regression.
* Update docker image publication details for arm
The sync-docs-to-developer-hub.sh script accepts the developer-hub repo
path as its first argument. The CI workflow passes it as a relative path
(`developer-hub`) pointing to the checkout at the repo root. The markdown
rsync step ran before any `cd`, so the relative path resolved correctly,
but the mkdocs build step `cd`s into docs/api_docs first and then uses
the still-relative `$DOCS_REPO/api-reference/python/workflows` as its
output directory. mkdocs consequently wrote the built API reference to
`docs/api_docs/developer-hub/...` inside the source repo instead of into
the actual developer-hub checkout, so the subsequent
`git add api-reference/python/workflows/` found nothing to commit and
the API reference was never synced downstream.
Resolve $DOCS_REPO to an absolute path once up front so later `cd`s do
not change its meaning.
Co-authored-by: Claude <noreply@anthropic.com>
* fix(ci): publish operator image and push tags explicitly
- Mark llama-agents-operator as non-private so the release pipeline
includes its docker image in the publish plan.
- Replace 'git push --tags' (which silently reported 'Everything
up-to-date' and left new tags on the local runner) with an explicit
verbose push of the tags created by 'changeset tag' at HEAD.
The finalize job's app token is scoped to this repo only, so reusing
it for the downstream repository_dispatch returns HTTP 404. Mint a
second installation token scoped to DOWNSTREAM_DISPATCH_REPO and use
it for that call.
https://claude.ai/code/session_017pGRMS7HCzyDQW3hnQYo9p
Co-authored-by: Claude <noreply@anthropic.com>
Repo has been renamed from workflows-py to llama-agents. Update remaining
references in README, docs, CI workflows, and example notebooks.
Co-authored-by: Claude <noreply@anthropic.com>
The repo was renamed from workflows-py to llama-agents, so the
`github.repository` guards need to be updated to match.
Co-authored-by: Claude <noreply@anthropic.com>
Previously 'dev.py down --target docker-desktop' failed because the
Tiltfile defaulted to 'kind-kind' regardless, and the --target flag had
to come before the subcommand. Forward the target positional arg to
'tilt down' (matching 'tilt up'), and allow --target on each subcommand
so it works in either position.
Use the existing app token instead of a separate secret for the
downstream repository dispatch. Include docker and helm artifacts
alongside PyPI packages in the dispatch payload.
Support running the Tilt dev environment against Docker Desktop's
built-in Kubernetes in addition to kind. Pass --target=docker-desktop
to dev.py or tilt up to use it.