Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
443fc71
feat: bootstrap agentic fabric workspace
jbdevprimary Jun 27, 2026
9ceab88
ci: rely on default codeql setup
jbdevprimary Jun 27, 2026
3e33c4d
fix: harden tool and config boundaries
jbdevprimary Jun 27, 2026
2b0e5bc
fix: address review robustness findings
jbdevprimary Jun 27, 2026
67a2c3c
test: expand runtime coverage
jbdevprimary Jun 27, 2026
469bcc4
fix: read crew yaml as utf8
jbdevprimary Jun 27, 2026
11b75c2
test: reach full agentic fabric coverage
jbdevprimary Jun 27, 2026
df6d4ae
docs: align runtime extra guidance
jbdevprimary Jun 27, 2026
f28ec17
ci: align workspace release automation
jbdevprimary Jun 27, 2026
1c2725a
feat: align vendor capability tool catalog
jbdevprimary Jun 27, 2026
50ba35f
docs: define secrets sync boundary
jbdevprimary Jun 27, 2026
2645392
fix: harden local cli profile loading
jbdevprimary Jun 27, 2026
d08afc8
fix: validate local cli configs consistently
jbdevprimary Jun 27, 2026
bbcf892
fix: externalize vulnerable crewai dependency path
jbdevprimary Jun 27, 2026
5cf5724
test: enforce full workspace coverage
jbdevprimary Jun 27, 2026
17277a6
ci: align release coverage gate
jbdevprimary Jun 27, 2026
fc5e82c
fix: keep file tools framework neutral
jbdevprimary Jun 27, 2026
eaad90e
refactor: centralize runtime requirement resolution
jbdevprimary Jun 27, 2026
ceecb7f
refactor: align fabric agent surfaces
jbdevprimary Jun 27, 2026
6a715de
fix: address review hardening feedback
jbdevprimary Jun 27, 2026
84a2f3a
fix: preserve vendor MCP import diagnostics
jbdevprimary Jun 27, 2026
26b6f44
test: guard fabric boundary drift
jbdevprimary Jun 27, 2026
463a6c4
ci: monitor workspace package dependencies
jbdevprimary Jun 27, 2026
a9c73b4
test: guard retired vendor MCP entrypoints
jbdevprimary Jun 27, 2026
8c0b446
ci: audit optional dependency set
jbdevprimary Jun 27, 2026
79cc1d7
chore: refresh dependency lock
jbdevprimary Jun 27, 2026
4b86462
build: raise proven dev dependency floors
jbdevprimary Jun 27, 2026
a7f2f81
ci: align automerge base context
jbdevprimary Jun 27, 2026
48f868e
fix: await meshy mcp provider capabilities
jbdevprimary Jun 27, 2026
3a54840
docs: make quick start fabric-first
jbdevprimary Jun 27, 2026
9e1badf
test: move fabric mockers into pytest package
jbdevprimary Jun 27, 2026
5a0736d
docs: include pytest package api reference
jbdevprimary Jun 27, 2026
c749e4d
docs: add mcp adapter example
jbdevprimary Jun 27, 2026
4daf7ea
ci: add shipped examples gate
jbdevprimary Jun 27, 2026
7daa64a
docs: make agentic repo guidance durable
jbdevprimary Jun 27, 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
33 changes: 33 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
version: 2
updates:
- package-ecosystem: pip
directory: /
schedule:
interval: weekly
groups:
minor-and-patch:
patterns: ["*"]
update-types: ["minor", "patch"]
- package-ecosystem: pip
directory: /packages/agentic-fabric
schedule:
interval: weekly
groups:
minor-and-patch:
patterns: ["*"]
update-types: ["minor", "patch"]
- package-ecosystem: pip
directory: /packages/pytest-agentic-fabric
schedule:
interval: weekly
groups:
minor-and-patch:
patterns: ["*"]
update-types: ["minor", "patch"]
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
groups:
actions:
patterns: ["*"]
31 changes: 31 additions & 0 deletions .github/workflows/automerge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Automerge

# Enables GitHub native auto-merge on dependabot + release-please PRs.
# Native auto-merge waits for required checks + any required reviews,
# then squash-merges without further action. This workflow does not check
# out PR code; pull_request_target is used only to enable auto-merge from
# the base workflow context.
on:
pull_request_target:
types: [opened, reopened, synchronize, ready_for_review]

permissions:
contents: write
pull-requests: write

jobs:
automerge:
name: Enable auto-merge
runs-on: ubuntu-latest
if: >
github.event.pull_request.user.login == 'dependabot[bot]' ||
(
github.event.pull_request.user.login == 'github-actions[bot]' &&
startsWith(github.event.pull_request.head.ref, 'release-please--')
)
steps:
- name: Enable auto-merge (squash)
env:
GH_TOKEN: ${{ github.token }}
PR_URL: ${{ github.event.pull_request.html_url }}
run: gh pr merge --auto --squash "$PR_URL"
132 changes: 132 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: CD

on:
workflow_dispatch:
inputs:
tag:
description: Release tag to publish and deploy
required: true
type: string
package:
description: Workspace package to publish
required: true
type: string

permissions: {}

jobs:
test:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ inputs.tag }}
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
version: "0.11.19"
enable-cache: true
- run: uv sync --all-packages --all-extras --dev
- run: uv tool install tox --with tox-uv --with tox-gh
- run: tox -e "py$(echo '${{ matrix.python-version }}' | tr -d '.')"

quality:
name: Quality, docs, and build
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ inputs.tag }}
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
version: "0.11.19"
enable-cache: true
- run: uv sync --all-packages --all-extras --dev
- run: uv tool install tox --with tox-uv --with tox-gh
- run: tox -e lint,typecheck,audit,examples,coverage,plugin,docs,build

publish-package:
name: Publish package to PyPI
needs: [test, quality]
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ inputs.tag }}
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
version: "0.11.19"
enable-cache: true
- name: Validate package input
env:
PACKAGE: ${{ inputs.package }}
run: |
case "$PACKAGE" in
agentic-fabric|pytest-agentic-fabric) ;;
*) echo "unsupported package: $PACKAGE" >&2; exit 1 ;;
esac
- name: Build package
env:
PACKAGE: ${{ inputs.package }}
run: uv build --package "$PACKAGE" --out-dir dist --clear
- run: uv publish --trusted-publishing always dist/*
Comment thread
coderabbitai[bot] marked this conversation as resolved.

publish-docs:
name: Publish docs to GitHub Pages
if: inputs.package == 'agentic-fabric'
needs: publish-package
runs-on: ubuntu-latest
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ inputs.tag }}
persist-credentials: false
- uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
with:
enablement: true
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
version: "0.11.19"
enable-cache: true
- run: uv sync --all-packages --all-extras --dev
- run: uv tool install tox --with tox-uv --with tox-gh
- run: tox -e docs
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: docs/_build/html
- id: deployment
name: Deploy docs
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
54 changes: 54 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: CI

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

permissions: {}

jobs:
test:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
version: "0.11.19"
enable-cache: true
- run: uv sync --all-packages --all-extras --dev
- run: uv tool install tox --with tox-uv --with tox-gh
- run: tox -e "py$(echo '${{ matrix.python-version }}' | tr -d '.')"

quality:
name: Quality, docs, build
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.13"
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
version: "0.11.19"
enable-cache: true
- run: uv sync --all-packages --all-extras --dev
- run: uv tool install tox --with tox-uv --with tox-gh
- run: tox -e lint,typecheck,audit,examples,coverage,plugin,docs,build
37 changes: 37 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Release

on:
push:
branches: [main]
workflow_dispatch:

permissions: {}

jobs:
release-please:
name: Release Please
runs-on: ubuntu-latest
permissions:
actions: write
contents: write
pull-requests: write
steps:
- uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0
id: release
with:
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
- name: Dispatch agentic-fabric continuous delivery
if: steps.release.outputs['packages/agentic-fabric--release_created'] == 'true'
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ steps.release.outputs['packages/agentic-fabric--tag_name'] }}
run: gh workflow run cd.yml --repo "$GH_REPO" --ref main -f tag="$RELEASE_TAG" -f package="agentic-fabric"
- name: Dispatch pytest-agentic-fabric continuous delivery
if: steps.release.outputs['packages/pytest-agentic-fabric--release_created'] == 'true'
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ steps.release.outputs['packages/pytest-agentic-fabric--tag_name'] }}
run: gh workflow run cd.yml --repo "$GH_REPO" --ref main -f tag="$RELEASE_TAG" -f package="pytest-agentic-fabric"
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.DS_Store
.coverage
.mypy_cache/
.pytest_cache/
.ruff_cache/
.tox/
.venv/
__pycache__/
build/
dist/
htmlcov/
*.egg-info/
*.pyc
docs/_build/
docs/apidocs/
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13
4 changes: 4 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"packages/agentic-fabric": "1.0.0",
"packages/pytest-agentic-fabric": "0.1.0"
}
48 changes: 48 additions & 0 deletions AGENTIC_REINFORCEMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Agentic Reinforcement

This repository creates the runtime- and agent-aware superclass on top of
`VendorData`.

## AgenticData Contract

- `AgenticData` extends `VendorData`, not `ExtendedData` directly.
- Preserve vendor-layer semantics while adding runtime context, fabric agent registry
behavior, runner dispatch, and agent-facing tool exposure.
- The local `_VendorDataBase` fallback is an importability shim, not a second
architecture. Keep it minimal and temporary in spirit.

## What This Repository Owns

- runtime discovery and selection
- runner registries and runtime adapters
- LangChain, CrewAI, LangGraph, Strands, and MCP-facing tool wrappers
- agent-facing tool catalogs built from vendor capabilities
- fabric agent, session, and agent orchestration context

## What This Repository Does Not Own

- base data primitives
- generic file/workflow/logging primitives
- provider SDK integrations
- provider availability/install guidance beyond delegating to `vendor-fabric`
- reimplementation of the `VendorData` provider dispatch layer

## Hand-Off From Vendor Fabric

- Pull provider capability metadata and typed callables from `vendor-fabric`.
- Decide here how those capabilities become framework tools and runtime-visible
surfaces.
- If something exists only because an AI framework wants a specific wrapper
type, keep it here.
- Do not push AI-framework shims back down into `vendor-fabric`.
- Do not bypass `vendor-fabric` to import SecretSync Go bindings or invoke the
Go runtime directly from this layer.

## Superclass Role

- `AgenticData` is the superclass downstream domain-specific agent/session/task
objects should extend.
- Downstream apps should build on `AgenticData` rather than recreating provider
and runtime composition from scratch.
- Agentic behavior is additive over the vendor layer, which is additive over
the base data layer.
Loading