@shoalrun/cli 0.1.0-alpha.16 → 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 +40 -0
- package/DEPLOYMENT-PROFILES.md +96 -5
- package/README.md +59 -3
- 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 +59 -16
- 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 +14 -12
- 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 +9 -9
- package/agent-docs/author/recipes.sections/how-agents-use-this.md +3 -3
- package/agent-docs/author/recipes.sections/one-example-from-shoalrun.md +3 -3
- package/agent-docs/author/recipes.sections/related-reading.md +2 -2
- package/agent-docs/author/recipes.sections/try-a-complete-workflow.md +3 -3
- package/agent-docs/author/recipes.sections/use-recipes-for-task-oriented-how-tos.md +4 -4
- package/agent-docs/author/recipes.sections/what-changing-an-ingredient-updates.md +3 -3
- package/agent-docs/author/recipes.sections/what-each-file-does.md +2 -2
- package/agent-docs/author/recipes.sections/what-happens-and-when.md +3 -3
- 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 +82 -29
- package/agent-docs/author/search.sections/agent-and-mcp-search-scope.md +52 -0
- package/agent-docs/author/search.sections/choose-a-provider.md +8 -7
- 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 +66 -0
- 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 +31 -27
- package/agent-docs/chat/passage-index.sections/build-the-index.md +3 -3
- package/agent-docs/chat/passage-index.sections/embed-passages.md +4 -4
- package/agent-docs/chat/passage-index.sections/how-the-default-chunker-splits-a-page.md +3 -3
- package/agent-docs/chat/passage-index.sections/limits.md +3 -3
- package/agent-docs/chat/passage-index.sections/passage-ids-and-links.md +14 -10
- package/agent-docs/chat/passage-index.sections/related-reading.md +3 -3
- package/agent-docs/chat/passage-index.sections/what-a-passage-contains.md +19 -19
- 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 +14 -11
- package/agent-docs/documents.json +2445 -1942
- 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 +3 -3
- package/agent-docs/recipes/refresh-agent-docs.md +4 -4
- package/agent-docs/recipes/send-welcome-email.md +15 -15
- 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/ai-directory.d.ts +1 -0
- package/dist/ai-directory.js +12 -0
- package/dist/answer-cards.js +1 -1
- 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-function.d.ts +4 -18
- package/dist/ask-function.js +12 -71
- package/dist/ask-runtime.d.ts +46 -0
- package/dist/ask-runtime.js +101 -0
- package/dist/ask-setup.d.ts +3 -42
- package/dist/ask-setup.js +5 -93
- 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/embeddings.d.ts +1 -1
- package/dist/embeddings.js +1 -1
- package/dist/freshness.js +2 -2
- package/dist/frontmatter.js +13 -7
- package/dist/function-package.js +5 -0
- package/dist/function-runtime.d.ts +24 -0
- package/dist/function-runtime.js +45 -0
- package/dist/index-build.d.ts +2 -2
- package/dist/index-build.js +5 -13
- 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/retrieval-runtime.d.ts +5 -0
- package/dist/retrieval-runtime.js +21 -0
- package/dist/scaffold.d.ts +7 -4
- package/dist/scaffold.js +16 -16
- package/dist/search-function.d.ts +2 -0
- package/dist/search-function.js +30 -0
- package/dist/search-handler.js +2 -2
- package/dist/search-identifier-core.d.ts +4 -0
- package/dist/search-identifier-core.js +30 -0
- package/dist/search-identifier.d.ts +3 -3
- package/dist/search-identifier.js +7 -30
- package/dist/search-literal.js +1 -1
- package/dist/search-query.d.ts +4 -10
- package/dist/search-query.js +10 -9
- package/dist/search-results.js +1 -1
- package/dist/search-snippet.d.ts +1 -1
- package/dist/search-snippet.js +2 -14
- package/dist/search-text.d.ts +1 -0
- package/dist/search-text.js +14 -0
- 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 +11 -3
- 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
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { parsePublicationKey } from './publication-identity.js';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { AnswerCache } from './answer-cache.js';
|
|
5
|
+
import { CardIndex, readCards } from './answer-cards.js';
|
|
6
|
+
import { chatProviderConfig, chatRoutes, validateChat } from './chat-config.js';
|
|
7
|
+
import { createChatProvider, fallbackChat } from './chat.js';
|
|
8
|
+
import { validateReaderFilters, validateReaderSelection } from './reader-filters.js';
|
|
9
|
+
import { createProvider, readEmbeddings } from './embeddings.js';
|
|
10
|
+
import { DailyBudget, memoryBudgetStore } from './budget.js';
|
|
11
|
+
import { envBudgetStore } from './budget-store.js';
|
|
12
|
+
import { jevAvailable, jevEndpoint } from './jev.js';
|
|
13
|
+
import { queryProviderConfig, validateRetrieval } from './retrieval-config.js';
|
|
14
|
+
import { Retriever } from './retrieval.js';
|
|
15
|
+
// `--reader-view audience=authors,maintainers`, repeatable for more than one filter.
|
|
16
|
+
export function parseReaderView(specs) {
|
|
17
|
+
if (!specs.length)
|
|
18
|
+
return undefined;
|
|
19
|
+
const selection = {};
|
|
20
|
+
for (const spec of specs) {
|
|
21
|
+
const match = /^([a-z][a-z0-9-]*)=(.+)$/.exec(spec);
|
|
22
|
+
if (!match)
|
|
23
|
+
throw new Error(`--reader-view needs facet=choice[,choice], such as audience=authors; got ${JSON.stringify(spec)}`);
|
|
24
|
+
if (selection[match[1]])
|
|
25
|
+
throw new Error(`--reader-view names ${match[1]} twice`);
|
|
26
|
+
selection[match[1]] = match[2].split(',').map(choice => choice.trim()).filter(Boolean);
|
|
27
|
+
}
|
|
28
|
+
return selection;
|
|
29
|
+
}
|
|
30
|
+
// Everything `shoalrun ask` and the answer eval share: read the project's chat and retrieval settings, load the passages and any
|
|
31
|
+
// vectors, and wire up the optional layers. A layer that isn't configured is left out, and one that is configured but can't run
|
|
32
|
+
// (Jev without a key) is left out with a note.
|
|
33
|
+
export async function prepareAskRuntime(input) {
|
|
34
|
+
const settings = input.settings;
|
|
35
|
+
const readerFilters = validateReaderFilters(settings.readerFilters);
|
|
36
|
+
const chatConfig = validateChat(settings.chat, readerFilters);
|
|
37
|
+
const retrieval = validateRetrieval(settings.retrieval);
|
|
38
|
+
// --model replaces the main model only. Fallback and escalation models still inherit the config's settings.
|
|
39
|
+
const mainConfig = chatProviderConfig(chatConfig, { model: input.model });
|
|
40
|
+
const routes = chatRoutes(chatConfig, chatProviderConfig(chatConfig));
|
|
41
|
+
const chat = fallbackChat([createChatProvider(mainConfig), ...routes.fallbacks.map(createChatProvider)]);
|
|
42
|
+
let chunks;
|
|
43
|
+
try {
|
|
44
|
+
chunks = JSON.parse(await readFile(path.join(input.siteDirectory, 'ai', 'chunks.json'), 'utf8'));
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw error.code === 'ENOENT' ? new Error(`No ai/chunks.json in ${input.siteDirectory}; run shoalrun index first`) : error;
|
|
48
|
+
}
|
|
49
|
+
const embeddings = await readEmbeddings(input.siteDirectory);
|
|
50
|
+
const retriever = new Retriever(chunks, embeddings);
|
|
51
|
+
const variants = retriever.variants();
|
|
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;
|
|
57
|
+
if (!variant)
|
|
58
|
+
throw new Error(`Select one publication from (${matchingVariants.join(', ')}); pass --product where applicable, --channel, --version, and --language`);
|
|
59
|
+
let embedQuery;
|
|
60
|
+
let embedTexts;
|
|
61
|
+
let embedding;
|
|
62
|
+
if (embeddings) {
|
|
63
|
+
const queryProvider = createProvider(queryProviderConfig(retrieval, embeddings.meta));
|
|
64
|
+
if (queryProvider.space !== embeddings.meta.space || (embeddings.meta.backend && queryProvider.backend !== embeddings.meta.backend))
|
|
65
|
+
throw new Error(`${queryProvider.model} is not in the embedding space or backend of ${embeddings.meta.model}; set retrieval.embeddings.queryModel and baseUrl to compatible values`);
|
|
66
|
+
embedQuery = async (text, signal) => (await queryProvider.embed([text], 'query', signal))[0];
|
|
67
|
+
embedTexts = texts => queryProvider.embed(texts, 'query');
|
|
68
|
+
embedding = { provider: queryProvider.name, model: queryProvider.model, space: queryProvider.space, dimension: queryProvider.dimension };
|
|
69
|
+
}
|
|
70
|
+
// A reader view on the command line replaces the config's, so one run can answer for a different audience.
|
|
71
|
+
if (input.readerView && !readerFilters)
|
|
72
|
+
throw new Error('--reader-view needs readerFilters.facets in the site config');
|
|
73
|
+
const readerSelection = input.readerView ? validateReaderSelection(input.readerView, readerFilters, '--reader-view') : chatConfig?.readerView;
|
|
74
|
+
const notes = [];
|
|
75
|
+
const rerank = Boolean(chatConfig?.rerank) && !input.noRerank;
|
|
76
|
+
const scoring = chatConfig?.rerank;
|
|
77
|
+
const scorer = { ...(scoring?.endpoint ? { endpoint: jevEndpoint(scoring.endpoint) } : {}), ...(scoring?.model ? { model: scoring.model } : {}), ...(scoring?.keyEnv ? { keyEnv: scoring.keyEnv } : {}), ...(scoring?.stateFormat ? { stateFormat: scoring.stateFormat } : {}), ...(input.jevCacheDir ? { cacheDir: input.jevCacheDir } : {}) };
|
|
78
|
+
const scoringReady = jevAvailable(scoring?.keyEnv);
|
|
79
|
+
// A scorer that is configured but has no key counts as down, not as absent: it is what keeps off-topic questions from the model.
|
|
80
|
+
if (rerank && !scoringReady)
|
|
81
|
+
notes.push(`The relevance scorer has no key: set ${scoring?.keyEnv ?? 'JEV_API_KEY'}. Until then it counts as down, so ${scoring?.onError === 'answer' ? 'the model answers without the gate and the claim check' : 'questions get the closest pages and no model call'}`);
|
|
82
|
+
// Answer cards need semantic search and Jev. A configured but missing card file is a note, not an error, so the chat still answers.
|
|
83
|
+
let cards;
|
|
84
|
+
if (chatConfig?.cards && !input.noCards && rerank && scoringReady) {
|
|
85
|
+
const file = await readCards(input.siteDirectory);
|
|
86
|
+
if (!file)
|
|
87
|
+
notes.push('chat.cards is set but there is no ai/answers.json; run shoalrun answers to make it');
|
|
88
|
+
else if (!embedding || file.embedding.space !== embedding.space || file.embedding.dimension !== embedding.dimension)
|
|
89
|
+
notes.push('The answer cards were made with a different embedding model, so they are not used; run shoalrun answers again');
|
|
90
|
+
else
|
|
91
|
+
cards = { index: new CardIndex(file), threshold: chatConfig.cards.threshold, confirm: chatConfig.cards.confirm, jev: { ...scorer, maxCalls: 1 } };
|
|
92
|
+
}
|
|
93
|
+
// The shared store is for a hosted function. A local run keeps its counters in memory, so it never needs the store's keys.
|
|
94
|
+
const store = input.sharedStore && chatConfig?.budget?.store ? envBudgetStore(chatConfig.budget.store) : memoryBudgetStore();
|
|
95
|
+
const reported = new Set();
|
|
96
|
+
const onBudgetError = (error) => { if (!reported.has(error.message)) {
|
|
97
|
+
reported.add(error.message);
|
|
98
|
+
process.stderr.write(`Budget: ${error.message}. Questions get the closest pages, with no model call, until it works.\n`);
|
|
99
|
+
} };
|
|
100
|
+
return { ...(chatConfig?.budget ? { budget: new DailyBudget(store, chatConfig.budget, Date.now, onBudgetError), budgetStore: store } : {}), chat, notes, embedTexts, embedding, options: { ...(scoring?.onError ? { onScorerError: scoring.onError } : {}), retriever, chat, variant, readerSelection, embedQuery, passages: input.passages ?? chatConfig?.passages, gate: chatConfig?.gate, ...(input.maxTokens ? { maxTokens: input.maxTokens } : {}), ...(rerank ? { jev: { ...scorer, top: 24, maxCalls: 2 } } : {}), ...(cards ? { cards } : {}), ...(input.cache && chatConfig?.cache ? { cache: new AnswerCache({ maxEntries: chatConfig.cache.maxEntries, ttlMs: chatConfig.cache.ttlMinutes * 60_000 }) } : {}), ...(routes.escalate && !input.noEscalate ? { escalate: { chat: createChatProvider(routes.escalate.config), when: routes.escalate.when } } : {}), ...(rerank && scoringReady && !input.noDirect && (input.direct || chatConfig?.direct) ? { direct: { threshold: input.direct?.threshold ?? chatConfig.direct.threshold, maxChars: input.direct?.maxChars ?? chatConfig?.direct?.maxChars ?? 1200, margin: chatConfig?.direct?.margin ?? 0.1, others: chatConfig?.direct?.others ?? 1, jev: { ...scorer, maxCalls: 2 } } } : {}), ...(rerank && scoringReady && chatConfig?.verify ? { verify: { ...chatConfig.verify, jev: { ...scorer, maxCalls: 3 } } } : {}) } };
|
|
101
|
+
}
|
package/dist/ask-setup.d.ts
CHANGED
|
@@ -1,43 +1,4 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { DailyBudget, type BudgetStore } from './budget.js';
|
|
5
|
-
export declare function parseReaderView(specs: string[]): ReaderSelection | undefined;
|
|
6
|
-
export type AskSetupInput = {
|
|
7
|
-
sharedStore?: boolean;
|
|
8
|
-
siteDirectory: string;
|
|
9
|
-
configFile?: string;
|
|
10
|
-
settings?: Record<string, unknown>;
|
|
11
|
-
model?: string;
|
|
12
|
-
passages?: number;
|
|
13
|
-
channel?: string;
|
|
14
|
-
version?: string;
|
|
15
|
-
language?: string;
|
|
16
|
-
noRerank?: boolean;
|
|
17
|
-
noDirect?: boolean;
|
|
18
|
-
noEscalate?: boolean;
|
|
19
|
-
noCards?: boolean;
|
|
20
|
-
cache?: boolean;
|
|
21
|
-
direct?: {
|
|
22
|
-
threshold: number;
|
|
23
|
-
maxChars?: number;
|
|
24
|
-
};
|
|
25
|
-
jevCacheDir?: string;
|
|
26
|
-
readerView?: ReaderSelection;
|
|
27
|
-
maxTokens?: number;
|
|
28
|
-
};
|
|
29
|
-
export type AskSetup = {
|
|
30
|
-
budget?: DailyBudget;
|
|
31
|
-
budgetStore?: BudgetStore;
|
|
32
|
-
chat: ChatProvider;
|
|
33
|
-
options: Omit<AskOptions, 'question'>;
|
|
34
|
-
notes: string[];
|
|
35
|
-
embedTexts?: (texts: string[]) => Promise<Float32Array[]>;
|
|
36
|
-
embedding?: {
|
|
37
|
-
provider: string;
|
|
38
|
-
model: string;
|
|
39
|
-
space: string;
|
|
40
|
-
dimension: number;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
1
|
+
import { type AskSetup, type AskSetupInput } from './ask-runtime.js';
|
|
2
|
+
export { parseReaderView } from './ask-runtime.js';
|
|
3
|
+
export type { AskSetup, AskSetupInput } from './ask-runtime.js';
|
|
43
4
|
export declare function prepareAsk(input: AskSetupInput): Promise<AskSetup>;
|
package/dist/ask-setup.js
CHANGED
|
@@ -1,99 +1,11 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { AnswerCache } from './answer-cache.js';
|
|
4
|
-
import { CardIndex, readCards } from './answer-cards.js';
|
|
5
|
-
import { chatProviderConfig, chatRoutes, validateChat } from './chat-config.js';
|
|
6
|
-
import { createChatProvider, fallbackChat } from './chat.js';
|
|
7
1
|
import { loadConfig } from './config.js';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import { jevAvailable, jevEndpoint } from './jev.js';
|
|
13
|
-
import { queryProviderConfig, validateRetrieval } from './retrieval-config.js';
|
|
14
|
-
import { Retriever } from './retrieval.js';
|
|
15
|
-
// `--reader-view audience=authors,maintainers`, repeatable for more than one filter.
|
|
16
|
-
export function parseReaderView(specs) {
|
|
17
|
-
if (!specs.length)
|
|
18
|
-
return undefined;
|
|
19
|
-
const selection = {};
|
|
20
|
-
for (const spec of specs) {
|
|
21
|
-
const match = /^([a-z][a-z0-9-]*)=(.+)$/.exec(spec);
|
|
22
|
-
if (!match)
|
|
23
|
-
throw new Error(`--reader-view needs facet=choice[,choice], such as audience=authors; got ${JSON.stringify(spec)}`);
|
|
24
|
-
if (selection[match[1]])
|
|
25
|
-
throw new Error(`--reader-view names ${match[1]} twice`);
|
|
26
|
-
selection[match[1]] = match[2].split(',').map(choice => choice.trim()).filter(Boolean);
|
|
27
|
-
}
|
|
28
|
-
return selection;
|
|
29
|
-
}
|
|
30
|
-
// Everything `shoalrun ask` and the answer eval share: read the project's chat and retrieval settings, load the passages and any
|
|
31
|
-
// vectors, and wire up the optional layers. A layer that isn't configured is left out, and one that is configured but can't run
|
|
32
|
-
// (Jev without a key) is left out with a note.
|
|
2
|
+
import { prepareAskRuntime } from './ask-runtime.js';
|
|
3
|
+
export { parseReaderView } from './ask-runtime.js';
|
|
4
|
+
// Local authoring/evaluation accepts a source config. Hosted functions import
|
|
5
|
+
// ask-runtime directly and receive already-resolved settings instead.
|
|
33
6
|
export async function prepareAsk(input) {
|
|
34
7
|
if (!input.settings && !input.configFile)
|
|
35
8
|
throw new Error('prepareAsk needs a config file or settings');
|
|
36
9
|
const settings = input.settings ?? (await loadConfig(input.configFile)).value;
|
|
37
|
-
|
|
38
|
-
const chatConfig = validateChat(settings.chat, readerFilters);
|
|
39
|
-
const retrieval = validateRetrieval(settings.retrieval);
|
|
40
|
-
// --model replaces the main model only. Fallback and escalation models still inherit the config's settings.
|
|
41
|
-
const mainConfig = chatProviderConfig(chatConfig, { model: input.model });
|
|
42
|
-
const routes = chatRoutes(chatConfig, chatProviderConfig(chatConfig));
|
|
43
|
-
const chat = fallbackChat([createChatProvider(mainConfig), ...routes.fallbacks.map(createChatProvider)]);
|
|
44
|
-
let chunks;
|
|
45
|
-
try {
|
|
46
|
-
chunks = JSON.parse(await readFile(path.join(input.siteDirectory, 'ai', 'chunks.json'), 'utf8'));
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
throw error.code === 'ENOENT' ? new Error(`No ai/chunks.json in ${input.siteDirectory}; run shoalrun index first`) : error;
|
|
50
|
-
}
|
|
51
|
-
const embeddings = await readEmbeddings(input.siteDirectory);
|
|
52
|
-
const retriever = new Retriever(chunks, embeddings);
|
|
53
|
-
const variants = retriever.variants();
|
|
54
|
-
const variant = input.channel && input.version && input.language ? `${input.channel}|${input.version}|${input.language}` : variants.length === 1 ? variants[0] : undefined;
|
|
55
|
-
if (!variant)
|
|
56
|
-
throw new Error(`The site has several publications (${variants.join(', ')}); pass --channel, --version, and --language`);
|
|
57
|
-
let embedQuery;
|
|
58
|
-
let embedTexts;
|
|
59
|
-
let embedding;
|
|
60
|
-
if (embeddings) {
|
|
61
|
-
const queryProvider = createProvider(queryProviderConfig(retrieval, embeddings.meta));
|
|
62
|
-
if (queryProvider.space !== embeddings.meta.space || (embeddings.meta.backend && queryProvider.backend !== embeddings.meta.backend))
|
|
63
|
-
throw new Error(`${queryProvider.model} is not in the embedding space or backend of ${embeddings.meta.model}; set retrieval.embeddings.queryModel and baseUrl to compatible values`);
|
|
64
|
-
embedQuery = async (text, signal) => (await queryProvider.embed([text], 'query', signal))[0];
|
|
65
|
-
embedTexts = texts => queryProvider.embed(texts, 'query');
|
|
66
|
-
embedding = { provider: queryProvider.name, model: queryProvider.model, space: queryProvider.space, dimension: queryProvider.dimension };
|
|
67
|
-
}
|
|
68
|
-
// A reader view on the command line replaces the config's, so one run can answer for a different audience.
|
|
69
|
-
if (input.readerView && !readerFilters)
|
|
70
|
-
throw new Error('--reader-view needs readerFilters.facets in the site config');
|
|
71
|
-
const readerSelection = input.readerView ? validateReaderSelection(input.readerView, readerFilters, '--reader-view') : chatConfig?.readerView;
|
|
72
|
-
const notes = [];
|
|
73
|
-
const rerank = Boolean(chatConfig?.rerank) && !input.noRerank;
|
|
74
|
-
const scoring = chatConfig?.rerank;
|
|
75
|
-
const scorer = { ...(scoring?.endpoint ? { endpoint: jevEndpoint(scoring.endpoint) } : {}), ...(scoring?.model ? { model: scoring.model } : {}), ...(scoring?.keyEnv ? { keyEnv: scoring.keyEnv } : {}), ...(scoring?.stateFormat ? { stateFormat: scoring.stateFormat } : {}), ...(input.jevCacheDir ? { cacheDir: input.jevCacheDir } : {}) };
|
|
76
|
-
const scoringReady = jevAvailable(scoring?.keyEnv);
|
|
77
|
-
// A scorer that is configured but has no key counts as down, not as absent: it is what keeps off-topic questions from the model.
|
|
78
|
-
if (rerank && !scoringReady)
|
|
79
|
-
notes.push(`The relevance scorer has no key: set ${scoring?.keyEnv ?? 'JEV_API_KEY'}. Until then it counts as down, so ${scoring?.onError === 'answer' ? 'the model answers without the gate and the claim check' : 'questions get the closest pages and no model call'}`);
|
|
80
|
-
// Answer cards need semantic search and Jev. A configured but missing card file is a note, not an error, so the chat still answers.
|
|
81
|
-
let cards;
|
|
82
|
-
if (chatConfig?.cards && !input.noCards && rerank && scoringReady) {
|
|
83
|
-
const file = await readCards(input.siteDirectory);
|
|
84
|
-
if (!file)
|
|
85
|
-
notes.push('chat.cards is set but there is no ai/answers.json; run shoalrun answers to make it');
|
|
86
|
-
else if (!embedding || file.embedding.space !== embedding.space || file.embedding.dimension !== embedding.dimension)
|
|
87
|
-
notes.push('The answer cards were made with a different embedding model, so they are not used; run shoalrun answers again');
|
|
88
|
-
else
|
|
89
|
-
cards = { index: new CardIndex(file), threshold: chatConfig.cards.threshold, confirm: chatConfig.cards.confirm, jev: { ...scorer, maxCalls: 1 } };
|
|
90
|
-
}
|
|
91
|
-
// The shared store is for a hosted function. A local run keeps its counters in memory, so it never needs the store's keys.
|
|
92
|
-
const store = input.sharedStore && chatConfig?.budget?.store ? envBudgetStore(chatConfig.budget.store) : memoryBudgetStore();
|
|
93
|
-
const reported = new Set();
|
|
94
|
-
const onBudgetError = (error) => { if (!reported.has(error.message)) {
|
|
95
|
-
reported.add(error.message);
|
|
96
|
-
process.stderr.write(`Budget: ${error.message}. Questions get the closest pages, with no model call, until it works.\n`);
|
|
97
|
-
} };
|
|
98
|
-
return { ...(chatConfig?.budget ? { budget: new DailyBudget(store, chatConfig.budget, Date.now, onBudgetError), budgetStore: store } : {}), chat, notes, embedTexts, embedding, options: { ...(scoring?.onError ? { onScorerError: scoring.onError } : {}), retriever, chat, variant, readerSelection, embedQuery, passages: input.passages ?? chatConfig?.passages, gate: chatConfig?.gate, ...(input.maxTokens ? { maxTokens: input.maxTokens } : {}), ...(rerank ? { jev: { ...scorer, top: 24, maxCalls: 2 } } : {}), ...(cards ? { cards } : {}), ...(input.cache && chatConfig?.cache ? { cache: new AnswerCache({ maxEntries: chatConfig.cache.maxEntries, ttlMs: chatConfig.cache.ttlMinutes * 60_000 }) } : {}), ...(routes.escalate && !input.noEscalate ? { escalate: { chat: createChatProvider(routes.escalate.config), when: routes.escalate.when } } : {}), ...(rerank && scoringReady && !input.noDirect && (input.direct || chatConfig?.direct) ? { direct: { threshold: input.direct?.threshold ?? chatConfig.direct.threshold, maxChars: input.direct?.maxChars ?? chatConfig?.direct?.maxChars ?? 1200, margin: chatConfig?.direct?.margin ?? 0.1, others: chatConfig?.direct?.others ?? 1, jev: { ...scorer, maxCalls: 2 } } } : {}), ...(rerank && scoringReady && chatConfig?.verify ? { verify: { ...chatConfig.verify, jev: { ...scorer, maxCalls: 3 } } } : {}) } };
|
|
10
|
+
return prepareAskRuntime({ ...input, settings });
|
|
99
11
|
}
|
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]
|
package/dist/cli.js
CHANGED
|
@@ -142,11 +142,19 @@ try {
|
|
|
142
142
|
const args = [subcommand, ...rest].filter((item) => item !== undefined);
|
|
143
143
|
const positional = [];
|
|
144
144
|
let port = defaultPort();
|
|
145
|
+
let profile;
|
|
145
146
|
for (let index = 0; index < args.length; index++) {
|
|
146
|
-
if (args[index] === '--port') {
|
|
147
|
+
if (args[index] === '--port' || args[index] === '--profile') {
|
|
148
|
+
const option = args[index];
|
|
147
149
|
if (!args[index + 1] || args[index + 1].startsWith('--'))
|
|
148
|
-
throw new Error('Usage: shoalrun dev [config] [output] [--port PORT]');
|
|
149
|
-
|
|
150
|
+
throw new Error('Usage: shoalrun dev [config] [output] [--port PORT] [--profile FILE]');
|
|
151
|
+
if (option === '--profile') {
|
|
152
|
+
if (profile !== undefined)
|
|
153
|
+
throw new Error('Duplicate dev option --profile');
|
|
154
|
+
profile = args[++index];
|
|
155
|
+
}
|
|
156
|
+
else
|
|
157
|
+
port = Number(args[++index]);
|
|
150
158
|
}
|
|
151
159
|
else if (args[index].startsWith('--'))
|
|
152
160
|
throw new Error(`Unknown dev option ${args[index]}`);
|
|
@@ -154,8 +162,8 @@ try {
|
|
|
154
162
|
positional.push(args[index]);
|
|
155
163
|
}
|
|
156
164
|
if (positional.length > 2)
|
|
157
|
-
throw new Error('Usage: shoalrun dev [config] [output] [--port PORT]');
|
|
158
|
-
await startDev(positional[0] ?? 'docs.config.yaml', positional[1] ?? 'site-dist', '127.0.0.1', port);
|
|
165
|
+
throw new Error('Usage: shoalrun dev [config] [output] [--port PORT] [--profile FILE]');
|
|
166
|
+
await startDev(positional[0] ?? 'docs.config.yaml', positional[1] ?? 'site-dist', '127.0.0.1', port, { profile });
|
|
159
167
|
}
|
|
160
168
|
else if (command === 'vercel' && subcommand === 'build') {
|
|
161
169
|
// --chat adds the optional answer function: it needs chat and retrieval settings and the embedding key at build time.
|
|
@@ -372,9 +380,9 @@ try {
|
|
|
372
380
|
}
|
|
373
381
|
else if (command === 'search') {
|
|
374
382
|
if (!subcommand || !rest[0] || rest[0].startsWith('--'))
|
|
375
|
-
throw new Error('Usage: shoalrun search <site-directory> <query> [--channel C] [--version V] [--language L] [--limit N]');
|
|
383
|
+
throw new Error('Usage: shoalrun search <site-directory> <query> [--product P] [--channel C] [--version V] [--language L] [--limit N]');
|
|
376
384
|
const options = {};
|
|
377
|
-
const names = { '--channel': 'channel', '--version': 'version', '--language': 'language', '--limit': 'limit' };
|
|
385
|
+
const names = { '--product': 'product', '--channel': 'channel', '--version': 'version', '--language': 'language', '--limit': 'limit' };
|
|
378
386
|
for (let index = 1; index < rest.length; index += 2) {
|
|
379
387
|
const flag = rest[index];
|
|
380
388
|
const value = rest[index + 1];
|
|
@@ -432,7 +440,7 @@ try {
|
|
|
432
440
|
process.stdout.write(JSON.stringify({ status: 'ok', documents: result.documents, chunks: result.index.chunks.length, sourceDigest: result.index.sourceDigest, publications, output: result.output, ...(embeddings ? { embeddings } : {}) }, null, 2) + '\n');
|
|
433
441
|
}
|
|
434
442
|
else if (command === 'ask') {
|
|
435
|
-
const usage = 'Usage: shoalrun ask <site-directory> "<question>" [--config FILE] [--model MODEL] [--passages N] [--reader-view FACET=CHOICE[,CHOICE]]... [--channel C --version V --language L] [--no-rerank] [--no-direct] [--no-escalate] [--no-cards] [--json]';
|
|
443
|
+
const usage = 'Usage: shoalrun ask <site-directory> "<question>" [--config FILE] [--model MODEL] [--passages N] [--reader-view FACET=CHOICE[,CHOICE]]... [--product P] [--channel C --version V --language L] [--no-rerank] [--no-direct] [--no-escalate] [--no-cards] [--json]';
|
|
436
444
|
if (!subcommand || subcommand.startsWith('--') || !rest[0] || rest[0].startsWith('--'))
|
|
437
445
|
throw new Error(usage);
|
|
438
446
|
const values = {};
|
|
@@ -449,14 +457,14 @@ try {
|
|
|
449
457
|
views.push(value);
|
|
450
458
|
continue;
|
|
451
459
|
}
|
|
452
|
-
if (!['--config', '--model', '--passages', '--channel', '--version', '--language'].includes(flag) || !value || value.startsWith('--'))
|
|
460
|
+
if (!['--config', '--model', '--passages', '--product', '--channel', '--version', '--language'].includes(flag) || !value || value.startsWith('--'))
|
|
453
461
|
throw new Error(usage);
|
|
454
462
|
if (values[flag] !== undefined)
|
|
455
463
|
throw new Error(`Duplicate ask option ${flag}`);
|
|
456
464
|
values[flag] = value;
|
|
457
465
|
}
|
|
458
466
|
const configFile = values['--config'] ?? await discoverConfig(process.cwd()).catch(() => { throw new Error('No docs.config.yaml found; pass --config FILE. `ask` reads its chat provider and model from the config'); });
|
|
459
|
-
const setup = await prepareAsk({ siteDirectory: subcommand, configFile, model: values['--model'], passages: values['--passages'] === undefined ? undefined : Number(values['--passages']), channel: values['--channel'], version: values['--version'], language: values['--language'], noRerank: switches.has('--no-rerank'), noDirect: switches.has('--no-direct'), noEscalate: switches.has('--no-escalate'), noCards: switches.has('--no-cards'), readerView: parseReaderView(views) });
|
|
467
|
+
const setup = await prepareAsk({ siteDirectory: subcommand, configFile, model: values['--model'], passages: values['--passages'] === undefined ? undefined : Number(values['--passages']), product: values['--product'], channel: values['--channel'], version: values['--version'], language: values['--language'], noRerank: switches.has('--no-rerank'), noDirect: switches.has('--no-direct'), noEscalate: switches.has('--no-escalate'), noCards: switches.has('--no-cards'), readerView: parseReaderView(views) });
|
|
460
468
|
for (const note of setup.notes)
|
|
461
469
|
process.stderr.write(`${note}\n`);
|
|
462
470
|
const chat = setup.chat;
|
|
@@ -544,7 +552,7 @@ try {
|
|
|
544
552
|
}
|
|
545
553
|
}
|
|
546
554
|
else if (command === 'answers') {
|
|
547
|
-
const usage = 'Usage: shoalrun answers <site-directory> --questions FILE [--config FILE] [--model MODEL] [--reader-view FACET=CHOICE[,CHOICE]]...';
|
|
555
|
+
const usage = 'Usage: shoalrun answers <site-directory> --questions FILE [--config FILE] [--model MODEL] [--product P --channel C --version V --language L] [--reader-view FACET=CHOICE[,CHOICE]]...';
|
|
548
556
|
if (!subcommand || subcommand.startsWith('--'))
|
|
549
557
|
throw new Error(usage);
|
|
550
558
|
const values = {};
|
|
@@ -556,7 +564,7 @@ try {
|
|
|
556
564
|
views.push(value);
|
|
557
565
|
continue;
|
|
558
566
|
}
|
|
559
|
-
if (!['--questions', '--config', '--model'].includes(flag) || !value || value.startsWith('--'))
|
|
567
|
+
if (!['--questions', '--config', '--model', '--product', '--channel', '--version', '--language'].includes(flag) || !value || value.startsWith('--'))
|
|
560
568
|
throw new Error(usage);
|
|
561
569
|
if (values[flag] !== undefined)
|
|
562
570
|
throw new Error(`Duplicate answers option ${flag}`);
|
|
@@ -567,7 +575,7 @@ try {
|
|
|
567
575
|
const configFile = values['--config'] ?? await discoverConfig(process.cwd()).catch(() => { throw new Error('No docs.config.yaml found; pass --config FILE. `answers` reads its chat provider and model from the config'); });
|
|
568
576
|
const questions = parseCardQuestions(await readFile(values['--questions'], 'utf8'));
|
|
569
577
|
// Cards are polished answers, so they come from the model, not from a direct excerpt, and never from another card.
|
|
570
|
-
const setup = await prepareAsk({ siteDirectory: subcommand, configFile, model: values['--model'], noCards: true, noDirect: true, readerView: parseReaderView(views) });
|
|
578
|
+
const setup = await prepareAsk({ siteDirectory: subcommand, configFile, model: values['--model'], product: values['--product'], channel: values['--channel'], version: values['--version'], language: values['--language'], noCards: true, noDirect: true, readerView: parseReaderView(views) });
|
|
571
579
|
for (const note of setup.notes)
|
|
572
580
|
process.stderr.write(`${note}\n`);
|
|
573
581
|
if (!setup.embedTexts || !setup.embedding)
|
|
@@ -620,7 +628,7 @@ try {
|
|
|
620
628
|
if ((!flag?.startsWith('--') && flag !== '-n') || !value || value.startsWith('--'))
|
|
621
629
|
throw new Error(`Scaffold option ${flag ?? ''} needs a value`);
|
|
622
630
|
const name = flag === '-n' ? 'new' : flag.slice(2);
|
|
623
|
-
if (!['new', 'config', 'id', 'title', 'summary', 'slug', 'channel', 'version', 'language', 'operation'].includes(name))
|
|
631
|
+
if (!['new', 'config', 'id', 'title', 'summary', 'slug', 'product', 'channel', 'version', 'language', 'operation'].includes(name))
|
|
624
632
|
throw new Error(`Unknown scaffold option ${flag}`);
|
|
625
633
|
if (name === 'operation')
|
|
626
634
|
operations.push(value);
|
|
@@ -631,7 +639,7 @@ try {
|
|
|
631
639
|
}
|
|
632
640
|
if (shortForm && !options.new)
|
|
633
641
|
throw new Error('Scaffold needs -n or --new with a target file');
|
|
634
|
-
const overrides = { id: options.id, title: options.title, summary: options.summary, slug: options.slug, channel: options.channel, version: options.version, language: options.language, ...(operations.length ? { operations } : {}) };
|
|
642
|
+
const overrides = { id: options.id, title: options.title, summary: options.summary, slug: options.slug, product: options.product, channel: options.channel, version: options.version, language: options.language, ...(operations.length ? { operations } : {}) };
|
|
635
643
|
const result = shortForm
|
|
636
644
|
? await scaffoldFromPath(options.config ?? await discoverConfig(process.cwd()), subcommand, options.new, Object.fromEntries(Object.entries(overrides).filter(([, value]) => value !== undefined)))
|
|
637
645
|
: await scaffold(rest[0], subcommand, rest[1], overrides);
|
|
@@ -691,9 +699,20 @@ try {
|
|
|
691
699
|
process.exitCode = 1;
|
|
692
700
|
}
|
|
693
701
|
else if (command === 'api' && subcommand === 'select') {
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
702
|
+
const usage = 'Usage: shoalrun api select <api-id> <config> --output FILE [--product P --channel C --version V --language L]';
|
|
703
|
+
if (!rest[0] || !rest[1])
|
|
704
|
+
throw new Error(usage);
|
|
705
|
+
const flags = {};
|
|
706
|
+
for (let i = 2; i < rest.length; i += 2) {
|
|
707
|
+
const flag = rest[i];
|
|
708
|
+
const value = rest[i + 1];
|
|
709
|
+
if (!['--output', '--product', '--channel', '--version', '--language'].includes(flag) || !value || value.startsWith('--') || flags[flag])
|
|
710
|
+
throw new Error(usage);
|
|
711
|
+
flags[flag] = value;
|
|
712
|
+
}
|
|
713
|
+
if (!flags['--output'])
|
|
714
|
+
throw new Error(usage);
|
|
715
|
+
const result = await selectApiReferences(rest[1], rest[0], flags['--output'], { product: flags['--product'], channel: flags['--channel'], version: flags['--version'], language: flags['--language'] });
|
|
697
716
|
process.stdout.write(JSON.stringify({ status: 'ok', ...result }, null, 2) + '\n');
|
|
698
717
|
}
|
|
699
718
|
else if (command === 'api' && subcommand === 'materialize') {
|
|
@@ -710,12 +729,18 @@ try {
|
|
|
710
729
|
continue;
|
|
711
730
|
}
|
|
712
731
|
const value = rest[++index];
|
|
713
|
-
if (!['--operation', '--route', '--output'].includes(flag) || !value || value.startsWith('--'))
|
|
732
|
+
if (!['--operation', '--route', '--output', '--product', '--channel', '--version', '--language'].includes(flag) || !value || value.startsWith('--'))
|
|
714
733
|
throw new Error(usage);
|
|
715
734
|
if (flag === '--operation')
|
|
716
735
|
options.operations.push(value);
|
|
717
736
|
else if (flag === '--route')
|
|
718
737
|
options.routes.push(value);
|
|
738
|
+
else if (flag !== '--output') {
|
|
739
|
+
const key = flag.slice(2);
|
|
740
|
+
if (options[key])
|
|
741
|
+
throw new Error(`Duplicate ${flag}`);
|
|
742
|
+
options[key] = value;
|
|
743
|
+
}
|
|
719
744
|
else if (options.output)
|
|
720
745
|
throw new Error('Duplicate --output');
|
|
721
746
|
else
|
|
@@ -725,7 +750,7 @@ try {
|
|
|
725
750
|
process.stdout.write(JSON.stringify({ status: 'ok', ...result }, null, 2) + '\n');
|
|
726
751
|
}
|
|
727
752
|
else if (command === 'operation' && subcommand === 'inspect') {
|
|
728
|
-
const usage = 'Usage: shoalrun operation inspect <id> [config] [--channel C] [--version V] [--language L]';
|
|
753
|
+
const usage = 'Usage: shoalrun operation inspect <id> [config] [--product P] [--channel C] [--version V] [--language L]';
|
|
729
754
|
if (!rest[0] || rest[0].startsWith('--'))
|
|
730
755
|
throw new Error(usage);
|
|
731
756
|
const hasConfig = rest[1] !== undefined && !rest[1].startsWith('--');
|
|
@@ -734,7 +759,7 @@ try {
|
|
|
734
759
|
const flag = rest[index];
|
|
735
760
|
const value = rest[index + 1];
|
|
736
761
|
const name = flag.slice(2);
|
|
737
|
-
if (!['--channel', '--version', '--language'].includes(flag))
|
|
762
|
+
if (!['--product', '--channel', '--version', '--language'].includes(flag))
|
|
738
763
|
throw new Error(`Unknown operation inspect option ${flag}`);
|
|
739
764
|
if (!value || value.startsWith('--'))
|
|
740
765
|
throw new Error(`Operation inspect option ${flag} needs a value`);
|
|
@@ -743,11 +768,11 @@ try {
|
|
|
743
768
|
filters[name] = value;
|
|
744
769
|
}
|
|
745
770
|
const manifest = await compile(hasConfig ? rest[1] : 'docs.config.yaml');
|
|
746
|
-
const matches = (manifest.operations[rest[0]] ?? []).filter(item => (!filters.channel || item.channel === filters.channel) && (!filters.version || item.version === filters.version) && (!filters.language || item.language === filters.language));
|
|
771
|
+
const matches = (manifest.operations[rest[0]] ?? []).filter(item => (!filters.product || item.product === filters.product) && (!filters.channel || item.channel === filters.channel) && (!filters.version || item.version === filters.version) && (!filters.language || item.language === filters.language));
|
|
747
772
|
process.stdout.write(JSON.stringify({ status: matches.length ? 'ok' : 'missing-variant', operationId: rest[0], bindings: matches }, null, 2) + '\n');
|
|
748
773
|
}
|
|
749
774
|
else {
|
|
750
|
-
throw new Error('Usage: shoalrun init [directory] [--starter minimal|api-docs|showcase] | build [config] [output] [--source-commit SHA] [--release-label LABEL] | check [config] [--json] | audit [config] | vercel build [config] [output] [--source-commit SHA] [--release-label LABEL] [--chat] | serve <site-directory> [--host HOST] [--port PORT] [--search [--config FILE]] [--ask [--config FILE] [--model MODEL] [--reader-view FACET=CHOICE[,CHOICE]]...] | search <site-directory> <query> [--channel C --version V --language L --limit N] | answers <site-directory> --questions FILE [--config FILE] [--model MODEL] [--reader-view FACET=CHOICE[,CHOICE]]... | chat pause|resume|status --config FILE | ask-log <log-file> [--min-repeats N] [--limit N] [--cards-out FILE] [--json] | ask <site-directory> "<question>" [--config FILE] [--model MODEL] [--passages N] [--reader-view FACET=CHOICE[,CHOICE]]... [--channel C --version V --language L] [--no-rerank] [--no-direct] [--no-escalate] [--no-cards] [--json] | eval prepare <site-directory> --tasks FILE --out REPORT | eval check <site-directory> --tasks FILE --report REPORT | index <site-directory> [--embed [--config FILE] [--provider voyage|openai] [--model MODEL] [--dimension N] [--base-url URL] [--key-env NAME]] | ingredient draft --spec FILE --out FILE [--config FILE] [--check] | recipe draft --spec FILE --out FILE [--config FILE] [--check] | scaffold <template> -n <target> [--config FILE] [--id ID] [--title TITLE] [--summary SUMMARY] [--slug SLUG] [--channel C] [--version V] [--language L] [--operation ID]... | scaffold <template> <config> <target> --id ID --title TITLE --summary SUMMARY --slug SLUG | config validate|resolve|graph <config> | config explain <key> <config> | operation inspect <id> <config> [--channel C --version V --language L] | api audit <openapi-file> | api focused-audit <site-directory> | api review <config-file> --output <local-directory> | api select <api-id> <config> --output <selection.yaml> | api materialize <api-id> <config> (--all | --operation ID | --route "METHOD /path")... [--output content/subdirectory]');
|
|
775
|
+
throw new Error('Usage: shoalrun init [directory] [--starter minimal|api-docs|showcase] | build [config] [output] [--source-commit SHA] [--release-label LABEL] | check [config] [--json] | audit [config] | vercel build [config] [output] [--source-commit SHA] [--release-label LABEL] [--chat] | serve <site-directory> [--host HOST] [--port PORT] [--search [--config FILE]] [--ask [--config FILE] [--model MODEL] [--reader-view FACET=CHOICE[,CHOICE]]...] | search <site-directory> <query> [--product P] [--channel C --version V --language L --limit N] | answers <site-directory> --questions FILE [--config FILE] [--model MODEL] [--reader-view FACET=CHOICE[,CHOICE]]... | chat pause|resume|status --config FILE | ask-log <log-file> [--min-repeats N] [--limit N] [--cards-out FILE] [--json] | ask <site-directory> "<question>" [--config FILE] [--model MODEL] [--passages N] [--reader-view FACET=CHOICE[,CHOICE]]... [--product P] [--channel C --version V --language L] [--no-rerank] [--no-direct] [--no-escalate] [--no-cards] [--json] | eval prepare <site-directory> --tasks FILE --out REPORT | eval check <site-directory> --tasks FILE --report REPORT | index <site-directory> [--embed [--config FILE] [--provider voyage|openai] [--model MODEL] [--dimension N] [--base-url URL] [--key-env NAME]] | ingredient draft --spec FILE --out FILE [--config FILE] [--check] | recipe draft --spec FILE --out FILE [--config FILE] [--check] | scaffold <template> -n <target> [--config FILE] [--id ID] [--title TITLE] [--summary SUMMARY] [--slug SLUG] [--product P] [--channel C] [--version V] [--language L] [--operation ID]... | scaffold <template> <config> <target> --id ID --title TITLE --summary SUMMARY --slug SLUG | config validate|resolve|graph <config> | config explain <key> <config> | operation inspect <id> <config> [--product P] [--channel C --version V --language L] | api audit <openapi-file> | api focused-audit <site-directory> | api review <config-file> --output <local-directory> | api select <api-id> <config> --output <selection.yaml> | api materialize <api-id> <config> (--all | --operation ID | --route "METHOD /path")... [--output content/subdirectory]');
|
|
751
776
|
}
|
|
752
777
|
}
|
|
753
778
|
catch (error) {
|
|
@@ -39,6 +39,14 @@ export interface CompilerSiteConfig extends ConfigMapping {
|
|
|
39
39
|
basePath?: unknown;
|
|
40
40
|
contentDir?: string;
|
|
41
41
|
}
|
|
42
|
+
export type ProductPublicationConfig = {
|
|
43
|
+
label?: string;
|
|
44
|
+
pathPrefix: string;
|
|
45
|
+
defaultVersion: string;
|
|
46
|
+
versions: Record<string, {
|
|
47
|
+
pathPrefix?: string;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
42
50
|
export interface CompilerPublicationsConfig extends ConfigMapping {
|
|
43
51
|
channels: Record<string, {
|
|
44
52
|
pathPrefix?: string;
|
|
@@ -46,7 +54,9 @@ export interface CompilerPublicationsConfig extends ConfigMapping {
|
|
|
46
54
|
versions: Record<string, {
|
|
47
55
|
pathPrefix?: string;
|
|
48
56
|
}>;
|
|
57
|
+
products?: Record<string, ProductPublicationConfig>;
|
|
49
58
|
defaults?: {
|
|
59
|
+
product?: string;
|
|
50
60
|
channel?: string;
|
|
51
61
|
version?: string;
|
|
52
62
|
language?: string;
|
|
@@ -66,3 +76,10 @@ export declare function navigationCounts(outputs: unknown): boolean;
|
|
|
66
76
|
*/
|
|
67
77
|
export declare function requireSiteSection(config: ResolvedCompilerConfig): CompilerSiteConfig;
|
|
68
78
|
export declare function requirePublicationsSection(config: ResolvedCompilerConfig): CompilerPublicationsConfig;
|
|
79
|
+
/** Resolve product-local defaults without borrowing another product's catalog. */
|
|
80
|
+
export declare function resolvePublication(publications: CompilerPublicationsConfig, value: Record<string, unknown>, language?: string): {
|
|
81
|
+
product?: string;
|
|
82
|
+
channel: string;
|
|
83
|
+
version: string;
|
|
84
|
+
language: string;
|
|
85
|
+
};
|