@shoalrun/cli 0.1.0-alpha.17 → 0.1.0-alpha.18
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/AUTHORING.md +29 -0
- package/CHANGELOG.md +23 -0
- package/DEPLOYMENT-PROFILES.md +96 -5
- package/README.md +58 -2
- package/agent-docs/.well-known/shoalrun/navigation/project-updates-50f26fe22670.txt +21 -17
- package/agent-docs/SNAPSHOT.json +5 -5
- package/agent-docs/api-docs/focused-contracts.md +4 -4
- package/agent-docs/api-docs/generate.md +11 -11
- package/agent-docs/api-docs/generate.sections/add-useful-examples.md +3 -3
- package/agent-docs/api-docs/generate.sections/choose-generated-references-or-mdx.md +4 -4
- package/agent-docs/api-docs/generate.sections/describe-filters-that-do-not-use-their-openapi-parameter-name.md +1 -1
- package/agent-docs/api-docs/generate.sections/generate-many-pages-selectively.md +2 -2
- package/agent-docs/api-docs/generate.sections/link-guides-to-api-references.md +1 -1
- package/agent-docs/api-docs/generate.sections/map-extension-values-to-shoalrun-status.md +1 -1
- package/agent-docs/api-docs/generate.sections/override-generated-reference-order-in-navigation.md +4 -4
- package/agent-docs/api-docs/generate.sections/related-reading.md +1 -1
- package/agent-docs/api-docs/generate.sections/use-a-template-for-editorial-context.md +2 -2
- package/agent-docs/api-docs/support.md +7 -7
- package/agent-docs/author/add-page.md +3 -3
- package/agent-docs/author/agent-overview.md +3 -3
- package/agent-docs/author/agent-workflow.md +7 -7
- package/agent-docs/author/analytics.md +27 -27
- package/agent-docs/author/analytics.sections/adapter-exports-and-consent.md +3 -3
- package/agent-docs/author/analytics.sections/built-in-events.md +15 -15
- package/agent-docs/author/analytics.sections/configure-an-adapter.md +1 -1
- package/agent-docs/author/analytics.sections/custom-interactions.md +2 -2
- package/agent-docs/author/analytics.sections/event-format.md +2 -2
- package/agent-docs/author/analytics.sections/html-markdown-and-agents.md +4 -4
- package/agent-docs/author/analytics.sections/inspect-events-locally.md +2 -2
- package/agent-docs/author/analytics.sections/map-events-to-your-service.md +3 -3
- package/agent-docs/author/analytics.sections/posthog-example.md +3 -3
- package/agent-docs/author/analytics.sections/related-reading.md +1 -1
- package/agent-docs/author/authoring-agent.md +3 -3
- package/agent-docs/author/coding-agent.md +4 -4
- package/agent-docs/author/components/api-embeds.md +6 -6
- package/agent-docs/author/components/api-embeds.sections/apiexample.md +3 -3
- package/agent-docs/author/components/api-embeds.sections/html-markdown-and-agents.md +1 -1
- package/agent-docs/author/components/api-embeds.sections/related-reading.md +1 -1
- package/agent-docs/author/components/badge.md +2 -2
- package/agent-docs/author/components/callout.md +2 -2
- package/agent-docs/author/components/cards.md +16 -16
- package/agent-docs/author/components/cards.sections/add-a-lucide-icon.md +4 -4
- package/agent-docs/author/components/cards.sections/build-a-collection.md +7 -7
- package/agent-docs/author/components/cards.sections/curate-a-reading-list.md +9 -9
- package/agent-docs/author/components/cards.sections/html-markdown-and-agents.md +3 -3
- package/agent-docs/author/components/cards.sections/link-to-one-document.md +3 -3
- package/agent-docs/author/components/cards.sections/override-card-text.md +5 -5
- package/agent-docs/author/components/cards.sections/related-reading.md +3 -3
- package/agent-docs/author/components/code-blocks.md +2 -2
- package/agent-docs/author/components/collapsible.md +3 -3
- package/agent-docs/author/components/cookbook-chooser.md +5 -5
- package/agent-docs/author/components/custom/react.md +8 -8
- package/agent-docs/author/components/custom/react.sections/html-markdown-and-agents.md +3 -3
- package/agent-docs/author/components/custom/react.sections/interactive-react-example.md +2 -2
- package/agent-docs/author/components/custom/react.sections/registration.md +1 -1
- package/agent-docs/author/components/custom/react.sections/related-reading.md +1 -1
- package/agent-docs/author/components/custom/react.sections/share-the-model-with-the-browser.md +3 -3
- package/agent-docs/author/components/custom/react.sections/where-the-content-lives.md +3 -3
- package/agent-docs/author/components/custom.md +7 -7
- package/agent-docs/author/components/definition-list.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/basic-shapes.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/flows-and-structures.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/html-markdown-and-agents.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/layout-engines.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/related-reading.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/sequences-and-grids.md +2 -2
- package/agent-docs/author/components/diagrams/d2-gallery.sections/styles-and-code.md +2 -2
- package/agent-docs/author/components/diagrams/pele-gallery.md +3 -3
- package/agent-docs/author/components/diagrams/pele-gallery.sections/charts-and-planning.md +2 -2
- package/agent-docs/author/components/diagrams/pele-gallery.sections/flowchart-shapes.md +2 -2
- package/agent-docs/author/components/diagrams/pele-gallery.sections/flows-and-behavior.md +2 -2
- package/agent-docs/author/components/diagrams/pele-gallery.sections/html-markdown-and-agents.md +3 -3
- package/agent-docs/author/components/diagrams/pele-gallery.sections/related-reading.md +2 -2
- package/agent-docs/author/components/diagrams/pele-gallery.sections/specialized-diagrams.md +2 -2
- package/agent-docs/author/components/diagrams/pele-gallery.sections/systems-and-structures.md +2 -2
- package/agent-docs/author/components/diagrams.md +8 -8
- package/agent-docs/author/components/doc-link.md +3 -3
- package/agent-docs/author/components/fields.md +18 -18
- package/agent-docs/author/components/file-tree.md +2 -2
- package/agent-docs/author/components/images.md +5 -5
- package/agent-docs/author/components/info-hint.md +3 -3
- package/agent-docs/author/components/kbd.md +2 -2
- package/agent-docs/author/components/math.md +2 -2
- package/agent-docs/author/components/only.md +3 -3
- package/agent-docs/author/components/progress.md +3 -3
- package/agent-docs/author/components/steps.md +2 -2
- package/agent-docs/author/components/tables.md +2 -2
- package/agent-docs/author/components/tabs.md +5 -5
- package/agent-docs/author/components/timeline.md +2 -2
- package/agent-docs/author/components/tooltips.md +2 -2
- package/agent-docs/author/components/walkthroughs.md +2 -2
- package/agent-docs/author/components/walkthroughs.sections/attributes.md +1 -1
- package/agent-docs/author/components/walkthroughs.sections/build-up-code.md +1 -1
- package/agent-docs/author/components/walkthroughs.sections/choose-a-layout.md +2 -2
- package/agent-docs/author/components/walkthroughs.sections/explain-one-file.md +1 -1
- package/agent-docs/author/components/walkthroughs.sections/html-markdown-and-agents.md +1 -1
- package/agent-docs/author/components/walkthroughs.sections/related-reading.md +1 -1
- package/agent-docs/author/components/walkthroughs.sections/syntax.md +1 -1
- package/agent-docs/author/components/walkthroughs.sections/take-code-from-a-file.md +1 -1
- package/agent-docs/author/components.md +2 -2
- package/agent-docs/author/content.md +3 -3
- package/agent-docs/author/cookbooks.md +9 -9
- package/agent-docs/author/css.md +4 -4
- package/agent-docs/author/css.sections/borders-fields-and-navigation-tokens.md +3 -3
- package/agent-docs/author/css.sections/core-color-tokens.md +3 -3
- package/agent-docs/author/css.sections/html-markdown-and-agents.md +4 -4
- package/agent-docs/author/css.sections/page-attributes.md +3 -3
- package/agent-docs/author/css.sections/page-transitions.md +3 -3
- package/agent-docs/author/css.sections/responsive-behavior.md +3 -3
- package/agent-docs/author/css.sections/status-code-and-callout-tokens.md +3 -3
- package/agent-docs/author/css.sections/typography-shape-and-width-tokens.md +3 -3
- package/agent-docs/author/custom-metadata.md +13 -13
- package/agent-docs/author/custom-metadata.sections/add-a-custom-page-field.md +4 -4
- package/agent-docs/author/custom-metadata.sections/choose-text-for-each-surface.md +3 -3
- package/agent-docs/author/custom-metadata.sections/preview-changes-to-metadata-providers.md +2 -2
- package/agent-docs/author/custom-metadata.sections/read-metadata-from-a-project-module.md +3 -3
- package/agent-docs/author/custom-metadata.sections/related-reading.md +1 -1
- package/agent-docs/author/design-templates.md +3 -3
- package/agent-docs/author/design-writing-guides.md +3 -3
- package/agent-docs/author/frontmatter-reference.md +45 -6
- package/agent-docs/author/frontmatter-reference.sections/categorize-connect-and-present-the-page.md +64 -0
- package/agent-docs/author/frontmatter-reference.sections/choose-a-publication-and-visibility.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/control-output-details.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/feature-availability.md +59 -0
- package/agent-docs/author/frontmatter-reference.sections/global-defaults-and-enforced-values.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/html-markdown-and-agents.md +3 -3
- package/agent-docs/author/frontmatter-reference.sections/identify-and-route-a-page.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/point-agents-to-it.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/product-publication-fields.md +37 -0
- package/agent-docs/author/frontmatter-reference.sections/project-defined-fields.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/related-reading.md +2 -2
- package/agent-docs/author/frontmatter-reference.sections/use-the-local-files-while-authoring.md +4 -4
- package/agent-docs/author/frontmatter-reference.sections/when-the-files-update.md +2 -2
- package/agent-docs/author/frontmatter.md +13 -13
- package/agent-docs/author/frontmatter.sections/audience-badges.md +3 -3
- package/agent-docs/author/frontmatter.sections/give-deprecation-guidance.md +4 -4
- package/agent-docs/author/frontmatter.sections/global-defaults-and-enforced-values.md +1 -1
- package/agent-docs/author/frontmatter.sections/optional-native-fields.md +4 -4
- package/agent-docs/author/frontmatter.sections/publication-fields.md +2 -2
- package/agent-docs/author/frontmatter.sections/publishing-policy.md +1 -1
- package/agent-docs/author/frontmatter.sections/related-metadata-tasks.md +1 -1
- package/agent-docs/author/frontmatter.sections/related-reading.md +1 -1
- package/agent-docs/author/frontmatter.sections/required-after-inheritance.md +1 -1
- package/agent-docs/author/frontmatter.sections/seo-fields.md +2 -2
- package/agent-docs/author/frontmatter.sections/validation-rules.md +3 -3
- package/agent-docs/author/markdown-metadata.md +20 -20
- package/agent-docs/author/navigation.md +12 -12
- package/agent-docs/author/navigation.sections/arrange-authored-pages.md +4 -4
- package/agent-docs/author/navigation.sections/fill-an-api-tag-group.md +2 -2
- package/agent-docs/author/navigation.sections/hide-group-page-counts.md +4 -4
- package/agent-docs/author/navigation.sections/html-markdown-and-agents.md +4 -4
- package/agent-docs/author/navigation.sections/local-api-preview.md +2 -2
- package/agent-docs/author/navigation.sections/mix-guides-and-api-references.md +3 -3
- package/agent-docs/author/navigation.sections/optionally-split-a-large-menu-into-files.md +2 -2
- package/agent-docs/author/navigation.sections/reach-navigation-while-reading.md +2 -2
- package/agent-docs/author/navigation.sections/related-reading.md +2 -2
- package/agent-docs/author/navigation.sections/split-navigation-into-tabs.md +4 -4
- package/agent-docs/author/navigation.sections/subject-lifecycle-labels.md +3 -3
- package/agent-docs/author/reader-views.md +9 -9
- 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 +1 -1
- package/agent-docs/author/reader-views.sections/how-it-works-for-agents.md +3 -3
- package/agent-docs/author/reader-views.sections/mark-pages.md +3 -3
- 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/author/recipe-drafts.md +5 -5
- package/agent-docs/author/recipe-drafts.sections/1-write-one-reusable-step.md +2 -2
- package/agent-docs/author/recipe-drafts.sections/2-list-the-steps-for-one-complete-goal.md +2 -2
- package/agent-docs/author/recipe-drafts.sections/3-generate-a-draft-and-review-it.md +1 -1
- package/agent-docs/author/recipe-drafts.sections/4-maintain-shoalrun-s-published-recipe-snapshots.md +2 -2
- package/agent-docs/author/recipe-drafts.sections/related-reading.md +1 -1
- package/agent-docs/author/recipe-drafts.sections/start-an-ingredient-from-an-api-example.md +2 -2
- package/agent-docs/author/recipes.md +7 -7
- package/agent-docs/author/recipes.sections/how-agents-use-this.md +2 -2
- package/agent-docs/author/recipes.sections/one-example-from-shoalrun.md +2 -2
- package/agent-docs/author/recipes.sections/related-reading.md +1 -1
- package/agent-docs/author/recipes.sections/try-a-complete-workflow.md +1 -1
- package/agent-docs/author/recipes.sections/use-recipes-for-task-oriented-how-tos.md +3 -3
- package/agent-docs/author/recipes.sections/what-changing-an-ingredient-updates.md +2 -2
- package/agent-docs/author/recipes.sections/what-each-file-does.md +1 -1
- package/agent-docs/author/recipes.sections/what-happens-and-when.md +2 -2
- package/agent-docs/author/related-reading.md +11 -11
- package/agent-docs/author/related-reading.sections/automatic-footers.md +3 -3
- package/agent-docs/author/related-reading.sections/declare-relationships.md +3 -3
- package/agent-docs/author/related-reading.sections/display-related-documents.md +3 -3
- package/agent-docs/author/related-reading.sections/html-markdown-and-agents.md +1 -1
- package/agent-docs/author/related-reading.sections/inspect-output-and-changes.md +2 -2
- package/agent-docs/author/related-reading.sections/reading-paths-in-section-markdown.md +3 -3
- package/agent-docs/author/related-reading.sections/related-reading.md +1 -1
- package/agent-docs/author/related-reading.sections/where-relationship-explanations-come-from.md +2 -2
- package/agent-docs/author/release-notes.md +8 -8
- package/agent-docs/author/search.md +43 -39
- package/agent-docs/author/search.sections/agent-and-mcp-search-scope.md +12 -8
- package/agent-docs/author/search.sections/choose-a-provider.md +8 -8
- package/agent-docs/author/search.sections/cli-and-mcp-ranking-details.md +4 -4
- package/agent-docs/author/search.sections/enable-included-semantic-search.md +5 -5
- package/agent-docs/author/search.sections/hosted-semantic-search-limits.md +3 -3
- package/agent-docs/author/search.sections/html-markdown-and-agents.md +3 -3
- package/agent-docs/author/search.sections/lexical-search.md +6 -6
- package/agent-docs/author/search.sections/local-semantic-preview.md +3 -3
- package/agent-docs/author/search.sections/read-a-search-result-with-an-agent.md +2 -2
- package/agent-docs/author/search.sections/related-reading.md +2 -2
- package/agent-docs/author/search.sections/reuse-the-lexical-index.md +5 -5
- package/agent-docs/author/search.sections/turn-search-off.md +3 -3
- package/agent-docs/author/search.sections/use-the-search-box.md +2 -2
- package/agent-docs/author/search.sections/write-a-custom-provider.md +11 -11
- package/agent-docs/author/snippets.md +3 -3
- package/agent-docs/author/taxonomy.md +3 -3
- package/agent-docs/author/templates.md +16 -14
- package/agent-docs/author/templates.sections/built-in-feature-templates.md +2 -2
- package/agent-docs/author/templates.sections/built-in-templates.md +2 -2
- package/agent-docs/author/templates.sections/choose-formatting-enforcement-for-your-project.md +7 -7
- package/agent-docs/author/templates.sections/create-or-edit-a-project-template.md +8 -6
- package/agent-docs/author/templates.sections/keep-the-four-shapes-distinct.md +2 -2
- package/agent-docs/author/templates.sections/project-added-templates.md +3 -3
- package/agent-docs/author/templates.sections/related-reading.md +2 -2
- package/agent-docs/author/templates.sections/scaffold-a-page.md +2 -2
- package/agent-docs/author/templates.sections/short-cli-and-derived-values.md +3 -3
- package/agent-docs/author/templates.sections/what-every-template-gives-you.md +3 -3
- package/agent-docs/author/workspace/commands.md +4 -4
- package/agent-docs/author/workspace.md +7 -7
- package/agent-docs/author/writing-style.md +33 -18
- package/agent-docs/author/writing-style.sections/adapt-this-example.md +2 -2
- package/agent-docs/author/writing-style.sections/choose-components-by-reader-need.md +3 -3
- package/agent-docs/author/writing-style.sections/evidence-and-uncertainty.md +4 -4
- package/agent-docs/author/writing-style.sections/example-audience-and-scope.md +2 -2
- package/agent-docs/author/writing-style.sections/feature-availability.md +20 -7
- package/agent-docs/author/writing-style.sections/ingredients-recipes-and-cookbooks.md +5 -5
- package/agent-docs/author/writing-style.sections/page-purpose-and-structure.md +4 -4
- package/agent-docs/author/writing-style.sections/procedures-and-examples.md +4 -4
- package/agent-docs/author/writing-style.sections/related-reading.md +2 -2
- package/agent-docs/author/writing-style.sections/review-a-draft.md +3 -3
- package/agent-docs/author/writing-style.sections/reviewed-writing-examples.md +2 -2
- package/agent-docs/author/writing-style.sections/voice-and-explanations.md +4 -2
- package/agent-docs/changelog/2026-10-14-agent-readiness.md +2 -2
- package/agent-docs/changelog/2026-10-15-evaluation-builds.md +9 -9
- package/agent-docs/changelog/2026-10-16-navigation-layouts.md +4 -4
- package/agent-docs/changelog/2026-10-17-mcp-hosting.md +2 -2
- package/agent-docs/changelog/2026-10-18-search-and-tooltips.md +3 -3
- package/agent-docs/changelog/2026-10-19-visual-navigation.md +3 -3
- package/agent-docs/changelog/2026-10-25.md +2 -2
- package/agent-docs/changelog/2026-10-26.md +4 -4
- package/agent-docs/changelog/2026-10-27.md +1 -1
- package/agent-docs/changelog/2026-10-28.md +3 -3
- package/agent-docs/changelog/2026-10-30.md +1 -1
- package/agent-docs/changelog/2026-11-03.md +5 -5
- package/agent-docs/changelog/2026-11-04-runtime-packaging.md +46 -0
- package/agent-docs/changelog/authoring-preview.md +3 -3
- package/agent-docs/changelog/authoring-search.md +1 -1
- package/agent-docs/changelog/authoring-tools.md +2 -2
- package/agent-docs/changelog/product-publications.md +60 -0
- package/agent-docs/changelog/working-tree-skill.md +1 -1
- package/agent-docs/changelog.md +17 -1
- package/agent-docs/chat/checks.md +11 -11
- package/agent-docs/chat/checks.sections/answer-ahead-of-time.md +1 -1
- package/agent-docs/chat/checks.sections/answer-for-one-audience.md +2 -2
- package/agent-docs/chat/checks.sections/answer-without-a-model.md +2 -2
- package/agent-docs/chat/checks.sections/follow-up-questions.md +2 -2
- package/agent-docs/chat/checks.sections/how-an-answer-is-checked.md +3 -3
- package/agent-docs/chat/checks.sections/questions-with-several-parts.md +3 -3
- package/agent-docs/chat/checks.sections/related-reading.md +1 -1
- package/agent-docs/chat/checks.sections/reuse-answers.md +4 -4
- package/agent-docs/chat/host.md +8 -8
- package/agent-docs/chat/host.sections/cap-the-daily-spend.md +2 -2
- package/agent-docs/chat/host.sections/keep-a-record-of-questions.md +3 -3
- package/agent-docs/chat/host.sections/related-reading.md +2 -2
- package/agent-docs/chat/passage-index.md +17 -17
- package/agent-docs/chat/passage-index.sections/build-the-index.md +2 -2
- package/agent-docs/chat/passage-index.sections/embed-passages.md +3 -3
- package/agent-docs/chat/passage-index.sections/how-the-default-chunker-splits-a-page.md +2 -2
- package/agent-docs/chat/passage-index.sections/limits.md +2 -2
- package/agent-docs/chat/passage-index.sections/passage-ids-and-links.md +3 -3
- package/agent-docs/chat/passage-index.sections/related-reading.md +2 -2
- package/agent-docs/chat/passage-index.sections/what-a-passage-contains.md +15 -15
- package/agent-docs/chat/prepared-answers.md +4 -4
- package/agent-docs/chat/settings.md +3 -3
- package/agent-docs/chat/settings.sections/choose-the-scorer.md +1 -1
- package/agent-docs/chat/settings.sections/configure-chat.md +1 -1
- package/agent-docs/chat/settings.sections/configure-retrieval.md +1 -1
- package/agent-docs/chat/settings.sections/related-reading.md +1 -1
- package/agent-docs/chat/settings.sections/send-extra-request-fields.md +2 -2
- package/agent-docs/chat/settings.sections/use-more-than-one-model.md +2 -2
- package/agent-docs/chat/settings.sections/when-the-scorer-is-down.md +1 -1
- package/agent-docs/chat/setup.md +2 -2
- package/agent-docs/chat.md +3 -3
- package/agent-docs/cli.md +73 -59
- package/agent-docs/cli.sections/audit-a-project-and-api-sources.md +11 -7
- package/agent-docs/cli.sections/author-pages.md +16 -12
- package/agent-docs/cli.sections/build-and-serve.md +30 -18
- package/agent-docs/cli.sections/inspect-config-and-operations.md +13 -9
- package/agent-docs/cli.sections/npm-scripts-in-this-repository.md +7 -3
- package/agent-docs/cli.sections/related-reading.md +6 -2
- package/agent-docs/cli.sections/search-and-chat.md +24 -18
- package/agent-docs/cli.sections/start-a-project.md +7 -3
- package/agent-docs/cli.sections/working-tree-authoring-tools.md +7 -3
- package/agent-docs/concepts.md +2 -2
- package/agent-docs/config/apis.md +2 -2
- package/agent-docs/config/content.md +3 -3
- package/agent-docs/config/content.sections/authoring.md +3 -3
- package/agent-docs/config/content.sections/badges.md +1 -1
- package/agent-docs/config/content.sections/callouts.md +1 -1
- package/agent-docs/config/content.sections/cookbooks.md +1 -1
- package/agent-docs/config/content.sections/frontmatter.md +1 -1
- package/agent-docs/config/content.sections/readerfilters.md +1 -1
- package/agent-docs/config/content.sections/related-reading.md +1 -1
- package/agent-docs/config/content.sections/relationships.md +1 -1
- package/agent-docs/config/content.sections/snippets.md +1 -1
- package/agent-docs/config/content.sections/templates.md +1 -1
- package/agent-docs/config/content.sections/variables.md +1 -1
- package/agent-docs/config/examples.md +4 -4
- package/agent-docs/config/examples.sections/feature-showcase.md +4 -4
- package/agent-docs/config/examples.sections/minimal-site.md +2 -2
- package/agent-docs/config/examples.sections/multilingual-help-center.md +2 -2
- package/agent-docs/config/examples.sections/parcel-api-documentation.md +2 -2
- package/agent-docs/config/examples.sections/related-reading.md +2 -2
- package/agent-docs/config/examples.sections/shared-company-preset.md +2 -2
- package/agent-docs/config/integrations.md +4 -4
- package/agent-docs/config/outputs.md +22 -16
- package/agent-docs/config/outputs.sections/exports.md +19 -13
- package/agent-docs/config/outputs.sections/metadata.md +2 -2
- package/agent-docs/config/outputs.sections/related-reading.md +1 -1
- package/agent-docs/config/publishing.md +29 -19
- package/agent-docs/config/publishing.sections/navigation.md +2 -2
- package/agent-docs/config/publishing.sections/redirects.md +8 -8
- package/agent-docs/config/publishing.sections/related-reading.md +2 -2
- package/agent-docs/config/site.md +42 -18
- package/agent-docs/config/site.sections/related-reading.md +1 -1
- package/agent-docs/config/site.sections/theme.md +1 -1
- package/agent-docs/config.md +2 -2
- package/agent-docs/configuration.md +19 -19
- package/agent-docs/configuration.sections/build-several-sites-from-shared-content.md +1 -1
- package/agent-docs/configuration.sections/change-inherited-lists-deliberately.md +5 -5
- package/agent-docs/configuration.sections/extract-a-section-with-include.md +1 -1
- package/agent-docs/configuration.sections/inspect-and-validate-changes.md +5 -5
- package/agent-docs/configuration.sections/related-reading.md +1 -1
- package/agent-docs/configuration.sections/separate-config-inheritance-from-page-metadata.md +5 -5
- package/agent-docs/configuration.sections/share-defaults-through-extends.md +3 -3
- package/agent-docs/configuration.sections/start-with-one-working-file.md +2 -2
- package/agent-docs/configuration.sections/understand-the-three-stages.md +3 -3
- package/agent-docs/configuration.sections/understand-where-paths-point.md +2 -2
- package/agent-docs/connect/mcp.md +24 -15
- package/agent-docs/content-delivery/agents.md +6 -6
- package/agent-docs/content-delivery/api.md +29 -16
- package/agent-docs/content-delivery/client.md +14 -8
- package/agent-docs/content-delivery/http-api/operations/get-content-representation-fa1d2e3f.md +10 -2
- package/agent-docs/content-delivery/http-api/operations/get-content-representation-head-4052375c.md +10 -2
- package/agent-docs/content-delivery/http-api/operations/get-content-resource-849f1c49.md +537 -3
- package/agent-docs/content-delivery/http-api/operations/get-content-resource-head-0a352acd.md +10 -2
- package/agent-docs/content-delivery/http-api/operations/list-content-resources-8e977ec7.md +545 -3
- package/agent-docs/content-delivery/http-api/operations/list-content-resources-head-b67cbad9.md +10 -2
- package/agent-docs/content-delivery/http-api.md +21 -7
- package/agent-docs/content-delivery/manifest.md +30 -8
- package/agent-docs/content-delivery/publish.md +5 -5
- package/agent-docs/content-delivery/render.md +6 -6
- package/agent-docs/content-delivery/rest.md +16 -8
- package/agent-docs/content-delivery/sections.md +11 -11
- package/agent-docs/content-delivery/select.md +6 -6
- package/agent-docs/content-delivery.md +4 -4
- package/agent-docs/contribute/agent-skills.md +3 -3
- package/agent-docs/cookbooks/authoring.md +3 -3
- package/agent-docs/cookbooks/site-workflows.md +2 -2
- package/agent-docs/cookbooks/welcome-email.md +3 -3
- package/agent-docs/documents.json +2415 -1936
- package/agent-docs/example-api/cedar.md +4 -4
- package/agent-docs/features.md +49 -0
- package/agent-docs/glossary.md +22 -22
- package/agent-docs/index.md +5 -5
- package/agent-docs/ingredients/audit-site.md +2 -2
- package/agent-docs/ingredients/build-site.md +2 -2
- package/agent-docs/ingredients/complete-page.md +2 -2
- package/agent-docs/ingredients/refresh-agent-bundle.md +2 -2
- package/agent-docs/non-goals.md +4 -4
- package/agent-docs/provenance.json +10 -4
- package/agent-docs/publish/agent-discovery.md +8 -2
- package/agent-docs/publish/agent-friendliness.md +21 -21
- package/agent-docs/publish/agent-friendliness.sections/discover-a-page-with-a-small-context-budget.md +5 -5
- package/agent-docs/publish/agent-friendliness.sections/distinguish-examples-from-a-real-service.md +5 -5
- package/agent-docs/publish/agent-friendliness.sections/evidence-has-a-scope.md +5 -5
- package/agent-docs/publish/agent-friendliness.sections/keep-shared-instructions-complete.md +5 -5
- package/agent-docs/publish/agent-friendliness.sections/related-reading.md +3 -3
- package/agent-docs/publish/agent-friendliness.sections/secret-handshake.md +3 -3
- package/agent-docs/publish/agent-friendliness.sections/try-the-page-controls.md +3 -3
- package/agent-docs/publish/agent-friendliness.sections/use-the-transport-your-client-supports.md +4 -4
- package/agent-docs/publish/agent-friendliness.sections/verify-the-page-and-detect-changes.md +9 -9
- package/agent-docs/publish/agent-friendliness.sections/what-an-agent-reads.md +5 -5
- package/agent-docs/publish/agent-friendliness.sections/what-happens-to-an-unsupported-component.md +4 -4
- package/agent-docs/publish/api-references.md +5 -5
- package/agent-docs/publish/api-references.sections/author-the-reference-page.md +2 -2
- package/agent-docs/publish/api-references.sections/build-and-verify-the-output.md +3 -3
- package/agent-docs/publish/api-references.sections/inspect-the-machine-readable-contract.md +2 -2
- package/agent-docs/publish/api-references.sections/next-steps.md +2 -2
- package/agent-docs/publish/api-references.sections/preview-a-small-api-reference.md +2 -2
- package/agent-docs/publish/api-references.sections/put-the-spec-in-your-project.md +2 -2
- package/agent-docs/publish/api-references.sections/register-the-operation.md +2 -2
- package/agent-docs/publish/api-references.sections/related-reading.md +2 -2
- package/agent-docs/publish/api-references.sections/review-imported-content-before-publishing.md +3 -3
- package/agent-docs/publish/api-references.sections/what-readers-get.md +3 -3
- package/agent-docs/publish/audit.md +8 -8
- package/agent-docs/publish/audit.sections/add-project-tests.md +2 -2
- package/agent-docs/publish/audit.sections/check-agent-evaluation-reports.md +2 -2
- package/agent-docs/publish/audit.sections/check-before-pushing.md +3 -3
- package/agent-docs/publish/audit.sections/connect-a-documentation-test-suite.md +2 -2
- package/agent-docs/publish/audit.sections/read-the-report.md +3 -3
- package/agent-docs/publish/audit.sections/related-reading.md +1 -1
- package/agent-docs/publish/content-export.md +37 -15
- package/agent-docs/publish/content-export.sections/assets-downloads-and-notices.md +4 -4
- package/agent-docs/publish/content-export.sections/check-the-result.md +2 -2
- package/agent-docs/publish/content-export.sections/inspect-the-manifest.md +3 -3
- package/agent-docs/publish/content-export.sections/prerequisites.md +4 -4
- package/agent-docs/publish/content-export.sections/related-reading.md +2 -2
- package/agent-docs/publish/content-export.sections/review-exported-api-material.md +3 -3
- package/agent-docs/publish/content-export.sections/try-the-help-drawer-example.md +2 -2
- package/agent-docs/publish/content-export.sections/what-the-representations-retain.md +4 -4
- package/agent-docs/publish/content-negotiation.md +10 -10
- package/agent-docs/publish/content-negotiation.sections/hosting-contract.md +2 -2
- package/agent-docs/publish/content-negotiation.sections/missing-pages.md +3 -3
- package/agent-docs/publish/content-negotiation.sections/related-reading.md +1 -1
- package/agent-docs/publish/content-negotiation.sections/validators-and-manifest-links.md +2 -2
- package/agent-docs/publish/content-negotiation.sections/verify-the-deployed-url.md +2 -2
- package/agent-docs/publish/content-negotiation.sections/what-if-the-host-cannot-negotiate.md +3 -3
- package/agent-docs/publish/content-negotiation.sections/what-shoalrun-builds-and-what-the-host-does.md +2 -2
- package/agent-docs/publish/content-negotiation.sections/why-this-matters.md +2 -2
- package/agent-docs/publish/deployment-check.md +6 -6
- package/agent-docs/publish/deployment-profiles.md +60 -26
- package/agent-docs/publish/deployment-profiles.sections/before-you-begin.md +5 -5
- package/agent-docs/publish/deployment-profiles.sections/build-and-inspect-the-edition.md +9 -9
- package/agent-docs/publish/deployment-profiles.sections/check-the-result.md +7 -7
- package/agent-docs/publish/deployment-profiles.sections/choose-navigation-labels.md +6 -6
- package/agent-docs/publish/deployment-profiles.sections/current-limits.md +7 -7
- package/agent-docs/publish/deployment-profiles.sections/define-the-shared-sku-manifest.md +6 -6
- package/agent-docs/publish/deployment-profiles.sections/html-markdown-and-agents.md +7 -7
- package/agent-docs/publish/deployment-profiles.sections/mark-pages-and-shared-sections.md +13 -13
- package/agent-docs/publish/deployment-profiles.sections/preview-and-edit-a-customer-edition.md +55 -0
- package/agent-docs/publish/deployment-profiles.sections/related-reading.md +6 -6
- package/agent-docs/publish/deployment-profiles.sections/select-each-product-release.md +55 -0
- package/agent-docs/publish/deployment-profiles.sections/supply-the-profile-from-the-deployment.md +6 -6
- package/agent-docs/publish/evals.md +16 -16
- package/agent-docs/publish/evals.sections/add-the-audit-hook.md +5 -5
- package/agent-docs/publish/evals.sections/check-the-report.md +4 -4
- package/agent-docs/publish/evals.sections/define-a-task-file.md +5 -5
- package/agent-docs/publish/evals.sections/diagnose-a-different-build.md +5 -5
- package/agent-docs/publish/evals.sections/prepare-a-report-for-the-built-site.md +5 -5
- package/agent-docs/publish/evals.sections/related-reading.md +3 -3
- package/agent-docs/publish/evals.sections/run-and-review-the-tasks.md +4 -4
- package/agent-docs/publish/evals.sections/shoalrun-s-own-example.md +6 -6
- package/agent-docs/publish/host-adapters.md +6 -6
- package/agent-docs/publish/manni.md +16 -16
- package/agent-docs/publish/manni.sections/check-the-result.md +3 -3
- package/agent-docs/publish/manni.sections/how-this-site-uses-manni.md +6 -6
- package/agent-docs/publish/manni.sections/optional-custom-policies.md +4 -4
- package/agent-docs/publish/manni.sections/prerequisites.md +2 -2
- package/agent-docs/publish/mcp-analytics.md +12 -12
- package/agent-docs/publish/mcp-analytics.sections/adapter-exports.md +4 -4
- package/agent-docs/publish/mcp-analytics.sections/enable-analytics.md +4 -4
- package/agent-docs/publish/mcp-analytics.sections/event-fields-and-service-mappings.md +4 -4
- package/agent-docs/publish/mcp-analytics.sections/optionally-collect-intent-and-group-calls.md +4 -4
- package/agent-docs/publish/mcp-analytics.sections/optionally-identify-the-client-and-model.md +5 -5
- package/agent-docs/publish/mcp-analytics.sections/related-reading.md +3 -3
- package/agent-docs/publish/mcp-analytics.sections/safeguards-and-limits.md +5 -5
- package/agent-docs/publish/mcp.md +56 -29
- package/agent-docs/publish/mcp.sections/check-budgets-and-errors.md +8 -8
- package/agent-docs/publish/mcp.sections/choose-the-documentation-source.md +4 -4
- package/agent-docs/publish/mcp.sections/configure-the-client.md +4 -4
- package/agent-docs/publish/mcp.sections/discover-product-releases-before-searching.md +52 -0
- package/agent-docs/publish/mcp.sections/generate-a-vercel-endpoint.md +6 -6
- package/agent-docs/publish/mcp.sections/html-markdown-and-agents.md +38 -0
- package/agent-docs/publish/mcp.sections/related-reading.md +3 -3
- package/agent-docs/publish/mcp.sections/search-then-read.md +13 -12
- package/agent-docs/publish/mcp.sections/serve-a-public-endpoint-on-node.md +12 -8
- package/agent-docs/publish/mcp.sections/verify-the-connection.md +4 -4
- package/agent-docs/publish/mcp.sections/why-offer-mcp-for-public-docs.md +4 -4
- package/agent-docs/publish/openapi-extension-mappings.md +12 -12
- package/agent-docs/publish/output.md +20 -20
- package/agent-docs/publish/output.sections/api-contracts.md +1 -1
- package/agent-docs/publish/output.sections/code-highlighting.md +1 -1
- package/agent-docs/publish/output.sections/current-limits.md +1 -1
- package/agent-docs/publish/output.sections/incremental-sync.md +4 -4
- package/agent-docs/publish/output.sections/manifest-records-and-sections.md +3 -3
- package/agent-docs/publish/output.sections/navigation-section-indexes.md +1 -1
- package/agent-docs/publish/output.sections/page-formats.md +2 -2
- package/agent-docs/publish/output.sections/published-output-contract.md +5 -5
- package/agent-docs/publish/output.sections/reader-appearance-and-controls.md +1 -1
- package/agent-docs/publish/output.sections/related-reading.md +1 -1
- package/agent-docs/publish/output.sections/response-identity.md +1 -1
- package/agent-docs/publish/output.sections/site-files.md +6 -6
- package/agent-docs/publish/output.sections/validate-an-existing-build-locally.md +3 -3
- package/agent-docs/publish/output.sections/where-files-go.md +3 -3
- package/agent-docs/publish/publications.md +108 -19
- package/agent-docs/publish/publications.sections/add-a-language.md +60 -0
- package/agent-docs/publish/publications.sections/change-just-one-part-of-a-shared-page.md +63 -0
- package/agent-docs/publish/publications.sections/give-each-api-version-its-own-contract.md +34 -0
- package/agent-docs/publish/publications.sections/keep-an-unchanged-page-in-one-file.md +53 -0
- package/agent-docs/publish/publications.sections/publish-versions-without-a-product-catalog.md +49 -0
- package/agent-docs/publish/publications.sections/related-reading.md +42 -0
- package/agent-docs/publish/publications.sections/version-products-independently.md +115 -0
- package/agent-docs/publish/publications.sections/what-agents-receive.md +38 -0
- package/agent-docs/publish/revisions.md +4 -4
- package/agent-docs/publish/seo.md +10 -10
- package/agent-docs/publish/seo.sections/related-reading.md +2 -2
- package/agent-docs/publish/seo.sections/set-the-public-address.md +3 -3
- package/agent-docs/publish/seo.sections/what-agents-receive.md +3 -3
- package/agent-docs/publish/seo.sections/what-the-build-adds.md +2 -2
- package/agent-docs/publish/seo.sections/write-the-page-title-and-summary.md +2 -2
- package/agent-docs/publish/single-source-sites.md +5 -5
- package/agent-docs/publish/troubleshooting.md +10 -10
- package/agent-docs/publish/vercel.md +5 -5
- package/agent-docs/publish/vercel.sections/check-the-deployment.md +1 -1
- package/agent-docs/publish/vercel.sections/include-an-mcp-endpoint.md +2 -2
- package/agent-docs/publish/vercel.sections/prepare-your-project.md +2 -2
- package/agent-docs/publish/vercel.sections/related-reading.md +1 -1
- package/agent-docs/publish.md +2 -2
- package/agent-docs/recipes/add-page.md +5 -5
- package/agent-docs/recipes/add-page.sections/audit-the-shoalrun-docs-project.md +2 -2
- package/agent-docs/recipes/add-page.sections/before-you-start.md +1 -1
- package/agent-docs/recipes/add-page.sections/build-the-shoalrun-docs-site.md +2 -2
- package/agent-docs/recipes/add-page.sections/check-agent-search-and-page-lookup.md +1 -1
- package/agent-docs/recipes/add-page.sections/check-the-built-page-artifacts.md +1 -1
- package/agent-docs/recipes/add-page.sections/check-the-outcome.md +1 -1
- package/agent-docs/recipes/add-page.sections/complete-the-guide-and-add-navigation.md +2 -2
- package/agent-docs/recipes/add-page.sections/install-the-site-dependencies.md +1 -1
- package/agent-docs/recipes/add-page.sections/regenerate-the-agent-documentation-bundle.md +2 -2
- package/agent-docs/recipes/add-page.sections/related-reading.md +1 -1
- package/agent-docs/recipes/add-page.sections/scaffold-a-new-guide.md +1 -1
- package/agent-docs/recipes/audit-docs.md +4 -4
- package/agent-docs/recipes/build-docs.md +2 -2
- package/agent-docs/recipes/preview-hybrid-search.md +5 -5
- package/agent-docs/recipes/preview-page.md +2 -2
- package/agent-docs/recipes/queue-email.md +2 -2
- package/agent-docs/recipes/refresh-agent-docs.md +4 -4
- package/agent-docs/recipes/send-welcome-email.md +13 -13
- package/agent-docs/reference/agent-skills.md +7 -7
- package/agent-docs/search-and-chat.md +4 -4
- package/agent-docs/search-index.json +1 -1
- package/agent-docs/start.md +5 -5
- package/agent-docs/start.sections/add-the-page-to-navigation.md +3 -3
- package/agent-docs/start.sections/build-and-check-both-outputs.md +3 -3
- package/agent-docs/start.sections/build-this-site.md +2 -2
- package/agent-docs/start.sections/check-writing-style.md +2 -2
- package/agent-docs/start.sections/create-a-page.md +2 -2
- package/agent-docs/start.sections/make-it-yours.md +2 -2
- package/agent-docs/start.sections/migrating-from-github-packages.md +2 -2
- package/agent-docs/start.sections/prerequisites.md +2 -2
- package/agent-docs/start.sections/related-reading.md +2 -2
- package/agent-docs/start.sections/start-your-own-project.md +3 -3
- package/agent-docs/status.md +14 -4
- package/agent-docs/styling/color-modes.md +2 -2
- package/agent-docs/styling/footer.md +2 -2
- package/agent-docs/styling/header.md +2 -2
- package/agent-docs/styling/layouts.md +3 -3
- package/agent-docs/styling/layouts.sections/build-a-landing-page.md +1 -1
- package/agent-docs/styling/layouts.sections/build-a-splash-page.md +1 -1
- package/agent-docs/styling/layouts.sections/control-navigation-tabs.md +2 -2
- package/agent-docs/styling/layouts.sections/customize-the-hero.md +1 -1
- package/agent-docs/styling/layouts.sections/hero.md +1 -1
- package/agent-docs/styling/layouts.sections/hide-the-table-of-contents-or-give-content-more-room.md +1 -1
- package/agent-docs/styling/layouts.sections/html-markdown-and-agents.md +2 -2
- package/agent-docs/styling/layouts.sections/related-reading.md +1 -1
- package/agent-docs/styling/palettes.md +3 -3
- package/agent-docs/styling/share-images.md +3 -3
- package/agent-docs/styling/themes.md +2 -2
- package/agent-docs/styling/try.md +2 -2
- package/agent-docs/what-is-shoalrun.md +7 -3
- package/assets/ask-widget.js +20 -6
- package/assets/navigation.js +5 -0
- package/dist/api-materialize.d.ts +2 -1
- package/dist/api-materialize.js +21 -9
- package/dist/api-publication-plan.d.ts +2 -0
- package/dist/api-publication-plan.js +23 -7
- package/dist/api-publication-review.js +4 -3
- package/dist/api-selection.d.ts +5 -2
- package/dist/api-selection.js +18 -11
- package/dist/artifact-bundle.js +9 -6
- package/dist/ask-runtime.d.ts +1 -0
- package/dist/ask-runtime.js +7 -2
- package/dist/authored-change.js +2 -1
- package/dist/authoring-project.js +1 -1
- package/dist/cards.js +2 -1
- package/dist/cli-discovery.d.ts +2 -2
- package/dist/cli-discovery.js +9 -4
- package/dist/cli.js +48 -23
- package/dist/compiler-config.d.ts +17 -0
- package/dist/compiler-config.js +43 -2
- package/dist/compiler.d.ts +21 -0
- package/dist/compiler.js +16 -12
- package/dist/component-transform.d.ts +2 -4
- package/dist/component-transform.js +20 -7
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -1
- package/dist/content-delivery-contract.d.ts +2 -1
- package/dist/content-delivery-validation.d.ts +2 -2
- package/dist/content-delivery-validation.js +6 -4
- package/dist/content-export-command.d.ts +1 -1
- package/dist/content-export-command.js +4 -4
- package/dist/content-export-comparison.js +6 -5
- package/dist/content-export-config.js +3 -1
- package/dist/content-export.js +9 -8
- package/dist/content-rest-client.js +4 -2
- package/dist/content-rest-contract.d.ts +2 -2
- package/dist/content-rest-server.js +11 -6
- package/dist/content-source.d.ts +13 -0
- package/dist/content-source.js +5 -2
- package/dist/content-workspace.d.ts +12 -0
- package/dist/content-workspace.js +2 -1
- package/dist/content.js +3 -2
- package/dist/cookbook-chooser.js +2 -1
- package/dist/deployment-profile.d.ts +2 -1
- package/dist/deployment-profile.js +38 -8
- package/dist/dev.d.ts +3 -1
- package/dist/dev.js +99 -12
- package/dist/docs-author.js +2 -1
- package/dist/docs-command.js +2 -2
- package/dist/docs-eval.d.ts +1 -0
- package/dist/docs-eval.js +2 -2
- package/dist/docs-mcp.d.ts +1 -0
- package/dist/docs-mcp.js +10 -5
- package/dist/docs-tool.d.ts +4 -10
- package/dist/document-sync.d.ts +1 -0
- package/dist/document-sync.js +2 -2
- package/dist/documentation-core.d.ts +29 -10
- package/dist/documentation-core.js +38 -4
- package/dist/freshness.js +2 -2
- package/dist/frontmatter.js +13 -7
- package/dist/function-runtime.d.ts +1 -0
- package/dist/index-build.d.ts +1 -0
- package/dist/index-build.js +2 -2
- package/dist/ingredient-draft.js +20 -10
- package/dist/mcp-analytics.d.ts +1 -0
- package/dist/mcp-artifacts.js +13 -4
- package/dist/mcp-config.d.ts +1 -0
- package/dist/mcp-config.js +3 -1
- package/dist/mcp-http.js +1 -1
- package/dist/page-materialization.d.ts +3 -4
- package/dist/page-materialization.js +15 -8
- package/dist/page-renderer.d.ts +6 -0
- package/dist/page-renderer.js +16 -5
- package/dist/project-navigation.js +2 -1
- package/dist/publication-identity.d.ts +12 -0
- package/dist/publication-identity.js +17 -0
- package/dist/publication-manifest.d.ts +24 -1
- package/dist/publication-manifest.js +14 -6
- package/dist/publication-plan.js +21 -9
- package/dist/publication-render.js +24 -8
- package/dist/recipe-draft.js +9 -6
- package/dist/scaffold.d.ts +7 -4
- package/dist/scaffold.js +16 -16
- package/dist/search-query.d.ts +4 -10
- package/dist/search-query.js +10 -9
- package/dist/server.d.ts +8 -0
- package/dist/server.js +14 -3
- package/dist/subject-deprecation.js +2 -1
- package/dist/vercel-function.js +1 -1
- package/example-configs/products/README.md +37 -0
- package/example-configs/products/content/operations.mdx +50 -0
- package/example-configs/products/content/payments-v2.mdx +30 -0
- package/example-configs/products/content/payments-v3.mdx +38 -0
- package/example-configs/products/content/priority-settlement.mdx +23 -0
- package/example-configs/products/content/reporting-v1.mdx +36 -0
- package/example-configs/products/content/scheduled-exports.mdx +23 -0
- package/example-configs/products/docs.config.yaml +56 -0
- package/example-configs/products/profiles/all-releases.yaml +9 -0
- package/example-configs/products/profiles/customer-a.yaml +13 -0
- package/example-configs/products/profiles/customer-b.yaml +13 -0
- package/example-configs/products/skus.yaml +11 -0
- package/examples/content-delivery/preview.mjs +1 -1
- package/package.json +1 -1
- package/schemas/content-export.schema.json +41 -3
- package/schemas/content-rest.openapi.json +184 -37
- package/skills/shoalrun-author/SKILL.md +6 -2
- package/skills/shoalrun-author/references/customer-editions.md +34 -4
- package/skills/shoalrun-author/references/publications.md +60 -0
- package/skills/shoalrun-recipes/SKILL.md +2 -0
- package/skills/shoalrun-setup/SKILL.md +3 -1
- package/styles/header.css +3 -0
- package/styles/site.css +3 -0
- package/agent-docs/publish/content-export.sections/export-selected-pages.md +0 -116
package/assets/ask-widget.js
CHANGED
|
@@ -114,14 +114,28 @@
|
|
|
114
114
|
if (current?.item && (indent > current.indent || code && current.item.textContent.replace(/\[\d+\]/g, '').trim().endsWith(':'))) current.item.append(node);
|
|
115
115
|
else { lists.length = 0; parent.append(node); }
|
|
116
116
|
};
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
117
|
+
// A shorter fence inside an example is literal code, not its closing fence.
|
|
118
|
+
const parts = [];
|
|
119
|
+
const openings = /^([ \t]*)(`{3,}|~{3,})[^\n]*\n/gm;
|
|
120
|
+
let cursor = 0, opening;
|
|
121
|
+
while ((opening = openings.exec(text))) {
|
|
122
|
+
const closing = new RegExp('^[ \\t]*' + opening[2][0] + '{' + opening[2].length + ',}[ \\t]*\\r?$', 'gm');
|
|
123
|
+
closing.lastIndex = openings.lastIndex;
|
|
124
|
+
const end = closing.exec(text);
|
|
125
|
+
parts.push({ text: text.slice(cursor, opening.index) });
|
|
126
|
+
parts.push({ code: text.slice(openings.lastIndex, end ? end.index : text.length).replace(/\r?\n$/, ''), indent: indentOf(opening[1]) });
|
|
127
|
+
cursor = end ? closing.lastIndex : text.length;
|
|
128
|
+
openings.lastIndex = cursor;
|
|
129
|
+
}
|
|
130
|
+
parts.push({ text: text.slice(cursor) });
|
|
131
|
+
for (const blockPart of parts) {
|
|
132
|
+
if (blockPart.code !== undefined) {
|
|
133
|
+
const { indent } = blockPart;
|
|
134
|
+
const code = indent ? blockPart.code.replace(new RegExp('^ {0,' + indent + '}', 'gm'), '') : blockPart.code;
|
|
123
135
|
appendBlock(el('pre', {}, el('code', { text: code })), indent, true); continue;
|
|
124
136
|
}
|
|
137
|
+
const part = blockPart.text;
|
|
138
|
+
if (!part.trim()) continue;
|
|
125
139
|
for (const block of part.split(/\n{2,}/)) {
|
|
126
140
|
const heading = /^(#{1,6})\s+(.+)$/.exec(block.trim());
|
|
127
141
|
if (heading && !block.trim().includes('\n')) { const node = el(`h${Math.max(2, heading[1].length)}`); inline(node, heading[2], sources); appendBlock(node, indentOf(block)); continue; }
|
package/assets/navigation.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
const navigation = document.querySelector('.side');
|
|
2
|
+
for (const select of document.querySelectorAll('[data-publication-switcher]')) {
|
|
3
|
+
select.addEventListener('change', () => {
|
|
4
|
+
if (select.value) location.assign(select.value);
|
|
5
|
+
});
|
|
6
|
+
}
|
|
2
7
|
const tree = navigation?.querySelector('.nav-tree');
|
|
3
8
|
const search = navigation?.querySelector('.nav-search');
|
|
4
9
|
const filter = navigation?.querySelector('#nav-filter');
|
package/dist/api-materialize.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { resolvePublication } from './compiler-config.js';
|
|
2
|
+
import { samePublication } from './publication-identity.js';
|
|
1
3
|
import { mkdir, readFile, readdir, realpath, writeFile } from 'node:fs/promises';
|
|
2
4
|
import path from 'node:path';
|
|
3
5
|
import YAML from 'yaml';
|
|
@@ -30,7 +32,7 @@ function pageIdentity(source, file) {
|
|
|
30
32
|
const data = YAML.parse(match[1]);
|
|
31
33
|
if (!data || typeof data !== 'object')
|
|
32
34
|
throw new Error(`${file}: invalid page frontmatter`);
|
|
33
|
-
return { id: data.id, operation: Array.isArray(data.operations) && data.operations.length === 1 ? data.operations[0] : undefined, channel: data.channel, version: data.version, language: data.language, publications: data.publications };
|
|
35
|
+
return { id: data.id, operation: Array.isArray(data.operations) && data.operations.length === 1 ? data.operations[0] : undefined, product: data.product, channel: data.channel, version: data.version, language: data.language, publications: data.publications };
|
|
34
36
|
}
|
|
35
37
|
function select(candidates, options) {
|
|
36
38
|
const ids = options.operations ?? [];
|
|
@@ -63,16 +65,14 @@ export async function materializeApiPages(configFile, apiId, options) {
|
|
|
63
65
|
const config = loaded.value;
|
|
64
66
|
const root = path.dirname(path.resolve(configFile));
|
|
65
67
|
const contentDir = await canonical(path.resolve(root, config.site?.contentDir ?? 'content'));
|
|
66
|
-
const
|
|
68
|
+
const { candidates, publication } = await apiCandidates(configFile, apiId, options);
|
|
69
|
+
const defaultDirectory = publication.product ? path.join(contentDir, 'api', publication.product, publication.version, apiId) : path.join(contentDir, 'api', apiId);
|
|
70
|
+
const directory = await canonical(options.output ? path.resolve(options.output) : defaultDirectory);
|
|
67
71
|
const relative = path.relative(contentDir, directory);
|
|
68
72
|
if (relative.startsWith('..') || path.isAbsolute(relative))
|
|
69
73
|
throw new Error(`MDX output must stay inside the content directory ${contentDir}`);
|
|
70
|
-
const { candidates } = await apiCandidates(configFile, apiId);
|
|
71
74
|
const selected = select(candidates, options);
|
|
72
|
-
const
|
|
73
|
-
if (!defaults?.channel || !defaults?.version)
|
|
74
|
-
throw new Error('API page materialization needs publication defaults');
|
|
75
|
-
const language = defaults.language ?? defaultLanguage(config);
|
|
75
|
+
const language = publication.language;
|
|
76
76
|
const existing = new Map();
|
|
77
77
|
for (const file of await pageFiles(contentDir)) {
|
|
78
78
|
const identity = pageIdentity(await readFile(file, 'utf8'), file);
|
|
@@ -86,7 +86,19 @@ export async function materializeApiPages(configFile, apiId, options) {
|
|
|
86
86
|
const skipped = [];
|
|
87
87
|
const targets = new Set();
|
|
88
88
|
for (const item of selected) {
|
|
89
|
-
const matches = (existing.get(item.reference) ?? []).filter(page =>
|
|
89
|
+
const matches = (existing.get(item.reference) ?? []).filter(page => {
|
|
90
|
+
const sourceLanguage = config.frontmatter?.enforced?.language ?? page.language ?? config.frontmatter?.defaults?.language ?? defaultLanguage(config);
|
|
91
|
+
if (page.publications)
|
|
92
|
+
return page.publications.some(member => member.product === publication.product && member.channel === publication.channel && member.version === publication.version) && sourceLanguage === language;
|
|
93
|
+
const product = config.publications.products ? config.frontmatter?.enforced?.product ?? page.product ?? config.frontmatter?.defaults?.product : undefined;
|
|
94
|
+
const coordinate = resolvePublication(config.publications, {
|
|
95
|
+
...(product ? { product } : {}),
|
|
96
|
+
channel: config.frontmatter?.enforced?.channel ?? page.channel ?? config.frontmatter?.defaults?.channel ?? config.publications?.defaults?.channel,
|
|
97
|
+
version: config.frontmatter?.enforced?.version ?? page.version ?? (product ? undefined : config.frontmatter?.defaults?.version ?? config.publications?.defaults?.version),
|
|
98
|
+
language: sourceLanguage
|
|
99
|
+
}, defaultLanguage(config));
|
|
100
|
+
return samePublication(coordinate, publication);
|
|
101
|
+
});
|
|
90
102
|
if (matches.length > 1)
|
|
91
103
|
throw new Error(`Duplicate page ID ${item.reference} in the default publication: ${matches.map(page => page.file).join(', ')}`);
|
|
92
104
|
const prior = matches[0];
|
|
@@ -108,7 +120,7 @@ export async function materializeApiPages(configFile, apiId, options) {
|
|
|
108
120
|
if (atFile !== undefined)
|
|
109
121
|
throw new Error(`${file}: target exists with another page ID; no files written`);
|
|
110
122
|
const summary = item.method === 'WEBHOOK' ? `Webhook event: ${item.route}` : `${item.method} ${item.route}`;
|
|
111
|
-
const header = YAML.stringify({ id: item.reference, title: item.title, summary, type: 'api-reference', slug: item.slug,
|
|
123
|
+
const header = YAML.stringify({ id: item.reference, title: item.title, summary, type: 'api-reference', slug: item.slug, ...publication, operations: [item.id], access: { policy: 'draft' } });
|
|
112
124
|
const body = 'This draft reference is based on its linked OpenAPI operation.\n\n[[TODO: Explain when to use this endpoint, its prerequisites, and any behavior the OpenAPI contract cannot express. Verify every claim before publishing.]]\n';
|
|
113
125
|
pending.push({ item, file, content: `---\n${header}---\n\n${body}` });
|
|
114
126
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { documentKey } from './publication-identity.js';
|
|
1
2
|
import { matchesFeatures, validateFeatureClassification } from './deployment-profile.js';
|
|
2
3
|
import { matchesContentFilter } from './content-filter.js';
|
|
3
4
|
import path from 'node:path';
|
|
@@ -10,7 +11,7 @@ import { explain } from './config.js';
|
|
|
10
11
|
import { isConfigMapping } from './compiler-config.js';
|
|
11
12
|
const generatedReferenceBody = 'This reference is generated from the OpenAPI description. It shows the operation contract; follow any related guides below for task steps and context.\n';
|
|
12
13
|
const generatedWebhookBody = 'This webhook reference is generated from the OpenAPI description. The provider sends this event to the receiver.\n';
|
|
13
|
-
const keyFor =
|
|
14
|
+
const keyFor = documentKey;
|
|
14
15
|
function validatedApiDefinitions(value) {
|
|
15
16
|
if (value === undefined)
|
|
16
17
|
return {};
|
|
@@ -24,7 +25,7 @@ function validatedApiDefinitions(value) {
|
|
|
24
25
|
if (source !== undefined && (!isConfigMapping(source) || typeof source.kind !== 'string' || typeof source.path !== 'string'))
|
|
25
26
|
throw new Error(`apis.${id}.source needs kind and path`);
|
|
26
27
|
const publications = raw.publications;
|
|
27
|
-
if (publications !== undefined && (!Array.isArray(publications) || publications.some(item => !isConfigMapping(item) || typeof item.channel !== 'string' || typeof item.version !== 'string' || !isConfigMapping(item.source) || typeof item.source.kind !== 'string' || typeof item.source.path !== 'string' || (item.discovery !== undefined && (!isConfigMapping(item.discovery) || (item.discovery.endpoint !== undefined && typeof item.discovery.endpoint !== 'string'))))))
|
|
28
|
+
if (publications !== undefined && (!Array.isArray(publications) || publications.some(item => !isConfigMapping(item) || (item.product !== undefined && typeof item.product !== 'string') || typeof item.channel !== 'string' || typeof item.version !== 'string' || !isConfigMapping(item.source) || typeof item.source.kind !== 'string' || typeof item.source.path !== 'string' || (item.discovery !== undefined && (!isConfigMapping(item.discovery) || (item.discovery.endpoint !== undefined && typeof item.discovery.endpoint !== 'string'))))))
|
|
28
29
|
throw new Error(`apis.${id}.publications needs entries with channel, version, and a local source`);
|
|
29
30
|
const operations = raw.operations;
|
|
30
31
|
if (operations !== undefined && (!Array.isArray(operations) || operations.some(item => !isConfigMapping(item) || typeof item.id !== 'string' || typeof item.reference !== 'string' || (item.sourceOperationId !== undefined && typeof item.sourceOperationId !== 'string'))))
|
|
@@ -39,6 +40,18 @@ function validatedApiDefinitions(value) {
|
|
|
39
40
|
export async function materializeApiReferences({ config, loaded, variants, docs, knownDocumentIds, knownDocumentTypes, authoredOperationIds, routeOwners, basePath, readerFilters, contentFilter, allowRouteCollisions }) {
|
|
40
41
|
const definitions = validatedApiDefinitions(config.apis);
|
|
41
42
|
for (const [id, definition] of Object.entries(definitions)) {
|
|
43
|
+
if (config.publications.products && definition.product !== undefined && (typeof definition.product !== 'string' || !config.publications.products || !Object.hasOwn(config.publications.products, definition.product)))
|
|
44
|
+
throw new Error(`API ${id}: unknown product ${definition.product}`);
|
|
45
|
+
const seenPublications = new Set();
|
|
46
|
+
for (const publication of definition.publications ?? []) {
|
|
47
|
+
const catalog = publication.product === undefined ? config.publications.versions : config.publications.products?.[publication.product]?.versions;
|
|
48
|
+
if (!catalog || !Object.hasOwn(catalog, publication.version) || !Object.hasOwn(config.publications.channels, publication.channel))
|
|
49
|
+
throw new Error(`API ${id}: unknown product publication`);
|
|
50
|
+
const key = JSON.stringify([publication.product, publication.channel, publication.version]);
|
|
51
|
+
if (seenPublications.has(key))
|
|
52
|
+
throw new Error(`API ${id}: duplicate publication source`);
|
|
53
|
+
seenPublications.add(key);
|
|
54
|
+
}
|
|
42
55
|
validateFeatureClassification(definition, loaded.deployment ? { ...loaded.deployment.context, requireClassification: false } : undefined, `API ${id}`);
|
|
43
56
|
for (const operation of definition.operations ?? [])
|
|
44
57
|
validateFeatureClassification(operation, loaded.deployment ? { ...loaded.deployment.context, requireClassification: false } : undefined, `Operation ${operation.id}`);
|
|
@@ -62,10 +75,13 @@ export async function materializeApiReferences({ config, loaded, variants, docs,
|
|
|
62
75
|
}
|
|
63
76
|
const sourceForVariant = (apiId, definition, variant) => {
|
|
64
77
|
const defaults = config.publications.defaults;
|
|
65
|
-
if (definition.source !== undefined && (!defaults?.channel || !defaults?.version))
|
|
78
|
+
if (definition.source !== undefined && (!defaults?.channel || (!defaults?.version && !((definition.product ?? defaults?.product) && config.publications.products?.[definition.product ?? defaults.product]?.defaultVersion))))
|
|
66
79
|
throw new Error(`apis.${apiId}.source needs publications.defaults with channel and version to choose its publication`);
|
|
67
|
-
const
|
|
68
|
-
const
|
|
80
|
+
const product = config.publications.products ? definition.product ?? defaults?.product : undefined;
|
|
81
|
+
const scopedVersion = product && defaults?.product === product && defaults.version && Object.hasOwn(config.publications.products[product].versions, defaults.version) ? defaults.version : undefined;
|
|
82
|
+
const defaultVersion = product ? scopedVersion ?? config.publications.products?.[product]?.defaultVersion : defaults?.version;
|
|
83
|
+
const isDefault = variant.product === product && variant.channel === defaults?.channel && variant.version === defaultVersion;
|
|
84
|
+
const publicationIndex = definition.publications?.findIndex(item => item.product === variant.product && item.channel === variant.channel && item.version === variant.version) ?? -1;
|
|
69
85
|
const source = publicationIndex >= 0 ? definition.publications?.[publicationIndex].source : (isDefault ? definition.source : undefined);
|
|
70
86
|
if (!source)
|
|
71
87
|
return undefined;
|
|
@@ -166,7 +182,7 @@ export async function materializeApiReferences({ config, loaded, variants, docs,
|
|
|
166
182
|
const classification = requirements !== undefined || shared !== undefined ? { requires: requirements, shared } : definition;
|
|
167
183
|
validateFeatureClassification(classification, loaded.deployment?.context, `${binding.file}: ${sourceOperationId} (generated reference)`);
|
|
168
184
|
}
|
|
169
|
-
if (!variants.some(item => item.channel === variant.channel && item.version === variant.version && item.language === variant.language))
|
|
185
|
+
if (!variants.some(item => item.product === variant.product && item.channel === variant.channel && item.version === variant.version && item.language === variant.language))
|
|
170
186
|
continue;
|
|
171
187
|
operationRequirements.set(keyFor(id, variant), requirements);
|
|
172
188
|
const featureSelected = matchesFeatures(requirements, loaded.deployment?.context, `${binding.file}: ${sourceOperationId}`) && matchesFeatures(definition.requires, loaded.deployment?.context, `API ${apiId}`);
|
|
@@ -183,7 +199,7 @@ export async function materializeApiReferences({ config, loaded, variants, docs,
|
|
|
183
199
|
knownDocumentTypes.set(reference, page.type);
|
|
184
200
|
if (!matchesFeatures(page.requires, loaded.deployment?.context, `${binding.file}: ${reference}`))
|
|
185
201
|
continue;
|
|
186
|
-
if (page.access?.policy !== 'public' || page.channel !== variant.channel || page.version !== variant.version || page.language !== variant.language)
|
|
202
|
+
if (page.access?.policy !== 'public' || page.channel !== variant.channel || page.version !== variant.version || page.language !== variant.language || (config.publications.products && page.product !== variant.product))
|
|
187
203
|
continue;
|
|
188
204
|
const key = keyFor(reference, variant);
|
|
189
205
|
const authored = docs.get(key);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { documentKey, publicationKey } from './publication-identity.js';
|
|
1
2
|
import { createHash } from 'node:crypto';
|
|
2
3
|
import { readFile } from 'node:fs/promises';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
import { isConfigMapping } from './compiler-config.js';
|
|
5
6
|
const digest = (value) => createHash('sha256').update(value).digest('hex');
|
|
6
|
-
const keyFor =
|
|
7
|
+
const keyFor = documentKey;
|
|
7
8
|
export async function reviewApiPublication(configFile, apiPlan, rendered, apiEmbedUses, focusedContracts, apiSources, sourceForOperation, mode) {
|
|
8
9
|
const { api, knownOperations, sourceForVariant } = apiPlan;
|
|
9
10
|
// Pin the source bytes and the API selections exposed by public pages. Authored
|
|
@@ -19,7 +20,7 @@ export async function reviewApiPublication(configFile, apiPlan, rendered, apiEmb
|
|
|
19
20
|
continue;
|
|
20
21
|
const bindings = new Map();
|
|
21
22
|
for (const { doc } of pages) {
|
|
22
|
-
const key = `${doc.variant.channel}|${doc.variant.version}`;
|
|
23
|
+
const key = doc.variant.product ? publicationKey(doc.variant) : `${doc.variant.channel}|${doc.variant.version}`;
|
|
23
24
|
if (!bindings.has(key))
|
|
24
25
|
bindings.set(key, sourceForVariant(apiId, definition, doc.variant));
|
|
25
26
|
}
|
|
@@ -35,7 +36,7 @@ export async function reviewApiPublication(configFile, apiPlan, rendered, apiEmb
|
|
|
35
36
|
}
|
|
36
37
|
const reviewedPages = pages.map(({ doc }) => ({ id: doc.frontmatter.id, url: doc.route, markdownUrl: doc.markdownRoute }));
|
|
37
38
|
const references = pages.filter(({ doc }) => doc.frontmatter.type === 'api-reference').flatMap(({ doc }) => (doc.frontmatter.operations ?? []).filter(id => knownOperations.get(id)?.apiId === apiId).map(id => ({
|
|
38
|
-
channel: doc.variant.channel, version: doc.variant.version, language: doc.variant.language,
|
|
39
|
+
...(doc.variant.product ? { product: doc.variant.product } : {}), channel: doc.variant.channel, version: doc.variant.version, language: doc.variant.language,
|
|
39
40
|
operation: sourceForOperation(id, doc.variant).sourceOperationId
|
|
40
41
|
}))).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)));
|
|
41
42
|
const embeds = apiEmbedUses.filter(use => use.api === apiId || (use.operation && knownOperations.get(use.operation)?.apiId === apiId))
|
package/dist/api-selection.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Variant } from './content.js';
|
|
1
2
|
export type ApiCandidate = {
|
|
2
3
|
operationId: string;
|
|
3
4
|
method: string;
|
|
@@ -9,12 +10,14 @@ export type ApiCandidate = {
|
|
|
9
10
|
slug: string;
|
|
10
11
|
filename: string;
|
|
11
12
|
};
|
|
12
|
-
export declare function apiCandidates(configFile: string, apiId: string): Promise<{
|
|
13
|
+
export declare function apiCandidates(configFile: string, apiId: string, selection?: Partial<Variant>): Promise<{
|
|
13
14
|
candidates: ApiCandidate[];
|
|
14
15
|
selected: Set<string>;
|
|
15
16
|
pathPrefix: string;
|
|
17
|
+
publication: Variant;
|
|
18
|
+
sourceFile: string;
|
|
16
19
|
}>;
|
|
17
|
-
export declare function selectApiReferences(configFile: string, apiId: string, outputFile: string): Promise<{
|
|
20
|
+
export declare function selectApiReferences(configFile: string, apiId: string, outputFile: string, publication?: Partial<Variant>): Promise<{
|
|
18
21
|
selected: string[];
|
|
19
22
|
total: number;
|
|
20
23
|
file: string;
|
package/dist/api-selection.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { resolvePublication } from './compiler-config.js';
|
|
2
|
+
import { defaultLanguage } from './frontmatter.js';
|
|
3
|
+
import { samePublication } from './publication-identity.js';
|
|
1
4
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
5
|
import path from 'node:path';
|
|
3
6
|
import { createInterface } from 'node:readline';
|
|
@@ -5,23 +8,27 @@ import YAML from 'yaml';
|
|
|
5
8
|
import { ApiReader } from './api.js';
|
|
6
9
|
import { generatedOperationIdentity } from './api-identity.js';
|
|
7
10
|
import { explain, loadConfig } from './config.js';
|
|
8
|
-
export async function apiCandidates(configFile, apiId) {
|
|
11
|
+
export async function apiCandidates(configFile, apiId, selection = {}) {
|
|
9
12
|
const loaded = await loadConfig(configFile);
|
|
10
13
|
const config = loaded.value;
|
|
11
14
|
const definition = config.apis?.[apiId];
|
|
12
15
|
if (!definition)
|
|
13
16
|
throw new Error(`Unknown API ${apiId}`);
|
|
14
|
-
const defaults = config.publications?.defaults;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const defaults = config.publications?.defaults ?? {};
|
|
18
|
+
const product = config.publications.products ? selection.product ?? definition.product ?? defaults.product : undefined;
|
|
19
|
+
const publication = resolvePublication(config.publications, { ...defaults, ...selection, ...(product ? { product, version: selection.version } : {}) }, defaultLanguage(config));
|
|
20
|
+
if (!config.publications.enabled?.some((item) => samePublication(resolvePublication(config.publications, item, defaultLanguage(config)), publication)))
|
|
21
|
+
throw new Error('API selection publication is not enabled; select an explicit product and release');
|
|
22
|
+
const publicationIndex = definition.publications?.findIndex((item) => item.product === publication.product && item.channel === publication.channel && item.version === publication.version) ?? -1;
|
|
23
|
+
const sourceDefault = definition.source ? resolvePublication(config.publications, { ...defaults, ...(config.publications.products && definition.product ? { product: definition.product, version: undefined } : {}) }, defaultLanguage(config)) : undefined;
|
|
24
|
+
const source = publicationIndex >= 0 ? definition.publications[publicationIndex].source : sourceDefault && publication.product === sourceDefault.product && publication.channel === sourceDefault.channel && publication.version === sourceDefault.version ? definition.source : undefined;
|
|
19
25
|
if (source?.kind !== 'file')
|
|
20
|
-
throw new Error(`API ${apiId} needs a local file source in the
|
|
26
|
+
throw new Error(`API ${apiId} needs a local file source in the selected publication`);
|
|
21
27
|
const sourceKey = publicationIndex >= 0 ? `apis.${apiId}.publications.${publicationIndex}.source.path` : `apis.${apiId}.source.path`;
|
|
22
28
|
const origin = explain(loaded, sourceKey).source.file;
|
|
23
29
|
const reader = new ApiReader();
|
|
24
|
-
const
|
|
30
|
+
const sourceFile = path.resolve(path.dirname(origin), source.path);
|
|
31
|
+
const loadedSpec = await reader.load(sourceFile);
|
|
25
32
|
const spec = loadedSpec.value;
|
|
26
33
|
const explicit = new Map((definition.operations ?? []).map((entry) => [entry.sourceOperationId, entry]));
|
|
27
34
|
const generate = definition.generateReferences;
|
|
@@ -47,10 +54,10 @@ export async function apiCandidates(configFile, apiId) {
|
|
|
47
54
|
}
|
|
48
55
|
}
|
|
49
56
|
const selected = new Set(generate && generate !== true && Array.isArray(generate.include) ? generate.include : generate && generate !== true && Array.isArray(generate.exclude) ? candidates.filter(item => !generate.exclude.includes(item.operationId)).map(item => item.operationId) : generate ? candidates.map(item => item.operationId) : []);
|
|
50
|
-
return { candidates, selected, pathPrefix };
|
|
57
|
+
return { candidates, selected, pathPrefix, publication, sourceFile };
|
|
51
58
|
}
|
|
52
|
-
export async function selectApiReferences(configFile, apiId, outputFile) {
|
|
53
|
-
const { candidates, selected: current, pathPrefix } = await apiCandidates(configFile, apiId);
|
|
59
|
+
export async function selectApiReferences(configFile, apiId, outputFile, publication = {}) {
|
|
60
|
+
const { candidates, selected: current, pathPrefix } = await apiCandidates(configFile, apiId, publication);
|
|
54
61
|
const chosen = [];
|
|
55
62
|
const reader = createInterface({ input: process.stdin, output: process.stdout });
|
|
56
63
|
const answers = reader[Symbol.asyncIterator]();
|
package/dist/artifact-bundle.js
CHANGED
|
@@ -16,6 +16,7 @@ import { defaultShareSvg, faviconSvg, fillShareTemplate, renderPng, touchIconSvg
|
|
|
16
16
|
import { paletteCatalog, paletteCss, presetCatalog, resolvePalette } from './palettes.js';
|
|
17
17
|
import { heading, link, list, paragraph, renderMarkdown, root, searchIndex, shareCardText, text } from './content.js';
|
|
18
18
|
import { outputUrl } from './representation-tree.js';
|
|
19
|
+
const publicationLabel = (value) => [...(value.product === undefined ? [] : [value.product]), value.channel, value.version, value.language].join('/');
|
|
19
20
|
export async function assembleArtifacts(input) {
|
|
20
21
|
const { base, basePath, publicPath, canonical, siteOrigin, manifest, provenanceRecord, rendered, sitemaps, diagramAssets, heroImages, focusedContracts, styleFiles, themeStyleFile, generatedPaletteCss, generatedBadgeCss, search, synonyms, config, builtInSearchProvider, customReaderModule, analyticsModule, mcpAnalyticsModule, previewFiles, assetDirectory, themeSwitcher, themeDirectory, palette, colorMode, generatedFontsCss, fontFiles, fonts, shareImages, shareFor, themePreset, shareFontFiles, shareCache, faviconFile, faviconRoute, customStyleFile, scriptFiles, componentAssets, redirects, apiPublications, api, catalog, headers, documentRoutes, readerFilters, apiSources } = input;
|
|
21
22
|
const artifacts = new Map();
|
|
@@ -198,7 +199,7 @@ export async function assembleArtifacts(input) {
|
|
|
198
199
|
const discoveryEntry = ({ doc }, includeType = false) => ({ title: `${fictionalDocument(doc, llms) ? 'Fictional example: ' : ''}${doc.frontmatter.title}`, url: doc.markdownRoute, summary: `${includeType ? `${doc.frontmatter.type} — ` : ''}${fictionalDocument(doc, llms) ? 'Demonstration only; not a live API. ' : ''}${doc.frontmatter.summary}` });
|
|
199
200
|
const tabs = manifest.navigationTabs ?? [];
|
|
200
201
|
const tabLinks = tabs.length ? '\n\n## Navigation sections\n\n' + discoveryLinks(tabs.map(tab => ({
|
|
201
|
-
title: `${tab.label} (${tab.variant
|
|
202
|
+
title: `${tab.label} (${publicationLabel(tab.variant)})`, url: tab.indexUrl,
|
|
202
203
|
summary: `Section ID: ${tab.id}. Scoped page index.`
|
|
203
204
|
}))) : '';
|
|
204
205
|
const groups = new Map();
|
|
@@ -237,7 +238,7 @@ export async function assembleArtifacts(input) {
|
|
|
237
238
|
}))])).trimEnd();
|
|
238
239
|
const discovery = [renderMarkdown(root([heading(1, String(config.site.title))])).trimEnd(), '', '> Documentation and API contracts published by this site.', ...(readerFilters ? ['', 'Reader views affect the interactive HTML only. This index lists every published page, and each Markdown page includes all reader-marked sections with readable labels. The document manifest records configured reader facets and each page’s marks.'] : []), ...(llms.fictionalPrefixes.length ? ['', 'Entries labeled Fictional example demonstrate documentation features. Their operations and API contracts do not describe a live service.'] : []), '', '## Discovery', '', discoveryLinks([{ title: 'Compact documentation index', url: publicPath('/llms.min.txt'), summary: 'Start here: full-page Markdown links and author-declared standalone section links with sizes and full-page fallbacks. No tools or JSON processing required.' }, ...(search.index ? [{ title: 'Compact heading index', url: publicPath('/search-index.min.json'), summary: 'Page summaries, headings, and smaller section Markdown URLs with sizes; no article text.' }] : []), { title: 'Resource response headers', url: publicPath('/resource-headers.json'), summary: 'Published hosting metadata: content types and representation Link headers for host adapters.' }, { title: 'Document sync snapshot', url: publicPath('/documents.sync.json'), summary: 'Save and compare compact page signatures between builds; build-info.json identifies the current build.' }, { title: 'Structured document manifest', url: publicPath('/documents.json'), summary: 'Stable page IDs, HTML and Markdown URLs, and content digests.' }, ...(sitemaps.size ? [{ title: 'XML sitemap', url: publicPath('/sitemap.xml'), summary: 'Canonical URLs for indexable pages.' }] : []), ...(search.index ? [{ title: 'Lexical search index', url: publicPath('/search-index.json'), summary: 'Downloadable page titles, summaries, headings, and bounded HTML article text. It is an index file, not a query endpoint.' }] : []), ...(catalog ? [{ title: 'API catalog', url: publicPath('/.well-known/api-catalog'), summary: '' }] : [])]), ...sections, ...(apiSources.some(item => llms.format === 'flat' || !fictionalApis.has(item.apiId)) ? ['', '## API contracts', '', discoveryLinks(apiSources.filter(item => llms.format === 'flat' || !fictionalApis.has(item.apiId)).map(item => ({ title: `${fictionalApis.has(item.apiId) ? 'Fictional example: ' : ''}${item.apiId} ${item.channel} ${item.version} OpenAPI`, url: item.sourceUrl, summary: `Pinned ${item.mediaType} source used for the reference.` })))] : []), ...(llms.format === 'grouped' && optional.length ? ['', '## Optional', '', optionalList] : [])].join('\n') + '\n';
|
|
239
240
|
addPublicArtifact('/llms.txt', discovery + tabLinks + (tabLinks ? '\n' : ''));
|
|
240
|
-
const publications = [...new Set(rendered.map(page => `${page.doc.variant
|
|
241
|
+
const publications = [...new Set(rendered.map(page => `${publicationLabel(page.doc.variant)}`))].sort();
|
|
241
242
|
const pageSizes = new Map(manifest.documents.map(page => [page.markdownUrl, page]));
|
|
242
243
|
const compactSummary = (page) => {
|
|
243
244
|
const size = pageSizes.get(page.doc.markdownRoute);
|
|
@@ -245,21 +246,23 @@ export async function assembleArtifacts(input) {
|
|
|
245
246
|
};
|
|
246
247
|
const compactEntries = [...rendered].sort((a, b) => a.doc.route.localeCompare(b.doc.route)).map(page => {
|
|
247
248
|
const entry = discoveryEntry(page);
|
|
248
|
-
const publication = `${page.doc.variant
|
|
249
|
+
const publication = `${publicationLabel(page.doc.variant)}`;
|
|
249
250
|
const approved = (page.sections ?? []).filter(section => section.standalone === true);
|
|
250
251
|
return [paragraph(link(entry.url, `${page.doc.frontmatter.id} · ${entry.title}${publications.length > 1 ? ` (${publication})` : ''}`), text(`: ${compactSummary(page)}`)),
|
|
251
252
|
...(approved.length ? [list(approved.map(section => [paragraph(text('Standalone section: '), link(section.markdownUrl, section.title), text(` — ${section.markdownTokens} tokens (${section.markdownTokenEncoding}), ${section.markdownBytes} UTF-8 bytes. `), link(entry.url, 'Full page'), text('.'))]))] : [])];
|
|
252
253
|
});
|
|
253
254
|
const compactList = renderMarkdown(root([list(compactEntries)])).trimEnd();
|
|
255
|
+
const productGuidance = configField(config.publications, 'products') ? [paragraph(text('Products have independent versions. Discover published product/channel/version/language coordinates with MCP get_publications, or documents.json. Keep the exact publication returned by search when reading pages; cross-product links must name their target explicitly. This edition contains only its selected content.'))] : [];
|
|
254
256
|
const compactIntro = renderMarkdown(root([
|
|
255
257
|
heading(1, String(config.site.title)),
|
|
258
|
+
...productGuidance,
|
|
256
259
|
paragraph(text(`Full-page token counts use ${markdownTokenEncoding}. Fetch a matching full Markdown page by default. Use a listed standalone section only for its stated topic; for setup, broader questions, or missing context, follow Full page. Standalone is an author declaration, not proof of completeness.`)),
|
|
257
|
-
paragraph(text(publications.length === 1 ? `Publication (channel/version/language): ${publications[0]}.` :
|
|
260
|
+
paragraph(text(publications.length === 1 ? `Publication (${configField(config.publications, 'products') ? 'product/' : ''}channel/version/language): ${publications[0]}.` : `Choose the matching ${configField(config.publications, 'products') ? 'product/' : ''}channel/version/language shown on each page; keep that publication when following links.`)),
|
|
258
261
|
paragraph(link(publicPath('/llms.txt'), 'Full documentation index'), text('. Full manifests and search indexes are optional. A missing match does not establish that a feature exists or does not exist.')),
|
|
259
262
|
])).trimEnd();
|
|
260
263
|
const topicEntries = rendered.flatMap(page => {
|
|
261
264
|
const entry = discoveryEntry(page);
|
|
262
|
-
const publication = `${page.doc.variant
|
|
265
|
+
const publication = `${publicationLabel(page.doc.variant)}`;
|
|
263
266
|
const area = Array.isArray(page.doc.frontmatter.area) ? page.doc.frontmatter.area[0] : page.doc.frontmatter.area;
|
|
264
267
|
const topic = JSON.stringify([publication, area ?? page.doc.frontmatter.type]);
|
|
265
268
|
const topicLabel = `${(area && manifest.taxonomy?.areas[area]?.label) || area || page.doc.frontmatter.type}${publications.length > 1 ? ` (${publication})` : ''}`;
|
|
@@ -283,7 +286,7 @@ export async function assembleArtifacts(input) {
|
|
|
283
286
|
const members = manifest.documents.filter(doc => doc.navigationTab?.indexUrl === tab.indexUrl);
|
|
284
287
|
const intro = renderMarkdown(root([
|
|
285
288
|
heading(1, tab.label),
|
|
286
|
-
paragraph(text(`Full-page token counts use ${markdownTokenEncoding}. Navigation section ID: ${tab.id}. Publication: ${tab.variant
|
|
289
|
+
paragraph(text(`Full-page token counts use ${markdownTokenEncoding}. Navigation section ID: ${tab.id}. Publication: ${publicationLabel(tab.variant)}.`)),
|
|
287
290
|
paragraph(link(outputUrl(publicPath('/llms.min.txt'), '/', siteOrigin, 'markdown', documentRoutes, basePath), 'All sections and published pages'), text('. This index covers this section only; shared and unlisted pages remain reachable through the global index. Reader views do not remove pages from this index.')),
|
|
288
291
|
])).trimEnd();
|
|
289
292
|
const memberUrls = new Set(members.flatMap(doc => [doc.markdownUrl, ...doc.sections.filter(section => section.standalone === true).map(section => section.markdownUrl)]));
|
package/dist/ask-runtime.d.ts
CHANGED
package/dist/ask-runtime.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parsePublicationKey } from './publication-identity.js';
|
|
1
2
|
import { readFile } from 'node:fs/promises';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { AnswerCache } from './answer-cache.js';
|
|
@@ -48,9 +49,13 @@ export async function prepareAskRuntime(input) {
|
|
|
48
49
|
const embeddings = await readEmbeddings(input.siteDirectory);
|
|
49
50
|
const retriever = new Retriever(chunks, embeddings);
|
|
50
51
|
const variants = retriever.variants();
|
|
51
|
-
const
|
|
52
|
+
const matchingVariants = variants.filter(key => {
|
|
53
|
+
const coordinate = parsePublicationKey(key);
|
|
54
|
+
return ['product', 'channel', 'version', 'language'].every(field => input[field] === undefined || coordinate[field] === input[field]);
|
|
55
|
+
});
|
|
56
|
+
const variant = matchingVariants.length === 1 ? matchingVariants[0] : undefined;
|
|
52
57
|
if (!variant)
|
|
53
|
-
throw new Error(`
|
|
58
|
+
throw new Error(`Select one publication from (${matchingVariants.join(', ')}); pass --product where applicable, --channel, --version, and --language`);
|
|
54
59
|
let embedQuery;
|
|
55
60
|
let embedTexts;
|
|
56
61
|
let embedding;
|
package/dist/authored-change.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { documentKey } from './publication-identity.js';
|
|
1
2
|
import { link, list, paragraph, root, text } from './semantic-markdown.js';
|
|
2
3
|
export const changeKinds = ['editorial', 'procedure', 'behavior', 'breaking'];
|
|
3
4
|
const labels = { editorial: 'Editorial correction', procedure: 'Procedure change', behavior: 'Behavior change', breaking: 'Breaking change' };
|
|
@@ -26,7 +27,7 @@ export function resolveAuthoredChange(doc, docs) {
|
|
|
26
27
|
if (!value)
|
|
27
28
|
return;
|
|
28
29
|
const target = (id, field) => {
|
|
29
|
-
const found = docs.get(
|
|
30
|
+
const found = docs.get(documentKey(id, doc.variant));
|
|
30
31
|
if (id === doc.frontmatter.id || !found || found.frontmatter.access?.policy !== 'public')
|
|
31
32
|
throw new Error(`${doc.file}: change.${field} must name another public document in the same publication: ${id}`);
|
|
32
33
|
return { id, title: found.frontmatter.title, url: found.route, markdownUrl: found.markdownRoute };
|
|
@@ -119,7 +119,7 @@ export async function inspectAuthoringProject(configFile, options = {}) {
|
|
|
119
119
|
const doc = await readDocument(file, value.frontmatter, undefined, raw);
|
|
120
120
|
const fm = doc.frontmatter;
|
|
121
121
|
pages.push({ id: fm.id, file: relative(file), digest: digest(raw), title: fm.title, summary: fm.summary, type: fm.type, slug: fm.slug,
|
|
122
|
-
publication: { channel: fm.channel ?? value.publications?.defaults?.channel, version: fm.version ?? value.publications?.defaults?.version, language: fm.language ?? defaultLanguage(value), ...(fm.publications ? { publications: fm.publications } : {}) },
|
|
122
|
+
publication: { ...(value.publications?.products && fm.product ? { product: fm.product } : {}), channel: fm.channel ?? value.publications?.defaults?.channel, version: value.publications?.products && fm.product && doc.sourceFrontmatter.version === undefined && value.frontmatter?.enforced?.version === undefined ? value.publications.products[fm.product]?.defaultVersion : fm.version ?? value.publications?.defaults?.version, language: fm.language ?? defaultLanguage(value), ...(fm.publications ? { publications: fm.publications } : {}) },
|
|
123
123
|
access: fm.access ?? null, aliases: [] });
|
|
124
124
|
bodies.set(relative(file), doc.body);
|
|
125
125
|
findings.push(...authoringHints(doc.body, relative(file)).map(({ location, ...hint }) => hint));
|
package/dist/cards.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { samePublication } from './publication-identity.js';
|
|
1
2
|
import { cardIcon, validateCardIcon } from './icons.js';
|
|
2
3
|
import { surfaceText } from './surface-text.js';
|
|
3
4
|
import { heading, link, list, paragraph, text } from './content.js';
|
|
@@ -7,7 +8,7 @@ const compare = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
|
7
8
|
const relationLabels = { prerequisite: 'Read first', 'next-step': 'Next steps', reference: 'Reference while working', advanced: 'Go deeper', 'see-also': 'Related topics', 'not-confused-with': 'Often confused with' };
|
|
8
9
|
const relationTypes = new Set(Object.keys(relationLabels));
|
|
9
10
|
const symmetric = (type) => type === 'see-also' || type === 'not-confused-with';
|
|
10
|
-
const sameVariant = (a, b) => a
|
|
11
|
+
const sameVariant = (a, b) => samePublication(a, b);
|
|
11
12
|
export function validateCardMetadata(value, file) {
|
|
12
13
|
if (value === undefined)
|
|
13
14
|
return;
|
package/dist/cli-discovery.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const docsHelp = "Usage: shoalrun docs <command>\n\nRead bundled references (no project or provider key required):\n search <query> [--json]\n read <document-id> [--json]\n\nInspect a project:\n project [--config FILE] [--profile FILE] [--section pages|guidance|configuration|navigation|relationships|templates|findings]\n source FILE [--config FILE] [--profile FILE]\n context <document-id> [--config FILE]\n\nValidate and preview edits:\n baseline --out FILE [--config FILE] [--profile FILE]\n validate (--baseline FILE | --file FILE | --id ID) [--config FILE] [--profile FILE]\n validation-status REPORT\n review REPORT [--format json|markdown]\n preview REPORT [--port PORT]\n\nOther authoring tools: changes, plan, apply, mcp.\nDiscover packaged agent guidance with shoalrun skills list.\n";
|
|
1
|
+
export declare const docsHelp = "Usage: shoalrun docs <command>\n\nRead bundled references (no project or provider key required):\n search <query> [--json]\n read <document-id> [--json]\n outline <document-id> [--json]\n section <document-id> <section-id> [--json]\n\nSearch and reads accept --site DIRECTORY, --max-tokens N, and publication\nselectors --product P --channel C --version V --language L.\n\nInspect a project:\n project [--config FILE] [--profile FILE] [--section pages|guidance|configuration|navigation|relationships|templates|findings]\n source FILE [--config FILE] [--profile FILE]\n context <document-id> [--config FILE]\n\nValidate and preview edits:\n baseline --out FILE [--config FILE] [--profile FILE]\n validate (--baseline FILE | --file FILE | --id ID) [--config FILE] [--profile FILE]\n validation-status REPORT\n review REPORT [--format json|markdown]\n preview REPORT [--port PORT]\n\nOther authoring tools: changes, plan, apply, mcp.\nDiscover packaged agent guidance with shoalrun skills list.\n";
|
|
2
2
|
export declare const skillsHelp = "Usage: shoalrun skills list [--json]\n shoalrun skills read <name> [--json]\n\nList the names, descriptions and local paths of packaged skills, or read a skill.\nThese commands do not install skills or require a project or provider key.\n";
|
|
3
|
-
export declare const cliHelp = "Usage: shoalrun <command>\n\nStart and build:\n init [directory] [--starter minimal|api-docs|showcase]\n build [config] [output] [--profile FILE]\n export [config] --out DIRECTORY [--target NAME] [--profile FILE]\n dev [config] [output] [--port PORT]\n serve <site-directory> [--host HOST] [--port PORT]\n check [config] [--json]\n audit [config]\n scaffold <template> -n <target> [--config FILE]\n\nAgent guidance and offline documentation:\n skills list [--json]\n skills read <name> [--json]\n docs search <query> [--json]\n docs read <document-id> [--json]\n docs project [--config FILE] [--profile FILE]\n docs baseline --out FILE [--config FILE] [--profile FILE]\n docs validate (--baseline FILE | --file FILE | --id ID) [--config FILE] [--profile FILE]\n docs review REPORT [--format json|markdown]\n docs preview REPORT [--port PORT]\n\nOther commands: config, api, operation, ingredient, recipe, search, index,\nask, answers, ask-log, chat, eval, vercel.\nRun shoalrun docs --help or shoalrun skills --help for discovery commands.\n";
|
|
3
|
+
export declare const cliHelp = "Usage: shoalrun <command>\n\nStart and build:\n init [directory] [--starter minimal|api-docs|showcase]\n build [config] [output] [--profile FILE]\n export [config] --out DIRECTORY [--target NAME] [--profile FILE]\n dev [config] [output] [--profile FILE] [--port PORT]\n serve <site-directory> [--host HOST] [--port PORT]\n check [config] [--json]\n audit [config]\n scaffold <template> -n <target> [--config FILE] [--product P]\n\nAgent guidance and offline documentation:\n skills list [--json]\n skills read <name> [--json]\n docs search <query> [--site DIRECTORY] [--product P] [--json]\n docs read <document-id> [--site DIRECTORY] [--product P] [--json]\n docs project [--config FILE] [--profile FILE]\n docs baseline --out FILE [--config FILE] [--profile FILE]\n docs validate (--baseline FILE | --file FILE | --id ID) [--config FILE] [--profile FILE]\n docs review REPORT [--format json|markdown]\n docs preview REPORT [--port PORT]\n\nOther commands: config, api, operation, ingredient, recipe, search, index,\nask, answers, ask-log, chat, eval, vercel.\nRun shoalrun docs --help or shoalrun skills --help for discovery commands.\n";
|
|
4
4
|
export declare function runSkillsCommand(args: string[]): Promise<string>;
|
package/dist/cli-discovery.js
CHANGED
|
@@ -7,6 +7,11 @@ export const docsHelp = `Usage: shoalrun docs <command>
|
|
|
7
7
|
Read bundled references (no project or provider key required):
|
|
8
8
|
search <query> [--json]
|
|
9
9
|
read <document-id> [--json]
|
|
10
|
+
outline <document-id> [--json]
|
|
11
|
+
section <document-id> <section-id> [--json]
|
|
12
|
+
|
|
13
|
+
Search and reads accept --site DIRECTORY, --max-tokens N, and publication
|
|
14
|
+
selectors --product P --channel C --version V --language L.
|
|
10
15
|
|
|
11
16
|
Inspect a project:
|
|
12
17
|
project [--config FILE] [--profile FILE] [--section pages|guidance|configuration|navigation|relationships|templates|findings]
|
|
@@ -35,17 +40,17 @@ Start and build:
|
|
|
35
40
|
init [directory] [--starter minimal|api-docs|showcase]
|
|
36
41
|
build [config] [output] [--profile FILE]
|
|
37
42
|
export [config] --out DIRECTORY [--target NAME] [--profile FILE]
|
|
38
|
-
dev [config] [output] [--port PORT]
|
|
43
|
+
dev [config] [output] [--profile FILE] [--port PORT]
|
|
39
44
|
serve <site-directory> [--host HOST] [--port PORT]
|
|
40
45
|
check [config] [--json]
|
|
41
46
|
audit [config]
|
|
42
|
-
scaffold <template> -n <target> [--config FILE]
|
|
47
|
+
scaffold <template> -n <target> [--config FILE] [--product P]
|
|
43
48
|
|
|
44
49
|
Agent guidance and offline documentation:
|
|
45
50
|
skills list [--json]
|
|
46
51
|
skills read <name> [--json]
|
|
47
|
-
docs search <query> [--json]
|
|
48
|
-
docs read <document-id> [--json]
|
|
52
|
+
docs search <query> [--site DIRECTORY] [--product P] [--json]
|
|
53
|
+
docs read <document-id> [--site DIRECTORY] [--product P] [--json]
|
|
49
54
|
docs project [--config FILE] [--profile FILE]
|
|
50
55
|
docs baseline --out FILE [--config FILE] [--profile FILE]
|
|
51
56
|
docs validate (--baseline FILE | --file FILE | --id ID) [--config FILE] [--profile FILE]
|