Releases: aiperceivable/apcore-toolkit
Releases · aiperceivable/apcore-toolkit
Release 0.4.0
Added
DisplayResolver(apcore_toolkit.display) — sparse binding.yaml display overlay (§5.13). Merges per-surface presentation fields (alias, description, guidance, tags, documentation) intoScannedModule.metadata["display"]for downstream CLI/MCP/A2A surfaces.- Resolution chain per field: surface-specific override >
displaydefault > binding-level field > scanner value. resolve(modules, *, binding_path=..., binding_data=...)— accepts pre-parsed dict or a path to a.binding.yamlfile / directory of*.binding.yamlfiles.binding_datatakes precedence overbinding_path.- MCP alias auto-sanitization: replaces characters outside
[a-zA-Z0-9_-]with_; prepends_if result starts with a digit. - MCP alias hard limit: raises
ValueErrorif sanitized alias exceeds 64 characters. - CLI alias validation: warns and falls back to
display.aliaswhen user-explicitly-set alias does not match^[a-z][a-z0-9_-]*$(module_id fallback always accepted without warning). suggested_aliasinScannedModule.metadata(emitted bysimplify_ids=Truescanner) used as fallback when nodisplay.aliasis set.- Match-count logging:
INFOfor match count,WARNINGwhen binding map loaded but zero modules matched.
- Resolution chain per field: surface-specific override >
- New feature spec:
docs/features/display-overlay.md
Tests
- 30 new tests in
tests/test_display_resolver.pycovering: no-binding fallthrough, alias-only overlay, surface-specific overrides, MCP sanitization, MCP 64-char limit,suggested_aliasfallback, sparse overlay (10 modules / 1 binding), tags resolution,binding_pathfile and directory loading, guidance chain, CLI invalid alias warning and fallback,binding_datavsbinding_pathprecedence.
Added (Convention Module Discovery — §5.14)
ConventionScanner— scans acommands/directory of plain Python files for public functions and converts them toScannedModuleinstances with schema inferred from PEP 484 type annotations.- Module ID:
{file_prefix}.{function_name}withMODULE_PREFIXoverride. - Description from first line of docstring (
"(no description)"fallback). input_schema/output_schemainferred from type hints.CLI_GROUPandTAGSmodule-level constants stored in metadata.include/excluderegex filters on module IDs.
- Module ID:
- New feature spec:
docs/features/convention-scanning.md
Tests (Convention Module Discovery)
- 15 new tests in
tests/test_convention_scanner.py.
Release 0.3.1
Changed
- Rebrand: aipartnerup → aiperceivable
Release 0.3.0
Added
deep_resolve_refs/deepResolveRefsdocumented in OpenAPI Integration page
with three-level resolution explanationHTTPProxyRegistryWritersection in Output Writers page with features,
installation instructions, and usage example"http-proxy"format inget_writer()factory table with Language columnHTTPProxyRegistryWriterandenrich_schema_descriptionsadded to README
Core Modules tablemodules_to_dicts()/modulesToDicts()added to Serialization Utilities table- "Choosing a Writer" table updated with
HTTPProxyRegistryWriterrow
Fixed
resolve_schemadescription corrected from "recursively resolves" to
"single level only" — the recursive resolver isdeep_resolve_refs- Reference Resolution section rewritten with accurate three-level explanation
- Duplicate
## Reference Resolutionheading removed
Release 0.2.0
Added
TypeScriptWriterto Core Modules tables in README and docs index"typescript"format toget_writer()factory example (TypeScript only)documentationandwarningsfields toScannedModuleFields table- Serialization Utilities section (
annotationsToDict,moduleToDict)
in Smart Scanning docs - Changelog page for documentation site
Fixed
- Updated
WriteResulttable in Output Writers docs with TypeScript naming
and type columns - Fixed
ai_guidance→metadata.ai_guidancein AI Enhancement docs - TypeScript examples: replaced
new ScannedModule({...})with
createScannedModule({...})(ScannedModuleis an interface, not a class) - TypeScript
YAMLWriterandTypeScriptWriterwrite()call signatures
corrected fromwrite(modules, { outputDir })towrite(modules, outputDir, options?) filterModulesinclude pattern corrected fromRegExpliteral tostring
matching the actual TypeScript signatureresolveTargetexample now showsawait(the function is async)flattenParamsexample now shows requiredzodSchemasecond argument- OpenAPI import corrected from
"apcore-toolkit/openapi"to"apcore-toolkit"
(no sub-path export in TypeScript) - TypeScript Registry import corrected from
"@anthropic/apcore"to"apcore-js" - Broken changelog links fixed (
docs/changelog.md→ rootCHANGELOG.md) docs/features/scanning.md— TypeScript exampleincludeoption type
corrected tostring, import updateddocs/index.md— Python-only framing updated; toolkit is dual-language
Release 0.1.0
Initial release. Extracts shared framework-agnostic logic from django-apcore
and flask-apcore into a standalone toolkit package.
Added
ScannedModuledataclass — canonical representation of a scanned endpointBaseScannerABC withfilter_modules(),deduplicate_ids(),
infer_annotations_from_method(), andextract_docstring()utilitiesYAMLWriter— generates.binding.yamlfiles forapcore.BindingLoaderPythonWriter— generates@module-decorated Python wrapper filesRegistryWriter— registers modules directly intoapcore.Registryto_markdown()— generic dict-to-Markdown conversion with depth control
and table heuristicsflatten_pydantic_params()— flattens Pydantic model parameters into
scalar kwargs for MCP tool invocationresolve_target()— resolvesmodule.path:qualnametarget stringsenrich_schema_descriptions()— merges docstring parameter descriptions
into JSON Schema propertiesannotations_to_dict()/module_to_dict()— serialization utilities- OpenAPI utilities:
resolve_ref(),resolve_schema(),
extract_input_schema(),extract_output_schema() - Output format factory via
get_writer() - 150 tests with 94% code coverage
Dependencies
- apcore >= 0.9.0
- pydantic >= 2.0
- PyYAML >= 6.0