Skip to content

feat(registry): workflow registry system — named registries, versioning, caching#97

Merged
jrob5756 merged 13 commits intomainfrom
feat/workflow-registry
Apr 20, 2026
Merged

feat(registry): workflow registry system — named registries, versioning, caching#97
jrob5756 merged 13 commits intomainfrom
feat/workflow-registry

Conversation

@jrob5756
Copy link
Copy Markdown
Collaborator

Summary

Introduces a configurable named-registry system for distributing and running shared workflows. Supersedes #88 and addresses #78.

Full design doc: docs/design/registry.md

What's new

  • Named registries — GitHub repos or local directories, configured in ~/.conductor/registries.toml
  • Registry CLIconductor registry {list,add,remove,set-default,update,show}
  • Run from registryconductor run qa-bot@official@1.2.3 (or just qa-bot for latest from default)
  • Explicit versioning — npm-style, backed by git tags for GitHub registries
  • Local caching~/.conductor/cache/registries/, explicit versions immutable, latest re-resolved on update
  • Index manifestindex.yaml at registry root lists workflows, descriptions, versions, and paths

What's removed

  • conductor init / conductor templates commands
  • src/conductor/cli/init.py and src/conductor/templates/ directory

Changes

New: src/conductor/registry/ (6 modules)

Module Purpose
config.py Pydantic models for registries.toml, load/save/add/remove helpers
resolver.py Parse name[@registry][@version], file-vs-registry detection
index.py Load/parse index.yaml from GitHub or local path
cache.py Local cache management, workflow + sibling file fetching
github.py GitHub raw file fetch, tag listing, directory enumeration
errors.py RegistryError extending ConductorError

Modified

  • src/conductor/cli/app.pyrun/resume/validate accept registry refs; registry subcommand wired in; init/templates removed
  • pyproject.toml — added httpx>=0.27.0
  • README, docs/cli-reference.md, conductor skill docs

Tests

  • 133 new tests across tests/test_registry/ (unit + integration) and tests/test_cli/test_registry_commands.py
  • All 1977 tests pass

Reference syntax

conductor run ./workflow.yaml          # local file (unchanged)
conductor run qa-bot                   # latest from default registry
conductor run qa-bot@team              # latest from named registry
conductor run qa-bot@team@1.2.3        # explicit version

Closes #78

jrob5756 and others added 13 commits April 17, 2026 17:41
Introduce a configurable named-registry system for distributing and
running shared workflows. Registries can be GitHub repos or local
directories, configured once in ~/.conductor/registries.toml and
referenced by short name.

- Add src/conductor/registry/ package (config, resolver, index, cache,
  github helpers, errors)
- Add `conductor registry` CLI subcommand group (list, add, remove,
  set-default, update, show)
- Modify run/resume/validate to accept registry refs
  (name[@registry][@Version]) in addition to local file paths
- Remove init/templates feature (init.py, templates/, test_init.py)
- Add httpx dependency for GitHub API fetching
- Add 133 new tests (unit + integration + CLI)
- Update README, cli-reference, design doc, and conductor skill

Supersedes PR #88.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The type checker flags `ref.workflow`, `ref.registry_name`, and
`ref.registry_entry` as `str | None` when passed to functions
expecting non-optional args. Add assert narrowing in each branch
to satisfy the type checker.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When adding the first registry (no default configured yet), it is
automatically set as the default. Subsequent registries still require
--default to change the default.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GitHub fetch helpers now automatically pick up a token from
`gh auth token` when available, enabling access to private
registry repos. Falls back to unauthenticated requests for
public repos.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The index loader was calling httpx.get directly, bypassing the auth
token from gh CLI. Refactored _load_github_index to use
fetch_file_text from github.py, which adds the Bearer token for
private repos.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When `conductor registry show <name>` matches a configured registry
name, it displays the registry details and its workflows instead of
trying to parse the name as a workflow reference.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
`conductor registry show <workflow>` now fetches the workflow and
displays its input parameters (name, type, required, default,
description) in a table, plus an example run command.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Split the show UX cleanly:
- `conductor registry show <registry>` — registry info + workflow list
- `conductor show <workflow-ref>` — workflow details, inputs table,
  and example run command

Both registry show and list now hint at `conductor show` for details.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Local path registries now return the source file path directly instead
of copying to cache. This means edits to workflow files are reflected
immediately without needing `conductor registry update`. Versioning
is skipped for path registries since there's no version control.

GitHub registries still use the cache as before.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The show command now displays three tables:
- Inputs: name, type, required, default, description
- Agents: name, type, description, routes (incl. parallel/for-each)
- Outputs: field name and template expression

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
v0.2.0 is missing copilot.session.PermissionHandler, causing the SDK
to be detected as unavailable. Pin to >=0.2.2 which has the required
exports.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756 jrob5756 merged commit 1311dac into main Apr 20, 2026
7 checks passed
@jrob5756 jrob5756 deleted the feat/workflow-registry branch April 20, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Workflow Template Registry

1 participant