Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
287 commits
Select commit Hold shift + click to select a range
a668d68
fix: require connector entry point registration
jbdevprimary Jun 10, 2026
28d6210
docs: document strict connector registration
jbdevprimary Jun 10, 2026
1cdf20a
fix: export real connector root classes
jbdevprimary Jun 10, 2026
b5afd52
fix: fail visibly for missing langchain tools
jbdevprimary Jun 10, 2026
f7ce49b
test: lock public package exports
jbdevprimary Jun 10, 2026
ec92efa
fix: expose workflow aliases at package root
jbdevprimary Jun 10, 2026
0453423
fix: lower extended containers in encoders
jbdevprimary Jun 10, 2026
4fc3b90
fix: honor connector retry configuration
jbdevprimary Jun 10, 2026
15a480e
fix: serialize extended containers in cli
jbdevprimary Jun 10, 2026
3ef6961
fix: disable file logging by default
jbdevprimary Jun 10, 2026
fb499cc
docs: document opt-in file logging
jbdevprimary Jun 10, 2026
0a68097
feat: preserve tuples in extended containers
jbdevprimary Jun 10, 2026
33a2cc5
test: cover tuple workflow serialization
jbdevprimary Jun 10, 2026
140e0ce
feat: promote github connector payloads
jbdevprimary Jun 10, 2026
0f8d28b
feat: promote zoom connector payloads
jbdevprimary Jun 10, 2026
dac79ca
feat: promote cursor tool payloads
jbdevprimary Jun 10, 2026
964b503
feat: promote slack connector payloads
jbdevprimary Jun 10, 2026
89448bc
feat: promote anthropic tool payloads
jbdevprimary Jun 10, 2026
4d87d26
feat: promote vault connector payloads
jbdevprimary Jun 10, 2026
e620731
feat: promote aws tool payloads
jbdevprimary Jun 10, 2026
b5d9c00
feat: promote aws secrets payloads
jbdevprimary Jun 10, 2026
d750f8c
feat: promote aws s3 payloads
jbdevprimary Jun 10, 2026
93c5a9d
feat: promote aws organization payloads
jbdevprimary Jun 10, 2026
fe2c596
feat: promote aws sso payloads
jbdevprimary Jun 10, 2026
5d30468
feat: promote aws codedeploy payloads
jbdevprimary Jun 10, 2026
898621e
feat: promote google tool payloads
jbdevprimary Jun 10, 2026
47c8352
feat: promote google cloud payloads
jbdevprimary Jun 10, 2026
76b9d7c
feat: promote google billing payloads
jbdevprimary Jun 10, 2026
fb52c42
feat: promote google service payloads
jbdevprimary Jun 10, 2026
5b04984
feat: promote google workspace payloads
jbdevprimary Jun 10, 2026
efdfcdb
feat: promote google jules payloads
jbdevprimary Jun 10, 2026
9d49fa0
feat: promote cursor and slack payloads
jbdevprimary Jun 10, 2026
e605cf7
feat: promote anthropic connector payloads
jbdevprimary Jun 10, 2026
c667f77
feat: promote secrets tool payloads
jbdevprimary Jun 10, 2026
5bfdb7a
feat: promote meshy tool payloads
jbdevprimary Jun 10, 2026
84c24f0
feat: promote meshy task ids
jbdevprimary Jun 10, 2026
08c21af
feat: promote cloud helper payloads
jbdevprimary Jun 10, 2026
e5ea1bd
feat: promote connector metadata payloads
jbdevprimary Jun 10, 2026
d9ec996
feat: promote slack block payloads
jbdevprimary Jun 10, 2026
d1d0334
feat: promote meshy operational payloads
jbdevprimary Jun 10, 2026
233c7a3
feat: promote meshy result payloads
jbdevprimary Jun 10, 2026
5c86087
feat: promote secrets connector payloads
jbdevprimary Jun 10, 2026
d7a3c4c
feat: promote meshy animation catalog payloads
jbdevprimary Jun 10, 2026
9e3f316
feat: promote meshy vector store payloads
jbdevprimary Jun 10, 2026
71e2e34
feat: promote meshy repository payloads
jbdevprimary Jun 10, 2026
7c63a0f
feat: promote connector optional metadata
jbdevprimary Jun 10, 2026
b0ec62c
feat: promote anthropic model metadata
jbdevprimary Jun 10, 2026
6bbbda8
feat: promote meshy webhook url payloads
jbdevprimary Jun 10, 2026
eb27d62
feat: promote ai tool schema payloads
jbdevprimary Jun 10, 2026
660d467
feat: promote meshy embedding payloads
jbdevprimary Jun 10, 2026
6182ecf
feat: promote input provider snapshots
jbdevprimary Jun 10, 2026
da64571
feat: promote logging storage payloads
jbdevprimary Jun 10, 2026
41f2382
feat: promote mapping container results
jbdevprimary Jun 10, 2026
1879819
feat: promote decode outputs by default
jbdevprimary Jun 10, 2026
2731887
feat: advertise extended tool payloads
jbdevprimary Jun 10, 2026
9dd4319
feat: advertise extended connector payloads
jbdevprimary Jun 10, 2026
bab99e4
feat: advertise extended google payloads
jbdevprimary Jun 10, 2026
ca07acd
feat: advertise extended aws payloads
jbdevprimary Jun 10, 2026
e67d31d
test: guard connector payload boundaries
jbdevprimary Jun 10, 2026
07f0b49
fix: harden optional connector extras
jbdevprimary Jun 10, 2026
9982e87
fix: keep optional connector typing environment-neutral
jbdevprimary Jun 10, 2026
38e12d3
refactor: remove duplicate secrets tools path
jbdevprimary Jun 10, 2026
8f3103b
test: enforce clean major import surface
jbdevprimary Jun 10, 2026
3ae3134
fix: preserve tier two container operators
jbdevprimary Jun 10, 2026
4c023de
feat: expose builtin connectors at package root
jbdevprimary Jun 10, 2026
46c1b63
feat: add explicit input state snapshots
jbdevprimary Jun 10, 2026
6cafc8c
docs: align examples with package fabric
jbdevprimary Jun 10, 2026
a0f22b6
fix: preserve extended list in-place operators
jbdevprimary Jun 10, 2026
b66e237
fix: decode present inputs equal to defaults
jbdevprimary Jun 10, 2026
a4162e5
fix: reconstruct signed integer values
jbdevprimary Jun 10, 2026
7842baf
fix: preserve explicit null input values
jbdevprimary Jun 10, 2026
d520700
fix: honor nullable decorator inputs
jbdevprimary Jun 10, 2026
6c86f96
feat: add cli methods json output
jbdevprimary Jun 10, 2026
42872a2
fix: keep string tokenization in tier two
jbdevprimary Jun 10, 2026
a0b7cf3
fix: lower extended mapping keys
jbdevprimary Jun 10, 2026
c41e7b9
docs: document extended key serialization
jbdevprimary Jun 10, 2026
0f34a75
fix: preserve extended string formatting
jbdevprimary Jun 10, 2026
cf3d1fc
feat: add extended set mutators
jbdevprimary Jun 10, 2026
da97c1c
ci: audit python dependencies
jbdevprimary Jun 10, 2026
db3760e
fix: lower mcp tool results
jbdevprimary Jun 10, 2026
e607258
feat: add tiered data file reader
jbdevprimary Jun 10, 2026
7eb4239
fix: route extended containers by primitive type
jbdevprimary Jun 10, 2026
c34f347
test: dogfood data file reader
jbdevprimary Jun 10, 2026
3e5e235
test: use tiered file reader in workflows
jbdevprimary Jun 10, 2026
5843582
test: pin meshy connector payload contracts
jbdevprimary Jun 10, 2026
3b44913
fix: tighten connector data contracts
jbdevprimary Jun 10, 2026
63a34bc
fix: limit mcp tools to data payload methods
jbdevprimary Jun 10, 2026
306f421
fix: restrict cli calls to data methods
jbdevprimary Jun 10, 2026
21c3448
docs: clarify connector cli data methods
jbdevprimary Jun 10, 2026
88c4474
test: harden connector data surface contract
jbdevprimary Jun 10, 2026
e5b819e
refactor: remove prefix suffix compatibility helpers
jbdevprimary Jun 10, 2026
98de681
test: cover extended string prefix suffix methods
jbdevprimary Jun 10, 2026
0ba86f8
refactor: rename bytes string primitive
jbdevprimary Jun 10, 2026
b4f88cd
refactor: rename string conversion primitives
jbdevprimary Jun 10, 2026
4b1663d
docs: document explicit primitive names
jbdevprimary Jun 10, 2026
63c4ab4
test: enforce workflow action sha pins
jbdevprimary Jun 10, 2026
7dd1a1e
refactor: unify aws and google connector surfaces
jbdevprimary Jun 10, 2026
6d24bef
docs: remove old project origin references
jbdevprimary Jun 10, 2026
56ae5ed
refactor: return connector names as data
jbdevprimary Jun 10, 2026
64aa7af
test: enforce clean major-version breakage
jbdevprimary Jun 10, 2026
21bf5f3
refactor: remove functions tool framework alias
jbdevprimary Jun 10, 2026
addf5f0
fix: redact connector cli secret output
jbdevprimary Jun 10, 2026
a46a295
refactor: remove zoom user listing alias
jbdevprimary Jun 10, 2026
3e145bd
fix: redact connector mcp results
jbdevprimary Jun 10, 2026
02ae30e
docs: document connector output redaction
jbdevprimary Jun 10, 2026
f38a8fa
refactor: generalize aws secret prefix loading
jbdevprimary Jun 10, 2026
f7d161c
test: guard example command paths
jbdevprimary Jun 10, 2026
89831ac
refactor: unify google connector registry
jbdevprimary Jun 10, 2026
6ba4b85
refactor: require aws secret prefix keyword
jbdevprimary Jun 10, 2026
09f8ea5
test: guard secrets connector data surface
jbdevprimary Jun 10, 2026
d51e346
refactor: keep sorted default dict internal
jbdevprimary Jun 10, 2026
ebc96c0
refactor: require vault role prefix keyword
jbdevprimary Jun 10, 2026
1883824
feat: expose extended list value filtering
jbdevprimary Jun 10, 2026
d66c91f
fix: support unhashable list value filters
jbdevprimary Jun 10, 2026
29acc36
test: dogfood extended list filtering in workflows
jbdevprimary Jun 10, 2026
dd0eed3
refactor: type connector names as extended strings
jbdevprimary Jun 10, 2026
8186290
feat: expose split by type on containers
jbdevprimary Jun 10, 2026
b468d39
feat: expose tuple split by type
jbdevprimary Jun 10, 2026
f11bec0
feat: expose matching on extended strings
jbdevprimary Jun 10, 2026
dfc2f65
fix: preserve extended first non-empty values
jbdevprimary Jun 10, 2026
3f943f8
feat: expose non-empty entry selectors
jbdevprimary Jun 10, 2026
31675f0
feat: expose first non-empty on ordered containers
jbdevprimary Jun 10, 2026
0baf4d9
feat: expose zipmap on ordered containers
jbdevprimary Jun 10, 2026
b4166cb
test: guard integrated container method surface
jbdevprimary Jun 10, 2026
aa185ff
feat: expose scalar conversions on extended strings
jbdevprimary Jun 10, 2026
cc4f4b2
feat: reconstruct special types on containers
jbdevprimary Jun 10, 2026
0e0b32b
docs: dogfood container filtering in workflows
jbdevprimary Jun 10, 2026
4d537e1
feat: expose export boundaries on containers
jbdevprimary Jun 10, 2026
5ce7a78
fix: promote decoded input fallbacks
jbdevprimary Jun 10, 2026
67313b6
feat: decode structured data from extended strings
jbdevprimary Jun 10, 2026
e9b2ffe
feat: snapshot stored logging messages
jbdevprimary Jun 10, 2026
b7935d2
refactor: drop legacy logging transform flag
jbdevprimary Jun 10, 2026
3266f35
feat: expose workflow result export boundaries
jbdevprimary Jun 10, 2026
a55e553
test: guard removed runtime keyword guidance
jbdevprimary Jun 10, 2026
a88643d
docs: lead core examples with containers
jbdevprimary Jun 10, 2026
1ff0df1
feat: keep tier one utilities out of root exports
jbdevprimary Jun 10, 2026
e39ddd1
feat: remove primitive codecs from root exports
jbdevprimary Jun 10, 2026
92d465d
docs: name secrets sync integration roles precisely
jbdevprimary Jun 10, 2026
8c0f30a
test: guard root lazy export terminology
jbdevprimary Jun 10, 2026
ebb51e6
test: guard typed package marker
jbdevprimary Jun 10, 2026
10dc968
test: guard all runtime extra coverage
jbdevprimary Jun 10, 2026
5615c0b
test: guard documented install extras
jbdevprimary Jun 10, 2026
29017f2
test: guard console script targets
jbdevprimary Jun 10, 2026
97895ab
test: guard package docs and examples
jbdevprimary Jun 10, 2026
28e826d
docs: add publishing checklist guard
jbdevprimary Jun 10, 2026
37b16e3
test: guard unpatched runtime vulnerabilities
jbdevprimary Jun 10, 2026
0b0d1b9
test: guard trusted publishing release path
jbdevprimary Jun 10, 2026
55d889b
test: compile documented python snippets
jbdevprimary Jun 10, 2026
31a630a
docs: document all runtime extras
jbdevprimary Jun 10, 2026
10a577d
fix: make secrets connector cli only
jbdevprimary Jun 10, 2026
8c73f25
docs: add secrets connector example
jbdevprimary Jun 10, 2026
68dd0fd
test: guard secrets cli contract
jbdevprimary Jun 10, 2026
81979d3
docs: clarify secrets cli bridge
jbdevprimary Jun 10, 2026
8c12fed
test: prove tier two container bases
jbdevprimary Jun 10, 2026
f9a3e31
fix: redact connector error boundaries
jbdevprimary Jun 10, 2026
3b763c0
fix: redact mcp connector errors
jbdevprimary Jun 10, 2026
ec58ac5
fix: redact unknown tool diagnostics
jbdevprimary Jun 10, 2026
67ba1b0
fix: redact connector error payloads
jbdevprimary Jun 10, 2026
f689311
fix: redact mesh task failures
jbdevprimary Jun 10, 2026
2c3a042
fix: redact cursor agent errors
jbdevprimary Jun 10, 2026
3bcdffe
docs: remove future connector promise
jbdevprimary Jun 10, 2026
9c323b0
fix: redact persisted mesh errors
jbdevprimary Jun 10, 2026
dbdc468
fix: redact secrets tool payloads
jbdevprimary Jun 10, 2026
0260238
fix: redact unknown tool frameworks
jbdevprimary Jun 10, 2026
5e06fbe
fix: redact vault diagnostics
jbdevprimary Jun 10, 2026
7359f5c
feat: promote redaction primitives
jbdevprimary Jun 10, 2026
987f76a
test: guard redaction primitive surface
jbdevprimary Jun 10, 2026
920b991
fix: redact vendor connector diagnostics
jbdevprimary Jun 10, 2026
33fba4f
fix: redact aws secret diagnostics
jbdevprimary Jun 10, 2026
002d3f7
feat: support explicit redaction values
jbdevprimary Jun 10, 2026
7897142
fix: redact google service account diagnostics
jbdevprimary Jun 10, 2026
da08073
fix: avoid logging anthropic task prompts
jbdevprimary Jun 10, 2026
48d73d9
docs: document explicit redaction values
jbdevprimary Jun 10, 2026
a3f1763
fix: redact vault resource diagnostics
jbdevprimary Jun 10, 2026
80efbbd
fix: harden aws resource diagnostics
jbdevprimary Jun 10, 2026
66d3890
fix: harden google connector diagnostics
jbdevprimary Jun 10, 2026
4268cae
fix: harden github cursor diagnostics
jbdevprimary Jun 10, 2026
2c3e02f
fix: harden aws organization diagnostics
jbdevprimary Jun 10, 2026
76e2b1f
fix: harden vault diagnostics
jbdevprimary Jun 10, 2026
5145554
fix: harden zoom diagnostics
jbdevprimary Jun 10, 2026
8dbc492
fix: harden slack diagnostics
jbdevprimary Jun 10, 2026
70cd364
fix: harden google jules diagnostics
jbdevprimary Jun 10, 2026
7f667fa
test: harden connector payload surface contract
jbdevprimary Jun 10, 2026
b1515d1
test: prevent examples from echoing credential fragments
jbdevprimary Jun 10, 2026
edc6c95
fix: redact lifecycle logging diagnostics
jbdevprimary Jun 11, 2026
9e0d4da
fix: require meshy task ids in create responses
jbdevprimary Jun 11, 2026
8d9b9d3
fix: redact meshy status response validation
jbdevprimary Jun 11, 2026
6793ccc
fix: redact anthropic response validation
jbdevprimary Jun 11, 2026
b681ea3
fix: redact cursor response validation
jbdevprimary Jun 11, 2026
d2300fb
fix: validate zoom response payloads
jbdevprimary Jun 11, 2026
4499f6a
fix: validate google jules response payloads
jbdevprimary Jun 11, 2026
2120051
fix: send google jules prompt messages
jbdevprimary Jun 11, 2026
a4c93c6
fix: redact connector bridge argument context
jbdevprimary Jun 11, 2026
1e7d8bc
fix: separate google connector cache by scopes
jbdevprimary Jun 11, 2026
bb18f4a
fix: list only usable connectors
jbdevprimary Jun 11, 2026
7224b4a
test: align connector list assertions with extras
jbdevprimary Jun 11, 2026
27c3fe6
docs: remove connector bootstrap markers
jbdevprimary Jun 11, 2026
ae85078
fix: hash sensitive connector cache keys
jbdevprimary Jun 11, 2026
63f6656
feat: add data file artifact surface
jbdevprimary Jun 11, 2026
1f845de
feat: expose connector response artifacts
jbdevprimary Jun 11, 2026
5d79c84
feat: compose data files into workflows
jbdevprimary Jun 11, 2026
b862dbb
feat: preserve workflow metadata
jbdevprimary Jun 11, 2026
40f9bca
fix: redact data file provenance
jbdevprimary Jun 11, 2026
00f4bb2
fix: decode cursor responses through data boundary
jbdevprimary Jun 11, 2026
6b2e820
fix: decode connector responses through data boundary
jbdevprimary Jun 11, 2026
514078d
fix: decode s3 json objects through data boundary
jbdevprimary Jun 11, 2026
6070eba
fix: decode secretsync output through data boundary
jbdevprimary Jun 11, 2026
208cb17
fix: read secrets config through data file boundary
jbdevprimary Jun 11, 2026
b1480e7
fix: decode inputs through data boundary
jbdevprimary Jun 11, 2026
55b3c69
fix: decode cli arguments through data boundary
jbdevprimary Jun 11, 2026
3b6b60b
fix: decode connector persistence through data boundary
jbdevprimary Jun 11, 2026
2ca2c53
fix: encode connector persistence through export boundary
jbdevprimary Jun 11, 2026
581af10
fix: serialize connector outputs through export boundary
jbdevprimary Jun 11, 2026
a3a7bbd
fix: encode vector metadata through export boundary
jbdevprimary Jun 11, 2026
69e9169
fix: route final serializers through export boundary
jbdevprimary Jun 11, 2026
a211eb6
refactor: rename connector base API
jbdevprimary Jun 11, 2026
4dbbc34
docs: frame connectors as external data surfaces
jbdevprimary Jun 11, 2026
3d5bda4
fix: support keyed mappings in extended dict update
jbdevprimary Jun 11, 2026
fc789a6
docs: frame extended data as standalone package
jbdevprimary Jun 11, 2026
4991d55
fix: type generic fabric connector lookup
jbdevprimary Jun 11, 2026
4f6c2a8
feat: add connector catalog metadata queries
jbdevprimary Jun 11, 2026
e1c492a
test: document custom connector catalog metadata
jbdevprimary Jun 11, 2026
485c752
feat: filter connector catalog in CLI
jbdevprimary Jun 11, 2026
0804983
feat: expose connector catalog over MCP
jbdevprimary Jun 11, 2026
650a340
test: avoid optional connector availability assumption
jbdevprimary Jun 11, 2026
2938b05
feat: split connector catalog and availability queries
jbdevprimary Jun 11, 2026
55b0b2b
docs: describe connectors as first-class integrations
jbdevprimary Jun 11, 2026
6c69705
feat: add package-level data CLI
jbdevprimary Jun 11, 2026
bf75773
feat: expose workflow merge in package CLI
jbdevprimary Jun 11, 2026
cb53b68
test: lock package CLI script boundaries
jbdevprimary Jun 11, 2026
4a6428f
feat: expose datafile inspection in package CLI
jbdevprimary Jun 11, 2026
11c7639
feat: expose data transforms in package CLI
jbdevprimary Jun 11, 2026
1209808
feat: add workflow named transforms
jbdevprimary Jun 11, 2026
7a9fee6
docs: exercise workflow transforms in examples
jbdevprimary Jun 11, 2026
ba186e4
feat: add workflow merge helpers
jbdevprimary Jun 11, 2026
e9fefa2
feat: bridge connector responses into workflows
jbdevprimary Jun 11, 2026
6eb81ad
feat: add connector workflow verb helpers
jbdevprimary Jun 11, 2026
a59ce2c
chore: remove unpatched torch dependency path
jbdevprimary Jun 11, 2026
21eba99
fix: report connector cli entrypoint errors
jbdevprimary Jun 11, 2026
fed17a9
feat: align meshy logging with package logger
jbdevprimary Jun 11, 2026
5300ba2
fix: resolve MCP schemas from type hints
jbdevprimary Jun 11, 2026
6d5af83
fix: harden meshy MCP error redaction
jbdevprimary Jun 11, 2026
e6a4142
test: expand google workspace coverage
jbdevprimary Jun 11, 2026
6720d19
test: cover meshy task helper flows
jbdevprimary Jun 11, 2026
747f73e
test: expand google billing coverage
jbdevprimary Jun 11, 2026
74eb508
test: expand github connector coverage
jbdevprimary Jun 11, 2026
d57c3c9
test: cover connector tool adapters
jbdevprimary Jun 11, 2026
5e6cf05
test: cover meshy base client behavior
jbdevprimary Jun 11, 2026
7e07d8c
test: expand aws organizations coverage
jbdevprimary Jun 11, 2026
9aaadce
test: expand slack connector coverage
jbdevprimary Jun 11, 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
7 changes: 4 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ jobs:
version: "0.11.19"
enable-cache: true
- run: uv sync --python 3.13 --extra tests --extra typing
- run: uvx ruff check src tests
- run: uv run pytest tests/core tests/logging tests/inputs
- run: uv run pytest tests/connectors/test_cloud_params.py tests/connectors/test_connectors.py tests/connectors/test_secrets.py tests/connectors/test_cli.py tests/connectors/test_mcp.py tests/connectors/meshy/test_models.py
- run: uv run --with pip-audit==2.10.0 pip-audit --skip-editable
- run: uvx ruff check src tests examples README.md docs/package-surface.md
- run: uv run mypy src/extended_data
- run: uv run pytest tests
- run: uv build
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,10 @@ jobs:
with:
version: "0.11.19"
enable-cache: true
- run: uv sync --python 3.13 --extra tests --extra typing
- run: uv run --with pip-audit==2.10.0 pip-audit --skip-editable
- run: uvx ruff check src tests examples README.md docs/package-surface.md
- run: uv run mypy src/extended_data
- run: uv run pytest tests
- run: uv build
- run: uv publish --trusted-publishing always
290 changes: 277 additions & 13 deletions README.md

Large diffs are not rendered by default.

74 changes: 74 additions & 0 deletions docs/PUBLISHING_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Publishing Checklist

`extended-data` releases are automated from `main` with release-please and
PyPI trusted publishing. Do not hand-edit versions, changelog entries, release
tags, or GitHub releases during the normal release path.

## Release Model

- `release-please` owns version detection, changelog updates, release PRs, and
Git tags.
- The package name is `extended-data`; PyPI publication uses the tighter
`extended-data` distribution name.
- The release workflow publishes only after release-please reports that a
release was created.
- The PyPI job uses OIDC trusted publishing through `uv publish`; no PyPI token
should be stored in repository secrets for the normal path.

## Maintainer Preflight

Run these before merging a release PR or manually dispatching release workflow
diagnostics:

```bash
uv sync --extra tests --extra typing
uv run --with pip-audit==2.10.0 pip-audit --skip-editable
uv run ruff check .
uv run mypy src/extended_data
uv run pytest
uv build
```

## Workflow Hygiene

- Keep `.github/workflows/*.yml` actions pinned to exact commit SHAs.
- Update adjacent version comments when refreshing action SHAs.
- Use `gh` to verify latest stable action releases before changing pins.
- Keep top-level `permissions: {}` and grant only job-scoped permissions.

Current workflow action pins:

| Action | Stable version | Commit SHA |
| --- | --- | --- |
| `actions/checkout` | `v6.0.3` | `df4cb1c069e1874edd31b4311f1884172cec0e10` |
| `actions/setup-python` | `v6.2.0` | `a309ff8b426b58ec0e2a45f0f869d46889d02405` |
| `astral-sh/setup-uv` | `v8.2.0` | `fac544c07dec837d0ccb6301d7b5580bf5edae39` |
| `googleapis/release-please-action` | `v5.0.0` | `45996ed1f6d02564a971a2fa1b5860e934307cf7` |

## Publishing Flow

1. Land normal feature, fix, docs, and maintenance commits using Conventional
Commit prefixes.
2. Let the release workflow open or update the release-please PR.
3. Review the release PR for the expected changelog and manifest updates.
4. Merge the release PR.
5. Confirm the release workflow created the GitHub release and published to
PyPI through trusted publishing.
6. Verify the package can be installed from PyPI:

```bash
python -m pip install extended-data
python -c "import extended_data; print(extended_data.__version__)"
```

## Manual Repairs

Manual tags or PyPI uploads are repair paths, not the release process. If a
release workflow fails after release-please creates a tag:

1. Keep the failed tag intact while diagnosing unless the release is proven
unrecoverable.
2. Prefer rerunning the failed workflow job.
3. If a bad GitHub release was published, delete only the bad artifacts needed
for repair.
4. Document the repair in the PR or release notes.
481 changes: 463 additions & 18 deletions docs/package-surface.md

Large diffs are not rendered by default.

41 changes: 32 additions & 9 deletions examples/connectors/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,39 @@
# Examples
# Connector Examples

This directory contains working examples demonstrating how to use extended-data.
This directory contains working examples for `extended_data.connectors` and the
registered integrations that hang off `ConnectorFabric`.

Connector examples assume the major-version `extended-data` contract: external
data payloads are promoted into Tier 2 containers at connector boundaries.
Callers can use `ExtendedDict`, `ExtendedList`, and `ExtendedString` methods on
decoded API, file, and SDK-shaped results, then call `to_builtin()` only when a
plain Python payload is needed for serialization or SDK handoff.
The direct AI-tool functions follow that same payload contract; only the
framework factory helpers return plain framework tool objects.

## Quick Start

Install extended-data with the extras you need:

```bash
# Install with all connectors
pip install extended-data[all]
pip install "extended-data[all]"

# Or install specific connectors
pip install extended-data[aws,google,meshy]
pip install "extended-data[aws,google,meshy]"

# For AI framework integration
pip install extended-data[langchain]
pip install extended-data[crewai]
pip install "extended-data[langchain]"

# CrewAI adapters require a user-managed CrewAI install. extended-data does not
# currently publish a CrewAI extra because current CrewAI releases pull
# vulnerable chromadb versions transitively.

# For the Meshy MCP server
pip install extended-data[meshy,mcp]
pip install "extended-data[meshy,mcp]"

# For SecretSync pipeline inspection and dry-run syncs
pip install "extended-data[secrets]"
```

## Examples
Expand All @@ -28,6 +43,7 @@ pip install extended-data[meshy,mcp]
- [`basic_aws.py`](basic_aws.py) - AWS connector with Organizations and S3
- [`basic_google.py`](basic_google.py) - Google Cloud connector with Workspace and Billing
- [`basic_meshy.py`](basic_meshy.py) - Meshy AI 3D generation
- [`basic_secrets.py`](basic_secrets.py) - SecretSync pipeline config inspection and dry-run execution

### AI Agent Integration

Expand All @@ -49,6 +65,10 @@ export GOOGLE_SERVICE_ACCOUNT='{"type": "service_account", ...}'
# Meshy AI
export MESHY_API_KEY="msy_your_key"

# SecretSync
export VAULT_ADDR="https://vault.example.com"
export AWS_REGION="us-east-1"

# For LangChain examples
export ANTHROPIC_API_KEY="sk-ant-..."
```
Expand All @@ -57,8 +77,11 @@ export ANTHROPIC_API_KEY="sk-ant-..."

```bash
# Run any example
python examples/basic_meshy.py
uv run python examples/connectors/basic_meshy.py

# Run with debug logging
LOGLEVEL=DEBUG python examples/basic_meshy.py
LOGLEVEL=DEBUG uv run python examples/connectors/basic_meshy.py

# Run the SecretSync bridge against a pipeline config
uv run python examples/connectors/basic_secrets.py pipeline.yaml
```
28 changes: 12 additions & 16 deletions examples/connectors/basic_aws.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,27 +27,22 @@ def main() -> int:
return 1

try:
from extended_data.connectors import AWSConnector, AWSConnectorFull
from extended_data.connectors import AWSConnector
except ImportError:
print("Error: Could not import extended_data.connectors. Install with: pip install extended-data[aws]")
return 1

# Basic connector - just session management
print("Creating basic AWS connector...")
AWSConnector()
print("Basic connector created successfully.")

# Full connector with all operations
print("\nCreating full AWS connector...")
full_connector = AWSConnectorFull()
print("Full connector created successfully.")
print("Creating AWS connector...")
connector = AWSConnector()
print("AWS connector created successfully.")

# List S3 buckets
print("\n--- S3 Buckets ---")
try:
buckets = full_connector.list_buckets()
for bucket in buckets[:5]: # Show first 5
print(f" Bucket: {bucket}")
buckets = connector.list_s3_buckets()
for bucket_name, bucket in list(buckets.items())[:5]: # Show first 5
created = bucket.get("creation_date") or bucket.get("CreationDate")
print(f" Bucket: {bucket_name} ({created})")
if len(buckets) > 5:
print(f" ... and {len(buckets) - 5} more buckets")
except Exception as e:
Expand All @@ -56,9 +51,10 @@ def main() -> int:
# List organization accounts (if using Organizations)
print("\n--- Organization Accounts ---")
try:
accounts = full_connector.get_accounts()
for account in accounts[:5]:
print(f" Account: {account}")
accounts = connector.get_accounts()
for account_id, account in list(accounts.items())[:5]:
name = account.get("name") or account.get("Name") or account_id
print(f" Account: {account_id} ({name})")
if len(accounts) > 5:
print(f" ... and {len(accounts) - 5} more accounts")
except Exception as e:
Expand Down
18 changes: 6 additions & 12 deletions examples/connectors/basic_google.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,19 @@ def main() -> int:
return 1

try:
from extended_data.connectors import GoogleConnector, GoogleConnectorFull
from extended_data.connectors import GoogleConnector
except ImportError:
print("Error: Could not import extended_data.connectors. Install with: pip install extended-data[google]")
return 1

# Basic connector
print("Creating basic Google connector...")
GoogleConnector()
print("Basic connector created successfully.")

# Full connector with all operations
print("\nCreating full Google connector...")
full_connector = GoogleConnectorFull()
print("Full connector created successfully.")
print("Creating Google connector...")
connector = GoogleConnector()
print("Google connector created successfully.")

# List projects
print("\n--- Google Cloud Projects ---")
try:
projects = full_connector.list_projects()
projects = connector.list_projects()
for project in projects[:5]:
print(f" Project: {project}")
if len(projects) > 5:
Expand All @@ -56,7 +50,7 @@ def main() -> int:
if os.getenv("GOOGLE_DOMAIN"):
print("\n--- Workspace Users ---")
try:
users = full_connector.list_users()
users = connector.list_users()
for user in users[:5]:
email = user.get("primaryEmail", "Unknown")
print(f" User: {email}")
Expand Down
70 changes: 70 additions & 0 deletions examples/connectors/basic_secrets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/usr/bin/env python3
"""Example: SecretSync connector usage.

This example demonstrates the `extended-data[secrets]` bridge to the
standalone `jbcom/secrets-sync` CLI.

Requirements:
pip install extended-data[secrets]
secretsync must be installed on PATH

Run:
uv run python examples/connectors/basic_secrets.py pipeline.yaml
"""

from __future__ import annotations

import sys

from pathlib import Path


def main() -> int:
"""Inspect a SecretSync pipeline config and run a dry-run through the CLI contract."""
try:
from extended_data import OutputFormat, SecretsConnector, SyncOptions
except ImportError:
print("Error: Could not import SecretSync support. Install with: pip install extended-data[secrets]")
return 1

config_path = Path(sys.argv[1] if len(sys.argv) > 1 else "pipeline.yaml")
connector = SecretsConnector()

print(f"Inspecting SecretSync config: {config_path}")
config_info = connector.get_config_info(str(config_path))
if not config_info["valid"]:
print(f"Error: {config_info['error_message']}")
return 1

print(
"Config summary: "
f"{config_info['source_count']} source(s), "
f"{config_info['target_count']} target(s), "
f"merge store={config_info['has_merge_store']}",
)

if not connector.cli_available:
print("Error: secretsync CLI not available on PATH.")
print("Install jbcom/secrets-sync and re-run this example to exercise the dry-run contract.")
return 1

result = connector.run_pipeline(
str(config_path),
SyncOptions(dry_run=True, compute_diff=True, output_format=OutputFormat.JSON),
)

if not result["success"]:
print("Error: secretsync dry run failed.")
print("Run secretsync directly in a secure terminal for full diagnostics.")
print("The CLI must emit the stable `secretsync pipeline --output json` result envelope.")
return 1

print("Dry run completed successfully.")
if result["diff_output"]:
print("Diff output was returned by secretsync and is not printed because it may contain secret values.")

return 0


if __name__ == "__main__":
sys.exit(main())
4 changes: 2 additions & 2 deletions examples/connectors/langchain_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

Requirements:
pip install extended-data[meshy,langchain]
pip install langchain-anthropic # For Claude as the LLM
pip install langchain-anthropic langgraph # For Claude as the LLM and agent loop

Environment Variables:
MESHY_API_KEY: Your Meshy API key
Expand Down Expand Up @@ -39,7 +39,7 @@ def main() -> int:
from extended_data.connectors.meshy.tools import get_tools
except ImportError:
print("Error: Could not import required packages.")
print("Install with: pip install extended-data[meshy,langchain] langchain-anthropic")
print("Install with: pip install extended-data[meshy,langchain] langchain-anthropic langgraph")
return 1

# Get Meshy tools for LangChain
Expand Down
2 changes: 1 addition & 1 deletion examples/connectors/mcp_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

Usage:
# Run the server (connects via stdio)
python examples/mcp_server.py
python examples/connectors/mcp_server.py

# Or use the installed command
meshy-mcp
Expand Down
Loading