fleet-memory/hindsight-docs/examples/api
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
..
legacy doc: add blog (#201) 2026-01-28 15:42:14 +01:00
bank-templates.go feat: bank template import/export with Template Hub (#819) 2026-04-02 12:21:53 +02:00
bank-templates.mjs feat: bank template import/export with Template Hub (#819) 2026-04-02 12:21:53 +02:00
bank-templates.py feat: bank template import/export with Template Hub (#819) 2026-04-02 12:21:53 +02:00
bank-templates.sh feat: bank template import/export with Template Hub (#819) 2026-04-02 12:21:53 +02:00
cli-reference.sh ci: finalize test for the documentation code (#57) 2025-12-19 12:17:59 -07:00
directives.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
directives.mjs fix: misc fixes for observations and mental models (#209) 2026-01-27 15:37:57 +01:00
directives.py fix: misc fixes for observations and mental models (#209) 2026-01-27 15:37:57 +01:00
directives.sh feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
documents.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
documents.mjs feat: change tags for a document (#517) 2026-03-07 09:00:13 +01:00
documents.py feat: change tags for a document (#517) 2026-03-07 09:00:13 +01:00
main-methods.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
main-methods.mjs ci: finalize test for the documentation code (#57) 2025-12-19 12:17:59 -07:00
main-methods.py doc: improve api explanation (#415) 2026-02-20 17:02:01 +01:00
memory-banks.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
memory-banks.mjs doc: fix build 2026-02-25 16:58:06 +01:00
memory-banks.py doc: fix build 2026-02-25 16:58:06 +01:00
memory-banks.sh feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
mental-models.go fix(mental-models): add tags_match and tag_groups to trigger config (#786) (#804) 2026-03-31 18:09:01 +02:00
mental-models.mjs feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
mental-models.py feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
mental-models.sh feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
quickstart.go feat: entity labels — optional, free_values, multi_value, UI polish (#450) 2026-03-02 13:05:25 +01:00
quickstart.mjs Add documentation code validation system (#43) 2025-12-18 10:21:38 +01:00
quickstart.py Add documentation code validation system (#43) 2025-12-18 10:21:38 +01:00
quickstart.sh Add documentation code validation system (#43) 2025-12-18 10:21:38 +01:00
README.md doc: mental models (#199) 2026-01-26 14:27:08 +01:00
recall.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
recall.mjs feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
recall.py feat: filter graph memories with tags (#431) 2026-02-25 10:31:40 +01:00
recall.sh feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
reflect.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
reflect.mjs feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
reflect.py doc: improve api explanation (#415) 2026-02-20 17:02:01 +01:00
reflect.sh feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
retain.go feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
retain.mjs feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
retain.py doc: improve api explanation (#415) 2026-02-20 17:02:01 +01:00
retain.sh feat: 4-tab code parity across all documentation examples (#613) 2026-03-19 11:31:51 +01:00
sample.pdf feat: accept pdf, images and office files (#390) 2026-02-17 18:15:03 +01:00

API Documentation Examples

This directory contains runnable example scripts that serve as the source of truth for code samples in the documentation.

How It Works

  1. Scripts are runnable - Each file can be executed as a smoke test
  2. Markers define sections - Code between # [docs:section-name] and # [/docs:section-name] markers is extracted
  3. Docs import at build time - MDX files use raw-loader to import scripts, then CodeSnippet extracts marked sections

File Structure

File Documentation Description
quickstart.py/mjs/sh quickstart.md Getting started examples
retain.py/mjs/sh retain.md Memory ingestion examples
recall.py/mjs/sh recall.md Memory retrieval examples
reflect.py/mjs/sh reflect.md AI reflection examples
memory-banks.py/mjs memory-banks.md Bank management examples
documents.py/mjs documents.md Document CRUD examples
reflections.py reflections.md Reflections CRUD examples
main-methods.py main-methods.md Core method examples
cli-reference.sh cli.md CLI command examples

Running Examples

# Run all Python examples
for f in *.py; do python "$f"; done

# Run all Node.js examples
for f in *.mjs; do node "$f"; done

# Run all CLI examples
for f in *.sh; do bash "$f"; done

Requires a running Hindsight server at http://localhost:8888 (or set HINDSIGHT_API_URL).

Legacy Examples

The legacy/ folder contains deprecated example files kept only for backward compatibility with older documentation versions. These files are not runnable and are skipped by CI tests.

What's NOT Covered

1. OpenAPI Auto-Generated Docs (/api-reference/*)

These pages are generated directly from the OpenAPI specification. The spec itself is the source of truth, and the generated docs reflect it automatically. No manual code examples to validate.

2. Interactive CLI Commands

Command Reason
hindsight configure Requires interactive user input (prompts for API URL, credentials)
hindsight configure --show Displays sensitive configuration, not suitable for automated tests

3. Installation/Setup Instructions

Documentation sections covering pip install, npm install, or system setup are instructions, not executable code samples. These are validated by the CI environment setup itself.

4. Error Handling Examples

Some docs show error responses (e.g., "what happens when bank doesn't exist"). These require intentionally broken states that would fail smoke tests. Error behavior is covered by unit tests instead.

Adding New Examples

  1. Create or edit the appropriate script file
  2. Add markers around the new code section:
    # [docs:my-new-section]
    client.some_method(...)
    # [/docs:my-new-section]
    
  3. Reference in the MDX file:
    import myScript from '!!raw-loader!@site/examples/api/my-script.py';
    <CodeSnippet code={myScript} section="my-new-section" language="python" />
    
  4. Run the script locally to verify it works

Marker Format

  • Python/Bash: # [docs:section-name] / # [/docs:section-name]
  • JavaScript: // [docs:section-name] / // [/docs:section-name]

Section names should be kebab-case and descriptive (e.g., retain-with-context, recall-basic).