@shoalrun/cli 1.0.0 → 1.1.0
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.
- package/CHANGELOG.md +19 -0
- package/CODE-REFERENCES.md +19 -0
- package/README.md +13 -4
- package/adapters/typescript/README.md +27 -0
- package/adapters/typescript/shoalrun-reference.mjs +260 -0
- package/agent-docs/.well-known/shoalrun/navigation/project-updates-50f26fe22670.txt +3 -1
- package/agent-docs/SNAPSHOT.json +5 -5
- package/agent-docs/api-docs/code-reference-settings.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/catalog-settings.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/complete-reference-page.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/converter-snapshot.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/descriptions-type-links-and-source-links.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/html-markdown-and-agents.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/metadata-and-selection.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/publication-sources.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/python-adapter-limits.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/related-reading.md +2 -2
- package/agent-docs/api-docs/code-reference-settings.sections/symbol-fields.md +2 -2
- package/agent-docs/api-docs/code-references.md +9 -1
- package/agent-docs/api-docs/code-references.sections/a-real-typescript-example.md +38 -0
- package/agent-docs/api-docs/code-references.sections/add-python-source.md +56 -0
- package/agent-docs/api-docs/code-references.sections/before-you-start.md +40 -0
- package/agent-docs/api-docs/code-references.sections/build-and-verify.md +47 -0
- package/agent-docs/api-docs/code-references.sections/choose-the-reading-layout.md +46 -0
- package/agent-docs/api-docs/code-references.sections/extract-and-validate-a-snapshot.md +52 -0
- package/agent-docs/api-docs/code-references.sections/html-markdown-and-agents.md +42 -0
- package/agent-docs/api-docs/code-references.sections/register-the-catalog-and-navigation.md +58 -0
- package/agent-docs/api-docs/code-references.sections/related-reading.md +40 -0
- package/agent-docs/api-docs/code-references.sections/versions-profiles-and-delivery.md +40 -0
- package/agent-docs/api-docs/typescript-references.md +93 -0
- package/agent-docs/author/components/for-facet.md +127 -0
- package/agent-docs/author/components/only.md +3 -1
- package/agent-docs/author/components.md +2 -1
- package/agent-docs/author/reader-views.md +2 -2
- package/agent-docs/author/reader-views.sections/configure-the-choices.md +2 -2
- package/agent-docs/author/reader-views.sections/connect-your-own-control.md +2 -2
- package/agent-docs/author/reader-views.sections/how-it-works-for-agents.md +2 -2
- package/agent-docs/author/reader-views.sections/mark-pages.md +2 -2
- package/agent-docs/author/reader-views.sections/mark-sections-and-add-an-entry-choice.md +2 -2
- package/agent-docs/author/reader-views.sections/place-filter-controls.md +2 -2
- package/agent-docs/author/reader-views.sections/try-the-controls-here.md +2 -2
- package/agent-docs/changelog/facet-typescript.md +54 -0
- package/agent-docs/changelog.md +8 -0
- package/agent-docs/config/examples.md +2 -2
- package/agent-docs/config/examples.sections/feature-showcase.md +2 -2
- package/agent-docs/config/examples.sections/minimal-site.md +1 -1
- package/agent-docs/config/examples.sections/multilingual-help-center.md +1 -1
- package/agent-docs/config/examples.sections/parcel-api-documentation.md +1 -1
- package/agent-docs/config/examples.sections/related-reading.md +1 -1
- package/agent-docs/config/examples.sections/shared-company-preset.md +1 -1
- package/agent-docs/config/outputs.md +12 -12
- package/agent-docs/config/outputs.sections/exports.md +12 -12
- package/agent-docs/config/outputs.sections/metadata.md +1 -1
- package/agent-docs/config/outputs.sections/pdf-output.md +1 -1
- package/agent-docs/config/outputs.sections/related-reading.md +1 -1
- package/agent-docs/config/site.md +17 -17
- package/agent-docs/config/site.sections/related-reading.md +1 -1
- package/agent-docs/config/site.sections/theme.md +1 -1
- package/agent-docs/configuration.md +1 -1
- package/agent-docs/configuration.sections/start-with-one-working-file.md +1 -1
- package/agent-docs/content-delivery/api.md +10 -2
- package/agent-docs/content-delivery/api.sections/errors.md +52 -0
- package/agent-docs/content-delivery/api.sections/generated-typescript-reference.md +36 -0
- package/agent-docs/content-delivery/api.sections/html-markdown-and-agents.md +36 -0
- package/agent-docs/content-delivery/api.sections/mount-html.md +42 -0
- package/agent-docs/content-delivery/api.sections/open-a-rest-source.md +55 -0
- package/agent-docs/content-delivery/api.sections/open-a-source.md +51 -0
- package/agent-docs/content-delivery/api.sections/read-a-snapshot.md +55 -0
- package/agent-docs/content-delivery/api.sections/related-reading.md +42 -0
- package/agent-docs/content-delivery/api.sections/validate-a-manifest.md +40 -0
- package/agent-docs/content-delivery/client.md +9 -1
- package/agent-docs/content-delivery/sdk/all.md +1772 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentanchor-exportedid.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentanchor-id.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentanchor-title.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentanchor.md +44 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentasset-mediatype.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentasset.md +40 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentdeliveryerror-code.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentdeliveryerror.md +46 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentdeliverylimits-manifestbytes.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentdeliverylimits-resourcebytes.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentdeliverylimits-resources.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentdeliverylimits.md +44 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contenterrorcode.md +32 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentfile-bytes.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentfile-digest.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentfile-path.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentfile.md +44 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentformat.md +32 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-asset.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-fragment.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-href.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-key.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-kind.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-query.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink-ref.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentlink.md +52 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-assets.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-diagnostics.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-digest.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-files.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-kind.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-publication.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-publicbase.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-resources.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-review.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest-schemaversion.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmanifest.md +68 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmount-anchors.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmount-links.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmount-unmount.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentmount.md +49 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentpublication-channel.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentpublication-language.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentpublication-product.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentpublication-version.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentpublication.md +46 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentref.md +43 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrefkey.md +42 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrepresentation-anchors.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrepresentation-links.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrepresentation.md +42 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-assets.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-canonicalurl.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-externaldependencies.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-publication.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-ref.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-representations.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-source.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-summary.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-title.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource-type.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresource.md +65 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresourcekey.md +42 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestentry-key.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestentry-resource.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestentry.md +42 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresterror-error.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresterror.md +43 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresterrorcode.md +32 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestlist-publication.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestlist-resources.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestlist-revision.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestlist-schemaversion.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestlist.md +46 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestresource-key.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestresource-publication.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestresource-resource.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestresource-revision.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestresource-schemaversion.md +34 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentrestresource.md +48 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresult-content.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresult-format.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresult-representation.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresult-resource.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresult-revision.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentresult.md +48 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentsnapshot-dispose.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentsnapshot-get.md +45 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentsnapshot-list.md +38 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentsnapshot-publication.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentsnapshot-revision.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-contentsnapshot.md +47 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-manifestcontentsourceoptions-fetch.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-manifestcontentsourceoptions-limits.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-manifestcontentsourceoptions-manifesturl.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-manifestcontentsourceoptions-signal.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-manifestcontentsourceoptions.md +46 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-mountcontent.md +48 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-openmanifestcontentsource.md +54 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-openrestcontentsource.md +44 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions-baseurl.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions-fetch.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions-limits.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions-publication.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions-revision.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions-signal.md +36 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-restcontentsourceoptions.md +50 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content-validatecontentmanifest.md +45 -0
- package/agent-docs/content-delivery/sdk/all.sections/shoalrun-content.md +65 -0
- package/agent-docs/content-delivery/sdk/content-anchor/exported-id.md +25 -0
- package/agent-docs/content-delivery/sdk/content-anchor/id.md +25 -0
- package/agent-docs/content-delivery/sdk/content-anchor/title.md +25 -0
- package/agent-docs/content-delivery/sdk/content-anchor.md +71 -0
- package/agent-docs/content-delivery/sdk/content-asset/media-type.md +25 -0
- package/agent-docs/content-delivery/sdk/content-asset.md +43 -0
- package/agent-docs/content-delivery/sdk/content-delivery-error/code.md +25 -0
- package/agent-docs/content-delivery/sdk/content-delivery-error.md +53 -0
- package/agent-docs/content-delivery/sdk/content-delivery-limits/manifest-bytes.md +27 -0
- package/agent-docs/content-delivery/sdk/content-delivery-limits/resource-bytes.md +27 -0
- package/agent-docs/content-delivery/sdk/content-delivery-limits/resources.md +27 -0
- package/agent-docs/content-delivery/sdk/content-delivery-limits.md +77 -0
- package/agent-docs/content-delivery/sdk/content-error-code.md +23 -0
- package/agent-docs/content-delivery/sdk/content-file/bytes.md +25 -0
- package/agent-docs/content-delivery/sdk/content-file/digest.md +25 -0
- package/agent-docs/content-delivery/sdk/content-file/path.md +25 -0
- package/agent-docs/content-delivery/sdk/content-file.md +71 -0
- package/agent-docs/content-delivery/sdk/content-format.md +23 -0
- package/agent-docs/content-delivery/sdk/content-link/asset.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link/fragment.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link/href.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link/key.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link/kind.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link/query.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link/ref.md +25 -0
- package/agent-docs/content-delivery/sdk/content-link.md +127 -0
- package/agent-docs/content-delivery/sdk/content-manifest/assets.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/diagnostics.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/digest.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/files.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/kind.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/public-base.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/publication.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/resources.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/review.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest/schema-version.md +25 -0
- package/agent-docs/content-delivery/sdk/content-manifest.md +179 -0
- package/agent-docs/content-delivery/sdk/content-mount/anchors.md +27 -0
- package/agent-docs/content-delivery/sdk/content-mount/links.md +27 -0
- package/agent-docs/content-delivery/sdk/content-mount/unmount.md +27 -0
- package/agent-docs/content-delivery/sdk/content-mount.md +82 -0
- package/agent-docs/content-delivery/sdk/content-publication/channel.md +25 -0
- package/agent-docs/content-delivery/sdk/content-publication/language.md +25 -0
- package/agent-docs/content-delivery/sdk/content-publication/product.md +25 -0
- package/agent-docs/content-delivery/sdk/content-publication/version.md +25 -0
- package/agent-docs/content-delivery/sdk/content-publication.md +85 -0
- package/agent-docs/content-delivery/sdk/content-ref-key.md +34 -0
- package/agent-docs/content-delivery/sdk/content-ref.md +40 -0
- package/agent-docs/content-delivery/sdk/content-representation/anchors.md +25 -0
- package/agent-docs/content-delivery/sdk/content-representation/links.md +25 -0
- package/agent-docs/content-delivery/sdk/content-representation.md +57 -0
- package/agent-docs/content-delivery/sdk/content-resource/assets.md +25 -0
- package/agent-docs/content-delivery/sdk/content-resource/canonical-url.md +25 -0
- package/agent-docs/content-delivery/sdk/content-resource/external-dependencies.md +25 -0
- package/agent-docs/content-delivery/sdk/content-resource/publication.md +27 -0
- package/agent-docs/content-delivery/sdk/content-resource/ref.md +27 -0
- package/agent-docs/content-delivery/sdk/content-resource/representations.md +27 -0
- package/agent-docs/content-delivery/sdk/content-resource/source.md +25 -0
- package/agent-docs/content-delivery/sdk/content-resource/summary.md +27 -0
- package/agent-docs/content-delivery/sdk/content-resource/title.md +27 -0
- package/agent-docs/content-delivery/sdk/content-resource/type.md +27 -0
- package/agent-docs/content-delivery/sdk/content-resource-key.md +34 -0
- package/agent-docs/content-delivery/sdk/content-resource.md +192 -0
- package/agent-docs/content-delivery/sdk/content-rest-entry/key.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-entry/resource.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-entry.md +57 -0
- package/agent-docs/content-delivery/sdk/content-rest-error/error.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-error-code.md +23 -0
- package/agent-docs/content-delivery/sdk/content-rest-error.md +46 -0
- package/agent-docs/content-delivery/sdk/content-rest-list/publication.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-list/resources.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-list/revision.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-list/schema-version.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-list.md +85 -0
- package/agent-docs/content-delivery/sdk/content-rest-resource/key.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-resource/publication.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-resource/resource.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-resource/revision.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-resource/schema-version.md +25 -0
- package/agent-docs/content-delivery/sdk/content-rest-resource.md +99 -0
- package/agent-docs/content-delivery/sdk/content-result/content.md +27 -0
- package/agent-docs/content-delivery/sdk/content-result/format.md +27 -0
- package/agent-docs/content-delivery/sdk/content-result/representation.md +27 -0
- package/agent-docs/content-delivery/sdk/content-result/resource.md +27 -0
- package/agent-docs/content-delivery/sdk/content-result/revision.md +27 -0
- package/agent-docs/content-delivery/sdk/content-result.md +114 -0
- package/agent-docs/content-delivery/sdk/content-snapshot/dispose.md +27 -0
- package/agent-docs/content-delivery/sdk/content-snapshot/get.md +36 -0
- package/agent-docs/content-delivery/sdk/content-snapshot/list.md +29 -0
- package/agent-docs/content-delivery/sdk/content-snapshot/publication.md +27 -0
- package/agent-docs/content-delivery/sdk/content-snapshot/revision.md +27 -0
- package/agent-docs/content-delivery/sdk/content-snapshot.md +123 -0
- package/agent-docs/content-delivery/sdk/exports.md +742 -0
- package/agent-docs/content-delivery/sdk/exports.sections/functions.md +30 -0
- package/agent-docs/content-delivery/sdk/exports.sections/members.md +47 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentanchor.md +41 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentasset.md +37 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentdeliveryerror.md +43 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentdeliverylimits.md +41 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contenterrorcode.md +29 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentfile.md +41 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentformat.md +29 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentlink.md +49 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentmanifest.md +65 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentmount.md +46 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentpublication.md +43 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentref.md +40 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentrefkey.md +39 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentrepresentation.md +39 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentresource.md +62 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentresourcekey.md +39 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentrestentry.md +39 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentresterror.md +40 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentresterrorcode.md +29 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentrestlist.md +43 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentrestresource.md +45 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentresult.md +45 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-contentsnapshot.md +44 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-manifestcontentsourceoptions.md +43 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-mountcontent.md +45 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-openmanifestcontentsource.md +51 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-openrestcontentsource.md +41 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-restcontentsourceoptions.md +47 -0
- package/agent-docs/content-delivery/sdk/exports.sections/shoalrun-content-validatecontentmanifest.md +42 -0
- package/agent-docs/content-delivery/sdk/manifest-content-source-options/fetch.md +27 -0
- package/agent-docs/content-delivery/sdk/manifest-content-source-options/limits.md +27 -0
- package/agent-docs/content-delivery/sdk/manifest-content-source-options/manifest-url.md +27 -0
- package/agent-docs/content-delivery/sdk/manifest-content-source-options/signal.md +27 -0
- package/agent-docs/content-delivery/sdk/manifest-content-source-options.md +93 -0
- package/agent-docs/content-delivery/sdk/mount-content.md +46 -0
- package/agent-docs/content-delivery/sdk/open-manifest-content-source.md +51 -0
- package/agent-docs/content-delivery/sdk/open-rest-content-source.md +39 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options/base-url.md +28 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options/fetch.md +27 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options/limits.md +27 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options/publication.md +27 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options/revision.md +27 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options/signal.md +27 -0
- package/agent-docs/content-delivery/sdk/rest-content-source-options.md +125 -0
- package/agent-docs/content-delivery/sdk/validate-content-manifest.md +38 -0
- package/agent-docs/contribute/agent-skills.md +33 -6
- package/agent-docs/documents.json +7094 -308
- package/agent-docs/features.md +18 -17
- package/agent-docs/provenance.json +6 -6
- package/agent-docs/publish/content-export.md +3 -1
- package/agent-docs/publish/content-export.sections/assets-downloads-and-notices.md +1 -1
- package/agent-docs/publish/content-export.sections/check-the-result.md +1 -1
- package/agent-docs/publish/content-export.sections/inspect-the-manifest.md +1 -1
- package/agent-docs/publish/content-export.sections/prerequisites.md +1 -1
- package/agent-docs/publish/content-export.sections/related-reading.md +1 -1
- package/agent-docs/publish/content-export.sections/review-exported-api-material.md +1 -1
- package/agent-docs/publish/content-export.sections/try-the-help-drawer-example.md +1 -1
- package/agent-docs/publish/content-export.sections/what-the-representations-retain.md +1 -1
- package/agent-docs/publish/pdf.md +2 -2
- package/agent-docs/publish/pdf.sections/apply-print-styling.md +1 -1
- package/agent-docs/publish/pdf.sections/check-the-result.md +1 -1
- package/agent-docs/publish/pdf.sections/export-a-page-or-publication.md +2 -2
- package/agent-docs/publish/pdf.sections/html-markdown-and-agents.md +1 -1
- package/agent-docs/publish/pdf.sections/offer-browser-page-printing.md +1 -1
- package/agent-docs/publish/pdf.sections/offer-direct-downloads-through-a-node-server.md +1 -1
- package/agent-docs/publish/pdf.sections/prerequisites.md +1 -1
- package/agent-docs/publish/pdf.sections/publish-an-optional-manual-download.md +1 -1
- package/agent-docs/publish/single-source-sites.md +26 -2
- package/agent-docs/publish/single-source-sites.sections/build-and-check-each-output.md +49 -0
- package/agent-docs/publish/single-source-sites.sections/html-markdown-and-agents.md +33 -0
- package/agent-docs/publish/single-source-sites.sections/include-additional-sections-in-a-build.md +47 -0
- package/agent-docs/publish/single-source-sites.sections/related-reading.md +43 -0
- package/agent-docs/publish/single-source-sites.sections/select-the-pages-for-each-site.md +74 -0
- package/agent-docs/publish/single-source-sites.sections/share-the-base-configuration.md +93 -0
- package/agent-docs/reference/agent-skills.md +2 -2
- package/agent-docs/search-index.json +1 -1
- package/agent-docs/start.md +1 -1
- package/agent-docs/start.sections/start-your-own-project.md +1 -1
- package/assets/search-lexical.js +15 -4
- package/dist/code-reference-model.d.ts +4 -4
- package/dist/compiler.d.ts +8 -0
- package/dist/compiler.js +10 -4
- package/dist/component-names.js +1 -1
- package/dist/component-transform.js +14 -22
- package/dist/conditional-tree.d.ts +2 -0
- package/dist/conditional-tree.js +14 -0
- package/dist/content-delivery-contract.d.ts +39 -0
- package/dist/content-delivery-contract.js +2 -0
- package/dist/content-delivery-validation.d.ts +6 -0
- package/dist/content-delivery-validation.js +6 -0
- package/dist/content-delivery.d.ts +19 -1
- package/dist/content-delivery.js +10 -1
- package/dist/content-export-command.d.ts +42 -3
- package/dist/content-export.d.ts +42 -3
- package/dist/content-export.js +15 -6
- package/dist/content-filter.d.ts +2 -0
- package/dist/content-filter.js +4 -0
- package/dist/content-mount.d.ts +12 -1
- package/dist/content-mount.js +8 -1
- package/dist/content-rest-client.d.ts +11 -1
- package/dist/content-rest-client.js +4 -1
- package/dist/content-rest-contract.d.ts +5 -0
- package/dist/content-source.d.ts +1 -0
- package/dist/content-workspace.d.ts +4 -1
- package/dist/content-workspace.js +5 -2
- package/dist/deployment-profile.d.ts +3 -1
- package/dist/deployment-profile.js +18 -19
- package/dist/palettes.d.ts +1 -1
- package/dist/publication-manifest.js +1 -1
- package/dist/representation-tree.js +8 -2
- package/dist/search-query.js +13 -6
- package/dist/section-selection.d.ts +29 -0
- package/dist/section-selection.js +92 -0
- package/dist/snippets.d.ts +1 -0
- package/example-configs/facet-sections/README.md +37 -0
- package/example-configs/facet-sections/base.yaml +29 -0
- package/example-configs/facet-sections/content/billing.mdx +25 -0
- package/example-configs/facet-sections/customer.config.yaml +4 -0
- package/example-configs/facet-sections/docs.config.yaml +3 -0
- package/example-configs/faceted-sites/README.md +4 -2
- package/package.json +2 -1
- package/skills/shoalrun-author/SKILL.md +13 -0
- package/skills/shoalrun-author/references/code-api-references.md +5 -1
- package/skills/shoalrun-author/references/facet-selection.md +48 -0
- package/skills/shoalrun-brand/SKILL.md +9 -0
- package/skills/shoalrun-component-author/SKILL.md +9 -0
- package/skills/shoalrun-pdf/SKILL.md +9 -0
- package/skills/shoalrun-recipes/SKILL.md +9 -0
- package/skills/shoalrun-setup/SKILL.md +9 -0
- package/skills/shoalrun-walkthrough/SKILL.md +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.0 — 2026-11-07
|
|
4
|
+
|
|
5
|
+
- Select additional sections with [ForFacet](https://www.shoalrun.com/author/components/for-facet)
|
|
6
|
+
and existing build facets, without customer profiles. Omit unmatched content
|
|
7
|
+
before rendering, indexing, and dependency expansion.
|
|
8
|
+
- Generate [TypeScript SDK references](https://www.shoalrun.com/api-docs/typescript-references)
|
|
9
|
+
from public declarations and JSDoc. Preserve overloads, optional methods,
|
|
10
|
+
readonly properties, and linked types. The authoring skill covers extraction
|
|
11
|
+
and build selection; the website includes the generated content client API.
|
|
12
|
+
- Add project skill discovery links, explicit loading instructions, and short
|
|
13
|
+
task checklists for the bundled agent workflows.
|
|
14
|
+
- Improve browser and CLI keyword ranking for queries written as questions.
|
|
15
|
+
- Mark intentional HTML-only blocks for compatible parity checks while retaining
|
|
16
|
+
tooltip and info-hint comparison.
|
|
17
|
+
|
|
18
|
+
Upgrade to CLI `1.1.0` and rebuild the site and application exports. TypeScript
|
|
19
|
+
extraction requires an explicit `typescript@5.9.3` development dependency;
|
|
20
|
+
normal builds consume the saved snapshot without running extraction.
|
|
21
|
+
|
|
3
22
|
## 1.0.0 — 2026-11-06
|
|
4
23
|
|
|
5
24
|
- Generate [code API references](https://www.shoalrun.com/api-docs/code-references)
|
package/CODE-REFERENCES.md
CHANGED
|
@@ -24,6 +24,25 @@ Use `--style google`, `--style numpy`, or `--style sphinx` for the docstring con
|
|
|
24
24
|
|
|
25
25
|
The adapter emits locally defined symbols, skips aliases and underscore-prefixed members except constructors, and rejects symlinks in its declared source root. It doesn't expand inherited members, execute decorators, resolve external re-exports, or infer undocumented behavior. Its example SDK stores records in memory and doesn't contact a live service.
|
|
26
26
|
|
|
27
|
+
## Generate TypeScript references
|
|
28
|
+
|
|
29
|
+
The optional TypeScript adapter follows the public exports of one entry module, including local re-exports. It reads source or declaration files with the TypeScript compiler API; it doesn't import, execute, or emit documented code. Install `typescript@5.9.3` explicitly in the project that supplies the compiler configuration. The adapter supports TypeScript 5.9.x and rejects other compiler versions.
|
|
30
|
+
|
|
31
|
+
From that project, run:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
node node_modules/@shoalrun/cli/adapters/typescript/shoalrun-reference.mjs \
|
|
35
|
+
--project tsconfig.json --entry src/index.ts --module example.sdk \
|
|
36
|
+
--out reference.json
|
|
37
|
+
shoalrun references check reference.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`--entry` resolves relative to the compiler configuration. `--root` defaults to its directory and bounds emitted declarations and relative provenance paths; an entry or exported declaration outside that root fails. The configuration may be outside an explicitly supplied root. `--out` resolves relative to the current working directory. Extraction reports TypeScript errors rather than publishing an incomplete entry point. It doesn't install dependencies, run project plugins, or fetch remote declarations.
|
|
41
|
+
|
|
42
|
+
Functions, overloads, classes, interfaces, type aliases, enums, and constants retain signatures. Object/interface fields and methods become child symbols. JSDoc descriptions, `@param`, `@returns`, and `@example` supply prose. Private/protected members and `@internal`/`@private` symbols are omitted. Local type references link eligible exports. Inherited members aren't expanded; union alternatives remain in their full alias declaration. Namespace exports and other unsupported declarations fail explicitly. See [the adapter guide](adapters/typescript/README.md) for limits.
|
|
43
|
+
|
|
44
|
+
Normal site builds still read the saved JSON and don't need TypeScript. Refresh explicitly after changing the public source or JSDoc, then validate and review the generated reference. Type extraction doesn't prove runtime behavior.
|
|
45
|
+
|
|
27
46
|
## Configure a catalog
|
|
28
47
|
|
|
29
48
|
```yaml
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ This package provides the `shoalrun` CLI, starter projects, agent skills, and of
|
|
|
9
9
|
From the project where you want to keep your documentation:
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
npm install --save-dev --save-exact @shoalrun/cli@1.
|
|
12
|
+
npm install --save-dev --save-exact @shoalrun/cli@1.1.0
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Create and preview a site
|
|
@@ -39,8 +39,9 @@ The [features overview](https://www.shoalrun.com/features) describes the complet
|
|
|
39
39
|
| A documentation site | Pages, navigation, local preview, themes, palettes, fonts, and project CSS. |
|
|
40
40
|
| Reusable procedures | Recipes, shared ingredients, and cookbooks that help readers choose a complete task. |
|
|
41
41
|
| HTTP API references | OpenAPI operation pages, code examples, focused contracts, and an explicit source-review gate. |
|
|
42
|
-
| Code API references | [Python docstrings and converter-supplied symbols](CODE-REFERENCES.md), rendered as native reference pages. |
|
|
42
|
+
| Code API references | [Python docstrings, TypeScript declarations, and converter-supplied symbols](CODE-REFERENCES.md), rendered as native reference pages. |
|
|
43
43
|
| Several product releases | Independent product versions and defaults, publication routes, and a header publication selector. |
|
|
44
|
+
| Build selection | Select pages and `<ForFacet>` sections with configured facets and choices, without customer profiles. |
|
|
44
45
|
| Customer editions | External profiles, SKU revisions, feature grants, and conditional pages or sections. |
|
|
45
46
|
| Application help | HTML and Markdown exports, stable page/section/snippet references, static and REST clients, and instance-safe mounting. |
|
|
46
47
|
| Agent discovery | Markdown twins, compact linked indexes, read-only MCP tools, bundled skills, and offline references. |
|
|
@@ -48,6 +49,14 @@ The [features overview](https://www.shoalrun.com/features) describes the complet
|
|
|
48
49
|
|
|
49
50
|
Local builds and keyword search need no provider credentials. Semantic retrieval and generated answers use separately configured services; credentials stay server-side. Reader filters are browsing controls, not authorization. Customer profiles select output during compilation; private-edition hosting remains your responsibility.
|
|
50
51
|
|
|
52
|
+
## Select pages and sections for a build
|
|
53
|
+
|
|
54
|
+
Declare choices under `readerFilters.facets` and set `site.contentFilter`, for example `{ audience: [customer] }`. Mark shared pages with `audiences: [customer, internal]`, then wrap additional internal instructions in `<ForFacet audience="internal">` blocks. The customer build omits those blocks from HTML, Markdown, search, discovery, and expanded resources. An unfiltered build includes them.
|
|
55
|
+
|
|
56
|
+
Unmarked sections remain included; pages without a mark for a selected facet are excluded. Every facet attribute must match, with whitespace-separated alternative choices inside each attribute. This is additive information in selected builds, not replacement text. `<ReaderSection>` remains a browser visibility control and its content ships.
|
|
57
|
+
|
|
58
|
+
Portable export targets need their own `contentFilter`; PDF exports inherit the site's filter unless overridden. Selection reports stay in `.shoalrun/content-selection.json`, outside public output. See the [runnable audience example](example-configs/facet-sections/README.md) and [authoring selection guidance](skills/shoalrun-author/references/facet-selection.md).
|
|
59
|
+
|
|
51
60
|
## Match your brand
|
|
52
61
|
|
|
53
62
|
Use `site.logo`, `site.favicon`, and header settings for site identity. Choose a theme preset and configure `theme.palette`, `theme.mode`, and `theme.fonts`. Use `site.customCss` for changes beyond those settings. Customer profiles can supply deployment-owned branding without storing customer records in the shared source.
|
|
@@ -131,7 +140,7 @@ npx --no-install shoalrun skills list
|
|
|
131
140
|
npx --no-install shoalrun skills read shoalrun-setup
|
|
132
141
|
```
|
|
133
142
|
|
|
134
|
-
Ask your agent to read the skill for the task. `skills list` returns names, descriptions, and local instruction-file paths. These commands read the skills; installing the npm package does not automatically install them into your agent.
|
|
143
|
+
Ask your agent to read the skill for the task. `skills list` returns names, descriptions, and local instruction-file paths. These commands read the skills; installing the npm package does not automatically install them into your agent. Expose complete folders through your agent's discovery directory. Copy complete folders into the skill directory supported by your agent, preserving existing skills and reviewing copied versions when upgrading. Give the project's agent instructions an exact path to load before editing, with direct file reading as a fallback. See [skill setup](https://www.shoalrun.com/contribute/agent-skills).
|
|
135
144
|
|
|
136
145
|
The editing workflow is to capture a baseline, edit source files, validate the changes, then review a local preview. From your documentation project directory:
|
|
137
146
|
|
|
@@ -349,7 +358,7 @@ with a Hero replaces the standard page header and does not display its dates.
|
|
|
349
358
|
If you previously used the private GitHub Packages alpha, check `npm config get @shoalrun:registry`. Remove or replace any `@shoalrun:registry=https://npm.pkg.github.com` entry in your project or user `.npmrc`. You can explicitly select the public registry for the upgrade:
|
|
350
359
|
|
|
351
360
|
```sh
|
|
352
|
-
npm install --save-dev --save-exact @shoalrun/cli@1.
|
|
361
|
+
npm install --save-dev --save-exact @shoalrun/cli@1.1.0 --@shoalrun:registry=https://registry.npmjs.org
|
|
353
362
|
```
|
|
354
363
|
|
|
355
364
|
Commit the updated package manifest and lockfile together. Check that the lockfile resolves `@shoalrun/cli` from `registry.npmjs.org`. Keep any credentials needed by other private dependencies; Shoalrun itself no longer needs a package token.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# TypeScript code-reference adapter
|
|
2
|
+
|
|
3
|
+
This optional adapter uses the project's installed TypeScript 5.9.x compiler API to extract one public entry point into Shoalrun's version 1 snapshot format. The maintained dependency is `typescript@5.9.3`. TypeScript 6/7 compiler APIs aren't covered by this adapter.
|
|
4
|
+
|
|
5
|
+
Install the dependency explicitly, then run from your documentation or library project:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install --save-dev --save-exact typescript@5.9.3
|
|
9
|
+
node node_modules/@shoalrun/cli/adapters/typescript/shoalrun-reference.mjs \
|
|
10
|
+
--project tsconfig.json \
|
|
11
|
+
--entry src/index.ts \
|
|
12
|
+
--module example.sdk \
|
|
13
|
+
--out reference.json
|
|
14
|
+
npx --no-install shoalrun references check reference.json
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Set `--root DIRECTORY` to bound declarations and provenance to a narrower source tree. Entry paths resolve relative to the project's compiler configuration. The output path resolves relative to the current directory. The module ID is a stable logical prefix for exported symbol IDs; use the same value when refreshing the snapshot.
|
|
18
|
+
|
|
19
|
+
Public local re-exports are followed. Functions and overloads, classes, interfaces, aliases, enums, constants, declared members, and static members are represented. Private/protected declarations and `@internal` or `@private` symbols are skipped. A structural alias or inferred structural type containing an excluded member stops extraction instead of printing private details in a parent signature; expose a separate public type. Copied initializers and parameter defaults containing excluded declarations also stop extraction rather than publishing those values. Inherited members aren't expanded. Anonymous call/index signatures are retained in interface declarations, and union alternatives remain in their alias declaration. Unsupported declarations, unresolved imports, and exported declarations outside the declared source root stop extraction.
|
|
20
|
+
|
|
21
|
+
JSDoc descriptions, parameter descriptions, return descriptions, and examples are retained. Other JSDoc tags aren't converted into runtime constraints. Source initializers used as defaults are copied as expressions, never evaluated. Some conditional type expansions stop extraction when their visibility cannot be verified. Type references link known public targets; built-ins and unavailable types remain text. Source locations refer to the actual input, including `.d.ts` files when those are used.
|
|
22
|
+
|
|
23
|
+
The adapter calls `createProgram` without emitting files. It doesn't execute the documented module or run project transformers/plugins, install dependencies, or fetch remote inputs. The TypeScript compiler package and local configuration remain trusted development inputs. Use a reviewed project and inspect the JSON before publication.
|
|
24
|
+
|
|
25
|
+
The source digest covers effective compiler options and all compiler source files, including external type dependencies. Graph accounting limits include those dependencies; they are checked after TypeScript loads the graph and are not execution or memory isolation. Run extraction only on trusted local projects. The output cannot overwrite a compiler input, including through symlinks, and is replaced atomically after validation.
|
|
26
|
+
|
|
27
|
+
A site build needs only the saved JSON. Configure it through `codeReferences` as described in [CODE-REFERENCES.md](../../CODE-REFERENCES.md). This keeps extraction separate from rendering, publication selection, and content delivery.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Static public-entry-point extraction. Never imports or emits documented code. */
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { validateCodeReference } from '../../dist/code-reference-model.js';
|
|
9
|
+
|
|
10
|
+
const inside = (root, file) => file === root || file.startsWith(root + path.sep);
|
|
11
|
+
const order = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
12
|
+
|
|
13
|
+
export function convertTypeScript({ project, entry, moduleName, root, typescript, onInputs }) {
|
|
14
|
+
project = fs.realpathSync(project);
|
|
15
|
+
root = fs.realpathSync(root ?? path.dirname(project));
|
|
16
|
+
entry = fs.realpathSync(path.resolve(path.dirname(project), entry));
|
|
17
|
+
if (!inside(root, entry)) throw new Error('Entry must stay inside the declared source root');
|
|
18
|
+
if (!moduleName || /\s|[\x00-\x1f]/.test(moduleName)) throw new Error('Provide a nonempty module ID without whitespace');
|
|
19
|
+
const ts = typescript ?? createRequire(project)('typescript');
|
|
20
|
+
if (!/^5\.9\./.test(ts.version)) throw new Error('This adapter supports TypeScript 5.9.x; install typescript@5.9.3 in the project');
|
|
21
|
+
const diagnostics = messages => messages.map(message => ts.flattenDiagnosticMessageText(message.messageText, '\n')).join('\n');
|
|
22
|
+
const configInputs = new Set([project]);
|
|
23
|
+
const readConfig = file => { if (fs.existsSync(file)) configInputs.add(fs.realpathSync(file)); return ts.sys.readFile(file); };
|
|
24
|
+
const config = ts.readConfigFile(project, readConfig);
|
|
25
|
+
if (config.error) throw new Error(diagnostics([config.error]));
|
|
26
|
+
const parsed = ts.parseJsonConfigFileContent(config.config, { ...ts.sys, readFile: readConfig }, path.dirname(project));
|
|
27
|
+
// A reference entry need not be included in the project's ordinary build files.
|
|
28
|
+
const configErrors = parsed.errors.filter(error => error.code !== 18003);
|
|
29
|
+
if (configErrors.length) throw new Error(diagnostics(configErrors));
|
|
30
|
+
const program = ts.createProgram({ rootNames: [entry], options: { ...parsed.options, noEmit: true, incremental: false, composite: false } });
|
|
31
|
+
const files = program.getSourceFiles().map(file => ({ file, path: fs.realpathSync(file.fileName) })).sort((a, b) => order(a.path, b.path));
|
|
32
|
+
if (files.length > 10000) throw new Error('Source graph exceeds 10,000 files');
|
|
33
|
+
if (files.reduce((bytes, { file }) => bytes + Buffer.byteLength(file.text), 0) > 32 * 1024 * 1024) throw new Error('Source graph exceeds 32 MiB');
|
|
34
|
+
onInputs?.([...configInputs, ...files.map(item => item.path)]);
|
|
35
|
+
const errors = ts.getPreEmitDiagnostics(program).filter(message => message.category === ts.DiagnosticCategory.Error);
|
|
36
|
+
if (errors.length) throw new Error(diagnostics(errors));
|
|
37
|
+
const checker = program.getTypeChecker();
|
|
38
|
+
const source = program.getSourceFile(entry);
|
|
39
|
+
const entrySymbol = source && checker.getSymbolAtLocation(source);
|
|
40
|
+
if (!entrySymbol) throw new Error('The entry must be an external TypeScript module with public exports');
|
|
41
|
+
const canonical = symbol => symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;
|
|
42
|
+
const exports = checker.getExportsOfModule(entrySymbol).sort((a, b) => order(a.name, b.name));
|
|
43
|
+
const ids = new Map();
|
|
44
|
+
const publicId = symbol => symbol && ids.get(canonical(symbol))?.[0];
|
|
45
|
+
const format = ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope;
|
|
46
|
+
const text = parts => ts.displayPartsToString(parts ?? []);
|
|
47
|
+
const description = symbol => text(symbol.getDocumentationComment(checker));
|
|
48
|
+
const tags = symbol => symbol.getJsDocTags(checker);
|
|
49
|
+
const declaration = symbol => symbol.valueDeclaration ?? symbol.declarations?.[0];
|
|
50
|
+
const location = node => {
|
|
51
|
+
const file = fs.realpathSync(node.getSourceFile().fileName);
|
|
52
|
+
if (!inside(root, file)) throw new Error('An exported declaration escapes the source root; choose a local public entry');
|
|
53
|
+
return { path: path.relative(root, file).split(path.sep).join('/'), line: node.getSourceFile().getLineAndCharacterOfPosition(node.getStart()).line + 1 };
|
|
54
|
+
};
|
|
55
|
+
const excludedNode = node => !!node && ((node.name && ts.isPrivateIdentifier(node.name)) || ts.isPrivateIdentifier(node) || ts.getJSDocTags(node).some(tag => ['internal', 'private'].includes(tag.tagName.text)) || !!(ts.getCombinedModifierFlags(node) & (ts.ModifierFlags.Private | ts.ModifierFlags.Protected)));
|
|
56
|
+
const visible = symbol => !tags(symbol).some(tag => tag.name === 'internal' || tag.name === 'private') &&
|
|
57
|
+
!symbol.declarations?.some(node => (node.name && ts.isPrivateIdentifier(node.name)) || ts.getCombinedModifierFlags(node) & (ts.ModifierFlags.Private | ts.ModifierFlags.Protected));
|
|
58
|
+
for (const exported of exports) {
|
|
59
|
+
const target = canonical(exported);
|
|
60
|
+
if (!visible(exported) || !visible(target)) continue;
|
|
61
|
+
const list = ids.get(target) ?? [];
|
|
62
|
+
list.push(`${moduleName}.${exported.name}`); ids.set(target, list);
|
|
63
|
+
}
|
|
64
|
+
// The snapshot cannot express a partially hidden structural type faithfully.
|
|
65
|
+
// Fail instead of printing excluded members inside a parent signature.
|
|
66
|
+
const assertPublicStructure = node => {
|
|
67
|
+
if (ts.isBlock(node)) return;
|
|
68
|
+
if (ts.isTypeElement(node)) {
|
|
69
|
+
const symbol = node.name && checker.getSymbolAtLocation(node.name);
|
|
70
|
+
if ((symbol && !visible(symbol)) || ts.getJSDocTags(node).some(tag => ['internal', 'private'].includes(tag.tagName.text))) {
|
|
71
|
+
if (node.parent && ts.isTypeLiteralNode(node.parent)) throw new Error('A structural type contains an @internal or @private member; expose a separate public type');
|
|
72
|
+
return; // Direct interface/class members are omitted individually.
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
ts.forEachChild(node, assertPublicStructure);
|
|
76
|
+
};
|
|
77
|
+
const assertPrintable = node => {
|
|
78
|
+
if (excludedNode(node)) throw new Error('A printed declaration or initializer contains an @internal, @private, private or protected member; expose a separate public value');
|
|
79
|
+
ts.forEachChild(node, assertPrintable);
|
|
80
|
+
};
|
|
81
|
+
const snippet = (node, kind = ts.EmitHint.Unspecified) => {
|
|
82
|
+
assertPrintable(node);
|
|
83
|
+
return ts.createPrinter({ removeComments: true }).printNode(kind, node, node.getSourceFile()).trim();
|
|
84
|
+
};
|
|
85
|
+
const typeText = (type, node) => {
|
|
86
|
+
const value = checker.typeToString(type, node, format);
|
|
87
|
+
const inspect = (current, seen = new Set()) => {
|
|
88
|
+
if (!current || seen.has(current)) return; seen.add(current);
|
|
89
|
+
if (current.isUnionOrIntersection()) { for (const part of current.types) inspect(part, seen); return; }
|
|
90
|
+
if (current.flags & ts.TypeFlags.Substitution) { inspect(current.baseType, seen); inspect(current.constraint, seen); return; }
|
|
91
|
+
if (current.flags & ts.TypeFlags.Conditional) throw new Error('A conditional type expansion cannot be verified for excluded members; expose a named public type');
|
|
92
|
+
if (!(current.flags & ts.TypeFlags.Object)) return;
|
|
93
|
+
for (const argument of current.aliasTypeArguments ?? []) inspect(argument, seen);
|
|
94
|
+
if (current.objectFlags & ts.ObjectFlags.Reference) for (const argument of checker.getTypeArguments(current)) inspect(argument, seen);
|
|
95
|
+
// A separately emitted public type is already validated at its own declaration.
|
|
96
|
+
if (publicId(current.aliasSymbol ?? current.symbol)) return;
|
|
97
|
+
for (const signature of [...current.getCallSignatures(), ...current.getConstructSignatures()]) {
|
|
98
|
+
inspect(checker.getReturnTypeOfSignature(signature), seen);
|
|
99
|
+
for (const parameter of signature.getParameters()) {
|
|
100
|
+
const decl = declaration(parameter);
|
|
101
|
+
if (decl) inspect(checker.getTypeOfSymbolAtLocation(parameter, decl), seen);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Named references print their name; anonymous structures print their members.
|
|
105
|
+
if (current.aliasSymbol || current.symbol && !['__type', '__object'].includes(current.symbol.name)) return;
|
|
106
|
+
for (const property of checker.getPropertiesOfType(current)) {
|
|
107
|
+
if (!visible(property)) throw new Error('An inferred structural type contains an @internal or @private member; expose a separate public type');
|
|
108
|
+
const decl = declaration(property);
|
|
109
|
+
if (decl) inspect(checker.getTypeOfSymbolAtLocation(property, decl), seen);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
inspect(type);
|
|
113
|
+
if (/import\(["'](?:\/|[A-Za-z]:[\\/])/.test(value)) throw new Error('An inferred public type contains a machine-local import path; declare an exported type explicitly');
|
|
114
|
+
return value;
|
|
115
|
+
};
|
|
116
|
+
const references = new Map();
|
|
117
|
+
const collectReferences = (node, output) => {
|
|
118
|
+
if (!node) return;
|
|
119
|
+
if (ts.isIdentifier(node)) {
|
|
120
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
121
|
+
const target = symbol && publicId(symbol);
|
|
122
|
+
if (target) output.set(node.text, target);
|
|
123
|
+
}
|
|
124
|
+
// Only declarations/types, never walk a function body or initializer.
|
|
125
|
+
ts.forEachChild(node, child => { if (!ts.isBlock(child) && child !== node.initializer) collectReferences(child, output); });
|
|
126
|
+
};
|
|
127
|
+
const symbols = [{ id: moduleName, name: moduleName, kind: 'module', visibility: 'public', source: location(source) }];
|
|
128
|
+
const append = (symbol, id, name, parent, member = false) => {
|
|
129
|
+
if (!visible(symbol)) return;
|
|
130
|
+
const node = declaration(symbol);
|
|
131
|
+
if (!node) throw new Error(`No declaration for exported symbol ${name}`);
|
|
132
|
+
const decls = symbol.declarations ?? [node];
|
|
133
|
+
for (const decl of decls) { location(decl); assertPublicStructure(decl); }
|
|
134
|
+
const ref = new Map(); references.set(id, ref);
|
|
135
|
+
const doc = description(symbol);
|
|
136
|
+
const base = { id, name, parent, visibility: 'public', source: location(node), ...(doc ? { summary: doc.split(/\n\s*\n/)[0].replace(/\s+/g, ' ').slice(0, 1000), description: doc } : {}) };
|
|
137
|
+
const type = checker.getTypeOfSymbolAtLocation(symbol, node);
|
|
138
|
+
const declared = checker.getDeclaredTypeOfSymbol(symbol);
|
|
139
|
+
let signatures = [];
|
|
140
|
+
if (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isFunctionTypeNode(node) || type.getCallSignatures().length && !ts.isTypeAliasDeclaration(node)) {
|
|
141
|
+
base.kind = member ? 'method' : 'function';
|
|
142
|
+
signatures = checker.getNonNullableType(type).getCallSignatures();
|
|
143
|
+
base.signatures = signatures.map(signature => `${name}${symbol.flags & ts.SymbolFlags.Optional ? '?' : ''}${checker.signatureToString(signature, node, format, ts.SignatureKind.Call)}`);
|
|
144
|
+
const parameterDocs = new Map(tags(symbol).filter(tag => tag.name === 'param').flatMap(tag => { const match = /^(\S+)\s+([\s\S]*)$/.exec(text(tag.text)); return match ? [[match[1], match[2]]] : []; }));
|
|
145
|
+
const primary = signatures.at(-1);
|
|
146
|
+
if (primary) {
|
|
147
|
+
base.parameters = primary.getParameters().map(parameter => {
|
|
148
|
+
const decl = declaration(parameter);
|
|
149
|
+
const parameterName = decl?.name && (ts.isObjectBindingPattern(decl.name) || ts.isArrayBindingPattern(decl.name)) ? snippet(decl.name) : parameter.name;
|
|
150
|
+
const initializer = decl?.initializer;
|
|
151
|
+
const parameterDescription = description(parameter) || parameterDocs.get(parameter.name);
|
|
152
|
+
collectReferences(decl?.type, ref);
|
|
153
|
+
return { name: parameterName, type: typeText(checker.getTypeOfSymbolAtLocation(parameter, decl ?? node), decl ?? node),
|
|
154
|
+
...(parameterDescription ? { description: parameterDescription } : {}), ...(initializer ? { default: snippet(initializer) } : {}) };
|
|
155
|
+
});
|
|
156
|
+
base.returns = { type: typeText(checker.getReturnTypeOfSignature(primary), node) };
|
|
157
|
+
const returns = tags(symbol).find(tag => ['returns', 'return'].includes(tag.name));
|
|
158
|
+
if (returns) base.returns.description = text(returns.text);
|
|
159
|
+
}
|
|
160
|
+
for (const signature of signatures) {
|
|
161
|
+
typeText(checker.getReturnTypeOfSignature(signature), node);
|
|
162
|
+
for (const parameter of signature.getParameters()) typeText(checker.getTypeOfSymbolAtLocation(parameter, declaration(parameter) ?? node), declaration(parameter) ?? node);
|
|
163
|
+
const decl = signature.getDeclaration();
|
|
164
|
+
if (decl) collectReferences(decl.type, ref);
|
|
165
|
+
for (const parameter of decl?.parameters ?? []) collectReferences(parameter.type, ref);
|
|
166
|
+
}
|
|
167
|
+
} else if (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) {
|
|
168
|
+
base.kind = ts.isClassDeclaration(node) ? 'class' : 'interface';
|
|
169
|
+
const generics = node.typeParameters?.map(parameter => snippet(parameter)).join(', ');
|
|
170
|
+
const heritageClauses = decls.flatMap(owner => owner.heritageClauses ?? []);
|
|
171
|
+
const heritage = [[ts.SyntaxKind.ExtendsKeyword, 'extends'], [ts.SyntaxKind.ImplementsKeyword, 'implements']].map(([token, label]) => { const types = [...new Set(heritageClauses.filter(clause => clause.token === token).flatMap(clause => clause.types.map(type => snippet(type))))]; return types.length ? label + ' ' + types.join(', ') : ''; }).filter(Boolean).join(' ');
|
|
172
|
+
base.signatures = [`${base.kind} ${name}${generics ? `<${generics}>` : ''}${heritage ? ` ${heritage}` : ''}`];
|
|
173
|
+
base.bases = heritageClauses.length ? heritageClauses.flatMap(clause => clause.types.map(type => snippet(type))) : undefined;
|
|
174
|
+
for (const clause of heritageClauses) collectReferences(clause, ref);
|
|
175
|
+
for (const parameter of node.typeParameters ?? []) collectReferences(parameter, ref);
|
|
176
|
+
for (const owner of decls.filter(item => ts.isClassDeclaration(item) || ts.isInterfaceDeclaration(item))) for (const member of owner.members) if (!excludedNode(member) && (ts.isCallSignatureDeclaration(member) || ts.isConstructSignatureDeclaration(member) || ts.isIndexSignatureDeclaration(member))) { base.signatures.push(snippet(member)); collectReferences(member, ref); }
|
|
177
|
+
if (base.kind === 'class') {
|
|
178
|
+
const constructors = type.getConstructSignatures().filter(ctor => !excludedNode(ctor.getDeclaration() ?? node));
|
|
179
|
+
if (constructors.length) {
|
|
180
|
+
base.constructorSignature = constructors.map(ctor => `new ${name}${checker.signatureToString(ctor, node, format, ts.SignatureKind.Call)}`).join('\n');
|
|
181
|
+
for (const ctor of constructors) {
|
|
182
|
+
for (const parameter of ctor.getParameters()) {
|
|
183
|
+
const decl = declaration(parameter);
|
|
184
|
+
typeText(checker.getTypeOfSymbolAtLocation(parameter, decl ?? node), decl ?? node);
|
|
185
|
+
if (decl?.initializer) assertPrintable(decl.initializer);
|
|
186
|
+
}
|
|
187
|
+
for (const parameter of ctor.getDeclaration()?.parameters ?? []) collectReferences(parameter.type, ref);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
} else if (ts.isTypeAliasDeclaration(node)) {
|
|
192
|
+
base.kind = 'type';
|
|
193
|
+
const generics = node.typeParameters?.map(parameter => snippet(parameter)).join(', ');
|
|
194
|
+
assertPublicStructure(node.type);
|
|
195
|
+
const publicType = node.type;
|
|
196
|
+
base.signatures = [`type ${name}${generics ? `<${generics}>` : ''} = ${snippet(publicType)};`];
|
|
197
|
+
collectReferences(publicType, ref);
|
|
198
|
+
} else if (ts.isEnumDeclaration(node)) {
|
|
199
|
+
base.kind = 'enum'; base.signatures = [`enum ${name}`];
|
|
200
|
+
} else if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node) || ts.isPropertySignature(node) || ts.isParameter(node) || ts.isGetAccessorDeclaration(node) || ts.isEnumMember(node)) {
|
|
201
|
+
base.kind = member ? 'property' : 'constant';
|
|
202
|
+
base.annotation = typeText(type, node);
|
|
203
|
+
const readonly = ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Readonly || ts.isGetAccessorDeclaration(node) && !symbol.declarations?.some(ts.isSetAccessorDeclaration);
|
|
204
|
+
base.signatures = [`${readonly ? 'readonly ' : ''}${name}${symbol.flags & ts.SymbolFlags.Optional ? '?' : ''}: ${base.annotation}`];
|
|
205
|
+
if (ts.isEnumMember(node)) base.kind = 'constant';
|
|
206
|
+
if (member && !ts.isEnumMember(node)) base.required = !(symbol.flags & ts.SymbolFlags.Optional);
|
|
207
|
+
if (node.initializer) base.default = snippet(node.initializer);
|
|
208
|
+
collectReferences(node.type, ref);
|
|
209
|
+
} else throw new Error(`Unsupported exported declaration ${name}: ${ts.SyntaxKind[node.kind]}`);
|
|
210
|
+
const examples = tags(symbol).filter(tag => tag.name === 'example').map(tag => ({ code: text(tag.text).replace(/^```(?:ts|typescript|js|javascript)?\s*\n([\s\S]*?)\n```\s*$/, '$1') }));
|
|
211
|
+
if (examples.length) base.examples = examples;
|
|
212
|
+
symbols.push(base);
|
|
213
|
+
const owns = decl => decls.some(owner => { for (let current = decl; current; current = current.parent) if (current === owner) return true; return false; });
|
|
214
|
+
if (['class', 'interface', 'type'].includes(base.kind) && !(declared.flags & ts.TypeFlags.Union)) {
|
|
215
|
+
for (const property of checker.getPropertiesOfType(declared).sort((a, b) => order(a.name, b.name))) {
|
|
216
|
+
if (property.declarations?.some(owns)) { const memberNode = declaration(property); const name = ts.isComputedPropertyName(memberNode.name) ? snippet(memberNode.name) : property.name; append(property, `${id}.${encodeURIComponent(name)}`, name, id, true); }
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (base.kind === 'class') for (const property of checker.getPropertiesOfType(type).sort((a, b) => order(a.name, b.name))) {
|
|
220
|
+
if (property.declarations?.some(owns)) { const memberNode = declaration(property); const name = ts.isComputedPropertyName(memberNode.name) ? snippet(memberNode.name) : property.name; const before = symbols.length; append(property, `${id}.static.${encodeURIComponent(name)}`, name, id, true); const added = symbols[before]; if (added?.signatures) added.signatures = added.signatures.map(signature => `static ${signature}`); }
|
|
221
|
+
}
|
|
222
|
+
if (base.kind === 'enum') for (const property of checker.getExportsOfModule(symbol)) if (ts.isEnumMember(declaration(property))) append(property, `${id}.${property.name}`, property.name, id, true);
|
|
223
|
+
};
|
|
224
|
+
for (const exported of exports) if (visible(exported)) append(canonical(exported), `${moduleName}.${exported.name}`, exported.name, moduleName);
|
|
225
|
+
const known = new Set(symbols.map(symbol => symbol.id));
|
|
226
|
+
for (const symbol of symbols) {
|
|
227
|
+
const mapped = Object.fromEntries([...(references.get(symbol.id) ?? [])].filter(([, target]) => known.has(target)));
|
|
228
|
+
if (Object.keys(mapped).length) symbol.typeReferences = mapped;
|
|
229
|
+
}
|
|
230
|
+
const normalize = value => Array.isArray(value) ? value.map(normalize) : value && typeof value === 'object' ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => order(a, b)).map(([key, item]) => [key, normalize(item)])) : typeof value === 'string' && path.isAbsolute(value) ? (inside(root, value) ? '$ROOT/' + path.relative(root, value).split(path.sep).join('/') : '$EXTERNAL/' + path.basename(value)) : value;
|
|
231
|
+
const digest = createHash('sha256').update(`typescript:${ts.version}\nentry:${path.relative(root, entry)}\nmodule:${moduleName}\noptions:${JSON.stringify(normalize(program.getCompilerOptions()))}\n`);
|
|
232
|
+
const evidence = files.map(({ file, path: filePath }) => [inside(root, filePath) ? path.relative(root, filePath).split(path.sep).join('/') : '$EXTERNAL/' + path.basename(filePath), file.text]).sort((a, b) => order(JSON.stringify(a), JSON.stringify(b)));
|
|
233
|
+
for (const file of evidence) digest.update(JSON.stringify(file));
|
|
234
|
+
return validateCodeReference({ schemaVersion: 1, kind: 'shoalrun-code-reference', programmingLanguage: 'typescript', producer: { name: 'shoalrun-typescript', version: '1.0.0', extractorVersion: ts.version }, sourceDigest: digest.digest('hex'), symbols });
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** Never overwrite a compiler input, including through an output symlink or parent. */
|
|
238
|
+
export function writeTypeScriptSnapshot(output, snapshot, inputs) {
|
|
239
|
+
const resolved = fs.existsSync(output) ? fs.realpathSync(output) : path.join(fs.realpathSync(path.dirname(output)), path.basename(output));
|
|
240
|
+
if (inputs.some(file => fs.realpathSync(file) === resolved)) throw new Error('Snapshot output cannot overwrite a compiler input');
|
|
241
|
+
const temporary = path.join(path.dirname(output), `.shoalrun-reference-${randomUUID()}.json`);
|
|
242
|
+
try { fs.writeFileSync(temporary, JSON.stringify(snapshot, null, 2) + '\n', { encoding: 'utf8', flag: 'wx' }); fs.renameSync(temporary, output); }
|
|
243
|
+
finally { fs.rmSync(temporary, { force: true }); }
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
247
|
+
try {
|
|
248
|
+
const args = {}; const allowed = ['--project', '--entry', '--module', '--root', '--out'];
|
|
249
|
+
for (let i = 2; i < process.argv.length; i += 2) {
|
|
250
|
+
const key = process.argv[i], value = process.argv[i + 1];
|
|
251
|
+
if (!allowed.includes(key) || args[key] || !value || value.startsWith('--')) throw new Error('Usage: node shoalrun-reference.mjs --project tsconfig.json --entry src/index.ts --module sdk --out reference.json [--root DIRECTORY]');
|
|
252
|
+
args[key] = value;
|
|
253
|
+
}
|
|
254
|
+
for (const key of ['--project', '--entry', '--module', '--out']) if (!args[key]) throw new Error(`Missing ${key}`);
|
|
255
|
+
let inputs;
|
|
256
|
+
const snapshot = convertTypeScript({ onInputs: value => { inputs = value; }, project: path.resolve(args['--project']), entry: args['--entry'], moduleName: args['--module'], root: args['--root'] && path.resolve(args['--root']) });
|
|
257
|
+
writeTypeScriptSnapshot(path.resolve(args['--out']), snapshot, inputs);
|
|
258
|
+
console.log(JSON.stringify({ status: 'ok', symbols: snapshot.symbols.length, programmingLanguage: snapshot.programmingLanguage }));
|
|
259
|
+
} catch (error) { console.error(error.code === 'MODULE_NOT_FOUND' ? 'Install typescript@5.9.3 in the project before running this optional adapter.' : error.message); process.exitCode = 1; }
|
|
260
|
+
}
|
|
@@ -30,13 +30,15 @@ Full-page token counts use cl100k_base. Navigation section ID: project-updates.
|
|
|
30
30
|
|
|
31
31
|
- [Shoalrun 1.0 — SDK references and smoother font loading](https://www.shoalrun.com/changelog/code-api-references.md) — ID: change.code-api-references. changelog-entry; 538 tokens. Generate code API references from source and docstrings, choose how readers browse them, and load custom fonts earlier.
|
|
32
32
|
|
|
33
|
+
- [Build selection and TypeScript references](https://www.shoalrun.com/changelog/facet-typescript.md) — ID: change.facet-typescript. changelog-entry; 694 tokens. Select additional sections for each build, generate TypeScript SDK references, and improve search queries written as questions.
|
|
34
|
+
|
|
33
35
|
- [Authoring snapshot previews and review reports](https://www.shoalrun.com/changelog/authoring-preview.md) — ID: change.authoring-preview. changelog-entry; 554 tokens. Snapshot previews with coverage and freshness reports.
|
|
34
36
|
|
|
35
37
|
- [Agent authoring, search, and documentation answers](https://www.shoalrun.com/changelog/authoring-search.md) — ID: change.authoring-search. changelog-entry; 468 tokens. Reviewed agent drafts, search improvements, and answer context.
|
|
36
38
|
|
|
37
39
|
- [Working-tree authoring tools](https://www.shoalrun.com/changelog/authoring-tools.md) — ID: change.authoring-tools. changelog-entry; 384 tokens. Project discovery and captured working-tree validation.
|
|
38
40
|
|
|
39
|
-
- [Changelog](https://www.shoalrun.com/changelog.md) — ID: reference.changelog. reference;
|
|
41
|
+
- [Changelog](https://www.shoalrun.com/changelog.md) — ID: reference.changelog. reference; 1610 tokens. Compiler, CLI, and reader changes.
|
|
40
42
|
|
|
41
43
|
- [MCP hosting, analytics, and component improvements](https://www.shoalrun.com/changelog/2026-10-17-mcp-hosting.md) — ID: change.mcp-hosting. changelog-entry; 1147 tokens. MCP hosting, analytics, and shared component content.
|
|
42
44
|
|
package/agent-docs/SNAPSHOT.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"sourceRepository": "https://github.com/shoalrun/docs",
|
|
4
|
-
"sourceCommit": "
|
|
5
|
-
"siteBuildId": "
|
|
6
|
-
"manifestDigest": "
|
|
7
|
-
"indexDigest": "
|
|
8
|
-
"packageIntegrity": "sha512-
|
|
4
|
+
"sourceCommit": "6198b4fcbc880b56999926ea74c69cd3d122a86a",
|
|
5
|
+
"siteBuildId": "ead78e4f9fa835d4189aade2c8d34a51b43400308304d415029ae2320db07da4",
|
|
6
|
+
"manifestDigest": "16d07fdeb5b061d6838131d603e76c475f85fcde040d5625d65516fdc19be7f8",
|
|
7
|
+
"indexDigest": "d23c76564004ef45e9523730cea63c4ed0e96d6889c2b17a49d207b1063bbb3e",
|
|
8
|
+
"packageIntegrity": "sha512-oZG3QJeXiQYa/b0Vf6j13lFj/grebtzaeLsRkL+QbLqxGjcmnR/Gs5q/nQDai358sJcDh0XUUAcMFarbPLooHQ=="
|
|
9
9
|
}
|
|
@@ -17,11 +17,11 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
24
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
24
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
25
25
|
|
|
26
26
|
## Catalog settings
|
|
27
27
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Catalog settings
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Complete reference page
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Converter snapshot
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Descriptions, type links, and source links
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## HTML, Markdown, and agents
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Metadata and selection
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Publication sources
|
|
35
35
|
|
|
@@ -17,7 +17,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
|
|
|
17
17
|
|
|
18
18
|
Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Document an API > Code API reference settings
|
|
19
19
|
|
|
20
|
-
**Updated: 2026-11-
|
|
20
|
+
**Updated: 2026-11-07.**
|
|
21
21
|
|
|
22
22
|
**Available since: 1.0.0.**
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Parent page: [Full Markdown page](/api-docs/code-reference-settings.md)
|
|
|
29
29
|
|
|
30
30
|
- [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) — Extract a Python snapshot and preview both grouped and complete SDK references.
|
|
31
31
|
|
|
32
|
-
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
32
|
+
`codeReferences` maps a catalog ID to a local converter snapshot and presentation settings. Start with [Generate code API references](https://www.shoalrun.com/api-docs/code-references.md) for a complete Python workflow, or use [TypeScript extraction](https://www.shoalrun.com/api-docs/typescript-references.md) for a public source or declaration entry point. This setting is separate from `apis`, which registers OpenAPI sources.
|
|
33
33
|
|
|
34
34
|
## Python adapter limits
|
|
35
35
|
|