fleet-memory/hindsight-clients/go
Nicolò Boschi abbf874d84
feat: webhook system with retain.completed event, UI, and docs (#487)
* doc: update cookbook

* fix(cookbook): preserve tag keys during sync, strip local .md links

- Fix extract_tags_from_readme/notebook to return dict[str,str] preserving
  sdk/topic keys instead of bare values, preventing topics like
  "Customer Service" from being misclassified as SDK
- Add strip_local_md_links() to remove relative .md references that
  would cause broken link errors in Docusaurus build

* ci: run test-doc-examples independently without waiting for test-rust-cli

Build the CLI directly in the job instead of downloading the artifact,
so test-doc-examples can start at the beginning in parallel with all other jobs.

* feat: webhook system with task-owned retry, retain.completed event, and UI

- New webhook system: register per-bank webhooks with HMAC signing, configurable
  HTTP method/timeout/headers/params (http_config JSONB), and PATCH support
- Webhook deliveries run as async_operations (webhook_delivery type) with
  task-owned retry via RetryTaskAt exception and exponential backoff
  (60s / 5m / 30m / 2h / 8h, max 6 attempts)
- New retain.completed event fires per-document for both sync and async retain
- Delivery debug info (status code, response body) stored in result_metadata
- Control plane UI: webhooks tab per bank with create/edit/delete and a
  deliveries table with cursor pagination and expandable response details
- 28 webhook tests covering HMAC signing, delivery retries, CRUD endpoints,
  PATCH update, and retain.completed queuing
- Docs page at developer/api/webhooks documenting event payloads and delivery
- OpenAPI spec and all client SDKs (Python, TypeScript, Rust, Go) regenerated

* fix: update tests for task-owned retry model and guard _webhook_manager attribute

- test_worker.py: test_executor_exception_triggers_retry now raises RetryTaskAt
  (plain exceptions are immediate failures in the new system); rename
  test_executor_exception_marks_failed_after_max_retries to
  test_executor_exception_marks_failed_immediately to reflect new semantics
- test_batch_api.py: remove max_retries kwarg from WorkerPoller constructor
- memory_engine.py: use getattr for _webhook_manager in _fire_retain_webhook
  to avoid AttributeError when engine is created without __init__ (tests)

* fix: remove max_retries from benchmark WorkerPoller call

* fix(webhooks): transactional outbox, observations_deleted tracking, sidebar

- Queue webhook delivery rows atomically with the primary operation using the
  transactional outbox pattern — prevents lost events on process crash:
  - Retain (sync + async): outbox_callback passed into orchestrator.retain_batch
    and called inside the DB transaction, replacing the post-commit fire call
  - Consolidation: new _mark_operation_completed_and_fire_webhook combines the
    status UPDATE and webhook INSERT in one transaction
  - Added fire_event_with_conn() to WebhookManager for in-connection delivery

- Track observations_deleted count in consolidation stats and expose it in the
  consolidation.completed webhook payload (was always None)

- Add Webhooks page to docs sidebar

- Document at-least-once delivery guarantee with operation_id dedup guidance

* fix(ui): add retain.completed to available webhook event types

* feat(ui): add delete confirmation dialog for webhooks

* fix(webhooks): include operation_id in task_payload so delivery is marked completed

The task_payload JSON was missing the operation_id field, causing execute_task
to see operation_id=None and skip _mark_operation_completed — leaving every
delivery row stuck in 'pending' forever.

Added a test that inserts a real async_operations row and verifies the status
transitions to 'completed' after a successful execute_task call.

* style: fix prettier formatting in webhooks-view
2026-03-04 14:17:01 +01:00
..
api feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
test fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
.gitignore feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
api_banks.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_directives.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_documents.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_entities.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_files.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_memory.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_mental_models.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_monitoring.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_operations.go Release v0.4.15 2026-03-03 15:03:42 +01:00
api_webhooks.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
client.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
configuration.go Release v0.4.15 2026-03-03 15:03:42 +01:00
go.mod fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
go.sum feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
hindsight_client.go fix: clients don't respect timeout setting (#400) 2026-02-19 10:47:47 +01:00
integration_test.go feat: entity labels — optional, free_values, multi_value, UI polish (#450) 2026-03-02 13:05:25 +01:00
model_add_background_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_async_operation_submit_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_background_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_bank_config_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_bank_config_update.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_bank_list_item.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_bank_list_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_bank_profile_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_bank_stats_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_budget.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_cancel_operation_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_child_operation_status.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_chunk_data.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_chunk_include_options.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_chunk_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_clear_memory_observations_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_consolidation_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_create_bank_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_create_directive_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_create_mental_model_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_create_mental_model_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_create_webhook_request.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
model_delete_document_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_delete_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_directive_list_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_directive_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_disposition_traits.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_document_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_detail_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_include_options.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_input.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_list_item.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_list_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_observation_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_entity_state_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_features_info.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_file_retain_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_graph_data_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_http_validation_error.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_include_options.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_list_documents_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_list_memory_units_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_list_tags_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_memory_item.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_mental_model_list_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_mental_model_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_mental_model_trigger.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_observation_scopes.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_operation_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_operation_status_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_operations_list_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_recall_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_recall_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_recall_result.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_based_on.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_directive.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_fact.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_include_options.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_llm_call.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_mental_model.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_tool_call.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_reflect_trace.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_retain_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_retain_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_source_facts_include_options.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_tag_item.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_timestamp.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_token_usage.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_tool_calls_include_options.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_update_directive_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_update_disposition_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_update_mental_model_request.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_update_webhook_request.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
model_validation_error.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_validation_error_loc_inner.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_version_response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
model_webhook_delivery_list_response.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
model_webhook_delivery_response.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
model_webhook_http_config.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
model_webhook_list_response.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
model_webhook_response.go feat: webhook system with retain.completed event, UI, and docs (#487) 2026-03-04 14:17:01 +01:00
null_test.go feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
openapi-generator-cli.jar feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
openapi-generator-config.yaml fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
README.md fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
response.go Release v0.4.15 2026-03-03 15:03:42 +01:00
trace_test.go feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
utils.go Release v0.4.15 2026-03-03 15:03:42 +01:00

Go API client for hindsight

HTTP API for Hindsight

Overview

This API client was generated by the OpenAPI Generator project. By using the OpenAPI-spec from a remote server, you can easily generate an API client.

  • API version: 0.4.11
  • Package version: 1.0.0
  • Generator version: 7.10.0
  • Build package: org.openapitools.codegen.languages.GoClientCodegen

Installation

Install the following dependencies:

go get github.com/stretchr/testify/assert
go get golang.org/x/net/context

Put the package under your project folder and add the following in import:

import hindsight "github.com/vectorize-io/hindsight/hindsight-clients/go"

To use a proxy, set the environment variable HTTP_PROXY:

os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port")

Configuration of Server URL

Default configuration comes with Servers field that contains server objects as defined in the OpenAPI specification.

Select Server Configuration

For using other server than the one defined on index 0 set context value hindsight.ContextServerIndex of type int.

ctx := context.WithValue(context.Background(), hindsight.ContextServerIndex, 1)

Templated Server URL

Templated server URL is formatted using default variables from configuration or from context value hindsight.ContextServerVariables of type map[string]string.

ctx := context.WithValue(context.Background(), hindsight.ContextServerVariables, map[string]string{
	"basePath": "v2",
})

Note, enum values are always validated and all unused variables are silently ignored.

URLs Configuration per Operation

Each operation can use different server URL defined using OperationServers map in the Configuration. An operation is uniquely identified by "{classname}Service.{nickname}" string. Similar rules for overriding default operation server index and variables applies by using hindsight.ContextOperationServerIndices and hindsight.ContextOperationServerVariables context maps.

ctx := context.WithValue(context.Background(), hindsight.ContextOperationServerIndices, map[string]int{
	"{classname}Service.{nickname}": 2,
})
ctx = context.WithValue(context.Background(), hindsight.ContextOperationServerVariables, map[string]map[string]string{
	"{classname}Service.{nickname}": {
		"port": "8443",
	},
})

Documentation for API Endpoints

All URIs are relative to http://localhost

Class Method HTTP request Description
BanksAPI AddBankBackground Post /v1/default/banks/{bank_id}/background Add/merge memory bank background (deprecated)
BanksAPI ClearObservations Delete /v1/default/banks/{bank_id}/observations Clear all observations
BanksAPI CreateOrUpdateBank Put /v1/default/banks/{bank_id} Create or update memory bank
BanksAPI DeleteBank Delete /v1/default/banks/{bank_id} Delete memory bank
BanksAPI GetAgentStats Get /v1/default/banks/{bank_id}/stats Get statistics for memory bank
BanksAPI GetBankConfig Get /v1/default/banks/{bank_id}/config Get bank configuration
BanksAPI GetBankProfile Get /v1/default/banks/{bank_id}/profile Get memory bank profile
BanksAPI ListBanks Get /v1/default/banks List all memory banks
BanksAPI ResetBankConfig Delete /v1/default/banks/{bank_id}/config Reset bank configuration
BanksAPI TriggerConsolidation Post /v1/default/banks/{bank_id}/consolidate Trigger consolidation
BanksAPI UpdateBank Patch /v1/default/banks/{bank_id} Partial update memory bank
BanksAPI UpdateBankConfig Patch /v1/default/banks/{bank_id}/config Update bank configuration
BanksAPI UpdateBankDisposition Put /v1/default/banks/{bank_id}/profile Update memory bank disposition
DirectivesAPI CreateDirective Post /v1/default/banks/{bank_id}/directives Create directive
DirectivesAPI DeleteDirective Delete /v1/default/banks/{bank_id}/directives/{directive_id} Delete directive
DirectivesAPI GetDirective Get /v1/default/banks/{bank_id}/directives/{directive_id} Get directive
DirectivesAPI ListDirectives Get /v1/default/banks/{bank_id}/directives List directives
DirectivesAPI UpdateDirective Patch /v1/default/banks/{bank_id}/directives/{directive_id} Update directive
DocumentsAPI DeleteDocument Delete /v1/default/banks/{bank_id}/documents/{document_id} Delete a document
DocumentsAPI GetChunk Get /v1/default/chunks/{chunk_id} Get chunk details
DocumentsAPI GetDocument Get /v1/default/banks/{bank_id}/documents/{document_id} Get document details
DocumentsAPI ListDocuments Get /v1/default/banks/{bank_id}/documents List documents
EntitiesAPI GetEntity Get /v1/default/banks/{bank_id}/entities/{entity_id} Get entity details
EntitiesAPI ListEntities Get /v1/default/banks/{bank_id}/entities List entities
EntitiesAPI RegenerateEntityObservations Post /v1/default/banks/{bank_id}/entities/{entity_id}/regenerate Regenerate entity observations (deprecated)
MemoryAPI ClearBankMemories Delete /v1/default/banks/{bank_id}/memories Clear memory bank memories
MemoryAPI GetGraph Get /v1/default/banks/{bank_id}/graph Get memory graph data
MemoryAPI GetMemory Get /v1/default/banks/{bank_id}/memories/{memory_id} Get memory unit
MemoryAPI ListMemories Get /v1/default/banks/{bank_id}/memories/list List memory units
MemoryAPI ListTags Get /v1/default/banks/{bank_id}/tags List tags
MemoryAPI RecallMemories Post /v1/default/banks/{bank_id}/memories/recall Recall memory
MemoryAPI Reflect Post /v1/default/banks/{bank_id}/reflect Reflect and generate answer
MemoryAPI RetainMemories Post /v1/default/banks/{bank_id}/memories Retain memories
MentalModelsAPI CreateMentalModel Post /v1/default/banks/{bank_id}/mental-models Create mental model
MentalModelsAPI DeleteMentalModel Delete /v1/default/banks/{bank_id}/mental-models/{mental_model_id} Delete mental model
MentalModelsAPI GetMentalModel Get /v1/default/banks/{bank_id}/mental-models/{mental_model_id} Get mental model
MentalModelsAPI ListMentalModels Get /v1/default/banks/{bank_id}/mental-models List mental models
MentalModelsAPI RefreshMentalModel Post /v1/default/banks/{bank_id}/mental-models/{mental_model_id}/refresh Refresh mental model
MentalModelsAPI UpdateMentalModel Patch /v1/default/banks/{bank_id}/mental-models/{mental_model_id} Update mental model
MonitoringAPI GetVersion Get /version Get API version and feature flags
MonitoringAPI HealthEndpointHealthGet Get /health Health check endpoint
MonitoringAPI MetricsEndpointMetricsGet Get /metrics Prometheus metrics endpoint
OperationsAPI CancelOperation Delete /v1/default/banks/{bank_id}/operations/{operation_id} Cancel a pending async operation
OperationsAPI GetOperationStatus Get /v1/default/banks/{bank_id}/operations/{operation_id} Get operation status
OperationsAPI ListOperations Get /v1/default/banks/{bank_id}/operations List async operations

Documentation For Models

Documentation For Authorization

Endpoints do not require authorization.

Documentation for Utility Methods

Due to the fact that model structure members are all pointers, this package contains a number of utility functions to easily obtain pointers to values of basic types. Each of these functions takes a value of the given basic type and returns a pointer to it:

  • PtrBool
  • PtrInt
  • PtrInt32
  • PtrInt64
  • PtrFloat
  • PtrFloat32
  • PtrFloat64
  • PtrString
  • PtrTime

Author