Skip to content

feat: README rewrite, MCP section, vanilla/Vue demos + security hardening - #336

Merged
vamgan merged 9 commits into
mainfrom
claude/create-agents-md-fqfEf
Jun 11, 2026
Merged

vamgan merged 9 commits into
mainfrom
claude/create-agents-md-fqfEf

Conversation

@vamgan

@vamgan vamgan commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

Viral growth features

  • README.md — full rewrite with problem-first framing, before/after comparison, prominent MCP section, and links to all demos
  • examples/vanilla-chat/index.html — zero-install single-file demo: open in any browser, no build step. Loads @askable-ui/core from CDN, has a full analytics dashboard (3 KPIs + 4 deals) with real-time "What the AI sees" panel and mock AI chat that gives context-accurate responses
  • examples/vue-dashboard/ — Vue 3 + Vite dashboard example targeting the Vue community. Same data, idiomatic <Askable> + useAskable() pattern, live context panel, mock chat
  • site/www/index.html — website improvements:
    • Updated page title and OG/Twitter meta tags with sharper, viral copy
    • Hero eyebrow: now calls out "Claude Desktop · Cursor · CopilotKit · any LLM"
    • Hero body paragraph: problem-first framing ("no screenshots, no guessing")
    • Nav: MCP link added
    • Integrations section: Claude Desktop and Cursor added as MCP client cards (5 total)
    • New dedicated MCP section with code example, Claude Desktop config JSON, and 4 feature cards
    • CTA: "Your AI. Your UI. Finally connected." + Live demo link
    • Footer: MCP guide and Live demo links

Security hardening (7 commits)

  • mcp/index.ts: generic error messages (no raw exception leakage); requireRedacted option blocks forwarding non-redacted packets to MCP clients
  • observer.ts: querySelector wrapped in try/catch; parseMeta validates JSON is a plain object before casting
  • context.ts: querySelector try/catch; sync subscribe() callback now guarded to match subscribeAsync()
  • capture.ts: onCapture, onCancel, onSubmit, and selectionAffordance.render all wrapped; duplicate removeAffordance() call removed
  • selection.ts: onCapture and onCancel wrapped; destroy() moved before onCapture so listeners can't leak if callback throws
  • useAskableTextSelectionCapture.ts (React): stale closure fix — uses optionsRef.current instead of closure snapshot
  • useAskableScrollView.ts (React Native): selectVisible/getMeta/getText callbacks wrapped
  • scaffold.js: path traversal guard (targetDir.startsWith(cwd))

Test plan

  • cd packages/core && npx vitest run — 225 tests pass
  • cd packages/mcp && npx vitest run — 13 tests pass (includes 3 new requireRedacted tests)
  • cd packages/react && npx vitest run — 58 tests pass (includes stale closure test)
  • Open examples/vanilla-chat/index.html in a browser — click KPI cards, see context update, chat works
  • cd examples/vue-dashboard && npm install && npm run dev — dashboard loads, context panel updates on click

Generated by Claude Code

@vercel

vercel Bot commented Jun 11, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
askable Ready Ready Preview, Comment Jun 11, 2026 5:56am

claude added 7 commits June 11, 2026 05:47
…lback safety

- capture.ts: call removeAffordance() before re-rendering the selection
  affordance so repeated captures with once:false don't accumulate DOM nodes
- mcp/index.ts: add requireRedacted option that blocks forwarding packets
  where privacy.redacted===false, preventing unredacted data reaching the
  MCP client; add corresponding tests
- useAskableScrollView.ts: wrap selectVisible/getMeta/getText callbacks in
  try/catch so a consumer-thrown exception cannot halt scroll sync
…n exceptions

- context.ts subscribe(): add try/catch around the sync subscriber callback
  to match the existing protection in subscribeAsync(); prevents a throwing
  subscriber from crashing the observer chain
- selection.ts: move destroy() before onCapture invocation and wrap the
  callback in try/catch so an exception in user code never leaves selection
  listeners dangling
- capture.ts: remove duplicate removeAffordance() call introduced during
  the previous commit; single call is sufficient and idempotent
…h try/catch

- capture.ts: guard onCapture, onCancel, and onSubmit callbacks so a
  consumer exception cannot propagate into internal pointer/key event
  handlers or leave the DOM in an inconsistent state
- selection.ts: guard onCancel so a throwing consumer cannot leave the
  cancel path half-executed; matches the onCapture fix from the previous commit
…wn exceptions

Wrap the user-supplied affordance render function in try/catch so an
exception does not interrupt the post-capture flow or leave internal
state inconsistent.
…la demo

README:
- New punchy headline: "Your LLM doesn't know what the user is looking at. Fix that in two lines."
- Lead with "What the AI receives" — shows actual promptContext output upfront
- Before/after comparison showing the problem (stale system prompt) vs the solution
- Prominent MCP section with 3-line setup and Claude Desktop config
- Better organized sections: capture modes, integrations table, framework quick starts
- Links to vanilla-chat example as zero-install demo

examples/vanilla-chat/index.html:
- Zero-install single-file demo that opens directly in any browser
- Full analytics dashboard (3 KPI cards, 4-row deal table) with data-askable
- Real-time "What the AI sees" panel showing live promptContext
- Mock AI chat that generates context-accurate responses from the actual data
- Copy context button, keyboard navigation, beautiful dark-mode design
- Loads @askable-ui/core from CDN — no build step

site/www/index.html:
- Updated page title and OG/Twitter meta tags with sharper copy
- Hero eyebrow: "Claude Desktop · Cursor · CopilotKit · any LLM" (was generic)
- Hero body paragraph: problem-first framing (no screenshots, no guessing)
- Nav: added MCP link, removed redundant Patterns/Integrations links
- Integrations section: added Claude Desktop and Cursor as MCP client cards (5 total)
- New MCP section with code examples, Claude Desktop config, and feature cards
- CTA: "Your AI. Your UI. Finally connected." + Live demo link added
- Footer: MCP guide and Live demo links added
Minimal Vue 3 + Vite demo showing the core askable-ui pattern:
- <Askable :meta="..."> keeps data-askable in sync with reactive props
- useAskable() composable returns promptContext ref that auto-updates
- Live "What the AI sees" panel showing the actual context string
- Mock AI chat demonstrating how specific and accurate responses become
  when the AI has real context (NRR/pipeline/deals with actual values)

Includes README with real-LLM wiring instructions for OpenAI/Anthropic.
… links

- vanilla-chat/README.md: explains zero-install approach, how CDN import
  works, and shows how to connect to a real LLM API (OpenAI/Anthropic)
- README.md: fix @askable/react → @askable-ui/react import typo
- README.md: expand Live links section with Vue, React Native, analytics
  dashboard, and vanilla examples with one-liner descriptions
@pkg-pr-new

pkg-pr-new Bot commented Jun 11, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

@askable-ui/context

npm i https://pkg.pr.new/@askable-ui/context@336

@askable-ui/core

npm i https://pkg.pr.new/@askable-ui/core@336

@askable-ui/create-app

npm i https://pkg.pr.new/@askable-ui/create-app@336

@askable-ui/mcp

npm i https://pkg.pr.new/@askable-ui/mcp@336

@askable-ui/react

npm i https://pkg.pr.new/@askable-ui/react@336

@askable-ui/react-native

npm i https://pkg.pr.new/@askable-ui/react-native@336

@askable-ui/svelte

npm i https://pkg.pr.new/@askable-ui/svelte@336

@askable-ui/vue

npm i https://pkg.pr.new/@askable-ui/vue@336

commit: 011b1ee

@vamgan
vamgan merged commit 8c05253 into main Jun 11, 2026
9 checks passed
@vamgan vamgan changed the title feat: viral growth — README rewrite, MCP section, vanilla/Vue demos + security hardening feat: README rewrite, MCP section, vanilla/Vue demos + security hardening Jun 13, 2026

This branch was successfully deployed

1 active deployment
Preview — 011b1eec Deployed Jun 11, 2026 by vercel[bot]
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