fleet-memory/hindsight-docs/sidebars.ts
Nicolò Boschi 30a319a6ab
feat: bank template import/export with Template Hub (#819)
* feat(api): add bank template import/export endpoints

Add POST /banks/{bank_id}/import and GET /banks/{bank_id}/export
endpoints for declarative bank setup via JSON manifests.

A template manifest (version 1) can include bank config overrides
and mental model definitions. Import creates or updates mental
models matched by id, applies config as per-bank overrides, and
returns async operation IDs for content generation.

Export dumps a bank's explicit overrides and mental models as a
manifest that can be re-imported into another bank.

Includes control plane UI: bank creation dialog now accepts an
optional template JSON to pre-configure the bank on creation.

* docs: add Template Gallery page and bank templates reference

- Template Gallery (/templates) with search, category filter, manifest
  preview modal with copy-to-clipboard
- 5 starter templates: Customer Support, Research Assistant, Personal
  Journal, Code Review Buddy, Meeting Notes
- Bank Templates API reference doc (developer/api/bank-templates)
- Sidebar entry under API section

* docs: add Template Gallery links to navbar and sidebar

- Top navbar: "Templates" link between Integrations and Changelog
- Sidebar: "Template Gallery" in Resources section

* fix(docs): remove emoji icons, autofocus search, fix placeholder in template gallery

* docs: rename to Bank Templates, move to Resources sidebar only

* docs: add Bank Templates to Resources navbar dropdown

* feat(api): add directives to bank template import/export

- Add BankTemplateDirective model with name, content, priority, is_active, tags
- Import creates/updates directives matched by name
- Export includes all directives (active and inactive)
- Validation: duplicate names rejected, empty name/content caught
- Tests: 24 tests covering directives create/update, existing vs new
  bank import, validation, export with directives, full round-trip

* docs: add directives to bank templates docs and sample templates

* feat(api): add JSON Schema endpoint for bank template validation

- GET /v1/default/bank-template-schema returns the JSON Schema
  auto-generated from the Pydantic BankTemplateManifest model
- Static schema file at docs/static/bank-template-schema.json
- Docs updated with schema endpoint, static file link, and
  validation examples (Python jsonschema, Node ajv-cli)

* feat(api): live schema validation on import, fix schema endpoint path

- Move schema endpoint to /v1/bank-template-schema (system-level, not per-bank)
- Import endpoint now accepts raw JSON and validates with Pydantic manually,
  returning clean 400 errors instead of raw 422s for all validation failures
- All validation (schema + semantic) returns consistent 400 with detailed messages

* docs: add interactive JSON Schema viewer to Bank Templates page

Renders the Pydantic-generated schema as a collapsible property tree
with types, required badges, defaults, and descriptions. The schema
is imported from the static bank-template-schema.json file.

* ui: add template toggle switch and browse link to bank creation dialog

- Replace always-visible textarea with a switch toggle ("Import from template")
- Textarea only shows when switch is on, keeping the dialog clean by default
- Add "Browse templates" link pointing to hindsight.vectorize.io/templates
- Reset template state when switch is toggled off or dialog is cancelled

* ui: add empty state with Add Document CTA to data view

When a bank has 0 memories, the data view (all tabs: constellation,
graph, table, timeline) shows a centered empty state with a CTA
button that opens the Add Document dialog.

* docs: replace templates with Conversation and Coding Agent

Remove generic placeholder templates. Add two practical templates
based on actual integration patterns:

- Conversation: for chat agents (LiteLLM, LangGraph, Pydantic AI,
  Vercel AI SDK). Tracks user preferences, open threads.
- Coding Agent: for Claude Code/Codex. Tracks technical decisions,
  project context, developer preferences. High literalism.

* docs: rename gallery to Bank Templates Hub, keep API doc as Bank Templates

* docs: register layout-template and file-json icons in navbar and sidebar

* docs: register layout-template icon in DefaultNavbarItem for dropdown items

* docs: show integration icons on template cards

Templates now have an optional `integrations` field referencing
integration IDs from integrations.json. Icons are resolved at render
time and shown in the card header next to the category badge.

* docs: add Personal Assistant template for OpenClaw, Hermes, NemoClaw

* feat: add Export Template to bank actions + map all integrations to templates

- Add "Export Template" to the bank Actions dropdown — exports config,
  mental models, and directives as JSON, copies to clipboard
- Add export API route and client method
- Map remaining integrations to templates: CrewAI, AG2, Agno, Strands,
  LlamaIndex, local-mcp, skills → Conversation; hindclaw → Personal Assistant

* feat: add --template flag to LoCoMo benchmark + remove schema from Hub

- LoCoMo benchmark accepts --template <path> to apply a bank template
  manifest (config, mental models, directives) before ingestion
- Template is applied per-bank in both single-phase and two-phase modes
- BenchmarkRunner.apply_template() reuses the same engine methods as
  the /import API endpoint
- Remove Manifest Schema section from Bank Templates Hub page
  (schema stays in the API reference doc)

* refactor: remove description field from bank template manifest

* docs: remove tags, fact_types, and directives from starter templates

* docs: remove reflect_mission and disposition fields from starter templates

* build: validate template manifests against JSON Schema during docs build

* cleanup: remove unused JsonSchemaViewer component

* docs: remove retain_extraction_mode from starter templates

* ui: enable word wrap in template manifest preview

* docs: add link to Bank Templates reference doc from Hub page

* docs: convert bank templates doc to mdx with multi-language code snippets

- Convert bank-templates.md to .mdx with Tabs/CodeSnippet components
- Add example files: bank-templates.py, .mjs, .sh, .go with doc markers
- Examples cover import, dry-run, export, round-trip, and schema
- Regenerate OpenAPI spec and all client SDKs (Python, TS, Rust, Go)

* fix: migration revision collision + use typed models in benchmark template

- Rename merge migration d6e7f8a9b0c1 -> d6e7f8a9b0c2 to resolve
  revision ID collision with case_insensitive_entities_trgm_index
- Update a4b5c6d7e8f9 down_revision to point to the renamed migration
- Fix f-string lint in case_insensitive migration
- BenchmarkRunner.apply_template() now validates manifest through
  BankTemplateManifest Pydantic model instead of raw dict access
- Remove redundant inline imports (json, Path already at module top)

* fix(docs): add missing Go tab to dry-run code snippet

* ci: retrigger

* fix: sync skills openapi.json + fix bankId null type error in export

- Copy updated openapi.json to skills/hindsight-docs/references/
- Add null guard for bankId in Export Template onClick handler

* fix: sync generated files (memory_engine formatting, docs skill references)

* cleanup: remove obsolete migration collision workaround
2026-04-02 12:21:53 +02:00

423 lines
11 KiB
TypeScript

import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {
developerSidebar: [
{
type: 'category',
label: 'Architecture',
collapsible: false,
items: [
{
type: 'doc',
id: 'developer/index',
label: 'Overview',
customProps: { icon: 'lu-book' },
},
{
type: 'doc',
id: 'developer/retain',
label: 'Retain',
customProps: { icon: 'lu-brain' },
},
{
type: 'doc',
id: 'developer/retrieval',
label: 'Recall',
customProps: { icon: 'lu-search' },
},
{
type: 'doc',
id: 'developer/reflect',
label: 'Reflect',
customProps: { icon: 'lu-message' },
},
{
type: 'doc',
id: 'developer/observations',
label: 'Observations',
customProps: { icon: 'lu-activity' },
},
{
type: 'doc',
id: 'developer/multilingual',
label: 'Multilingual',
customProps: { icon: 'lu-languages' },
},
{
type: 'doc',
id: 'developer/performance',
label: 'Performance',
customProps: { icon: 'lu-zap' },
},
{
type: 'doc',
id: 'developer/storage',
label: 'Storage',
customProps: { icon: 'lu-database' },
},
{
type: 'doc',
id: 'developer/rag-vs-hindsight',
label: 'RAG vs Memory',
customProps: { icon: 'lu-compare' },
},
],
},
{
type: 'category',
label: 'API',
collapsible: false,
items: [
{
type: 'doc',
id: 'developer/api/quickstart',
label: 'Quick Start',
customProps: { icon: 'lu-rocket' },
},
{
type: 'doc',
id: 'developer/api/retain',
label: 'Retain',
customProps: { icon: 'lu-brain' },
},
{
type: 'doc',
id: 'developer/api/recall',
label: 'Recall',
customProps: { icon: 'lu-search' },
},
{
type: 'doc',
id: 'developer/api/reflect',
label: 'Reflect',
customProps: { icon: 'lu-message' },
},
{
type: 'doc',
id: 'developer/api/mental-models',
label: 'Mental Models',
customProps: { icon: 'lu-layers' },
},
{
type: 'doc',
id: 'developer/api/memory-banks',
label: 'Memory Banks',
customProps: { icon: 'lu-memory' },
},
{
type: 'doc',
id: 'developer/api/documents',
label: 'Documents',
customProps: { icon: 'lu-file' },
},
{
type: 'doc',
id: 'developer/api/operations',
label: 'Operations',
customProps: { icon: 'lu-cpu' },
},
{
type: 'doc',
id: 'developer/api/webhooks',
label: 'Webhooks',
customProps: { icon: 'lu-webhook' },
},
{
type: 'doc',
id: 'developer/api/bank-templates',
label: 'Bank Templates',
customProps: { icon: 'lu-file-json' },
},
{
type: 'link',
href: '/api-reference',
label: 'API Reference',
customProps: { icon: 'lu-book-open', iconAfter: 'lu-arrow-up-right' },
},
],
},
{
type: 'category',
label: 'Clients',
collapsible: false,
items: [
{
type: 'doc',
id: 'sdks/python',
label: 'Python',
customProps: { icon: 'si-python' },
},
{
type: 'doc',
id: 'sdks/nodejs',
label: 'TypeScript',
customProps: { icon: '/img/icons/typescript.png' },
},
{
type: 'doc',
id: 'sdks/go',
label: 'Go',
customProps: { icon: 'si-go' },
},
{
type: 'doc',
id: 'sdks/cli',
label: 'CLI',
customProps: { icon: 'lu-terminal' },
},
{
type: 'doc',
id: 'sdks/embed',
label: 'Embedded Python',
customProps: { icon: '/img/icons/package.svg' },
},
],
},
{
type: 'category',
label: 'Integrations',
collapsible: false,
items: [
{
type: 'doc',
id: 'sdks/integrations/local-mcp',
label: 'Local MCP Server',
customProps: { icon: '/img/icons/mcp.png' },
},
{
type: 'doc',
id: 'sdks/integrations/litellm',
label: 'LiteLLM',
customProps: { icon: '/img/icons/litellm.png' },
},
{
type: 'doc',
id: 'sdks/integrations/claude-code',
label: 'Claude Code',
customProps: { icon: '/img/icons/claudecode.svg' },
},
{
type: 'doc',
id: 'sdks/integrations/codex',
label: 'OpenAI Codex CLI',
customProps: { icon: '/img/icons/terminal.svg' },
},
{
type: 'doc',
id: 'sdks/integrations/openclaw',
label: 'OpenClaw',
customProps: { icon: '/img/icons/openclaw.png' },
},
{
type: 'doc',
id: 'sdks/integrations/ai-sdk',
label: 'Vercel AI SDK',
customProps: { icon: '/img/icons/vercel.png' },
},
{
type: 'doc',
id: 'sdks/integrations/chat',
label: 'Vercel Chat SDK',
customProps: { icon: '/img/icons/vercel.png' },
},
{
type: 'doc',
id: 'sdks/integrations/crewai',
label: 'CrewAI',
customProps: { icon: '/img/icons/crewai.png' },
},
{
type: 'doc',
id: 'sdks/integrations/pydantic-ai',
label: 'Pydantic AI',
customProps: { icon: '/img/icons/pydanticai.png' },
},
{
type: 'doc',
id: 'sdks/integrations/agno',
label: 'Agno',
customProps: { icon: '/img/icons/agno.png' },
},
{
type: 'doc',
id: 'sdks/integrations/hermes',
label: 'Hermes Agent',
customProps: { icon: '/img/icons/hermes.png' },
},
{
type: 'doc',
id: 'sdks/integrations/langgraph',
label: 'LangGraph / LangChain',
customProps: { icon: '/img/icons/langgraph.png' },
},
{
type: 'doc',
id: 'sdks/integrations/nemoclaw',
label: 'NemoClaw',
customProps: { icon: '/img/icons/nemoclaw.png' },
},
{
type: 'doc',
id: 'sdks/integrations/strands',
label: 'Strands Agents',
customProps: { icon: '/img/icons/strands.png' },
},
{
type: 'doc',
id: 'sdks/integrations/ag2',
label: 'AG2',
customProps: { icon: '/img/icons/ag2.svg' },
},
{
type: 'doc',
id: 'sdks/integrations/llamaindex',
label: 'LlamaIndex',
customProps: { icon: '/img/icons/llamaindex.png' },
},
{
type: 'doc',
id: 'sdks/integrations/skills',
label: 'Skills',
customProps: { icon: '/img/icons/skills.png' },
},
],
},
{
type: 'category',
label: 'Hosting',
collapsible: false,
items: [
{
type: 'link',
href: 'https://ui.hindsight.vectorize.io/signup',
label: 'Cloud',
customProps: { icon: 'lu-cloud', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'doc',
id: 'developer/installation',
label: 'Installation',
customProps: { icon: 'lu-package' },
},
{
type: 'doc',
id: 'developer/services',
label: 'Services',
customProps: { icon: 'lu-server' },
},
{
type: 'doc',
id: 'developer/configuration',
label: 'Configuration',
customProps: { icon: 'lu-settings' },
},
{
type: 'doc',
id: 'developer/admin-cli',
label: 'Admin CLI',
customProps: { icon: 'lu-terminal' },
},
{
type: 'doc',
id: 'developer/extensions',
label: 'Extensions',
customProps: { icon: 'lu-plug' },
},
{
type: 'doc',
id: 'developer/models',
label: 'Models',
customProps: { icon: 'lu-cpu' },
},
{
type: 'doc',
id: 'developer/monitoring',
label: 'Monitoring',
customProps: { icon: 'lu-activity' },
},
{
type: 'doc',
id: 'developer/mcp-server',
label: 'MCP Server',
customProps: { icon: 'lu-network' },
},
],
},
{
type: 'category',
label: 'Resources',
collapsible: false,
items: [
{
type: 'link',
href: '/templates',
label: 'Bank Templates Hub',
customProps: { icon: 'lu-layout-template', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: '/best-practices',
label: 'Best Practices',
customProps: { icon: 'lu-star', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: '/faq',
label: 'FAQ',
customProps: { icon: 'lu-circle-help', iconAfter: 'lu-arrow-up-right' },
},
],
},
{
type: 'category',
label: 'More',
collapsible: false,
items: [
{
type: 'link',
href: '/cookbook',
label: 'Cookbook',
customProps: { icon: 'lu-book', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: '/blog',
label: 'Blog',
customProps: { icon: 'lu-rss', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: 'https://join.slack.com/t/hindsight-space/shared_invite/zt-3nhbm4w29-LeSJ5Ixi6j8PdiYOCPlOgg',
label: 'Community',
customProps: { icon: 'si-slack', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: 'https://github.com/vectorize-io/hindsight',
label: 'GitHub',
customProps: { icon: 'si-github', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: 'https://benchmarks.hindsight.vectorize.io/',
label: 'Benchmarks',
customProps: { icon: 'lu-chart-bar', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: 'https://benchmarks.hindsight.vectorize.io/',
label: 'Which Model Should I Use?',
customProps: { icon: 'lu-cpu', iconAfter: 'lu-arrow-up-right' },
},
{
type: 'link',
href: 'https://arxiv.org/abs/2512.12818',
label: 'Paper',
customProps: { icon: 'lu-file-text', iconAfter: 'lu-arrow-up-right' },
},
],
},
],
};
export default sidebars;