agentic-system-core 0.0.2__tar.gz → 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agentic_system_core-1.0.0/CHANGELOG.md +72 -0
- agentic_system_core-1.0.0/MANIFEST.in +8 -0
- agentic_system_core-1.0.0/NOTICE +9 -0
- agentic_system_core-1.0.0/PKG-INFO +313 -0
- agentic_system_core-1.0.0/README.md +278 -0
- agentic_system_core-1.0.0/pyproject.toml +67 -0
- agentic_system_core-1.0.0/src/agentic_system_core/__init__.py +58 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/__init__.py +67 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/_assert.py +16 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/build_area.py +217 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/discovery_area.py +498 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/frontmatter_area.py +119 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/graph_area.py +184 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/jcs_area.py +43 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/links_area.py +91 -0
- agentic_system_core-1.0.0/src/agentic_system_core/areas/slug_area.py +57 -0
- agentic_system_core-1.0.0/src/agentic_system_core/cli.py +345 -0
- agentic_system_core-1.0.0/src/agentic_system_core/context.py +239 -0
- agentic_system_core-1.0.0/src/agentic_system_core/data/spec-index.json +1 -0
- agentic_system_core-1.0.0/src/agentic_system_core/diagnostics.py +74 -0
- agentic_system_core-1.0.0/src/agentic_system_core/discovery.py +252 -0
- agentic_system_core-1.0.0/src/agentic_system_core/frontmatter.py +468 -0
- agentic_system_core-1.0.0/src/agentic_system_core/graph.py +252 -0
- agentic_system_core-1.0.0/src/agentic_system_core/jcs.py +406 -0
- agentic_system_core-1.0.0/src/agentic_system_core/links.py +327 -0
- agentic_system_core-1.0.0/src/agentic_system_core/markdown.py +289 -0
- agentic_system_core-1.0.0/src/agentic_system_core/net.py +220 -0
- agentic_system_core-1.0.0/src/agentic_system_core/rdf.py +282 -0
- agentic_system_core-1.0.0/src/agentic_system_core/reader.py +249 -0
- agentic_system_core-1.0.0/src/agentic_system_core/site.py +311 -0
- agentic_system_core-1.0.0/src/agentic_system_core/slug.py +66 -0
- agentic_system_core-1.0.0/src/agentic_system_core/urls.py +72 -0
- agentic_system_core-1.0.0/src/agentic_system_core/vectors.py +400 -0
- agentic_system_core-1.0.0/src/agentic_system_core/wellknown.py +716 -0
- agentic_system_core-1.0.0/src/agentic_system_core/yamlsubset.py +448 -0
- agentic_system_core-1.0.0/src/agentic_system_core.egg-info/PKG-INFO +313 -0
- agentic_system_core-1.0.0/src/agentic_system_core.egg-info/SOURCES.txt +240 -0
- agentic_system_core-1.0.0/src/agentic_system_core.egg-info/entry_points.txt +2 -0
- agentic_system_core-1.0.0/src/agentic_system_core.egg-info/requires.txt +4 -0
- agentic_system_core-1.0.0/tests/conftest.py +52 -0
- agentic_system_core-1.0.0/tests/fixtures/README.md +13 -0
- agentic_system_core-1.0.0/tests/fixtures/conformance/pending.json +4 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0001-search-tokenizer.json +132 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0002-tokenizer-non-latin.json +61 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0003-search-astral-member-order.json +56 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0011-static-fragment-index-arrays.json +27 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0012-headers-and-redirect.json +23 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0013-security-txt-fields.json +105 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0014-content-version-derivation.json +173 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0015-every-text-file-ends-with-one-lf.json +24 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0016-stale-by-instant-comparison.json +39 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0017-asset-references-build-byte-identically.json +33 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0018-page-policy-contains-five-directives.json +42 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0019-search-index-above-500-items.json +2040 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0020-retired-and-draft-items-on-each-surface.json +110 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0021-build-out-naming-content-or-dist-is-refused.json +135 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0022-release-switchboard-holds-an-item-back-everywhere.json +54 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0023-page-copy-drops-a-link-to-a-draft.json +28 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0024-the-whole-route-set-of-the-minimal-fixture.json +69 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0025-skills-index-shape.json +103 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0026-skills-index-lock-is-the-hash-of-skill-md.json +23 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0027-tdm-reservation-file-and-its-robots-groups.json +66 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/build/build-0028-undeclared-release-key-holds-an-item-back.json +54 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0004-level0-wellknown.json +55 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0005-peer-mutual-conformance.json +28 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0008-every-item-reachable-from-llms-txt.json +72 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0009-sitemap-order-and-lastmod.json +42 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0012-robots-tdm-crawler-groups.json +67 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0013-llms-txt-byte-layout-with-content-version.json +52 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0014-llms-full-with-content-version.json +56 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0015-bundle-version-attribute.json +171 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0016-wellknown-linkset-six-bundle-facts.json +68 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0017-level-2-requires-ledger-link.json +57 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0018-bundle-hash-is-the-graph-nq-digest.json +20 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0019-newer-minor-relation-is-ignored.json +162 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0020-whole-document-link-table.json +638 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0021-boards-link-present-and-absent.json +361 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/discovery/disc-0022-restricted-node-access-link.json +176 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0001-concept-valid.json +26 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0002-episode-valid.json +29 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0003-gate-valid.json +35 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0004-missing-prov.json +16 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0005-yaml-anchor-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0006-failsafe-scalars-are-strings.json +53 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0007-stale-after-must-be-instant.json +16 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0008-adoption-idempotence.json +34 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0009-x-namespace-preserved.json +38 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0010-single-line-strings.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0011-frontmatter-missing.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0012-frontmatter-not-terminated.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0013-document-terminator-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0014-yaml-tag-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0015-yaml-merge-key-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0016-yaml-flow-mapping-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0017-yaml-complex-key-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0018-duplicate-key-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0019-description-bound-on-every-type.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/fm-0020-yaml-explicit-key-rejected.json +17 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/frontmatter-0030-length-in-code-points.json +37 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/frontmatter/frontmatter-0031-task-state.json +49 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0003-blank-node-rejected.json +19 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0005-memory-alias-resolution.json +25 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0011-context-file-roundtrip.json +72 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0012-nquads-escaping-and-datatypes.json +31 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0016-attachment-nodes-complete.json +46 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0017-ports-and-task-state-whole-file.json +46 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0018-literal-forms-iri-order.json +44 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0019-context-term-names.json +96 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0021-nquads-blank-node-free-sorted-named-graph.json +35 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0022-cluster-nesting-is-skos-member-named-graph.json +49 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0023-source-fragment-iri-named-graph.json +36 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0024-item-reachability-edges-named-graph.json +40 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0025-inline-link-mentions-named-graph.json +38 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0026-turtle-profile-whole-file-own-licence.json +36 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0027-export-block-reserved-never-extracted.json +32 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/graph/graph-0028-jsonld-whole-files.json +216 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/jcs/jcs-0001-canonical-output.json +27 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/jcs/jcs-0002-utf16-key-sort.json +19 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/jcs/jcs-0003-astral-member-order.json +27 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/jcs/jcs-0004-negative-zero.json +20 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/jcs/jcs-0005-nfc-before-sort.json +20 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0001-inverse-computation.json +61 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0002-requires-cycle-rejected.json +43 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0003-authored-inverse-rejected.json +28 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0004-anchor-edge-cases.json +24 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0005-cluster-depth-rejected.json +52 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0006-cluster-multi-parent-rejected.json +40 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0007-body-link-unresolved.json +39 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0008-broader-narrower-cycle-rejected.json +44 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/links/links-0009-orphans-and-the-cluster-exception.json +87 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/slug/slug-0001-accept.json +26 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/slug/slug-0002-reject-double-hyphen.json +16 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/slug/slug-0003-reject-edge-hyphen-and-case.json +21 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/slug/slug-0004-unique-per-bundle.json +19 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/slug/slug-0006-portable-pattern.json +43 -0
- agentic_system_core-1.0.0/tests/fixtures/vectors/slug/slug-0007-slugify-ascii-lower-case.json +28 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/anchor-http/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/anchor-missing/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/anchor-no-slash/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/attribute-not-array/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/bad-digest/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/bad-digest/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/bom/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/bom/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/bom/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/bom/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/context-not-object/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/digest-cross-origin/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/digest-mismatch/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/digest-mismatch/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/digest-target-missing/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/duplicate-member/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/empty-file/.well-known/knowledge-linkset +0 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/empty-relation-array/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/engine-disc-0004/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/extra-top-member/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/extra-top-member/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/extra-top-member/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/extra-top-member/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/good/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/good/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/good/ledger.jsonl +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/good/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/good/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/href-relative/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/invalid-utf8/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/ledger-no-head/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/ledger-no-head/ledger.jsonl +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/linkset-not-array/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/linkset-two-contexts/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/linkset-two-contexts/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/linkset-two-contexts/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/linkset-two-contexts/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/members-unordered/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/members-unordered/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/members-unordered/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/members-unordered/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-digest/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-digest/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-digest/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-digest/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-level2-attributes/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-level2-attributes/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-level2-attributes/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/missing-level2-attributes/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/no-trailing-lf/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/no-trailing-lf/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/no-trailing-lf/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/no-trailing-lf/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/non-canonical-bytes/.well-known/knowledge-linkset +56 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/non-canonical-bytes/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/non-canonical-bytes/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/non-canonical-bytes/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/not-an-object/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/not-in-wellknown/plain/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/not-json/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/peer-mutual/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/peer-not-mutual/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/related-no-type/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-llms-wrong-path/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-llms-wrong-path/index.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-multi-value/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-no-version/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-target-missing/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-unknown-access/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-unknown-name/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-version-on-llms/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/surface-version-on-llms/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/target-not-object/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/targets-unordered/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/trailing-characters/.well-known/knowledge-linkset +2 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/trailing-characters/graph.jsonld +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/trailing-characters/legal/index.html +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/trailing-characters/llms.txt +3 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/type-not-string/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/fixtures/wellknown/unknown-relation/.well-known/knowledge-linkset +1 -0
- agentic_system_core-1.0.0/tests/test_actor_pattern.py +59 -0
- agentic_system_core-1.0.0/tests/test_area_handlers.py +141 -0
- agentic_system_core-1.0.0/tests/test_ci_workflows.py +260 -0
- agentic_system_core-1.0.0/tests/test_cli.py +318 -0
- agentic_system_core-1.0.0/tests/test_community_files.py +81 -0
- agentic_system_core-1.0.0/tests/test_context_url.py +48 -0
- agentic_system_core-1.0.0/tests/test_equivalence.py +99 -0
- agentic_system_core-1.0.0/tests/test_frontmatter.py +275 -0
- agentic_system_core-1.0.0/tests/test_graph_site.py +299 -0
- agentic_system_core-1.0.0/tests/test_jcs.py +183 -0
- agentic_system_core-1.0.0/tests/test_links_orphans.py +43 -0
- agentic_system_core-1.0.0/tests/test_markdown_links.py +175 -0
- agentic_system_core-1.0.0/tests/test_net.py +308 -0
- agentic_system_core-1.0.0/tests/test_newcomer_surface.py +140 -0
- agentic_system_core-1.0.0/tests/test_reader.py +172 -0
- agentic_system_core-1.0.0/tests/test_readme_counts.py +33 -0
- agentic_system_core-1.0.0/tests/test_search_shards_and_policy.py +101 -0
- agentic_system_core-1.0.0/tests/test_slug.py +41 -0
- agentic_system_core-1.0.0/tests/test_urls.py +49 -0
- agentic_system_core-1.0.0/tests/test_vector_equivalence.py +89 -0
- agentic_system_core-1.0.0/tests/test_vectors.py +374 -0
- agentic_system_core-1.0.0/tests/test_wellknown.py +647 -0
- agentic_system_core-0.0.2/PKG-INFO +0 -25
- agentic_system_core-0.0.2/README.md +0 -10
- agentic_system_core-0.0.2/pyproject.toml +0 -25
- agentic_system_core-0.0.2/src/agentic_system_core/__init__.py +0 -25
- agentic_system_core-0.0.2/src/agentic_system_core/cli.py +0 -14
- agentic_system_core-0.0.2/src/agentic_system_core.egg-info/PKG-INFO +0 -25
- agentic_system_core-0.0.2/src/agentic_system_core.egg-info/SOURCES.txt +0 -10
- agentic_system_core-0.0.2/src/agentic_system_core.egg-info/entry_points.txt +0 -2
- {agentic_system_core-0.0.2 → agentic_system_core-1.0.0}/LICENSE +0 -0
- {agentic_system_core-0.0.2 → agentic_system_core-1.0.0}/setup.cfg +0 -0
- {agentic_system_core-0.0.2 → agentic_system_core-1.0.0}/src/agentic_system_core.egg-info/dependency_links.txt +0 -0
- {agentic_system_core-0.0.2 → agentic_system_core-1.0.0}/src/agentic_system_core.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the Python package `agentic-system-core`: the two standalone
|
|
4
|
+
checkers, the reading API and the `agsc` command. The specification and the Node engine
|
|
5
|
+
keep their own change log, in the engine repository's `CHANGELOG.md`; this package
|
|
6
|
+
follows the specification version of the same number.
|
|
7
|
+
|
|
8
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions use
|
|
9
|
+
PEP 440 spelling: a release is spelled as in SemVer (`1.0.0`), a release candidate
|
|
10
|
+
differently (SemVer's `1.0.0-rc.7` is `1.0.0rc7` here).
|
|
11
|
+
|
|
12
|
+
## [Unreleased]
|
|
13
|
+
|
|
14
|
+
## [1.0.0] - 2026-10-14
|
|
15
|
+
|
|
16
|
+
### Upgrading from 1.0.0rc7
|
|
17
|
+
|
|
18
|
+
The package follows specification `1.0.0`. `pip install agentic-system-core` installs it
|
|
19
|
+
without `--pre`, and `agsc --version` prints `agsc 1.0.0 (Python package; specification
|
|
20
|
+
1.0.0)`. The trove classifier is "Development Status :: 5 - Production/Stable". Python 3.9
|
|
21
|
+
or newer is still supported; every release is tested on 3.9, 3.13 and 3.14.
|
|
22
|
+
|
|
23
|
+
**What the checker may now report** (each was already outside a rule of the
|
|
24
|
+
specification):
|
|
25
|
+
|
|
26
|
+
- `validate-wellknown`: a discovery document served as anything but
|
|
27
|
+
`application/linkset+json` fails, whether the profile is carried by the `profile`
|
|
28
|
+
parameter or by a `Link: …; rel="profile"` header (AGSC-06-07, AGSC-09-93).
|
|
29
|
+
- `validate-wellknown`: a restricted node must carry exactly one access link: none is
|
|
30
|
+
`AGSC-E202`, more than one is one `AGSC-E210` (AGSC-11-20). The check applies at every
|
|
31
|
+
Level.
|
|
32
|
+
- The actor pattern admits `process:<id>/<version>`, the form of the ledger's trailing
|
|
33
|
+
build entry (AGSC-02-09).
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
|
|
37
|
+
- The vector copies of the seven areas this package runs follow the engine's new cases,
|
|
38
|
+
among them `slug-0007`, the new build, front-matter and links cases, and `disc-0022`.
|
|
39
|
+
- The links area reports orphan items.
|
|
40
|
+
- `SECURITY.md`, `CONTRIBUTING.md` and `CODE_OF_CONDUCT.md`.
|
|
41
|
+
- The change log is linked from the package page on PyPI (a `Changelog` project link and a
|
|
42
|
+
link in the README) and ships in the source distribution.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- The release lane runs the whole test lane of a pull request, with the engine checked out
|
|
47
|
+
at the specification tag of the package version, and refuses a tag whose commit is not on
|
|
48
|
+
`main`. A Python 3.14 leg runs on every pull request.
|
|
49
|
+
- The per-response deadline of `validate-wellknown` is injectable for tests; the default
|
|
50
|
+
stays 10 seconds.
|
|
51
|
+
- The usage text no longer shows the directory of `validate-vectors` and `run-vectors` as
|
|
52
|
+
optional.
|
|
53
|
+
- Dependabot keeps the pinned actions up to date.
|
|
54
|
+
- CI: the engine's restricted-publisher scenario, in which both checkers flag a restricted
|
|
55
|
+
node without an access link, runs on every leg with this package beside the engine, next
|
|
56
|
+
to the port implementer's scenarios; a skipped scenario fails the leg.
|
|
57
|
+
- The cross-runner proof reads the specification version of a release, not only of a
|
|
58
|
+
candidate, and two area handlers assert what the engine's assert.
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- The main-site test looked for the site's discovery document in a removed folder and
|
|
63
|
+
always skipped; it runs again when the site is checked out beside the package.
|
|
64
|
+
- The JSON-LD context address that `context.compact()` writes names the vocabulary version
|
|
65
|
+
`1.0.0` (`https://w3id.org/agentic-system-core/ns/1.0.0/context.jsonld`), the address the
|
|
66
|
+
engine derives from the vocabulary's `owl:versionIRI` (AGSC-05-09, AGSC-05-25); it named
|
|
67
|
+
the pre-release `/ns/1.0.0-draft.1/`. A test compares it with the engine's vocabulary
|
|
68
|
+
when the engine is beside this repository.
|
|
69
|
+
- A verb outside the sixteen of the specification is refused with `AGSC-E001` when no
|
|
70
|
+
engine is installed (it was answered with the install sentence alone).
|
|
71
|
+
- A discovery document nested too deep for the reader is reported as `AGSC-E201`, as the
|
|
72
|
+
Node checker reports it (it was a traceback).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
AgenticSystemCore
|
|
2
|
+
Copyright 2026 Andrei N. Besleaga
|
|
3
|
+
|
|
4
|
+
This package is licensed under the Apache License 2.0 (LICENSE). The rule index
|
|
5
|
+
and the conformance vectors it carries come from the specification's
|
|
6
|
+
distribution and keep the licences stated there. Every right these licences do
|
|
7
|
+
not grant is reserved by the author.
|
|
8
|
+
|
|
9
|
+
AgenticSystemCore™ is a trademark of Andrei N. Besleaga. Other names belong to their owners.
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agentic-system-core
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Two standalone checkers and a reading API for AgenticSystemCore knowledge nodes, in pure Python, with one agsc command that hands every other verb to the Node engine.
|
|
5
|
+
Author: Andrei N. Besleaga
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://agenticsystemcore.com
|
|
8
|
+
Project-URL: Source, https://github.com/andreibesleaga/agentic-system-core-python
|
|
9
|
+
Project-URL: Specification, https://agenticsystemcore.com/specs/agentic-knowledge/
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/andreibesleaga/agentic-system-core-python/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/andreibesleaga/agentic-system-core-python/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: agentic,knowledge,linkset,discovery,conformance,rfc9264,rfc8785
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
26
|
+
Classifier: Topic :: Text Processing :: Markup
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
License-File: NOTICE
|
|
31
|
+
Provides-Extra: test
|
|
32
|
+
Requires-Dist: pytest>=7; extra == "test"
|
|
33
|
+
Requires-Dist: coverage>=7; extra == "test"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# Agentic System Core — Python
|
|
37
|
+
|
|
38
|
+
Two checkers and a small reading API for AgenticSystemCore knowledge nodes, in
|
|
39
|
+
pure Python, plus one `agsc` command that runs those and hands every other verb
|
|
40
|
+
to the Node engine.
|
|
41
|
+
|
|
42
|
+
**This is not a second implementation of the engine.** Building a Bundle,
|
|
43
|
+
emitting a site, composing, importing, exporting and governing all stay with the
|
|
44
|
+
Node package `agentic-system-core`. What this package gives you is the part a
|
|
45
|
+
consumer needs when there is no Node on the machine: checking a published node's
|
|
46
|
+
discovery file, checking and running a conformance-vector set, and reading a
|
|
47
|
+
node's links, digests, chunks and graph. A full Python implementation of the
|
|
48
|
+
engine may come later; when it does, this text will change.
|
|
49
|
+
|
|
50
|
+
Standard library only. No runtime dependency, and none is planned: everything
|
|
51
|
+
here is either a rule of the specification or something Python already ships.
|
|
52
|
+
|
|
53
|
+
**What the specification is, and what is different about it.** AgenticSystemCore turns
|
|
54
|
+
a folder of Markdown files into a knowledge node that people and agents can find,
|
|
55
|
+
verify and cite. Other systems have some of these properties; to the author's knowledge none has
|
|
56
|
+
them together: a knowledge base a machine can find through registered web mechanisms,
|
|
57
|
+
an integrity digest on every artefact link of its discovery document, a typed graph with a published vocabulary, bytes
|
|
58
|
+
pinned by conformance vectors, a person on every merge — directly, or by a standing
|
|
59
|
+
rule that person recorded — and a starting harness of seven kinds of file out of the same files, with no
|
|
60
|
+
server. This package is the Python reader and checker of such nodes; maintainers read
|
|
61
|
+
[docs/MAINTAINING.md](https://github.com/andreibesleaga/agentic-system-core-python/blob/main/docs/MAINTAINING.md).
|
|
62
|
+
|
|
63
|
+
## Install
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
pip install agentic-system-core
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
This installs the latest release. A release candidate of a later version is
|
|
70
|
+
installed only when asked for, with `--pre` or by naming its version. The two
|
|
71
|
+
`0.0.x` versions on PyPI only reserved the name, contain no code and are yanked,
|
|
72
|
+
so pip never picks them.
|
|
73
|
+
|
|
74
|
+
Python 3.9 or newer; every release is tested on 3.9, 3.13 and 3.14. Python 3.9
|
|
75
|
+
reached its end of life in October 2025 and is still supported by this release
|
|
76
|
+
(1.0.0). To forward the other verbs you also need Node 22.13 or newer and the
|
|
77
|
+
npm package:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
npm install -g agentic-system-core
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Two commands named `agsc`.** The npm package installs an `agsc` too, and it is
|
|
84
|
+
the engine's command line: its verbs are exactly the sixteen of the specification
|
|
85
|
+
(AGSC-09-07), so `validate-wellknown`, `validate-vectors` and `run-vectors` are not
|
|
86
|
+
among them, and it refuses them with `AGSC-E001`. The `agsc` here is a checker
|
|
87
|
+
distribution (the AGSC-09-90 contracts) that runs those three itself and hands
|
|
88
|
+
every other verb to the engine. With both installed, whichever directory comes
|
|
89
|
+
first on your `PATH` decides which `agsc` you get; `python -m agentic_system_core.cli`
|
|
90
|
+
always reaches this one.
|
|
91
|
+
|
|
92
|
+
## What runs here
|
|
93
|
+
|
|
94
|
+
### `agsc validate-wellknown <file>`
|
|
95
|
+
|
|
96
|
+
Checks one discovery document — the file a node serves at
|
|
97
|
+
`/.well-known/knowledge-linkset` — against the rules that govern it: the media
|
|
98
|
+
type and profile, the link-set shape, the anchor, the member and target
|
|
99
|
+
ordering, the relation names, the target attributes, the digest form, the
|
|
100
|
+
surface declarations, and, with `--peer`, the mutual check between two nodes.
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
agsc validate-wellknown www/.well-known/knowledge-linkset --level 2 --json
|
|
104
|
+
agsc validate-wellknown www/.well-known/knowledge-linkset \
|
|
105
|
+
--peer ../other/www/.well-known/knowledge-linkset
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Levels 0 to 3 mean what the specification says they mean. At Level 0 and 1 the
|
|
109
|
+
shape, the names, the ordering and the digest form are checked. At Level 2 and
|
|
110
|
+
above the document must also be canonical bytes, every artefact link must carry
|
|
111
|
+
a digest, the graph link must carry its five bundle facts, and the ledger must be
|
|
112
|
+
linked with its head. A node that declares itself `restricted` must instead omit
|
|
113
|
+
its content facts, its ledger link and the digest of every target it does not
|
|
114
|
+
serve openly, and must carry exactly one `rel#access` link naming where a reader
|
|
115
|
+
obtains credentials (AGSC-11-20). A document that declares a newer MINOR of the
|
|
116
|
+
same MAJOR may use relations and attributes this version does not define: they are
|
|
117
|
+
ignored with the warning `AGSC-E506`, never reported as errors; a document of
|
|
118
|
+
another MAJOR gets no such tolerance (AGSC-00-21, AGSC-09-93).
|
|
119
|
+
|
|
120
|
+
When the document is a file inside a `.well-known/` directory, every
|
|
121
|
+
same-origin target is resolved on disk and its digest is verified against the
|
|
122
|
+
real bytes — so a build output is checked completely with no network at all.
|
|
123
|
+
|
|
124
|
+
Output is the same diagnostics envelope the engine emits (`--json`), and the
|
|
125
|
+
exit code is the same: 0 pass, 1 fail, 2 usage fault.
|
|
126
|
+
|
|
127
|
+
**Reading a URL needs `--allow-network`.** This is the one deliberate difference
|
|
128
|
+
from the Node tool, which reads a URL argument without asking. Nothing in this
|
|
129
|
+
package opens a connection unless that flag is on the command line. With it, the
|
|
130
|
+
same protections apply: https only (plain http to loopback under `--dev`), every
|
|
131
|
+
resolved address classified and refused if it is private, link-local, loopback
|
|
132
|
+
or reserved, the connection pinned to the address that was classified, at most
|
|
133
|
+
three redirects, one ten-second deadline for each response from the request to
|
|
134
|
+
the last byte, and a cap of one mebibyte on the discovery document and of
|
|
135
|
+
32 MiB on any other file read; a fetch stopped at the deadline or a cap is
|
|
136
|
+
`AGSC-E907` (AGSC-11-10). Given a URL, the checker also reads the response
|
|
137
|
+
headers of the document and of every same-origin public file it fetches and
|
|
138
|
+
checks the rules on cross-origin reading and caching (AGSC-11-03, AGSC-11-05):
|
|
139
|
+
a missing header is `AGSC-E202`, a forbidden one `AGSC-E201`, errors at Level 2
|
|
140
|
+
and above and warnings below (AGSC-09-93).
|
|
141
|
+
|
|
142
|
+
From Python, `agentic_system_core.wellknown.validate(target, level=2,
|
|
143
|
+
allow_network=True, fetcher=my_fetch)` reads a URL through a fetcher you supply
|
|
144
|
+
instead of the built-in one. It is called as `my_fetch(url, dev, cap=n)`, where
|
|
145
|
+
`cap` is the byte cap of that read — `1048576` for the discovery document,
|
|
146
|
+
`33554432` for any other file — and it returns `(final_url, headers, body)`:
|
|
147
|
+
the URL after redirects, the response headers as a dict with lower-case names,
|
|
148
|
+
and the body as bytes. A fetcher that refuses a read raises
|
|
149
|
+
`agentic_system_core.net.TransportError(code, message)`, for example
|
|
150
|
+
`AGSC-E907` when a response passes `cap`; the protections listed above are those
|
|
151
|
+
of the built-in fetcher, `agentic_system_core.net.fetch`, and a fetcher of your
|
|
152
|
+
own is responsible for its own.
|
|
153
|
+
|
|
154
|
+
### `agsc validate-vectors <dir>` and `agsc run-vectors <dir>`
|
|
155
|
+
|
|
156
|
+
`validate-vectors` checks a conformance-vector set against the file-format
|
|
157
|
+
rules: the required members, the closed area and level lists, the identifier
|
|
158
|
+
grammars, the file encoding, the canonical member order, and the resolution of
|
|
159
|
+
every rule identifier and every error code against the specification. An empty
|
|
160
|
+
set is a failure, not a clean run.
|
|
161
|
+
|
|
162
|
+
Both verbs need a vector directory: this package ships no vector set of its own.
|
|
163
|
+
The vectors are in the npm package `agentic-system-core`, in its `tests/vectors/`
|
|
164
|
+
folder (after `npm install -g agentic-system-core`, `npm root -g` prints the folder
|
|
165
|
+
that holds the package), and in the same folder of the engine repository,
|
|
166
|
+
<https://github.com/andreibesleaga/agentic-system-core>. For example, from a clone of
|
|
167
|
+
the engine: `agsc run-vectors tests/vectors`.
|
|
168
|
+
|
|
169
|
+
Resolving identifiers needs the specification. This package ships a small index
|
|
170
|
+
of it — the rule identifiers, the registered error codes and the declared
|
|
171
|
+
version — derived from `spec/` by command; `--spec <dir>` derives the same index
|
|
172
|
+
from a live `spec/` directory instead.
|
|
173
|
+
|
|
174
|
+
`run-vectors` executes the vectors. **It runs seven areas natively — `build`,
|
|
175
|
+
`discovery`, `frontmatter`, `graph`, `jcs`, `links` and `slug` — and names every
|
|
176
|
+
other area as not run, with the reason.** Each of the seven is derived from the
|
|
177
|
+
rule text of the specification alone, in the standard library:
|
|
178
|
+
|
|
179
|
+
| Area | What this package implements for it |
|
|
180
|
+
|---|---|
|
|
181
|
+
| `frontmatter` | a reader for the closed YAML subset of AGSC-02-02 (failsafe scalars, each rejected construct under its own code, line numbers), the item checks of spec/02, and the drop-in adoption of AGSC-02-90…93 |
|
|
182
|
+
| `slug` | the slug grammar and uniqueness |
|
|
183
|
+
| `jcs` | RFC 8785 canonical JSON with NFC before sorting |
|
|
184
|
+
| `links` | the fourteen Link keys and their inverses, the cycle and cluster-tree checks, heading anchors, and inline-link resolution over a small CommonMark 0.31.2 scanner (headings and inline links only, outside code; its subset is written down in `agentic_system_core/markdown.py`) |
|
|
185
|
+
| `graph` | the RDF dataset of spec/05, canonical `graph.nq` (every line a quad named by the Bundle IRI, AGSC-04-15), the byte-pinned `graph.ttl` profile of AGSC-05-10, and the JSON-LD context of AGSC-06-32 with the compaction it round-trips |
|
|
186
|
+
| `build` | the `search.json` tokenizer and index, static query fragments, the served header set, `security.txt`, the content version and the staleness comparison; fourteen vectors of these seven areas need a whole build or the publisher's writers (`build-0015`, `build-0017`, `build-0020` to `build-0028`, `disc-0018`, `graph-0027`, `graph-0028`) and are reported as not run, by name |
|
|
187
|
+
| `discovery` | `/llms.txt` and `/llms-full.txt` byte for byte, reachability, the sitemap and robots facts, the link-set writer, and the discovery-document checks including the restricted-node rule of AGSC-11-20 |
|
|
188
|
+
|
|
189
|
+
The other areas need a Bundle build, the engine's composition or governance
|
|
190
|
+
modules, or its command-line surface. Nothing is ever counted as a pass that
|
|
191
|
+
was not executed, and nothing is silently skipped.
|
|
192
|
+
|
|
193
|
+
The pending list is the engine's: a file `{"pending": [ids], "reason": {…}}`,
|
|
194
|
+
found beside the vectors or named with `--pending`.
|
|
195
|
+
|
|
196
|
+
### `agentic_system_core.reader`
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
from agentic_system_core.reader import DiscoveryDocument, read_chunks, read_graph
|
|
200
|
+
|
|
201
|
+
node = DiscoveryDocument.from_path("www/.well-known/knowledge-linkset")
|
|
202
|
+
node.anchor # 'https://example.org/'
|
|
203
|
+
node.links("graph") # the rel#graph targets
|
|
204
|
+
node.peers() # the nodes it federates with
|
|
205
|
+
node.surfaces()["chunks"].href # where the chunk export is
|
|
206
|
+
|
|
207
|
+
link = node.links("alternate")[0]
|
|
208
|
+
link.verify(open("www/llms.txt", "rb").read()) # digest against bytes you hold
|
|
209
|
+
link.fetch(my_fetcher) # nothing fetches by itself
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
`read_chunks` reads `chunks.jsonl` into a list of records, or returns the shard
|
|
213
|
+
manifest as it stands when the file is one. `read_graph` reads `graph.jsonld` as
|
|
214
|
+
plain JSON — no RDF library, no triples; turning it into a graph is a job for a
|
|
215
|
+
library you choose.
|
|
216
|
+
|
|
217
|
+
A member the reader does not know — in a chunk line, a chunk manifest, the graph or
|
|
218
|
+
a discovery document of a later version of the specification — is neither refused
|
|
219
|
+
nor rewritten: it is kept as it stands, and the calls above simply do not read it
|
|
220
|
+
(AGSC-00-21).
|
|
221
|
+
|
|
222
|
+
A digest is an RFC 9530 dictionary member, whose value RFC 9530 defines as "a
|
|
223
|
+
Byte Sequence (Section 3.3.5 of [STRUCTURED-FIELDS]) that conveys an encoded
|
|
224
|
+
version of the byte output produced by the digest calculation" — base64 between
|
|
225
|
+
two colons, which is why it reads `sha-256=:<base64>:`.
|
|
226
|
+
|
|
227
|
+
## What forwards to Node
|
|
228
|
+
|
|
229
|
+
Every other verb: `init`, `lint`, `build`, `verify`, `ci`, `export`, `import`,
|
|
230
|
+
`compose`, `propose`, `review`, `refresh`, `skills`, `mcp`, `run`, `trace`,
|
|
231
|
+
`conform`. If the npm package's `agsc` is on the PATH, the call is handed to it
|
|
232
|
+
exactly as typed and its exit code comes back. If it is not, the command stops
|
|
233
|
+
with one sentence saying what to install. The call is made with a list of
|
|
234
|
+
arguments and never through a shell.
|
|
235
|
+
|
|
236
|
+
## Version
|
|
237
|
+
|
|
238
|
+
The specification version is `1.0.0`. Python packages use PEP 440, which spells
|
|
239
|
+
a release the same way as SemVer, so the version on PyPI is `1.0.0` too; a
|
|
240
|
+
release candidate is spelled differently: SemVer's `X.Y.Z-rc.N` is PEP 440's
|
|
241
|
+
`X.Y.ZrcN`.
|
|
242
|
+
`agsc --version` prints the package version and the specification version.
|
|
243
|
+
What changed in each version, and what the checker may now report, is in the
|
|
244
|
+
[change log](https://github.com/andreibesleaga/agentic-system-core-python/blob/main/CHANGELOG.md).
|
|
245
|
+
|
|
246
|
+
## The vector copies in this repository
|
|
247
|
+
|
|
248
|
+
`tests/fixtures/vectors/` holds byte-identical copies of the vectors of the
|
|
249
|
+
seven areas this package runs, so that the test suite proves the promise
|
|
250
|
+
without needing the engine checkout. When the engine is beside this
|
|
251
|
+
repository, one test compares the copies with the originals byte for byte and
|
|
252
|
+
fails if they have drifted, and another runs the engine's own vector runner
|
|
253
|
+
over the engine's live set and requires the two runners to agree on every
|
|
254
|
+
vector of those seven areas.
|
|
255
|
+
|
|
256
|
+
## Equivalence with the engine's checker
|
|
257
|
+
|
|
258
|
+
The discovery-file checker is meant to give the same verdict as the engine's
|
|
259
|
+
`tools/validate-wellknown` on the same input. The test suite proves it: both
|
|
260
|
+
tools are run over the same documents — the fixture set, a document taken from
|
|
261
|
+
the engine's own conformance vectors, the built discovery files of two live
|
|
262
|
+
sites and a set of deliberately broken files — at every Level, with and without
|
|
263
|
+
a peer, and the status, the counts and the position and code of every finding
|
|
264
|
+
are compared. Message text is not compared: the specification leaves a message
|
|
265
|
+
unspecified so it can be translated, and pins the code. That test is skipped,
|
|
266
|
+
with a message saying so, when Node or the engine checkout is not present.
|
|
267
|
+
|
|
268
|
+
## Tests
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
python -m venv .venv && .venv/bin/pip install -e ".[test]"
|
|
272
|
+
.venv/bin/python -m pytest
|
|
273
|
+
.venv/bin/python -m coverage run -m pytest && .venv/bin/python -m coverage report
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Deterministic, fixed data, no clock, no network. The only subprocess in the
|
|
277
|
+
suite is the Node tool in the equivalence test.
|
|
278
|
+
|
|
279
|
+
## Licence
|
|
280
|
+
|
|
281
|
+
Apache-2.0. See `LICENSE`.
|
|
282
|
+
|
|
283
|
+
The conformance vectors copied under `tests/fixtures/vectors/` and the rule index in
|
|
284
|
+
`src/agentic_system_core/data/` come from the specification's distribution and keep the
|
|
285
|
+
licences stated there (the engine repository's README and `LICENSE-CONTENT`).
|
|
286
|
+
|
|
287
|
+
## How this is made
|
|
288
|
+
|
|
289
|
+
This work is written and maintained by Andrei N. Besleaga with the help of AI
|
|
290
|
+
assistants. A person decides what is written, an assistant drafts and checks it, and a
|
|
291
|
+
person reads, edits and approves everything that is published and answers for it. Every
|
|
292
|
+
published item records how its text was made and names the person accountable for it.
|
|
293
|
+
Written with AI assistance, reviewed and published by a person.
|
|
294
|
+
The assistance covered text and code alike. This package calls no AI model. What an
|
|
295
|
+
assistant or agent writes from this work is its own output, not a statement by the author.
|
|
296
|
+
|
|
297
|
+
## What this does not claim
|
|
298
|
+
|
|
299
|
+
This is the independent work of one person, published as it is, with no warranty of any
|
|
300
|
+
kind and no liability for anything that follows from using it. Nothing in it is legal or
|
|
301
|
+
professional advice. No standards body, foundation, company or institution named in this
|
|
302
|
+
repository has reviewed, approved or is connected with this work, and it is not a document
|
|
303
|
+
of the IETF, of the W3C or of any other body. Other product and organisation names are the
|
|
304
|
+
marks of their owners and are used only to say what is being talked about.
|
|
305
|
+
Every right not expressly granted by the licences is reserved, and nothing here promises
|
|
306
|
+
that the work or its addresses will stay available.
|
|
307
|
+
|
|
308
|
+
## Notice
|
|
309
|
+
|
|
310
|
+
AgenticSystemCore™ is a trademark of Andrei N. Besleaga. Other names belong to their owners.
|
|
311
|
+
|
|
312
|
+
© 2026 Andrei N. Besleaga. Code: Apache-2.0. Schemas, ontology, identifiers and the
|
|
313
|
+
discovery document: CC0-1.0.
|