@shoalrun/cli 0.1.0-alpha.16 → 0.1.0-alpha.17

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.
Files changed (103) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +3 -3
  3. package/agent-docs/SNAPSHOT.json +5 -5
  4. package/agent-docs/author/frontmatter-reference.md +15 -11
  5. package/agent-docs/author/frontmatter-reference.sections/choose-a-publication-and-visibility.md +13 -11
  6. package/agent-docs/author/frontmatter-reference.sections/control-output-details.md +1 -1
  7. package/agent-docs/author/frontmatter-reference.sections/global-defaults-and-enforced-values.md +1 -1
  8. package/agent-docs/author/frontmatter-reference.sections/html-markdown-and-agents.md +1 -1
  9. package/agent-docs/author/frontmatter-reference.sections/identify-and-route-a-page.md +1 -1
  10. package/agent-docs/author/frontmatter-reference.sections/point-agents-to-it.md +1 -1
  11. package/agent-docs/author/frontmatter-reference.sections/project-defined-fields.md +1 -1
  12. package/agent-docs/author/frontmatter-reference.sections/related-reading.md +1 -1
  13. package/agent-docs/author/frontmatter-reference.sections/use-the-local-files-while-authoring.md +1 -1
  14. package/agent-docs/author/frontmatter-reference.sections/when-the-files-update.md +1 -1
  15. package/agent-docs/author/recipe-drafts.md +2 -2
  16. package/agent-docs/author/recipe-drafts.sections/1-write-one-reusable-step.md +1 -1
  17. package/agent-docs/author/recipe-drafts.sections/2-list-the-steps-for-one-complete-goal.md +1 -1
  18. package/agent-docs/author/recipe-drafts.sections/3-generate-a-draft-and-review-it.md +1 -1
  19. package/agent-docs/author/recipe-drafts.sections/4-maintain-shoalrun-s-published-recipe-snapshots.md +1 -1
  20. package/agent-docs/author/recipe-drafts.sections/related-reading.md +1 -1
  21. package/agent-docs/author/recipe-drafts.sections/start-an-ingredient-from-an-api-example.md +2 -2
  22. package/agent-docs/author/recipes.md +3 -3
  23. package/agent-docs/author/recipes.sections/how-agents-use-this.md +2 -2
  24. package/agent-docs/author/recipes.sections/one-example-from-shoalrun.md +2 -2
  25. package/agent-docs/author/recipes.sections/related-reading.md +2 -2
  26. package/agent-docs/author/recipes.sections/try-a-complete-workflow.md +3 -3
  27. package/agent-docs/author/recipes.sections/use-recipes-for-task-oriented-how-tos.md +2 -2
  28. package/agent-docs/author/recipes.sections/what-changing-an-ingredient-updates.md +2 -2
  29. package/agent-docs/author/recipes.sections/what-each-file-does.md +2 -2
  30. package/agent-docs/author/recipes.sections/what-happens-and-when.md +2 -2
  31. package/agent-docs/author/search.md +55 -6
  32. package/agent-docs/author/search.sections/agent-and-mcp-search-scope.md +48 -0
  33. package/agent-docs/author/search.sections/choose-a-provider.md +7 -6
  34. package/agent-docs/author/search.sections/cli-and-mcp-ranking-details.md +1 -1
  35. package/agent-docs/author/search.sections/enable-included-semantic-search.md +66 -0
  36. package/agent-docs/author/search.sections/hosted-semantic-search-limits.md +1 -1
  37. package/agent-docs/author/search.sections/html-markdown-and-agents.md +1 -1
  38. package/agent-docs/author/search.sections/lexical-search.md +1 -1
  39. package/agent-docs/author/search.sections/local-semantic-preview.md +1 -1
  40. package/agent-docs/author/search.sections/read-a-search-result-with-an-agent.md +1 -1
  41. package/agent-docs/author/search.sections/related-reading.md +1 -1
  42. package/agent-docs/author/search.sections/reuse-the-lexical-index.md +1 -1
  43. package/agent-docs/author/search.sections/turn-search-off.md +1 -1
  44. package/agent-docs/author/search.sections/use-the-search-box.md +1 -1
  45. package/agent-docs/author/search.sections/write-a-custom-provider.md +1 -1
  46. package/agent-docs/chat/passage-index.md +16 -12
  47. package/agent-docs/chat/passage-index.sections/build-the-index.md +3 -3
  48. package/agent-docs/chat/passage-index.sections/embed-passages.md +3 -3
  49. package/agent-docs/chat/passage-index.sections/how-the-default-chunker-splits-a-page.md +3 -3
  50. package/agent-docs/chat/passage-index.sections/limits.md +3 -3
  51. package/agent-docs/chat/passage-index.sections/passage-ids-and-links.md +14 -10
  52. package/agent-docs/chat/passage-index.sections/related-reading.md +3 -3
  53. package/agent-docs/chat/passage-index.sections/what-a-passage-contains.md +5 -5
  54. package/agent-docs/cookbooks/welcome-email.md +12 -9
  55. package/agent-docs/documents.json +207 -183
  56. package/agent-docs/provenance.json +4 -4
  57. package/agent-docs/recipes/queue-email.md +1 -1
  58. package/agent-docs/recipes/send-welcome-email.md +3 -3
  59. package/agent-docs/search-index.json +1 -1
  60. package/agent-docs/start.md +2 -2
  61. package/agent-docs/start.sections/add-the-page-to-navigation.md +1 -1
  62. package/agent-docs/start.sections/build-and-check-both-outputs.md +1 -1
  63. package/agent-docs/start.sections/build-this-site.md +1 -1
  64. package/agent-docs/start.sections/check-writing-style.md +1 -1
  65. package/agent-docs/start.sections/create-a-page.md +1 -1
  66. package/agent-docs/start.sections/make-it-yours.md +1 -1
  67. package/agent-docs/start.sections/migrating-from-github-packages.md +1 -1
  68. package/agent-docs/start.sections/prerequisites.md +1 -1
  69. package/agent-docs/start.sections/related-reading.md +1 -1
  70. package/agent-docs/start.sections/start-your-own-project.md +2 -2
  71. package/dist/ai-directory.d.ts +1 -0
  72. package/dist/ai-directory.js +12 -0
  73. package/dist/answer-cards.js +1 -1
  74. package/dist/ask-function.d.ts +4 -18
  75. package/dist/ask-function.js +12 -71
  76. package/dist/ask-runtime.d.ts +45 -0
  77. package/dist/ask-runtime.js +96 -0
  78. package/dist/ask-setup.d.ts +3 -42
  79. package/dist/ask-setup.js +5 -93
  80. package/dist/embeddings.d.ts +1 -1
  81. package/dist/embeddings.js +1 -1
  82. package/dist/function-package.js +5 -0
  83. package/dist/function-runtime.d.ts +23 -0
  84. package/dist/function-runtime.js +45 -0
  85. package/dist/index-build.d.ts +1 -2
  86. package/dist/index-build.js +3 -11
  87. package/dist/retrieval-runtime.d.ts +5 -0
  88. package/dist/retrieval-runtime.js +21 -0
  89. package/dist/search-function.d.ts +2 -0
  90. package/dist/search-function.js +30 -0
  91. package/dist/search-handler.js +2 -2
  92. package/dist/search-identifier-core.d.ts +4 -0
  93. package/dist/search-identifier-core.js +30 -0
  94. package/dist/search-identifier.d.ts +3 -3
  95. package/dist/search-identifier.js +7 -30
  96. package/dist/search-literal.js +1 -1
  97. package/dist/search-results.js +1 -1
  98. package/dist/search-snippet.d.ts +1 -1
  99. package/dist/search-snippet.js +2 -14
  100. package/dist/search-text.d.ts +1 -0
  101. package/dist/search-text.js +14 -0
  102. package/dist/vercel-function.js +10 -2
  103. package/package.json +1 -1
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -35,14 +35,48 @@ outputs:
35
35
  provider: lexical
36
36
  ```
37
37
 
38
- | Provider | Behavior |
39
- | --------- | ----------------------------------------------------------------------- |
40
- | `lexical` | The default. Builds `/search-index.json` and matches it in the browser. |
41
- | `custom` | Loads your browser module. Needs `module`; `index` is optional. |
42
- | `none` | Removes the search box. Writes no index or provider file. |
38
+ | Provider | Behavior |
39
+ | ---------- | ------------------------------------------------------------------------------------------------------------- |
40
+ | `lexical` | The default. Builds `/search-index.json` and matches it in the browser. |
41
+ | `semantic` | Uses Shoalrun’s same-origin search endpoint, with browser keyword fallback. Available since `0.1.0-alpha.16`. |
42
+ | `custom` | Loads your browser module. Needs `module`; `index` is optional. |
43
+ | `none` | Removes the search box. Writes no index or provider file. |
43
44
 
44
45
  The build copies the provider module to `/assets/search-provider.js`. The search box imports that file when a reader first focuses the box or types.
45
46
 
47
+ ## Enable included semantic search
48
+
49
+ Available since `0.1.0-alpha.16`.
50
+
51
+ Choose the included semantic provider to connect the search box to Shoalrun's endpoint without writing a browser adapter:
52
+
53
+ ```yaml title="docs.config.yaml"
54
+ outputs:
55
+ html:
56
+ search:
57
+ provider: semantic
58
+ retrieval:
59
+ embeddings:
60
+ provider: voyage
61
+ model: voyage-4-large
62
+ queryModel: voyage-4-lite
63
+ dimension: 1024
64
+ ```
65
+
66
+ Set `VOYAGE_API_KEY` in the terminal environment, then build the site, embed its passages, and start the local endpoint:
67
+
68
+ ```sh
69
+ npx --no-install shoalrun build docs.config.yaml site-dist
70
+ npx --no-install shoalrun index site-dist --embed --config docs.config.yaml
71
+ npx --no-install shoalrun serve site-dist --search --config docs.config.yaml
72
+ ```
73
+
74
+ Keys remain server-side. Each semantic query calls the embedding provider; no chat model is required. The browser sends the selected publication and reader view with each request. A missing or unavailable endpoint uses the included browser keyword index. Requests cancelled by further typing do not start fallback searches.
75
+
76
+ Confirm `mode: vector` in the endpoint response to verify semantic retrieval. Rebuild and reindex edited content, then restart the local server. The [passage index](https://www.shoalrun.com/chat/passage-index.md) explains input reuse and release-specific passage identities.
77
+
78
+ This setting selects the browser connection; it does not provision production hosting. The current [Vercel integration](https://www.shoalrun.com/publish/vercel.md) supplies search through its chat-function deployment. Profiled Vercel chat-function builds remain unsupported. Static deployments retain keyword search when no endpoint is present. Custom search services can continue to use `provider: custom`.
79
+
46
80
  ## Use the search box
47
81
 
48
82
  Press `/` or `Ctrl`+`K` (`⌘`+`K` on macOS) to focus the box. Use the arrow keys to move through results, Enter to open one, and Escape to close the list. When a match falls inside a section, the result names the section and links to its heading.
@@ -252,6 +286,21 @@ Result snippets prefer prose matching the substantive words in your question, om
252
286
 
253
287
  [Preview semantic search in this checkout](https://www.shoalrun.com/recipes/preview-hybrid-search.md) covers the embedding provider key, passage index, local endpoint, lexical fallback, and Network inspector checks.
254
288
 
289
+ ## Agent and MCP search scope
290
+
291
+ `outputs.html.search.provider: semantic` changes the website search box. It does not change CLI or MCP search into semantic retrieval. Those tools retain keyword search and explicit publication selection.
292
+
293
+ For a multi-version Windows build, select the release when searching:
294
+
295
+ ```sh
296
+ npx --no-install shoalrun search windows-site "missing events" \
297
+ --channel production --version 7.1 --language en
298
+ ```
299
+
300
+ A local MCP server's `search_docs` tool accepts the same `channel`, `version`, and `language` fields. Follow the returned `read.tool` and `read.arguments` to read the matching page or section in that publication. Do not substitute a current-release page with the same logical ID.
301
+
302
+ A hosted MCP build packages one configured publication, so its endpoint rejects requests for a different release. Product selection currently comes from the chosen build or endpoint. A combined product/version catalog is not part of this release. Customer-specific builds should expose only their selected edition to these tools.
303
+
255
304
  ## CLI and MCP ranking details
256
305
 
257
306
  CLI and MCP use the lexical index too, with additional ranking rules for documentation lookups. Browser search keeps its complete-match-first, coverage-first behavior.
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: guide.search
3
+ title: Site search
4
+ summary: Search settings, keyboard behavior, provider interfaces, and index fields.
5
+ type: reference
6
+ area: discovery
7
+ subarea: discovery-search
8
+ canonical: /author/search
9
+ ---
10
+
11
+ # Site search
12
+
13
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
14
+
15
+ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigation/docs-50f26fe22670.txt) (ID: docs). [All sections and pages](https://www.shoalrun.com/llms.min.txt)
16
+
17
+ Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
+
19
+ **Updated: 2026-11-04.**
20
+
21
+ **Verified: 2026-10-01.**
22
+
23
+ Parent page: [Full Markdown page](/author/search.md)
24
+
25
+ **Page reading path** — these links apply to the full page.
26
+
27
+ **Next steps**
28
+
29
+ - [Preview semantic search in this checkout](https://www.shoalrun.com/recipes/preview-hybrid-search.md) — Build the passage index and verify hybrid search and lexical fallback in this checkout.
30
+
31
+ Site search returns links to pages and sections. It is enabled by default and matches words in the browser, with no provider account or server required.
32
+
33
+ Shoalrun supplies the search box and keyboard controls. A **search provider** supplies results; you can replace the built-in provider with your own module. [Search and chat](https://www.shoalrun.com/search-and-chat.md) explains when to add semantic search or cited answers.
34
+
35
+ ## Agent and MCP search scope
36
+
37
+ `outputs.html.search.provider: semantic` changes the website search box. It does not change CLI or MCP search into semantic retrieval. Those tools retain keyword search and explicit publication selection.
38
+
39
+ For a multi-version Windows build, select the release when searching:
40
+
41
+ ```sh
42
+ npx --no-install shoalrun search windows-site "missing events" \
43
+ --channel production --version 7.1 --language en
44
+ ```
45
+
46
+ A local MCP server's `search_docs` tool accepts the same `channel`, `version`, and `language` fields. Follow the returned `read.tool` and `read.arguments` to read the matching page or section in that publication. Do not substitute a current-release page with the same logical ID.
47
+
48
+ A hosted MCP build packages one configured publication, so its endpoint rejects requests for a different release. Product selection currently comes from the chosen build or endpoint. A combined product/version catalog is not part of this release. Customer-specific builds should expose only their selected edition to these tools.
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -43,10 +43,11 @@ outputs:
43
43
  provider: lexical
44
44
  ```
45
45
 
46
- | Provider | Behavior |
47
- | --------- | ----------------------------------------------------------------------- |
48
- | `lexical` | The default. Builds `/search-index.json` and matches it in the browser. |
49
- | `custom` | Loads your browser module. Needs `module`; `index` is optional. |
50
- | `none` | Removes the search box. Writes no index or provider file. |
46
+ | Provider | Behavior |
47
+ | ---------- | ------------------------------------------------------------------------------------------------------------- |
48
+ | `lexical` | The default. Builds `/search-index.json` and matches it in the browser. |
49
+ | `semantic` | Uses Shoalrun’s same-origin search endpoint, with browser keyword fallback. Available since `0.1.0-alpha.16`. |
50
+ | `custom` | Loads your browser module. Needs `module`; `index` is optional. |
51
+ | `none` | Removes the search box. Writes no index or provider file. |
51
52
 
52
53
  The build copies the provider module to `/assets/search-provider.js`. The search box imports that file when a reader first focuses the box or types.
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -0,0 +1,66 @@
1
+ ---
2
+ id: guide.search
3
+ title: Site search
4
+ summary: Search settings, keyboard behavior, provider interfaces, and index fields.
5
+ type: reference
6
+ area: discovery
7
+ subarea: discovery-search
8
+ canonical: /author/search
9
+ ---
10
+
11
+ # Site search
12
+
13
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
14
+
15
+ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigation/docs-50f26fe22670.txt) (ID: docs). [All sections and pages](https://www.shoalrun.com/llms.min.txt)
16
+
17
+ Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
+
19
+ **Updated: 2026-11-04.**
20
+
21
+ **Verified: 2026-10-01.**
22
+
23
+ Parent page: [Full Markdown page](/author/search.md)
24
+
25
+ **Page reading path** — these links apply to the full page.
26
+
27
+ **Next steps**
28
+
29
+ - [Preview semantic search in this checkout](https://www.shoalrun.com/recipes/preview-hybrid-search.md) — Build the passage index and verify hybrid search and lexical fallback in this checkout.
30
+
31
+ Site search returns links to pages and sections. It is enabled by default and matches words in the browser, with no provider account or server required.
32
+
33
+ Shoalrun supplies the search box and keyboard controls. A **search provider** supplies results; you can replace the built-in provider with your own module. [Search and chat](https://www.shoalrun.com/search-and-chat.md) explains when to add semantic search or cited answers.
34
+
35
+ ## Enable included semantic search
36
+
37
+ Available since `0.1.0-alpha.16`.
38
+
39
+ Choose the included semantic provider to connect the search box to Shoalrun's endpoint without writing a browser adapter:
40
+
41
+ ```yaml title="docs.config.yaml"
42
+ outputs:
43
+ html:
44
+ search:
45
+ provider: semantic
46
+ retrieval:
47
+ embeddings:
48
+ provider: voyage
49
+ model: voyage-4-large
50
+ queryModel: voyage-4-lite
51
+ dimension: 1024
52
+ ```
53
+
54
+ Set `VOYAGE_API_KEY` in the terminal environment, then build the site, embed its passages, and start the local endpoint:
55
+
56
+ ```sh
57
+ npx --no-install shoalrun build docs.config.yaml site-dist
58
+ npx --no-install shoalrun index site-dist --embed --config docs.config.yaml
59
+ npx --no-install shoalrun serve site-dist --search --config docs.config.yaml
60
+ ```
61
+
62
+ Keys remain server-side. Each semantic query calls the embedding provider; no chat model is required. The browser sends the selected publication and reader view with each request. A missing or unavailable endpoint uses the included browser keyword index. Requests cancelled by further typing do not start fallback searches.
63
+
64
+ Confirm `mode: vector` in the endpoint response to verify semantic retrieval. Rebuild and reindex edited content, then restart the local server. The [passage index](https://www.shoalrun.com/chat/passage-index.md) explains input reuse and release-specific passage identities.
65
+
66
+ This setting selects the browser connection; it does not provision production hosting. The current [Vercel integration](https://www.shoalrun.com/publish/vercel.md) supplies search through its chat-function deployment. Profiled Vercel chat-function builds remain unsupported. Static deployments retain keyword search when no endpoint is present. Custom search services can continue to use `provider: custom`.
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -16,7 +16,7 @@ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigat
16
16
 
17
17
  Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Search, chat, and agent access > Site search
18
18
 
19
- **Updated: 2026-10-26.**
19
+ **Updated: 2026-11-04.**
20
20
 
21
21
  **Verified: 2026-10-01.**
22
22
 
@@ -18,13 +18,13 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
25
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
26
26
 
27
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
27
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
28
28
 
29
29
  Create the files after building the site:
30
30
 
@@ -90,7 +90,7 @@ Each entry in `chunks` describes one passage:
90
90
 
91
91
  ```json title="ai/chunks.json"
92
92
  {
93
- "id": "guide.configuration#understand-the-three-stages",
93
+ "id": "production%7Ccurrent%7Cen:guide.configuration#understand-the-three-stages",
94
94
  "docId": "guide.configuration",
95
95
  "title": "Organize project configuration",
96
96
  "type": "how-to",
@@ -121,7 +121,7 @@ Each entry in `chunks` describes one passage:
121
121
  | `digest` | A SHA-256 hash of the passage's embedding input. |
122
122
  | `search` | Prepared result content: `schemaVersion: 1`, explanatory `paragraphs`, and code/table `literalLines`. Generated navigation lists are excluded from the paragraphs. |
123
123
 
124
- The file also records `schemaVersion` and a `sourceDigest` that changes when any page's digest changes.
124
+ The file also records `schemaVersion` and a `sourceDigest`. Since `0.1.0-alpha.16`, this digest identifies passage content, publication membership, routes, reader marks, and prepared search evidence. Metadata changes can change this digest without requiring new embeddings.
125
125
 
126
126
  ### Embedding input
127
127
 
@@ -139,15 +139,19 @@ The derived `search` data is not part of the embedding input or its digest. Prep
139
139
 
140
140
  ## Passage IDs and links
141
141
 
142
- A passage ID is the page ID, `#`, and a slug of the heading path. A passage without headings uses `intro`. The chunker adds a suffix when IDs would collide:
142
+ Since `0.1.0-alpha.16`, a passage ID contains the URL-encoded publication, `:`, the URL-encoded page ID, `#`, and a slug of the heading path. Repeated logical page IDs in different releases have distinct passage IDs. A passage without headings uses `intro`. The chunker adds a suffix when IDs would collide:
143
143
 
144
- | ID | Meaning |
145
- | --------------------------------------------------- | ---------------------------------------------------------- |
146
- | `guide.configuration#understand-the-three-stages` | The first passage in that section. |
147
- | `guide.configuration#understand-the-three-stages~2` | The second part of a section that split. |
148
- | `guide.configuration#notes-2` | The second section on the page with the same heading path. |
144
+ | ID | Meaning |
145
+ | ----------------------------------------------------------------------------- | ---------------------------------------------------------- |
146
+ | `production%7Ccurrent%7Cen:guide.configuration#understand-the-three-stages` | The first passage in that section. |
147
+ | `production%7Ccurrent%7Cen:guide.configuration#understand-the-three-stages~2` | The second part of a section that split. |
148
+ | `production%7Ccurrent%7Cen:guide.configuration#notes-2` | The second section on the page with the same heading path. |
149
149
 
150
- IDs stay the same when body text changes. They change when you rename a heading or the page ID.
150
+ IDs stay the same when body text changes. They change when you rename a heading, the page ID, or its publication. Treat the complete passage ID as an opaque identifier; use `docId` for the logical page identity.
151
+
152
+ When upgrading an existing index, rerun `shoalrun index site-dist --embed --config docs.config.yaml` with the same embedding configuration. Matching input vectors are reused even when stored passage IDs change. Regenerate answer cards after rebuilding their cited IDs. Older indexes with duplicate passage IDs fail with rebuild instructions instead of silently sharing vectors across releases.
153
+
154
+ The index command’s JSON summary includes `sourceDigest` and passage counts for each publication. Check these fields before starting a server, and index each customer’s already-pruned build separately. A running preview reads indexes at startup, so restart it after reindexing. Stored vectors remain file-backed; this release does not add an external vector database.
151
155
 
152
156
  Section links come from the heading IDs in `search-index.json`. A passage links to the page, without a `#` anchor, when the build has no search index or when a component generated the heading. Walkthrough steps and tab labels are examples. The [site search](https://www.shoalrun.com/author/search.md) page describes the index.
153
157
 
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -39,14 +39,18 @@ Indexing leaves published page content unchanged. The files sit beside the build
39
39
 
40
40
  ## Passage IDs and links
41
41
 
42
- A passage ID is the page ID, `#`, and a slug of the heading path. A passage without headings uses `intro`. The chunker adds a suffix when IDs would collide:
42
+ Since `0.1.0-alpha.16`, a passage ID contains the URL-encoded publication, `:`, the URL-encoded page ID, `#`, and a slug of the heading path. Repeated logical page IDs in different releases have distinct passage IDs. A passage without headings uses `intro`. The chunker adds a suffix when IDs would collide:
43
43
 
44
- | ID | Meaning |
45
- | --------------------------------------------------- | ---------------------------------------------------------- |
46
- | `guide.configuration#understand-the-three-stages` | The first passage in that section. |
47
- | `guide.configuration#understand-the-three-stages~2` | The second part of a section that split. |
48
- | `guide.configuration#notes-2` | The second section on the page with the same heading path. |
44
+ | ID | Meaning |
45
+ | ----------------------------------------------------------------------------- | ---------------------------------------------------------- |
46
+ | `production%7Ccurrent%7Cen:guide.configuration#understand-the-three-stages` | The first passage in that section. |
47
+ | `production%7Ccurrent%7Cen:guide.configuration#understand-the-three-stages~2` | The second part of a section that split. |
48
+ | `production%7Ccurrent%7Cen:guide.configuration#notes-2` | The second section on the page with the same heading path. |
49
49
 
50
- IDs stay the same when body text changes. They change when you rename a heading or the page ID.
50
+ IDs stay the same when body text changes. They change when you rename a heading, the page ID, or its publication. Treat the complete passage ID as an opaque identifier; use `docId` for the logical page identity.
51
+
52
+ When upgrading an existing index, rerun `shoalrun index site-dist --embed --config docs.config.yaml` with the same embedding configuration. Matching input vectors are reused even when stored passage IDs change. Regenerate answer cards after rebuilding their cited IDs. Older indexes with duplicate passage IDs fail with rebuild instructions instead of silently sharing vectors across releases.
53
+
54
+ The index command’s JSON summary includes `sourceDigest` and passage counts for each publication. Check these fields before starting a server, and index each customer’s already-pruned build separately. A running preview reads indexes at startup, so restart it after reindexing. Stored vectors remain file-backed; this release does not add an external vector database.
51
55
 
52
56
  Section links come from the heading IDs in `search-index.json`. A passage links to the page, without a `#` anchor, when the build has no search index or when a component generated the heading. Walkthrough steps and tab labels are examples. The [site search](https://www.shoalrun.com/author/search.md) page describes the index.
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -18,15 +18,15 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
18
18
 
19
19
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Retrieval and chat > Passage index
20
20
 
21
- **Updated: 2026-10-25.**
21
+ **Updated: 2026-11-04.**
22
22
 
23
23
  **Status: Experimental.**
24
24
 
25
25
  Parent page: [Full Markdown page](/chat/passage-index.md)
26
26
 
27
- A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and custom passage-search providers use it to find relevant parts of a page.
27
+ A passage index splits built Markdown pages into smaller pieces for retrieval. Each passage keeps its page title, heading path, and source link. [Chat](https://www.shoalrun.com/chat.md) and the optional semantic search endpoint use it to find relevant parts of a page.
28
28
 
29
- The built-in [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. You do not need a passage index for normal static-site search.
29
+ The default keyword [search box](https://www.shoalrun.com/author/search.md) uses the separate page-level `search-index.json`. The included `semantic` provider connects that box to the passage-search endpoint. You do not need a passage index for normal static-site keyword search.
30
30
 
31
31
  Create the files after building the site:
32
32
 
@@ -43,7 +43,7 @@ Each entry in `chunks` describes one passage:
43
43
 
44
44
  ```json title="ai/chunks.json"
45
45
  {
46
- "id": "guide.configuration#understand-the-three-stages",
46
+ "id": "production%7Ccurrent%7Cen:guide.configuration#understand-the-three-stages",
47
47
  "docId": "guide.configuration",
48
48
  "title": "Organize project configuration",
49
49
  "type": "how-to",
@@ -74,7 +74,7 @@ Each entry in `chunks` describes one passage:
74
74
  | `digest` | A SHA-256 hash of the passage's embedding input. |
75
75
  | `search` | Prepared result content: `schemaVersion: 1`, explanatory `paragraphs`, and code/table `literalLines`. Generated navigation lists are excluded from the paragraphs. |
76
76
 
77
- The file also records `schemaVersion` and a `sourceDigest` that changes when any page's digest changes.
77
+ The file also records `schemaVersion` and a `sourceDigest`. Since `0.1.0-alpha.16`, this digest identifies passage content, publication membership, routes, reader marks, and prepared search evidence. Metadata changes can change this digest without requiring new embeddings.
78
78
 
79
79
  ### Embedding input
80
80