Skip to content

feat: include source page link in chat responses#180

Open
HardeepAsrani wants to merge 21 commits into
feat/streaming-responsesfrom
feat/chat-source-link
Open

feat: include source page link in chat responses#180
HardeepAsrani wants to merge 21 commits into
feat/streaming-responsesfrom
feat/chat-source-link

Conversation

@HardeepAsrani

@HardeepAsrani HardeepAsrani commented Jun 30, 2026

Copy link
Copy Markdown
Member

The Pro companion is Codeinwp/hyve#236.

What this adds

When Hyve answers a question, it can now show where the answer came from — the knowledge base content it drew on — as small numbered citations under the reply.

Screenshot 2026-07-04 at 3 25 47 AM

Highlights:

  • Off by default. Turn it on under Settings → General → “Show Source Link in Chat Responses.”
  • Numbered citations. Sources appear as a compact Sources 1 2 3 row beneath the answer; hovering (or focusing) a number reveals the page title, and clicking opens it in a new tab.
  • Only what’s relevant. Sources are ranked by how well they match the question, and weak stragglers are dropped — so a question that’s really about one page shows one source, not three padded ones. At most three are shown.
  • Only what’s public. A link is added only for publicly accessible content. Private posts, password-protected posts, and content with no public URL (e.g. custom data) are never linked.
  • Theme-aware. The label and numbers follow the chat’s text color, so they stay legible on both light and custom/dark chat backgrounds.
  • Works with both the streaming and non-streaming reply flows.

For developers

Three filters are available for fine-tuning:

  • hyve_source_link_limit — max number of sources shown (default 3).
  • hyve_source_link_score_ratio — how close to the best match a source must score to be shown, as a ratio of the top score (default 0.8; 0 shows everything above the relevance threshold).
  • hyve_chat_source_link — resolve/override the URL for a given source (used by the Pro plugin for website-link and sitemap sources, and to suppress links for custom data).

Base branch is feat/streaming-responses and this builds on #179 (it reuses the post-visibility helper for the public-accessibility check).

Manual QA

Prerequisite: add a few public Posts/Pages to the Knowledge Base and make sure the chat answers from them.

  1. Enable the setting. Go to Settings → General, set “Show Source Link in Chat Responses” to Enable, and save.
  2. Ask a grounded question. Ask something clearly covered by one of your KB pages. Under the answer you should see a “Sources” label followed by numbered chips.
    • Hover/focus a number → the page title appears as a tooltip.
    • Click a number → the source page opens in a new tab.
  3. Relevance. Ask a question that only one page really covers → you should see just that one source, not three. Ask a broad question covered by several pages → you should see up to three.
  4. Public-only.
    • Set a KB source Post to Private (or add a password), ask a question it would answer → that page must not be linked.
    • Confirm no link is shown for sources that have no public URL.
  5. Both reply modes. Repeat step 2 with streaming responses on and off — citations should appear in both.
  6. Theming. Under Settings → Appearance, set a dark chat/assistant background → the “Sources” label and numbers should remain readable (they switch to a light color); hover fill uses the accent color.
  7. Off state. Set the setting back to Disable and save → answers should no longer show any source citations.
  8. No sources case. Ask an off-topic question the KB can’t answer → no “Sources” row should appear.

With the Pro plugin (Codeinwp/hyve#236) active, also confirm: website-link and sitemap sources link to their original public URL, and custom-data sources show no link.

HardeepAsrani and others added 18 commits July 1, 2026 03:59
… Base

Private posts were excluded from the Add Data list because the listing and
re-index queries filtered to the 'publish' status only. Include the 'private'
status so private posts can be added and stay in sync when edited.
(Password-protected posts already matched 'publish' and were addable.)

Because added content is surfaced to any chat visitor regardless of the post's
original visibility, adding a private or password-protected post now requires
an explicit confirmation.
Append a compact source citation to chat answers, shown only for publicly
accessible sources. Adds a Settings toggle and a hyve_chat_source_link filter
for source-type-specific resolution.
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source) from 2.2.2 to 2.2.3.
- [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-version: 2.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.15 to 8.5.16.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](postcss/postcss@8.5.15...8.5.16)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [grunt](https://github.com/gruntjs/grunt) from 1.6.1 to 1.6.2.
- [Release notes](https://github.com/gruntjs/grunt/releases)
- [Changelog](https://github.com/gruntjs/grunt/blob/main/CHANGELOG)
- [Commits](gruntjs/grunt@v1.6.1...v1.6.2)

---
updated-dependencies:
- dependency-name: grunt
  dependency-version: 1.6.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@wordpress/env](https://github.com/WordPress/gutenberg/tree/HEAD/packages/env) from 11.9.0 to 11.10.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/env/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/blocks@11.10.0/packages/env)

---
updated-dependencies:
- dependency-name: "@wordpress/env"
  dependency-version: 11.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@wordpress/icons](https://github.com/WordPress/gutenberg/tree/HEAD/packages/icons) from 10.32.0 to 15.1.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/icons/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/v15.1.0/packages/icons)

---
updated-dependencies:
- dependency-name: "@wordpress/icons"
  dependency-version: 15.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@wordpress/icons](https://github.com/WordPress/gutenberg/tree/HEAD/packages/icons) from 10.32.0 to 15.1.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/icons/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/v15.1.0/packages/icons)

---
updated-dependencies:
- dependency-name: "@wordpress/icons"
  dependency-version: 15.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source) from 2.2.2 to 2.2.3.
- [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits)

---
updated-dependencies:
- dependency-name: phpstan/phpstan
  dependency-version: 2.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ment/wordpress/env-11.10.0

chore(deps-dev): bump @wordpress/env from 11.9.0 to 11.10.0
…ment/postcss-8.5.16

chore(deps-dev): bump postcss from 8.5.15 to 8.5.16
…ment/tailwindcss-4.3.2

chore(deps-dev): bump tailwindcss from 4.3.1 to 4.3.2
…ment/grunt-1.6.2

chore(deps-dev): bump grunt from 1.6.1 to 1.6.2
Bumps [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) from 4.1.17 to 4.3.2.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/@tailwindcss-postcss)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.3.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ment/tailwindcss/postcss-4.3.2

chore(deps-dev): bump @tailwindcss/postcss from 4.1.17 to 4.3.2
Bumps [@wordpress/scripts](https://github.com/WordPress/gutenberg/tree/HEAD/packages/scripts) from 32.5.0 to 32.6.0.
- [Release notes](https://github.com/WordPress/gutenberg/releases)
- [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/scripts/CHANGELOG.md)
- [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/scripts@32.6.0/packages/scripts)

---
updated-dependencies:
- dependency-name: "@wordpress/scripts"
  dependency-version: 32.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ment/wordpress/scripts-32.6.0

chore(deps-dev): bump @wordpress/scripts from 32.5.0 to 32.6.0
@HardeepAsrani HardeepAsrani marked this pull request as ready for review July 3, 2026 20:01
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Plugin build for 8a3118e is ready 🛎️!

@HardeepAsrani HardeepAsrani changed the base branch from feat/private-password-kb-content to development July 3, 2026 20:04
@HardeepAsrani

Copy link
Copy Markdown
Member Author

@copilot resolve the merge conflicts in this pull request

Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>

Copilot AI commented Jul 3, 2026

Copy link
Copy Markdown

@copilot resolve the merge conflicts in this pull request

Fixed in 7cf3c51.

@HardeepAsrani HardeepAsrani changed the base branch from development to feat/streaming-responses July 3, 2026 20:30
@HardeepAsrani

Copy link
Copy Markdown
Member Author

@copilot resolve the merge conflicts in this pull request

Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>

Copilot AI commented Jul 3, 2026

Copy link
Copy Markdown

@copilot resolve the merge conflicts in this pull request

Fixed in d6ea24c.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants