Files
Nicolò Boschi 163fbb0ede feat(api)!: retire the bank profile and background endpoints (#4127)
* feat(api)!: retire the bank profile and background endpoints

GET/PUT /v1/default/banks/{bank_id}/profile and
POST /v1/default/banks/{bank_id}/background have been deprecated for
several releases. They now answer 410 Gone with the replacement call in
the detail, joining the two endpoints (entity regenerate, synchronous
document export) that already do.

The routes stay in the OpenAPI spec with unchanged signatures, so no
generated SDK method disappears from under a caller — only the behaviour
changes.

Disposition traits and the reflect mission are bank configuration, and
already were: _get_bank_profile_authenticated overlaid config on top of
the legacy DB columns. The `name` these endpoints also returned is a
display-only label available on the bank list.

To make the config API a complete replacement, GET .../config is no
longer gated on HINDSIGHT_API_ENABLE_BANK_CONFIG_API — that flag now
gates only the writes (PATCH/DELETE). A bank must always be able to read
its own resolved settings.

Clients migrated in the same change:
- control plane: bank-profile-view and bank-config-view read disposition
  and mission from the config API, the display name comes from the
  filtered bank list, and the dead /api/profile proxy route is gone.
- hindsight-cli: `bank disposition`, `bank set-disposition` and the
  hidden `bank background` move to the config API. `background` warns
  that it now replaces the mission rather than LLM-merging into it —
  nothing replaces that merge — and its `--no-update-disposition` flag
  is accepted but ignored, as the server stopped inferring disposition
  from the mission long ago.
- TS wrapper: getBankProfile carries a @deprecated pointer.

* test(control-plane): cover the composed bank profile, and drop its extra fetch

bank-context only needs the display name, so it reads the id-filtered bank
list directly instead of going through getBankProfile, which would also
fetch the bank config it has no use for.

* feat(cli)!: drop the deprecated `bank background` command

The server endpoint is gone, and the LLM merge it performed has no
replacement — `bank mission` sets the mission outright. Keeping the
command as an alias would have silently turned a merge into an
overwrite, so it is removed rather than repointed.

* fix(ci): update the CLI coverage manifest, doc example and TS client test

- .openapi-coverage.toml: the three retired operations move to [skip]
  alongside export_documents_sync_removed, and the stale add_bank_background
  / update_bank_disposition field sections are dropped. The CLI helper is
  renamed set_bank_disposition so it no longer satisfies the coverage grep
  by name while calling update_bank_config underneath.
- cli-reference.sh: the two `bank background` snippets become one
  `bank mission`, the command that replaces them.
- main_operations.test.ts: TestBankProfile asserts the 410 and reads the
  same data back from the bank config. try/catch rather than .rejects,
  since this file runs under both jest and Deno's @std/expect shim.

* style: rustfmt the CLI edits, and say why the 410 handlers keep unused params
2026-09-04 18:09:05 +02: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).