feat: honcho 3.0, sdks 2.0, excise stainless, update v3 docs, changelogs (#331)

* chore: 3.0 honcho and 2.0 sdks changelog

fix: use PeerContextResponse in peer.ts

* chore: move docs to /v3/, build SDKs

* chore: code review

* feat: [WIP] migrate away from stainless in typescript sdk

* chore: move api from /v2/ to /v3/

* feat: no-stainless typescript with real tests

* feat: migrate python sdk off of stainless

* feat: clean typescript sdk

* chore: add tests for ts http client

* fix: rewrite entire python sdk in new format, update typescript sdk to use `configuration` not `config` for consistency with API

* fix: clean up SDKs, synchronize

* chore: update sdk examples

* chore: update OpenAPI documentation and SDK examples to reflect changes

* fix: better test

* fix: install deps in test runner, improve robustness of streaming in sdk, coderabbit nits

* fix: standardize around camelCase in TS SDK

* refactor: update configuration handling in SDKs to use typed models for workspace, session, and peer configurations

* docs: clarify queue status usage and remove polling methods from SDKs

add claude skills for migrations

* chore: fix links in docs

* feat: add deriver flush mode to bypass batch token threshold

- Introduced `is_deriver_flush_enabled` function to check if flush mode is active.
- Updated `QueueManager` to conditionally apply batch token thresholds based on flush mode.
- Enhanced `UnifiedTestExecutor` to enable flush mode via Redis.
- Added `flush` parameter to test cases to facilitate testing of flush mode behavior.
- Updated various test cases to utilize the new flush functionality.

* feat: implement schedule_dream functionality in SDKs, use in unified test runner

- Added `schedule_dream` method to both Python and TypeScript SDKs for scheduling dream tasks.
- Updated HTTP routes to include endpoint for scheduling dreams.
- Enhanced test runner to utilize the new `schedule_dream` method for scheduling actions.
- Updated TypeScript client to support the new scheduling functionality with appropriate parameters.

* feat: update single deriver task to support multiple observers

- Changed the `observer` parameter to `observers` as a list in multiple functions across the deriver module.
- Updated the processing logic to handle multiple observers for representation tasks.
- Adjusted related payload and queue management functions to accommodate the new observers structure.
- Modified tests to reflect changes in the representation task handling and ensure proper functionality.

* refactor: update enqueue tests to support deduplication of queue items with multiple observers

- Modified tests in `test_enqueue.py` to reflect changes in the queue item structure, where each message now results in a single queue item containing a list of observers.
- Updated assertions to validate that the `observers` field correctly includes all relevant peers, ensuring proper functionality of the deduplication logic.
- Removed redundant payload matching logic to streamline test cases and improve clarity.

* fix: add backwards compatibility for representation work unit keys and payload observers

* feat: update dialectic configuration and introduce cost calculator

- Adjusted LLM and dialectic settings in `.env.template`, `config.toml.example`, and `src/config.py` to reduce maximum tool output characters and session history tokens for cost efficiency.
- Implemented a new `dialectic_cost_calculator.py` script to estimate costs based on reasoning levels and model pricing.
- Enhanced `DialecticAgent` to utilize minimal tools and adjusted output token settings based on reasoning level to optimize performance and reduce costs.

* feat: add reasoning level to chat input in unified test runner

- Enhanced the `UnifiedTestExecutor` to include a `reasoning_level` parameter in the chat method call.
- Updated the `QueryAction` model to support the new `reasoning_level` attribute, allowing for more nuanced chat interactions.

* feat: run deriver once for multiple observers (#335)

* feat: update single deriver task to support multiple observers

- Changed the `observer` parameter to `observers` as a list in multiple functions across the deriver module.
- Updated the processing logic to handle multiple observers for representation tasks.
- Adjusted related payload and queue management functions to accommodate the new observers structure.
- Modified tests to reflect changes in the representation task handling and ensure proper functionality.

* refactor: update enqueue tests to support deduplication of queue items with multiple observers

- Modified tests in `test_enqueue.py` to reflect changes in the queue item structure, where each message now results in a single queue item containing a list of observers.
- Updated assertions to validate that the `observers` field correctly includes all relevant peers, ensuring proper functionality of the deduplication logic.
- Removed redundant payload matching logic to streamline test cases and improve clarity.

* fix: add backwards compatibility for representation work unit keys and payload observers

* feat: refactor benchmark runners to share common functionality

- Introduced a new `runner_common.py` module containing shared utilities for benchmark test runners, including common argument parsing, client creation, and queue management.
- Updated `BEAMRunner`, `LoCoMoRunner`, and `LongMemEvalRunner` to inherit from `RunnerMixin`, leveraging shared functionality for metrics collection and logging.
- Added `reasoning_level` and `redis_url` parameters to runner constructors for enhanced configuration.
- Streamlined argument parsing by utilizing `add_common_arguments` for shared command-line options across all runners.

* fix: update last_user_message handling to use message content instead of ID

* fix: standardize config vs configuration

---------

Co-authored-by: Vineeth Voruganti <13438633+VVoruganti@users.noreply.github.com>
This commit is contained in:
doria 2026-01-22 15:16:28 -05:00 committed by GitHub
parent 6b3ecef601
commit dce96889bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
321 changed files with 23044 additions and 16913 deletions

View File

@ -0,0 +1,478 @@
# Detailed API Changes
## 1. Async Client Architecture (Major Change)
The separate `AsyncHoncho`, `AsyncPeer`, and `AsyncSession` classes have been removed. Use the `.aio` accessor instead.
### Before (v1.6.0)
```python
from honcho import Honcho, AsyncHoncho, AsyncPeer, AsyncSession
# Sync client
client = Honcho()
# Async client - separate class
async_client = AsyncHoncho()
peer = await async_client.peer("user-123")
response = await peer.chat("query")
```
### After (v2.0.0)
```python
from honcho import Honcho
# Single client with .aio accessor for async operations
client = Honcho()
# Sync operations
peer = client.peer("user-123")
response = peer.chat("query")
# Async operations via .aio accessor
peer = await client.aio.peer("user-123")
response = await peer.aio.chat("query")
# Async iteration
async for p in client.aio.peers():
print(p.id)
```
**Migration steps:**
1. Remove all `AsyncHoncho`, `AsyncPeer`, `AsyncSession` imports
2. Replace `AsyncHoncho()` with `Honcho()` and use `.aio` accessor
3. Replace `AsyncPeer` type hints with `Peer`
4. Replace `AsyncSession` type hints with `Session`
5. Access async methods via `.aio` property on instances
---
## 2. Observations → Conclusions (Terminology Change)
### Before (v1.6.0)
```python
from honcho import Observation, ObservationScope, AsyncObservationScope
# Access observations
scope = peer.observations
scope = peer.observations_of("other-peer")
# List observations
obs_list = scope.list()
# Query observations
results = scope.query("preferences")
# Create observations
scope.create([{"content": "User likes dark mode", "session_id": "sess-1"}])
# Get representation from observations
rep = scope.get_representation()
```
### After (v2.0.0)
```python
from honcho import Conclusion, ConclusionScope, ConclusionScopeAio
# Access conclusions
scope = peer.conclusions
scope = peer.conclusions_of("other-peer")
# List conclusions (now returns SyncPage, not list)
conclusions_page = scope.list()
for conclusion in conclusions_page:
print(conclusion.content)
# Query conclusions
results = scope.query("preferences")
# Create conclusions
scope.create([{"content": "User likes dark mode", "session_id": "sess-1"}])
# Get representation from conclusions
rep = scope.representation() # Returns str, not Representation object
```
---
## 3. Representation Type Change (Major Change)
The `Representation` class has been removed. Representations are now simple strings.
### Before (v1.6.0)
```python
from honcho import Representation, ExplicitObservation, DeductiveObservation
# Get working representation
rep: Representation = peer.working_rep()
# Access explicit and deductive observations
for obs in rep.explicit:
print(obs.content, obs.created_at)
for obs in rep.deductive:
print(obs.conclusion, obs.premises)
# Check if empty
if rep.is_empty():
print("No observations")
# Merge representations
rep.merge_representation(other_rep)
# Diff representations
diff = rep.diff_representation(other_rep)
# String formatting
print(str(rep))
print(rep.str_no_timestamps())
print(rep.format_as_markdown())
```
### After (v2.0.0)
```python
# Get representation - now returns str directly
rep: str = peer.representation()
# It's just a string now
print(rep)
# Check if empty
if not rep:
print("No conclusions")
```
**Removed methods:**
- `.explicit` property
- `.deductive` property
- `.is_empty()`
- `.merge_representation()`
- `.diff_representation()`
- `.str_no_timestamps()`
- `.format_as_markdown()`
---
## 4. Configuration Parameter Rename
All `config` parameters have been renamed to `configuration`, and configuration types are now strongly typed.
### Before (v1.6.0)
```python
# Creating resources with config
peer = client.peer("user-1", config={"observe_me": True})
session = client.session("sess-1", config={"some_setting": True})
# Getting/setting config
config = peer.get_config()
peer.set_config({"observe_me": False})
config = session.get_config()
session.set_config({"some_setting": False})
config = client.get_config()
client.set_config({"workspace_setting": True})
# Message config parameter
msg = peer.message("Hello", config={"reasoning": {"enabled": True}})
```
### After (v2.0.0)
```python
from honcho.api_types import PeerConfig, SessionConfiguration, WorkspaceConfiguration
# Creating resources with configuration (typed)
peer = client.peer("user-1", configuration=PeerConfig(observe_me=True))
session = client.session("sess-1", configuration=SessionConfiguration())
# Getting/setting configuration (returns typed objects)
config: PeerConfig = peer.get_configuration()
peer.set_configuration(PeerConfig(observe_me=False))
config: SessionConfiguration = session.get_configuration()
session.set_configuration(SessionConfiguration())
config: WorkspaceConfiguration = client.get_configuration()
client.set_configuration(WorkspaceConfiguration())
# Message configuration parameter
msg = peer.message("Hello", configuration={"reasoning": {"enabled": True}})
```
---
## 5. Streaming Chat API Change
### Before (v1.6.0)
```python
# Streaming via parameter
response = peer.chat("query", stream=True)
for chunk in response:
print(chunk, end="")
final = response.get_final_response()
```
### After (v2.0.0)
```python
# Streaming via separate method
stream = peer.chat_stream("query")
for chunk in stream:
print(chunk, end="")
final = stream.get_final_response()
# Non-streaming (no stream parameter needed)
response = peer.chat("query")
```
---
## 6. Deriver Status → Queue Status
### Before (v1.6.0)
```python
from honcho_core.types import DeriverStatus
# Get status
status: DeriverStatus = client.get_deriver_status()
status = session.get_deriver_status()
# Poll until complete
status = client.poll_deriver_status(timeout=300.0)
status = session.poll_deriver_status(timeout=300.0)
# Access fields
print(status.pending_work_units)
print(status.in_progress_work_units)
```
### After (v2.0.0)
```python
from honcho.api_types import QueueStatusResponse
# Get status
status: QueueStatusResponse = client.queue_status()
status = session.queue_status()
# Access fields (same as before)
print(status.pending_work_units)
print(status.in_progress_work_units)
# poll_deriver_status has been removed - implement polling manually if needed:
import time
def poll_until_complete(client, timeout=300.0):
start = time.time()
while time.time() - start < timeout:
status = client.queue_status()
if status.pending_work_units == 0 and status.in_progress_work_units == 0:
return status
time.sleep(1)
raise TimeoutError("Queue processing did not complete in time")
```
---
## 7. PeerContext Changes
### Before (v1.6.0)
```python
from honcho import PeerContext
context: PeerContext = peer.get_context()
# Access representation (was Representation object)
rep: Representation = context.representation
if rep:
print(rep.explicit)
print(rep.deductive)
```
### After (v2.0.0)
```python
from honcho.api_types import PeerContextResponse
context: PeerContextResponse = peer.context()
# Access representation (now str)
rep: str | None = context.representation
if rep:
print(rep)
```
---
## 8. Card Method Return Type Change
### Before (v1.6.0)
```python
# card() returned str (joined with newlines)
card: str = peer.card()
print(card) # "line1\nline2\nline3"
```
### After (v2.0.0)
```python
# card() returns list[str] | None
card: list[str] | None = peer.card()
if card:
print("\n".join(card)) # Join manually if needed
```
---
## 9. Message Update Location Change
### Before (v1.6.0)
```python
# Update message via client
updated = client.update_message(
message=msg,
metadata={"key": "value"},
session="session-id" # Required if message is string ID
)
```
### After (v2.0.0)
```python
# Update message via session
updated = session.update_message(
message=msg,
metadata={"key": "value"}
)
```
---
## 10. Removed: `core` Property
### Before (v1.6.0)
```python
# Access underlying Stainless-generated client
core_client = client.core
workspace = client.core.workspaces.get_or_create(id="custom-workspace")
```
### After (v2.0.0)
```python
# The `core` property has been removed
# The SDK no longer uses a Stainless-generated client internally
# Use the SDK's public API directly
```
---
## 11. Environment Changes
### Before (v1.6.0)
```python
# Three environments available
client = Honcho(environment="local")
client = Honcho(environment="production")
client = Honcho(environment="demo")
```
### After (v2.0.0)
```python
# Only two environments
client = Honcho(environment="local")
client = Honcho(environment="production")
# "demo" environment has been removed
```
---
## 12. Reasoning Level Parameter (New Feature)
The chat method now supports a `reasoning_level` parameter:
```python
# New in v2.0.0
response = peer.chat(
"complex query",
reasoning_level="high" # "minimal", "low", "medium", "high", "max"
)
stream = peer.chat_stream(
"complex query",
reasoning_level="max"
)
```
---
## 13. Import Changes Summary
### Removed Imports
```python
# These no longer exist in v2.0.0
from honcho import AsyncHoncho # Use Honcho with .aio accessor
from honcho import AsyncPeer # Use Peer with .aio accessor
from honcho import AsyncSession # Use Session with .aio accessor
from honcho import Observation # Renamed to Conclusion
from honcho import ObservationScope # Renamed to ConclusionScope
from honcho import AsyncObservationScope # Renamed to ConclusionScopeAio
from honcho import Representation # Removed (now str)
from honcho import ExplicitObservation # Removed
from honcho import DeductiveObservation # Removed
from honcho import PeerContext # Use PeerContextResponse from api_types
```
### New Imports
```python
from honcho import Conclusion, ConclusionScope
from honcho import ConclusionScopeAio
from honcho import HonchoAio, PeerAio, SessionAio # For type hints
from honcho import MessageCreateParams, Message
# Typed configuration classes
from honcho.api_types import (
PeerConfig,
SessionConfiguration,
WorkspaceConfiguration,
SessionPeerConfig,
QueueStatusResponse,
PeerContextResponse,
)
```
### Message Type Import Changes
```python
# Before
from honcho_core.types.workspaces.sessions import MessageCreateParam
from honcho_core.types.workspaces.sessions.message import Message
from honcho.session import SessionPeerConfig
# After
from honcho import Message, MessageCreateParams # Note: plural "Params"
from honcho.api_types import SessionPeerConfig
```
**Note:** `MessageCreateParam` (singular) is now `MessageCreateParams` (plural).

View File

@ -0,0 +1,121 @@
# Migration Checklist
Use this checklist to track migration progress. Copy into your working notes and check off items as completed.
## Dependencies
- [ ] Update `honcho` package to v2.0.0
- [ ] Remove any `honcho-core` imports
## Async Architecture Changes
- [ ] Remove `AsyncHoncho` imports → use `Honcho` with `.aio` accessor
- [ ] Remove `AsyncPeer` imports → use `Peer` with `.aio` accessor
- [ ] Remove `AsyncSession` imports → use `Session` with `.aio` accessor
- [ ] Update all async client usage to use `.aio` accessor pattern
- [ ] Update type hints: `AsyncPeer``Peer`, `AsyncSession``Session`
## Terminology: Observations → Conclusions
- [ ] Replace `Observation` import with `Conclusion`
- [ ] Replace `ObservationScope` import with `ConclusionScope`
- [ ] Replace `AsyncObservationScope` import with `ConclusionScopeAio`
- [ ] Replace `.observations` property with `.conclusions`
- [ ] Replace `.observations_of()` method with `.conclusions_of()`
- [ ] Replace `.get_representation()` with `.representation()`
## Representation Changes
- [ ] Remove `Representation` import (now returns `str`)
- [ ] Remove `ExplicitObservation` import
- [ ] Remove `DeductiveObservation` import
- [ ] Replace `working_rep()` with `representation()`
- [ ] Update type hints from `Representation` to `str`
- [ ] Remove `.explicit` property access
- [ ] Remove `.deductive` property access
- [ ] Replace `.is_empty()` checks with `not rep`
- [ ] Remove `.merge_representation()` calls
- [ ] Remove `.diff_representation()` calls
- [ ] Remove `.str_no_timestamps()` calls
- [ ] Remove `.format_as_markdown()` calls
## Configuration Changes
- [ ] Replace all `config=` parameters with `configuration=`
- [ ] Replace `.get_config()` with `.get_configuration()`
- [ ] Replace `.set_config()` with `.set_configuration()`
- [ ] Rename `.get_peer_config()``.get_peer_configuration()`
- [ ] Rename `.set_peer_config()``.set_peer_configuration()`
- [ ] Import typed config classes from `honcho.api_types` if needed:
- [ ] `PeerConfig`
- [ ] `SessionConfiguration`
- [ ] `WorkspaceConfiguration`
## Method Renames
### Peer Methods
- [ ] `peer.working_rep()``peer.representation()`
- [ ] `peer.get_context()``peer.context()`
- [ ] `peer.get_sessions()``peer.sessions()`
- [ ] `peer.chat(stream=True)``peer.chat_stream()`
### Session Methods
- [ ] `session.get_context()``session.context()`
- [ ] `session.get_summaries()``session.summaries()`
- [ ] `session.get_messages()``session.messages()`
- [ ] `session.get_peers()``session.peers()`
- [ ] `session.get_peer_config()``session.get_peer_configuration()`
- [ ] `session.set_peer_config()``session.set_peer_configuration()`
- [ ] `session.working_rep()``session.representation()`
- [ ] `session.get_deriver_status()``session.queue_status()`
- [ ] Remove `session.poll_deriver_status()` calls
### Client Methods
- [ ] `client.get_peers()``client.peers()`
- [ ] `client.get_sessions()``client.sessions()`
- [ ] `client.get_workspaces()``client.workspaces()`
- [ ] `client.get_deriver_status()``client.queue_status()`
- [ ] Remove `client.poll_deriver_status()` calls
- [ ] Move `client.update_message()``session.update_message()`
## Parameter Renames
- [ ] `include_most_derived=``include_most_frequent=`
- [ ] `max_observations=``max_conclusions=`
## Return Type Changes
- [ ] Handle `card()` returning `list[str] | None` instead of `str`
- [ ] Handle `.list()` on conclusions returning `SyncPage` instead of `list`
## Removed Features
- [ ] Remove any usage of `client.core` property
- [ ] Remove usage of `"demo"` environment (only `"local"` and `"production"` remain)
- [ ] Implement custom polling if you were using `poll_deriver_status()`
## Type Import Updates
- [ ] Replace `PeerContext` import with `PeerContextResponse` from `honcho.api_types`
- [ ] Replace `DeriverStatus` import with `QueueStatusResponse` from `honcho.api_types`
- [ ] Replace `MessageCreateParam` with `MessageCreateParams` (plural)
- [ ] Move `SessionPeerConfig` import from `honcho.session` to `honcho.api_types`
## Exception Handling (Optional)
- [ ] Update exception handling to use new exception types if needed:
- `HonchoError`, `APIError`, `BadRequestError`, `AuthenticationError`
- `PermissionDeniedError`, `NotFoundError`, `ConflictError`
- `UnprocessableEntityError`, `RateLimitError`, `ServerError`
- `TimeoutError`, `ConnectionError`
## Final Verification
- [ ] Run type checker (mypy/pyright) with no errors
- [ ] Run tests
- [ ] Verify async operations work with `.aio` accessor
- [ ] Verify streaming functionality works with `chat_stream()`
- [ ] Verify configuration changes take effect

View File

@ -0,0 +1,277 @@
---
name: migrate-honcho
description: Migrates Honcho Python SDK code from v1.6.0 to v2.0.0. Use when upgrading honcho package, fixing breaking changes after upgrade, or when errors mention AsyncHoncho, observations, Representation class, .core property, or get_config methods.
---
# Honcho Python SDK Migration (v1.6.0 → v2.0.0)
## Overview
This skill migrates code from `honcho` Python SDK v1.6.0 to v2.0.0 (required for Honcho 3.0.0).
**Key breaking changes:**
- `AsyncHoncho`/`AsyncPeer`/`AsyncSession` removed → use `.aio` accessor
- "Observation" → "Conclusion" terminology
- `Representation` class removed (returns `str` now)
- `get_config`/`set_config` → `get_configuration`/`set_configuration`
- Streaming via `chat_stream()` instead of `chat(stream=True)`
- `poll_deriver_status()` removed
- `.core` property removed
## Quick Migration
### 1. Update async architecture
```python
# Before
from honcho import AsyncHoncho, AsyncPeer, AsyncSession
async_client = AsyncHoncho()
peer = await async_client.peer("user-123")
response = await peer.chat("query")
# After
from honcho import Honcho
client = Honcho()
peer = await client.aio.peer("user-123")
response = await peer.aio.chat("query")
# Async iteration
async for p in client.aio.peers():
print(p.id)
```
### 2. Replace observations with conclusions
```python
# Before
from honcho import Observation, ObservationScope, AsyncObservationScope
scope = peer.observations
scope = peer.observations_of("other-peer")
rep = scope.get_representation()
# After
from honcho import Conclusion, ConclusionScope, ConclusionScopeAio
scope = peer.conclusions
scope = peer.conclusions_of("other-peer")
rep = scope.representation() # Returns str
```
### 3. Update representation handling
```python
# Before
from honcho import Representation, ExplicitObservation, DeductiveObservation
rep: Representation = peer.working_rep()
print(rep.explicit)
print(rep.deductive)
if rep.is_empty():
print("No observations")
# After
rep: str = peer.representation()
print(rep) # Just a string now
if not rep:
print("No conclusions")
```
### 4. Rename configuration methods
```python
# Before
config = peer.get_config()
peer.set_config({"observe_me": False})
session.get_config()
client.get_config()
# After
from honcho.api_types import PeerConfig, SessionConfiguration, WorkspaceConfiguration
config = peer.get_configuration()
peer.set_configuration(PeerConfig(observe_me=False))
session.get_configuration()
client.get_configuration()
```
### 5. Update method names
```python
# Before
peer.working_rep()
peer.get_context()
peer.get_sessions()
session.get_context()
session.get_summaries()
session.get_messages()
session.get_peers()
session.get_peer_config()
client.get_peers()
client.get_sessions()
client.get_workspaces()
# After
peer.representation()
peer.context()
peer.sessions()
session.context()
session.summaries()
session.messages()
session.peers()
session.get_peer_configuration()
client.peers()
client.sessions()
client.workspaces()
```
### 6. Update streaming
```python
# Before
response = peer.chat("query", stream=True)
for chunk in response:
print(chunk, end="")
# After
stream = peer.chat_stream("query")
for chunk in stream:
print(chunk, end="")
```
### 7. Update queue status (formerly deriver)
```python
# Before
from honcho_core.types import DeriverStatus
status = client.get_deriver_status()
status = client.poll_deriver_status(timeout=300.0) # Removed!
# After
from honcho.api_types import QueueStatusResponse
status = client.queue_status()
# poll_deriver_status removed - implement polling manually if needed
```
### 8. Update representation parameters
```python
# Before
rep = peer.working_rep(
include_most_derived=True,
max_observations=50
)
# After
rep = peer.representation(
include_most_frequent=True,
max_conclusions=50
)
```
### 9. Move update_message to session
```python
# Before
updated = client.update_message(message=msg, metadata={"key": "value"}, session="sess-id")
# After
updated = session.update_message(message=msg, metadata={"key": "value"})
```
### 10. Update card() return type
```python
# Before
card: str = peer.card() # Returns str
# After
card: list[str] | None = peer.card() # Returns list[str] | None
if card:
print("\n".join(card))
```
## Quick Reference Table
| v1.6.0 | v2.0.0 |
|--------|--------|
| `AsyncHoncho()` | `Honcho()` + `.aio` accessor |
| `AsyncPeer` | `Peer` + `.aio` accessor |
| `AsyncSession` | `Session` + `.aio` accessor |
| `Observation` | `Conclusion` |
| `ObservationScope` | `ConclusionScope` |
| `AsyncObservationScope` | `ConclusionScopeAio` |
| `Representation` | `str` |
| `.observations` | `.conclusions` |
| `.observations_of()` | `.conclusions_of()` |
| `.get_config()` | `.get_configuration()` |
| `.set_config()` | `.set_configuration()` |
| `.working_rep()` | `.representation()` |
| `.get_context()` | `.context()` |
| `.get_sessions()` | `.sessions()` |
| `.get_peers()` | `.peers()` |
| `.get_messages()` | `.messages()` |
| `.get_summaries()` | `.summaries()` |
| `.get_deriver_status()` | `.queue_status()` |
| `.poll_deriver_status()` | *(removed)* |
| `.get_peer_config()` | `.get_peer_configuration()` |
| `.set_peer_config()` | `.set_peer_configuration()` |
| `client.update_message()` | `session.update_message()` |
| `chat(stream=True)` | `chat_stream()` |
| `include_most_derived=` | `include_most_frequent=` |
| `max_observations=` | `max_conclusions=` |
| `config=` | `configuration=` |
| `PeerContext` | `PeerContextResponse` |
| `DeriverStatus` | `QueueStatusResponse` |
| `client.core` | *(removed)* |
## Detailed Reference
For comprehensive details on each change, see:
- [DETAILED-CHANGES.md](DETAILED-CHANGES.md) - Full API change documentation
- [MIGRATION-CHECKLIST.md](MIGRATION-CHECKLIST.md) - Step-by-step checklist
## New Exception Types
```python
from honcho import (
HonchoError,
APIError,
BadRequestError,
AuthenticationError,
PermissionDeniedError,
NotFoundError,
ConflictError,
UnprocessableEntityError,
RateLimitError,
ServerError,
TimeoutError,
ConnectionError,
)
```
## New Import Locations
```python
# Configuration types
from honcho.api_types import (
PeerConfig,
SessionConfiguration,
WorkspaceConfiguration,
SessionPeerConfig,
QueueStatusResponse,
PeerContextResponse,
)
# Async type hints
from honcho import HonchoAio, PeerAio, SessionAio
# Message types (note: Params is plural now)
from honcho import Message, MessageCreateParams
```

View File

@ -0,0 +1,432 @@
# Detailed API Changes
## Client Changes
### `.core` Property Removed
The `.core` property (which exposed the raw `@honcho-ai/core` client) has been removed. Use `.http` for advanced HTTP access.
```typescript
// Before
const workspace = await client.core.workspaces.getOrCreate({ id: 'my-workspace' })
// After - SDK handles workspace creation automatically
// For advanced usage:
const response = await client.http.post('/v3/workspaces', { body: { id: 'my-workspace' } })
```
### Listing Methods Return Type Changes
- `workspaces()` now returns `Page<string>` instead of `string[]`
- `session.peers()` now returns `Peer[]` instead of `Page<Peer>`
```typescript
const workspacePage = await honcho.workspaces()
for (const id of workspacePage.items) {
console.log(id)
}
```
### `updateMessage()` Moved to Session
```typescript
// Before
await honcho.updateMessage(message, { key: 'value' }, session)
// After
await session.updateMessage(message, { key: 'value' })
```
### `config` Option Renamed to `configuration`
```typescript
// Before
const peer = await honcho.peer('user-id', { config: { observe_me: true } })
const session = await honcho.session('session-id', { config: { ... } })
// After
const peer = await honcho.peer('user-id', { configuration: { observeMe: true } })
const session = await honcho.session('session-id', { configuration: { reasoning: { enabled: true } } })
```
---
## Peer Changes
### Streaming API
The `stream` option on `chat()` has been removed. Use `chatStream()` instead.
```typescript
// Before
const stream = await peer.chat('Hello', { stream: true })
for await (const chunk of stream) {
process.stdout.write(chunk)
}
// After
const stream = await peer.chatStream('Hello')
for await (const chunk of stream) {
process.stdout.write(chunk)
}
```
Non-streaming `chat()` now only returns `string | null`:
```typescript
const response = await peer.chat('Hello') // Returns string | null
```
### New `reasoningLevel` Option
```typescript
const response = await peer.chat('Complex question', {
reasoningLevel: 'high' // 'minimal' | 'low' | 'medium' | 'high' | 'max'
})
```
### `workingRep()` Renamed to `representation()`
```typescript
// Before
const rep = await peer.workingRep(session, target, options)
console.log(rep.toString())
console.log(rep.explicit)
console.log(rep.deductive)
// After
const rep = await peer.representation({
session,
target,
searchQuery: options?.searchQuery,
maxConclusions: options?.maxObservations,
includeMostFrequent: options?.includeMostDerived,
})
console.log(rep) // Returns string directly
```
### `getContext()` Renamed to `context()`
Options are now passed as a single object:
```typescript
// Before
const ctx = await peer.getContext(target, options)
// After
const ctx = await peer.context({ target, ...options })
```
### `card()` Return Type Changed
```typescript
// Before
const card = await peer.card(target) // Returns string
// After
const card = await peer.card(target) // Returns string[] | null
```
### `message()` Options Changed
```typescript
// Before
const msg = peer.message('Hello', {
metadata: { key: 'value' },
configuration: { deriver: { enabled: true } },
created_at: '2024-01-01T00:00:00Z'
})
// Returns ValidatedMessageCreate with peer_id, created_at
// After
const msg = peer.message('Hello', {
metadata: { key: 'value' },
configuration: { reasoning: { enabled: true } },
createdAt: '2024-01-01T00:00:00Z'
})
// Returns MessageInput with peerId, createdAt
```
### `PeerContext.representation` Type Changed
```typescript
// Before
const ctx = await peer.getContext()
if (ctx.representation) {
console.log(ctx.representation.explicit) // Representation object
console.log(ctx.representation.deductive)
}
// After
const ctx = await peer.context()
if (ctx.representation) {
console.log(ctx.representation) // Now a string
}
```
---
## Session Changes
### `getPeers()` Return Type Changed
```typescript
// Before
const peers = await session.getPeers() // Returns Page<Peer>
// After
const peers = await session.peers() // Returns Peer[]
```
### `getContext()` Renamed to `context()`
```typescript
// Before
const ctx = await session.getContext({
summary: true,
peerTarget: user,
peerPerspective: assistant,
representationOptions: {
maxObservations: 50,
includeMostDerived: true
}
})
// After
const ctx = await session.context({
summary: true,
peerTarget: user,
peerPerspective: assistant,
representationOptions: {
maxConclusions: 50,
includeMostFrequent: true
}
})
```
### `SessionPeerConfig` Uses camelCase and Methods Renamed
```typescript
// Before
await session.setPeerConfig(peer, {
observe_me: true,
observe_others: false
})
const config = await session.peerConfig(peer)
// After
await session.setPeerConfiguration(peer, {
observeMe: true,
observeOthers: false
})
const config = await session.getPeerConfiguration(peer)
```
---
## Message Changes
### Message Properties Use camelCase
```typescript
// Before (from @honcho-ai/core)
message.peer_id
message.session_id
message.workspace_id
message.created_at
message.token_count
// After
message.peerId
message.sessionId
message.workspaceId
message.createdAt
message.tokenCount
```
### MessageInput Type
```typescript
// Before
interface ValidatedMessageCreate {
peer_id: string
content: string
metadata?: Record<string, unknown>
configuration?: Record<string, unknown>
created_at?: string
}
// After
interface MessageInput {
peerId: string
content: string
metadata?: Record<string, unknown>
configuration?: MessageConfiguration
createdAt?: string
}
```
---
## Streaming Changes
### `DialecticStreamDelta` Removed
```typescript
// Before
import { DialecticStreamDelta, DialecticStreamChunk } from '@honcho-ai/sdk'
// After
import { DialecticStreamChunk, DialecticStreamResponse } from '@honcho-ai/sdk'
```
---
## Configuration Changes
### Workspace Configuration
Configurations are now strongly typed objects instead of `Record<string, unknown>`.
```typescript
// Before
await honcho.setConfig({
deriver: { enabled: true },
some_custom_key: 'value'
})
// After
await honcho.setConfiguration({
reasoning: {
enabled: true,
customInstructions: 'Be concise'
},
peerCard: {
use: true,
create: true
},
summary: {
enabled: true,
messagesPerShortSummary: 20,
messagesPerLongSummary: 60
},
dream: {
enabled: true
}
})
```
### Peer Configuration
```typescript
// Before
await peer.setConfig({ observe_me: false })
// After
await peer.setConfiguration({ observeMe: false })
```
### Message Configuration
```typescript
// Before
peer.message('Hello', {
configuration: {
deriver: { enabled: true }
}
})
// After
peer.message('Hello', {
configuration: {
reasoning: {
enabled: true,
customInstructions: 'Focus on emotions'
}
}
})
```
---
## Type Changes
### Removed Exports
- `Observation` (use `Conclusion`)
- `ObservationScope` (use `ConclusionScope`)
- `ObservationData`, `ObservationCreateParam`, `ObservationQueryParams`
- `Representation`, `RepresentationData`, `RepresentationOptions` (class removed)
- `ExplicitObservation`, `DeductiveObservation`
- `DialecticStreamDelta`
- `DeriverStatusOptions` (use `QueueStatusOptions`)
- `MessageCreate` (use `MessageInput`)
- `WorkingRepParams`
### New Exports
```typescript
import {
// Domain classes
Conclusion,
ConclusionScope,
ConclusionCreateParams,
// Error types
HonchoError,
AuthenticationError,
BadRequestError,
NotFoundError,
PermissionDeniedError,
RateLimitError,
ConflictError,
UnprocessableEntityError,
ServerError,
ConnectionError,
TimeoutError,
// Message types
Message,
MessageInput,
// Configuration types
WorkspaceConfig,
SessionConfig,
PeerConfig,
SessionPeerConfig,
MessageConfiguration,
ReasoningConfig,
PeerCardConfig,
SummaryConfig,
DreamConfig,
// API response types
QueueStatus,
QueueStatusOptions,
RepresentationOptions,
ConclusionQueryParams,
ConclusionResponse,
} from '@honcho-ai/sdk'
```
### SummaryData Type Changed
```typescript
// Before
interface SummaryData {
content: string
message_id: string
summary_type: string
created_at: string
token_count: number
}
// After
interface SummaryData {
content: string
messageId: string
summaryType: string
createdAt: string
tokenCount: number
}
```

View File

@ -0,0 +1,108 @@
# Migration Checklist
Use this checklist to track migration progress. Copy into your working notes and check off items as completed.
## Dependencies
- [ ] Remove `@honcho-ai/core` from dependencies
- [ ] Update `@honcho-ai/sdk` to v2.0.0
## Client-Level Changes
- [ ] Replace all `.core` usages with `.http` or remove
- [ ] Rename `getConfig()``getConfiguration()`
- [ ] Rename `setConfig()``setConfiguration()`
- [ ] Rename `getPeers()``peers()`
- [ ] Rename `getSessions()``sessions()`
- [ ] Rename `getWorkspaces()``workspaces()` (returns `Page<string>` now)
- [ ] Rename `getDeriverStatus()``queueStatus()`
- [ ] Remove `pollDeriverStatus()` calls entirely (no replacement—do not rely on queue being empty)
- [ ] Move `updateMessage()` calls from client to session
## Peer-Level Changes
- [ ] Replace `peer.chat(q, { stream: true })` with `peer.chatStream(q)`
- [ ] Rename `getSessions()``sessions()`
- [ ] Rename `getConfig()``getConfiguration()`
- [ ] Rename `setConfig()``setConfiguration()`
- [ ] Rename `peerConfig()``getPeerConfiguration()`
- [ ] Rename `setPeerConfig()``setPeerConfiguration()`
- [ ] Rename `workingRep()``representation()` (returns string now)
- [ ] Rename `getContext()``context()`
- [ ] Replace `observations``conclusions`
- [ ] Replace `observationsOf()``conclusionsOf()`
- [ ] Handle `card()` returning `string[] | null` instead of `string`
## Session-Level Changes
- [ ] Rename `getPeers()``peers()` (returns `Peer[]` now, not `Page<Peer>`)
- [ ] Rename `getMessages()``messages()`
- [ ] Rename `getConfig()``getConfiguration()`
- [ ] Rename `setConfig()``setConfiguration()`
- [ ] Rename `getContext()``context()`
- [ ] Rename `getSummaries()``summaries()`
- [ ] Rename `getDeriverStatus()``queueStatus()`
- [ ] Remove `pollDeriverStatus()` calls entirely (no replacement—do not rely on queue being empty)
- [ ] Rename `workingRep()``representation()` (returns string now)
## Terminology Changes
- [ ] Rename `maxObservations``maxConclusions`
- [ ] Rename `includeMostDerived``includeMostFrequent`
- [ ] Rename `Observation` type → `Conclusion`
- [ ] Rename `ObservationScope` type → `ConclusionScope`
## snake_case → camelCase
- [ ] Update all `{ config: ... }` to `{ configuration: ... }`
- [ ] Update `observe_me``observeMe`
- [ ] Update `observe_others``observeOthers`
- [ ] Update `created_at``createdAt`
- [ ] Update message property access:
- [ ] `peer_id``peerId`
- [ ] `session_id``sessionId`
- [ ] `workspace_id``workspaceId`
- [ ] `created_at``createdAt`
- [ ] `token_count``tokenCount`
- [ ] Update summary property access:
- [ ] `message_id``messageId`
- [ ] `summary_type``summaryType`
## Configuration Objects
- [ ] Update workspace configuration to typed structure
- [ ] Update session configuration to typed structure
- [ ] Update peer configuration to typed structure
- [ ] Replace `deriver` config with `reasoning` config
## Error Handling
- [ ] Update error handling to use new error types if needed
## Type Imports
- [ ] Remove imports of deleted types:
- `Observation`, `ObservationScope`, `ObservationData`
- `Representation`, `RepresentationData`
- `ExplicitObservation`, `DeductiveObservation`
- `DialecticStreamDelta`
- `DeriverStatusOptions`
- `MessageCreate`, `ValidatedMessageCreate`
- `WorkingRepParams`
- [ ] Add imports of new types as needed:
- `Conclusion`, `ConclusionScope`
- `MessageInput`
- `QueueStatusOptions`
- Error types
## Representation Handling
- [ ] Remove usage of `Representation` class methods (`.explicit`, `.deductive`, `.isEmpty()`, `.diff()`)
- [ ] Handle representation as plain string
## Final Verification
- [ ] Run TypeScript compiler with no errors
- [ ] Run tests
- [ ] Verify streaming functionality works
- [ ] Verify configuration changes take effect

View File

@ -0,0 +1,227 @@
---
name: migrate-honcho-ts
description: Migrates Honcho TypeScript SDK code from v1.6.0 to v2.0.0. Use when upgrading @honcho-ai/sdk, fixing breaking changes after upgrade, or when errors mention removed APIs like .core, getConfig, observations, or snake_case properties.
---
# Honcho TypeScript SDK Migration (v1.6.0 → v2.0.0)
## Overview
This skill migrates code from `@honcho-ai/sdk` v1.6.0 to v2.0.0 (required for Honcho 3.0.0).
**Key breaking changes:**
- `@honcho-ai/core` dependency removed
- "Observation" → "Conclusion" terminology
- "Deriver" → "Queue" terminology
- `getConfig`/`setConfig` → `getConfiguration`/`setConfiguration`
- `snake_case``camelCase` throughout
- Streaming via `chatStream()` instead of `chat({ stream: true })`
- `Representation` class removed (returns string now)
## Quick Migration
### 1. Update dependencies
Remove `@honcho-ai/core` from package.json. The SDK now has its own HTTP client.
### 2. Replace `.core` with `.http`
```typescript
// Before
const workspace = await client.core.workspaces.getOrCreate({ id: 'my-workspace' })
// After
const response = await client.http.post('/v3/workspaces', { body: { id: 'my-workspace' } })
```
### 3. Rename configuration methods
```typescript
// Before
await honcho.getConfig()
await honcho.setConfig({ key: 'value' })
await peer.getConfig()
await session.getConfig()
// After
await honcho.getConfiguration()
await honcho.setConfiguration({ reasoning: { enabled: true } })
await peer.getConfiguration()
await session.getConfiguration()
```
### 4. Rename listing methods
```typescript
// Before
const peers = await honcho.getPeers()
const sessions = await honcho.getSessions()
const workspaces = await honcho.getWorkspaces() // string[]
// After
const peers = await honcho.peers()
const sessions = await honcho.sessions()
const workspaces = await honcho.workspaces() // Page<string>
```
### 5. Update streaming
```typescript
// Before
const stream = await peer.chat('Hello', { stream: true })
// After
const stream = await peer.chatStream('Hello')
```
### 6. Update observations → conclusions
```typescript
// Before
peer.observations
peer.observationsOf('bob')
maxObservations: 50
includeMostDerived: true
// After
peer.conclusions
peer.conclusionsOf('bob')
maxConclusions: 50
includeMostFrequent: true
```
### 7. Update queue status methods
```typescript
// Before
await honcho.getDeriverStatus({ observer: peer })
await honcho.pollDeriverStatus({ timeoutMs: 60000 }) // REMOVE - see note below
// After
await honcho.queueStatus({ observer: peer })
// pollDeriverStatus() has no replacement - see note below
```
**Important:** `pollDeriverStatus()` and its polling pattern have been removed entirely. Do not rely on the queue ever being empty. The queue is a continuous processing system—new messages may arrive at any time, and waiting for "completion" is not a valid pattern. If your code previously polled for queue completion, redesign it to work without that assumption.
### 8. Convert snake_case to camelCase
```typescript
// Before
message.peer_id
message.session_id
message.created_at
message.token_count
{ observe_me: true, observe_others: false }
{ created_at: '2024-01-01' }
// After
message.peerId
message.sessionId
message.createdAt
message.tokenCount
{ observeMe: true, observeOthers: false }
{ createdAt: '2024-01-01' }
```
### 9. Update representation calls
```typescript
// Before
const rep = await peer.workingRep(session, target, options)
console.log(rep.explicit) // ExplicitObservation[]
console.log(rep.deductive) // DeductiveObservation[]
// After
const rep = await peer.representation({ session, target, ...options })
console.log(rep) // string
```
### 10. Move updateMessage to session
```typescript
// Before
await honcho.updateMessage(message, metadata, session)
// After
await session.updateMessage(message, metadata)
```
## Quick Reference Table
| v1.6.0 | v2.0.0 |
|--------|--------|
| `client.core` | `client.http` |
| `getConfig()` | `getConfiguration()` |
| `setConfig()` | `setConfiguration()` |
| `getPeers()` | `peers()` |
| `getSessions()` | `sessions()` |
| `getWorkspaces()` | `workspaces()` |
| `getDeriverStatus()` | `queueStatus()` |
| `pollDeriverStatus()` | *Removed - do not poll* |
| `peer.chat(q, { stream: true })` | `peer.chatStream(q)` |
| `peer.workingRep()` | `peer.representation()` |
| `peer.getContext()` | `peer.context()` |
| `peer.observations` | `peer.conclusions` |
| `peer.observationsOf()` | `peer.conclusionsOf()` |
| `session.getPeers()` | `session.peers()` |
| `session.getMessages()` | `session.messages()` |
| `session.getSummaries()` | `session.summaries()` |
| `session.getContext()` | `session.context()` |
| `session.workingRep()` | `session.representation()` |
| `session.peerConfig()` | `session.getPeerConfiguration()` |
| `session.setPeerConfig()` | `session.setPeerConfiguration()` |
| `{ timeoutMs: 60000 }` | `{ timeout: 60 }` |
| `{ maxObservations: 50 }` | `{ maxConclusions: 50 }` |
| `{ includeMostDerived }` | `{ includeMostFrequent }` |
| `{ config: ... }` | `{ configuration: ... }` |
| `message.peer_id` | `message.peerId` |
| `message.created_at` | `message.createdAt` |
| `Observation` | `Conclusion` |
| `ObservationScope` | `ConclusionScope` |
## Detailed Reference
For comprehensive details on each change, see:
- [DETAILED-CHANGES.md](DETAILED-CHANGES.md) - Full API change documentation
- [MIGRATION-CHECKLIST.md](MIGRATION-CHECKLIST.md) - Step-by-step checklist
## New Error Types
```typescript
import {
HonchoError,
AuthenticationError,
BadRequestError,
NotFoundError,
PermissionDeniedError,
RateLimitError,
ConflictError,
UnprocessableEntityError,
ServerError,
ConnectionError,
TimeoutError
} from '@honcho-ai/sdk'
```
## New Configuration Types
Configurations are now strongly typed:
```typescript
await honcho.setConfiguration({
reasoning: {
enabled: true,
customInstructions: 'Be concise'
},
peerCard: { use: true, create: true },
summary: {
enabled: true,
messagesPerShortSummary: 20,
messagesPerLongSummary: 60
},
dream: { enabled: true }
})
```

View File

@ -85,7 +85,7 @@ LLM_ANTHROPIC_API_KEY=your-anthropic-api-key-here
# Global LLM settings # Global LLM settings
# LLM_DEFAULT_MAX_TOKENS=2500 # LLM_DEFAULT_MAX_TOKENS=2500
# LLM_EMBEDDING_PROVIDER=openai # LLM_EMBEDDING_PROVIDER=openai
# LLM_MAX_TOOL_OUTPUT_CHARS=30000 # Max chars for tool output (~7500 tokens) # LLM_MAX_TOOL_OUTPUT_CHARS=10000 # Max chars for tool output (~2500 tokens)
# LLM_MAX_MESSAGE_CONTENT_CHARS=2000 # Max chars per message in tool results # LLM_MAX_MESSAGE_CONTENT_CHARS=2000 # Max chars per message in tool results
# ============================================================================= # =============================================================================
@ -121,43 +121,47 @@ LLM_ANTHROPIC_API_KEY=your-anthropic-api-key-here
# DIALECTIC_MAX_OUTPUT_TOKENS=8192 # DIALECTIC_MAX_OUTPUT_TOKENS=8192
# DIALECTIC_MAX_INPUT_TOKENS=100000 # DIALECTIC_MAX_INPUT_TOKENS=100000
# DIALECTIC_HISTORY_TOKEN_LIMIT=8192 # DIALECTIC_HISTORY_TOKEN_LIMIT=8192
# DIALECTIC_SESSION_HISTORY_MAX_TOKENS=16384 # DIALECTIC_SESSION_HISTORY_MAX_TOKENS=4096
# Per-level settings (reasoning_level parameter in API) # Per-level settings (reasoning_level parameter in API)
# Each level can have its own provider, model, thinking budget, and tool iterations # Each level can have its own provider, model, thinking budget, tool iterations, and max output tokens
# MAX_OUTPUT_TOKENS is optional per level; if not set, uses global DIALECTIC_MAX_OUTPUT_TOKENS
# Minimal level # Minimal level
# DIALECTIC_LEVELS__minimal__PROVIDER=google # DIALECTIC_LEVELS__minimal__PROVIDER=google
# DIALECTIC_LEVELS__minimal__MODEL=gemini-2.5-flash-lite # DIALECTIC_LEVELS__minimal__MODEL=gemini-2.5-flash-lite
# DIALECTIC_LEVELS__minimal__THINKING_BUDGET_TOKENS=0 # DIALECTIC_LEVELS__minimal__THINKING_BUDGET_TOKENS=0
# DIALECTIC_LEVELS__minimal__MAX_TOOL_ITERATIONS=5 # DIALECTIC_LEVELS__minimal__MAX_TOOL_ITERATIONS=1
# DIALECTIC_LEVELS__minimal__TOOL_CHOICE=any # DIALECTIC_LEVELS__minimal__MAX_OUTPUT_TOKENS=250 # Reduced output for cost savings
# Low level # Low level
# DIALECTIC_LEVELS__low__PROVIDER=google # DIALECTIC_LEVELS__low__PROVIDER=google
# DIALECTIC_LEVELS__low__MODEL=gemini-3-flash-preview # DIALECTIC_LEVELS__low__MODEL=gemini-2.5-flash-lite
# DIALECTIC_LEVELS__low__THINKING_BUDGET_TOKENS=0 # DIALECTIC_LEVELS__low__THINKING_BUDGET_TOKENS=0
# DIALECTIC_LEVELS__low__MAX_TOOL_ITERATIONS=5 # DIALECTIC_LEVELS__low__MAX_TOOL_ITERATIONS=5
# DIALECTIC_LEVELS__low__TOOL_CHOICE=any # DIALECTIC_LEVELS__low__MAX_OUTPUT_TOKENS=8192 # Optional: override global default
# Medium level # Medium level
# DIALECTIC_LEVELS__medium__PROVIDER=anthropic # DIALECTIC_LEVELS__medium__PROVIDER=anthropic
# DIALECTIC_LEVELS__medium__MODEL=claude-haiku-4-5 # DIALECTIC_LEVELS__medium__MODEL=claude-haiku-4-5
# DIALECTIC_LEVELS__medium__THINKING_BUDGET_TOKENS=1024 # DIALECTIC_LEVELS__medium__THINKING_BUDGET_TOKENS=1024
# DIALECTIC_LEVELS__medium__MAX_TOOL_ITERATIONS=4 # DIALECTIC_LEVELS__medium__MAX_TOOL_ITERATIONS=2
# DIALECTIC_LEVELS__medium__MAX_OUTPUT_TOKENS=8192 # Optional: override global default
# DIALECTIC_LEVELS__medium__TOOL_CHOICE= # DIALECTIC_LEVELS__medium__TOOL_CHOICE=
# High level # High level
# DIALECTIC_LEVELS__high__PROVIDER=anthropic # DIALECTIC_LEVELS__high__PROVIDER=anthropic
# DIALECTIC_LEVELS__high__MODEL=claude-opus-4-5 # DIALECTIC_LEVELS__high__MODEL=claude-haiku-4-5
# DIALECTIC_LEVELS__high__THINKING_BUDGET_TOKENS=0 # DIALECTIC_LEVELS__high__THINKING_BUDGET_TOKENS=1024
# DIALECTIC_LEVELS__high__MAX_TOOL_ITERATIONS=4 # DIALECTIC_LEVELS__high__MAX_TOOL_ITERATIONS=4
# DIALECTIC_LEVELS__high__MAX_OUTPUT_TOKENS=8192 # Optional: override global default
# Max level # Max level
# DIALECTIC_LEVELS__max__PROVIDER=anthropic # DIALECTIC_LEVELS__max__PROVIDER=anthropic
# DIALECTIC_LEVELS__max__MODEL=claude-opus-4-5 # DIALECTIC_LEVELS__max__MODEL=claude-haiku-4-5
# DIALECTIC_LEVELS__max__THINKING_BUDGET_TOKENS=2048 # DIALECTIC_LEVELS__max__THINKING_BUDGET_TOKENS=2048
# DIALECTIC_LEVELS__max__MAX_TOOL_ITERATIONS=10 # DIALECTIC_LEVELS__max__MAX_TOOL_ITERATIONS=10
# DIALECTIC_LEVELS__max__MAX_OUTPUT_TOKENS=8192 # Optional: override global default
# Optional backup per level (must set both or neither): # Optional backup per level (must set both or neither):
# DIALECTIC_LEVELS__max__BACKUP_PROVIDER=google # DIALECTIC_LEVELS__max__BACKUP_PROVIDER=google
# DIALECTIC_LEVELS__max__BACKUP_MODEL=gemini-2.5-pro # DIALECTIC_LEVELS__max__BACKUP_MODEL=gemini-2.5-pro

View File

@ -38,7 +38,6 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
python: ${{ steps.filter.outputs.python }} python: ${{ steps.filter.outputs.python }}
typescript: ${{ steps.filter.outputs.typescript }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: dorny/paths-filter@v3 - uses: dorny/paths-filter@v3
@ -50,8 +49,6 @@ jobs:
- 'pyproject.toml' - 'pyproject.toml'
- 'uv.lock' - 'uv.lock'
- 'migrations/**' - 'migrations/**'
- '.github/workflows/unittest.yml'
typescript:
- 'sdks/typescript/**' - 'sdks/typescript/**'
- '.github/workflows/unittest.yml' - '.github/workflows/unittest.yml'
@ -90,6 +87,13 @@ jobs:
with: with:
python-version-file: "pyproject.toml" python-version-file: "pyproject.toml"
- name: Install bun
uses: oven-sh/setup-bun@v2
- name: Install TypeScript SDK dependencies
run: bun install
working-directory: sdks/typescript
- name: Install the project - name: Install the project
run: uv sync --all-extras --dev run: uv sync --all-extras --dev
@ -130,37 +134,11 @@ jobs:
SUMMARY_PROVIDER: openai SUMMARY_PROVIDER: openai
SUMMARY_MODEL: test SUMMARY_MODEL: test
test-typescript:
needs: changes
if: ${{ needs.changes.outputs.typescript == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install TypeScript SDK dependencies
run: |
cd sdks/typescript
bun install
- name: Run TypeScript SDK tests
run: |
cd sdks/typescript
bun run test
env:
HONCHO_API_KEY: test-key
HONCHO_BASE_URL: http://localhost:8000
# Status check for branch protection rules # Status check for branch protection rules
# This job always runs and reports success only if all required jobs pass # This job always runs and reports success only if all required jobs pass
test-status: test-status:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [changes, test-python, test-typescript] needs: [changes, test-python]
if: always() if: always()
steps: steps:
- name: Check test results - name: Check test results
@ -169,8 +147,4 @@ jobs:
echo "Python tests failed or were cancelled" echo "Python tests failed or were cancelled"
exit 1 exit 1
fi fi
if [[ "${{ needs.changes.outputs.typescript }}" == "true" && "${{ needs.test-typescript.result }}" != "success" && "${{ needs.test-typescript.result }}" != "skipped" ]]; then
echo "TypeScript tests failed or were cancelled"
exit 1
fi
echo "All required tests passed!" echo "All required tests passed!"

View File

@ -99,10 +99,10 @@ repos:
stages: [pre-push] stages: [pre-push]
pass_filenames: false pass_filenames: false
# # TypeScript build/test with bun # TypeScript build with bun (tests run via pytest)
- id: typescript-check - id: typescript-check
name: TypeScript build and test name: TypeScript build
entry: bash -c 'if [ -f "sdks/typescript/package.json" ]; then cd sdks/typescript && bun run build && bun run test; fi' entry: bash -c 'if [ -f "sdks/typescript/package.json" ]; then cd sdks/typescript && bun run build; fi'
language: system language: system
files: ^sdks/typescript/.*\.(js|ts|jsx|tsx|json)$ files: ^sdks/typescript/.*\.(js|ts|jsx|tsx|json)$
stages: [pre-push] stages: [pre-push]

View File

@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/) The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/). and this project adheres to [Semantic Versioning](http://semver.org/).
## [3.0.0] - 2026-01-19
### Added
- Agentic Dreamer for intelligent memory consolidation using LLM agents
- Agentic Dialectic for query answering using LLM agents with tool use
- Reasoning levels configuration for dialectic (`minimal`, `low`, `medium`, `high`, `max`)
- Prometheus token tracking for deriver and dialectic operations
- n8n integration
### Changed
- API route renaming for consistency
- Dreamer and dialectic now respect peer card configuration settings
- Observations renamed to Conclusions across API and SDKs
### Fixed
- Dream scheduling bugs
- Summary creation when start_message_id > end_message_id
- Cashews upgrade to prevent NoScriptError
### Removed
- Peer card configuration from message configuration; peer cards no longer created/updated in deriver process
## [2.5.1] - 2025-12-15 ## [2.5.1] - 2025-12-15
### Fixed ### Fixed

View File

@ -84,6 +84,27 @@ All API routes follow the pattern: `/v1/{resource}/{id}/{action}`
- Typechecking: `uv run basedpyright` - Typechecking: `uv run basedpyright`
- Format code: `uv run ruff format src/` - Format code: `uv run ruff format src/`
### SDK Testing
#### TypeScript SDK
**🚨 DO NOT RUN `bun test` DIRECTLY. IT WILL NOT WORK. 🚨**
The TypeScript SDK tests require a running Honcho server with database and Redis. Running `bun test` alone will fail immediately because there's no server. The tests are orchestrated via pytest which handles all the infrastructure setup.
**The ONLY way to run TypeScript SDK tests:**
```bash
# From the monorepo root (not from sdks/typescript/)
uv run pytest tests/ -k typescript
```
**To type-check the TypeScript SDK (this is fine to run directly):**
```bash
cd sdks/typescript && bun run tsc --noEmit
```
### Code Style ### Code Style
- Follow isort conventions with absolute imports preferred - Follow isort conventions with absolute imports preferred

View File

@ -8,7 +8,7 @@
--- ---
![Static Badge](https://img.shields.io/badge/Version-2.5.1-blue) ![Static Badge](https://img.shields.io/badge/Version-3.0.0-blue)
[![PyPI version](https://img.shields.io/pypi/v/honcho-ai.svg)](https://pypi.org/project/honcho-ai/) [![PyPI version](https://img.shields.io/pypi/v/honcho-ai.svg)](https://pypi.org/project/honcho-ai/)
[![NPM version](https://img.shields.io/npm/v/@honcho-ai/sdk.svg)](https://npmjs.org/package/@honcho-ai/sdk) [![NPM version](https://img.shields.io/npm/v/@honcho-ai/sdk.svg)](https://npmjs.org/package/@honcho-ai/sdk)
[![Discord](https://img.shields.io/discord/1016845111637839922?style=flat&logo=discord&logoColor=23ffffff&label=Plastic%20Labs&labelColor=235865F2)](https://discord.gg/plasticlabs) [![Discord](https://img.shields.io/discord/1016845111637839922?style=flat&logo=discord&logoColor=23ffffff&label=Plastic%20Labs&labelColor=235865F2)](https://discord.gg/plasticlabs)
@ -127,22 +127,14 @@ The Honcho project is split between several repositories with this one hosting
the core service logic. This is implemented as a FastAPI server/API to store the core service logic. This is implemented as a FastAPI server/API to store
data about an application's state. data about an application's state.
There are also client sdks in implemented in the `sdks/` directory with support There are also client SDKs implemented in the `sdks/` directory with support
for Python and TypeScript. These SDKs wrap core SDKs that are generated using for Python and TypeScript.
[Stainless](https://www.stainlessapi.com/).
- [Python](https://pypi.org/project/honcho-ai/) - [Python](https://pypi.org/project/honcho-ai/)
- [TypeScript](https://www.npmjs.com/package/@honcho-ai/sdk) - [TypeScript](https://www.npmjs.com/package/@honcho-ai/sdk)
We recommend using the official client SDKs instead of the core ones for better
developer experience, however for any custom use cases you can still access the
core SDKs in their own repos:
- [Honcho Core Python](https://github.com/plastic-labs/honcho-python-core)
- [Honcho Core TypeScript](https://github.com/plastic-labs/honcho-node-core)
Examples on how to use the SDK are located within each SDK folder and in the Examples on how to use the SDK are located within each SDK folder and in the
[SDK Reference](https://docs.honcho.dev/v2/documentation/tutorial/SDK) [SDK Reference](https://docs.honcho.dev/v3/documentation/tutorial/SDK)
There are also documented examples of how to use the core SDKs in the There are also documented examples of how to use the core SDKs in the
[API Reference](https://docs.honcho.dev/api-reference/introduction) section of [API Reference](https://docs.honcho.dev/api-reference/introduction) section of

View File

@ -52,7 +52,7 @@ PROFILES_SAMPLE_RATE = 0.1
[llm] [llm]
DEFAULT_MAX_TOKENS = 2500 DEFAULT_MAX_TOKENS = 2500
EMBEDDING_PROVIDER = "openai" EMBEDDING_PROVIDER = "openai"
MAX_TOOL_OUTPUT_CHARS = 30000 # Max chars for tool output (~7500 tokens) MAX_TOOL_OUTPUT_CHARS = 10000 # Max chars for tool output (~2500 tokens)
MAX_MESSAGE_CONTENT_CHARS = 2000 # Max chars per message in tool results MAX_MESSAGE_CONTENT_CHARS = 2000 # Max chars per message in tool results
# API Keys for LLM providers # API Keys for LLM providers
@ -96,41 +96,44 @@ ENABLED = true
MAX_OUTPUT_TOKENS = 8192 MAX_OUTPUT_TOKENS = 8192
MAX_INPUT_TOKENS = 100000 MAX_INPUT_TOKENS = 100000
HISTORY_TOKEN_LIMIT = 8192 HISTORY_TOKEN_LIMIT = 8192
SESSION_HISTORY_MAX_TOKENS = 16384 SESSION_HISTORY_MAX_TOKENS = 4096
# Per-level settings for reasoning levels # Per-level settings for reasoning levels
# MAX_OUTPUT_TOKENS is optional per level; if not set, uses global MAX_OUTPUT_TOKENS
[dialectic.levels.minimal] [dialectic.levels.minimal]
PROVIDER = "google" PROVIDER = "google"
MODEL = "gemini-2.5-flash-lite" MODEL = "gemini-2.5-flash-lite"
THINKING_BUDGET_TOKENS = 0 THINKING_BUDGET_TOKENS = 0
MAX_TOOL_ITERATIONS = 5 MAX_TOOL_ITERATIONS = 1
TOOL_CHOICE = "any" MAX_OUTPUT_TOKENS = 250
[dialectic.levels.low] [dialectic.levels.low]
PROVIDER = "google" PROVIDER = "google"
MODEL = "gemini-3-flash-preview" MODEL = "gemini-2.5-flash-lite"
THINKING_BUDGET_TOKENS = 0 THINKING_BUDGET_TOKENS = 0
MAX_TOOL_ITERATIONS = 5 MAX_TOOL_ITERATIONS = 5
TOOL_CHOICE = "any" # MAX_OUTPUT_TOKENS = 8192 # Optional: override global default
[dialectic.levels.medium] [dialectic.levels.medium]
PROVIDER = "anthropic" PROVIDER = "anthropic"
MODEL = "claude-haiku-4-5" MODEL = "claude-haiku-4-5"
THINKING_BUDGET_TOKENS = 1024 THINKING_BUDGET_TOKENS = 1024
MAX_TOOL_ITERATIONS = 4 MAX_TOOL_ITERATIONS = 2
# TOOL_CHOICE = "any" # Optional: None/auto lets model decide # MAX_OUTPUT_TOKENS = 8192 # Optional: override global default
[dialectic.levels.high] [dialectic.levels.high]
PROVIDER = "anthropic" PROVIDER = "anthropic"
MODEL = "claude-opus-4-5" MODEL = "claude-haiku-4-5"
THINKING_BUDGET_TOKENS = 0 THINKING_BUDGET_TOKENS = 1024
MAX_TOOL_ITERATIONS = 4 MAX_TOOL_ITERATIONS = 4
# MAX_OUTPUT_TOKENS = 8192 # Optional: override global default
[dialectic.levels.max] [dialectic.levels.max]
PROVIDER = "anthropic" PROVIDER = "anthropic"
MODEL = "claude-opus-4-5" MODEL = "claude-haiku-4-5"
THINKING_BUDGET_TOKENS = 2048 THINKING_BUDGET_TOKENS = 2048
MAX_TOOL_ITERATIONS = 10 MAX_TOOL_ITERATIONS = 10
# MAX_OUTPUT_TOKENS = 8192 # Optional: override global default
# Backup provider example (optional, must set both or neither): # Backup provider example (optional, must set both or neither):
# BACKUP_PROVIDER = "google" # BACKUP_PROVIDER = "google"
# BACKUP_MODEL = "gemini-2.5-pro" # BACKUP_MODEL = "gemini-2.5-pro"

View File

@ -32,7 +32,7 @@ Use Glob and Grep to find:
After exploring the codebase, use the **AskUserQuestion** tool to clarify integration requirements. Ask these questions (adapt based on what you learned in Phase 1): After exploring the codebase, use the **AskUserQuestion** tool to clarify integration requirements. Ask these questions (adapt based on what you learned in Phase 1):
**Question Set 1 - Entities & Peers** #### Question Set 1 - Entities & Peers
Ask about which entities should be Honcho peers: Ask about which entities should be Honcho peers:
@ -41,7 +41,7 @@ Ask about which entities should be Honcho peers:
- options based on what you found (e.g., "End users only", "Users + AI assistant", "Users + multiple AI agents", "All participants including third-party services") - options based on what you found (e.g., "End users only", "Users + AI assistant", "Users + multiple AI agents", "All participants including third-party services")
- Include a follow-up if they have multiple AI agents: should any AI peers be observed? - Include a follow-up if they have multiple AI agents: should any AI peers be observed?
**Question Set 2 - Integration Pattern** #### Question Set 2 - Integration Pattern
Ask how they want to use Honcho context: Ask how they want to use Honcho context:
@ -53,7 +53,7 @@ Ask how they want to use Honcho context:
- "get_context()" - "Include conversation history and representations in prompt" - "get_context()" - "Include conversation history and representations in prompt"
- "Multiple patterns" - "Combine approaches for different use cases" - "Multiple patterns" - "Combine approaches for different use cases"
**Question Set 3 - Session Structure** #### Question Set 3 - Session Structure
Ask about conversation structure: Ask about conversation structure:
@ -61,7 +61,7 @@ Ask about conversation structure:
- question: "How should conversations map to Honcho sessions?" - question: "How should conversations map to Honcho sessions?"
- options based on their app (e.g., "One session per chat thread", "One session per user", "Multiple users per session (group chat)", "Custom session logic") - options based on their app (e.g., "One session per chat thread", "One session per user", "Multiple users per session (group chat)", "Custom session logic")
**Question Set 4 - Specific Queries (if using pre-fetch pattern)** #### Question Set 4 - Specific Queries (if using pre-fetch pattern)
If they chose pre-fetch, ask what context matters: If they chose pre-fetch, ask what context matters:
@ -449,4 +449,4 @@ When integrating Honcho into an existing codebase:
- Documentation: <https://docs.honcho.dev> - Documentation: <https://docs.honcho.dev>
- Latest SDK versions: <https://docs.honcho.dev/changelog/introduction> - Latest SDK versions: <https://docs.honcho.dev/changelog/introduction>
- API Reference: <https://docs.honcho.dev/v2/api-reference/introduction> - API Reference: <https://docs.honcho.dev/v3/api-reference/introduction>

View File

@ -8,23 +8,23 @@ This guide helps you understand which versions of Honcho's API are compatible wi
## Version Compatibility ## Version Compatibility
### Honcho API v2.5.1 (Current) ### Honcho API v3.0.0 (Current)
<CardGroup cols={2}> <CardGroup cols={2}>
<Card title="TypeScript SDK" icon="js"> <Card title="TypeScript SDK" icon="js">
**Compatible Version:** v1.6.0 **Compatible Version:** v2.0.0
Install with: Install with:
```bash ```bash
npm install @honcho-ai/sdk@1.6.0 npm install @honcho-ai/sdk@2.0.0
``` ```
</Card> </Card>
<Card title="Python SDK" icon="python"> <Card title="Python SDK" icon="python">
**Compatible Version:** v1.6.0 **Compatible Version:** v2.0.0
Install with: Install with:
```bash ```bash
pip install honcho-ai==1.6.0 pip install honcho-ai==2.0.0
``` ```
</Card> </Card>
</CardGroup> </CardGroup>
@ -34,7 +34,8 @@ This guide helps you understand which versions of Honcho's API are compatible wi
| Honcho API Version | TypeScript SDK | Python SDK | | Honcho API Version | TypeScript SDK | Python SDK |
|-------------------|---------------|------------| |-------------------|---------------|------------|
| v2.5.1 (Current) | v1.6.0 | v1.6.0 | | v3.0.0 (Current) | v2.0.0 | v2.0.0 |
| v2.5.1 | v1.6.0 | v1.6.0 |
| v2.5.0 | v1.6.0 | v1.6.0 | | v2.5.0 | v1.6.0 | v1.6.0 |
| v2.4.3 | v1.5.0 | v1.5.0 | | v2.4.3 | v1.5.0 | v1.5.0 |
| v2.4.2 | v1.5.0 | v1.5.0 | | v2.4.2 | v1.5.0 | v1.5.0 |

View File

@ -27,7 +27,13 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
### Honcho API and SDK Changelogs ### Honcho API and SDK Changelogs
<Tabs> <Tabs>
<Tab title="Honcho API"> <Tab title="Honcho API">
<Update label="v2.5.1 (Current)"> <Update label="v3.0.0 (Current)">
### Changed
- Major version release
</Update>
<Update label="v2.5.1">
### Fixed ### Fixed
- Backwards compatibility for `message_ids` field in documents to handle legacy tuple format - Backwards compatibility for `message_ids` field in documents to handle legacy tuple format
@ -142,7 +148,7 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
<Update label="v2.3.2"> <Update label="v2.3.2">
### Added ### Added
- Get peer cards endpoint (`GET /v2/peers/{peer_id}/peer-card`) for retrieving targeted peer context information - Get peer cards endpoint (`GET /v3/peers/{peer_id}/peer-card`) for retrieving targeted peer context information
### Changed ### Changed
@ -406,7 +412,12 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
<Tab title="Python SDK"> <Tab title="Python SDK">
[Python SDK](https://pypi.org/project/honcho-ai/) [Python SDK](https://pypi.org/project/honcho-ai/)
<Update label="v1.6.0 (Current)"> <Update label="v2.0.0 (Current)">
### Changed
- Major version release
</Update>
<Update label="v1.6.0">
### Added ### Added
- metadata and configuration fields to Workspace, Peer, Session, and Message objects - metadata and configuration fields to Workspace, Peer, Session, and Message objects
@ -493,7 +504,12 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
<Tab title="TypeScript SDK"> <Tab title="TypeScript SDK">
[TypeScript SDK](https://www.npmjs.com/package/@honcho-ai/sdk) [TypeScript SDK](https://www.npmjs.com/package/@honcho-ai/sdk)
<Update label="v1.6.0 (Current)"> <Update label="v2.0.0 (Current)">
### Changed
- Major version release
</Update>
<Update label="v1.6.0">
### Added ### Added
- metadata and configuration fields to Workspace, Peer, Session, and Message objects - metadata and configuration fields to Workspace, Peer, Session, and Message objects

View File

@ -5,7 +5,7 @@
"redirects": [ "redirects": [
{ {
"source": "/", "source": "/",
"destination": "/v2/documentation/introduction/overview" "destination": "/v3/documentation/introduction/overview"
} }
], ],
"colors": { "colors": {
@ -15,14 +15,21 @@
}, },
"favicon": "/favicon.svg", "favicon": "/favicon.svg",
"contextual": { "contextual": {
"options": ["copy", "view", "chatgpt", "claude"] "options": [
"copy",
"view",
"chatgpt",
"claude"
]
}, },
"navigation": { "navigation": {
"versions": [ "versions": [
{ {
"version": "v2.5.1", "version": "v2.5.1",
"api": { "api": {
"openapi": ["openapi.json"] "openapi": [
"openapi.json"
]
}, },
"tabs": [ "tabs": [
{ {
@ -69,11 +76,15 @@
"groups": [ "groups": [
{ {
"group": "Getting Started", "group": "Getting Started",
"pages": ["v2/guides/overview"] "pages": [
"v2/guides/overview"
]
}, },
{ {
"group": "Migrations", "group": "Migrations",
"pages": ["v2/migrations/from-mem0"] "pages": [
"v2/migrations/from-mem0"
]
}, },
{ {
"group": "Integrations", "group": "Integrations",
@ -86,7 +97,10 @@
}, },
{ {
"group": "Application Interfaces", "group": "Application Interfaces",
"pages": ["v2/guides/discord", "v2/guides/telegram"] "pages": [
"v2/guides/discord",
"v2/guides/telegram"
]
} }
] ]
}, },
@ -95,7 +109,9 @@
"groups": [ "groups": [
{ {
"group": "API Documentation", "group": "API Documentation",
"pages": ["v2/api-reference/introduction"] "pages": [
"v2/api-reference/introduction"
]
}, },
{ {
"group": "workspaces", "group": "workspaces",
@ -209,9 +225,11 @@
] ]
}, },
{ {
"version": "v2.6.0-alpha", "version": "v3.0.0",
"api": { "api": {
"openapi": ["openapi.json"] "openapi": [
"openapi.json"
]
}, },
"tabs": [ "tabs": [
{ {
@ -220,35 +238,35 @@
{ {
"group": "Introduction", "group": "Introduction",
"pages": [ "pages": [
"v2.6.0-alpha/documentation/introduction/overview", "v3/documentation/introduction/overview",
"v2.6.0-alpha/documentation/introduction/quickstart", "v3/documentation/introduction/quickstart",
"v2.6.0-alpha/documentation/introduction/vibecoding" "v3/documentation/introduction/vibecoding"
] ]
}, },
{ {
"group": "Core Concepts", "group": "Core Concepts",
"pages": [ "pages": [
"v2.6.0-alpha/documentation/core-concepts/architecture", "v3/documentation/core-concepts/architecture",
"v2.6.0-alpha/documentation/core-concepts/reasoning", "v3/documentation/core-concepts/reasoning",
"v2.6.0-alpha/documentation/core-concepts/representation" "v3/documentation/core-concepts/representation"
] ]
}, },
{ {
"group": "Features", "group": "Features",
"pages": [ "pages": [
"v2.6.0-alpha/documentation/features/get-context", "v3/documentation/features/get-context",
"v2.6.0-alpha/documentation/features/chat", "v3/documentation/features/chat",
{ {
"group": "Advanced", "group": "Advanced",
"pages": [ "pages": [
"v2.6.0-alpha/documentation/features/advanced/overview", "v3/documentation/features/advanced/overview",
"v2.6.0-alpha/documentation/features/advanced/queue-status", "v3/documentation/features/advanced/queue-status",
"v2.6.0-alpha/documentation/features/advanced/reasoning-configuration", "v3/documentation/features/advanced/reasoning-configuration",
"v2.6.0-alpha/documentation/features/advanced/representation-scopes", "v3/documentation/features/advanced/representation-scopes",
"v2.6.0-alpha/documentation/features/advanced/summarizer", "v3/documentation/features/advanced/summarizer",
"v2.6.0-alpha/documentation/features/advanced/search", "v3/documentation/features/advanced/search",
"v2.6.0-alpha/documentation/features/advanced/using-filters", "v3/documentation/features/advanced/using-filters",
"v2.6.0-alpha/documentation/features/advanced/streaming-response" "v3/documentation/features/advanced/streaming-response"
] ]
} }
] ]
@ -256,8 +274,8 @@
{ {
"group": "Reference", "group": "Reference",
"pages": [ "pages": [
"v2.6.0-alpha/documentation/reference/platform", "v3/documentation/reference/platform",
"v2.6.0-alpha/documentation/reference/sdk" "v3/documentation/reference/sdk"
] ]
} }
] ]
@ -268,28 +286,30 @@
{ {
"group": "Overview", "group": "Overview",
"pages": [ "pages": [
"v2.6.0-alpha/guides/overview", "v3/guides/overview",
"v2.6.0-alpha/guides/file-uploads", "v3/guides/file-uploads",
"v2.6.0-alpha/guides/storing-data" "v3/guides/storing-data"
] ]
}, },
{ {
"group": "Integrations", "group": "Integrations",
"pages": [ "pages": [
"v2.6.0-alpha/guides/integrations/crewai", "v3/guides/integrations/crewai",
"v2.6.0-alpha/guides/integrations/langgraph", "v3/guides/integrations/langgraph",
"v2.6.0-alpha/guides/integrations/mcp" "v3/guides/integrations/mcp"
] ]
}, },
{ {
"group": "Migrations", "group": "Migrations",
"pages": ["v2.6.0-alpha/guides/migrations/mem0"] "pages": [
"v3/guides/migrations/mem0"
]
}, },
{ {
"group": "Chatbots", "group": "Chatbots",
"pages": [ "pages": [
"v2.6.0-alpha/guides/discord", "v3/guides/discord",
"v2.6.0-alpha/guides/telegram" "v3/guides/telegram"
] ]
} }
] ]
@ -300,15 +320,15 @@
{ {
"group": "Self-Hosting", "group": "Self-Hosting",
"pages": [ "pages": [
"v2.6.0-alpha/contributing/self-hosting", "v3/contributing/self-hosting",
"v2.6.0-alpha/contributing/configuration" "v3/contributing/configuration"
] ]
}, },
{ {
"group": "Contributing", "group": "Contributing",
"pages": [ "pages": [
"v2.6.0-alpha/contributing/guidelines", "v3/contributing/guidelines",
"v2.6.0-alpha/contributing/license" "v3/contributing/license"
] ]
} }
] ]
@ -318,87 +338,89 @@
"groups": [ "groups": [
{ {
"group": "API Documentation", "group": "API Documentation",
"pages": ["v2.6.0-alpha/api-reference/introduction"] "pages": [
"v3/api-reference/introduction"
]
}, },
{ {
"group": "workspaces", "group": "workspaces",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/workspaces/get-or-create-workspace", "v3/api-reference/endpoint/workspaces/get-or-create-workspace",
"v2.6.0-alpha/api-reference/endpoint/workspaces/get-all-workspaces", "v3/api-reference/endpoint/workspaces/get-all-workspaces",
"v2.6.0-alpha/api-reference/endpoint/workspaces/update-workspace", "v3/api-reference/endpoint/workspaces/update-workspace",
"v2.6.0-alpha/api-reference/endpoint/workspaces/delete-workspace", "v3/api-reference/endpoint/workspaces/delete-workspace",
"v2.6.0-alpha/api-reference/endpoint/workspaces/search-workspace", "v3/api-reference/endpoint/workspaces/search-workspace",
"v2.6.0-alpha/api-reference/endpoint/workspaces/get-deriver-status", "v3/api-reference/endpoint/workspaces/get-deriver-status",
"v2.6.0-alpha/api-reference/endpoint/workspaces/trigger-dream" "v3/api-reference/endpoint/workspaces/trigger-dream"
] ]
}, },
{ {
"group": "peers", "group": "peers",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/peers/get-peers", "v3/api-reference/endpoint/peers/get-peers",
"v2.6.0-alpha/api-reference/endpoint/peers/get-or-create-peer", "v3/api-reference/endpoint/peers/get-or-create-peer",
"v2.6.0-alpha/api-reference/endpoint/peers/update-peer", "v3/api-reference/endpoint/peers/update-peer",
"v2.6.0-alpha/api-reference/endpoint/peers/get-sessions-for-peer", "v3/api-reference/endpoint/peers/get-sessions-for-peer",
"v2.6.0-alpha/api-reference/endpoint/peers/chat", "v3/api-reference/endpoint/peers/chat",
"v2.6.0-alpha/api-reference/endpoint/peers/get-working-representation", "v3/api-reference/endpoint/peers/get-working-representation",
"v2.6.0-alpha/api-reference/endpoint/peers/get-peer-card", "v3/api-reference/endpoint/peers/get-peer-card",
"v2.6.0-alpha/api-reference/endpoint/peers/set-peer-card", "v3/api-reference/endpoint/peers/set-peer-card",
"v2.6.0-alpha/api-reference/endpoint/peers/get-peer-context", "v3/api-reference/endpoint/peers/get-peer-context",
"v2.6.0-alpha/api-reference/endpoint/peers/search-peer" "v3/api-reference/endpoint/peers/search-peer"
] ]
}, },
{ {
"group": "sessions", "group": "sessions",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/sessions/get-or-create-session", "v3/api-reference/endpoint/sessions/get-or-create-session",
"v2.6.0-alpha/api-reference/endpoint/sessions/get-sessions", "v3/api-reference/endpoint/sessions/get-sessions",
"v2.6.0-alpha/api-reference/endpoint/sessions/update-session", "v3/api-reference/endpoint/sessions/update-session",
"v2.6.0-alpha/api-reference/endpoint/sessions/delete-session", "v3/api-reference/endpoint/sessions/delete-session",
"v2.6.0-alpha/api-reference/endpoint/sessions/clone-session", "v3/api-reference/endpoint/sessions/clone-session",
"v2.6.0-alpha/api-reference/endpoint/sessions/get-session-peers", "v3/api-reference/endpoint/sessions/get-session-peers",
"v2.6.0-alpha/api-reference/endpoint/sessions/set-session-peers", "v3/api-reference/endpoint/sessions/set-session-peers",
"v2.6.0-alpha/api-reference/endpoint/sessions/add-peers-to-session", "v3/api-reference/endpoint/sessions/add-peers-to-session",
"v2.6.0-alpha/api-reference/endpoint/sessions/remove-peers-from-session", "v3/api-reference/endpoint/sessions/remove-peers-from-session",
"v2.6.0-alpha/api-reference/endpoint/sessions/get-peer-config", "v3/api-reference/endpoint/sessions/get-peer-config",
"v2.6.0-alpha/api-reference/endpoint/sessions/set-peer-config", "v3/api-reference/endpoint/sessions/set-peer-config",
"v2.6.0-alpha/api-reference/endpoint/sessions/get-session-context", "v3/api-reference/endpoint/sessions/get-session-context",
"v2.6.0-alpha/api-reference/endpoint/sessions/get-session-summaries", "v3/api-reference/endpoint/sessions/get-session-summaries",
"v2.6.0-alpha/api-reference/endpoint/sessions/search-session" "v3/api-reference/endpoint/sessions/search-session"
] ]
}, },
{ {
"group": "messages", "group": "messages",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/messages/create-messages-for-session", "v3/api-reference/endpoint/messages/create-messages-for-session",
"v2.6.0-alpha/api-reference/endpoint/messages/get-messages", "v3/api-reference/endpoint/messages/get-messages",
"v2.6.0-alpha/api-reference/endpoint/messages/get-message", "v3/api-reference/endpoint/messages/get-message",
"v2.6.0-alpha/api-reference/endpoint/messages/update-message", "v3/api-reference/endpoint/messages/update-message",
"v2.6.0-alpha/api-reference/endpoint/messages/create-messages-with-file" "v3/api-reference/endpoint/messages/create-messages-with-file"
] ]
}, },
{ {
"group": "observations", "group": "observations",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/observations/create-observations", "v3/api-reference/endpoint/observations/create-observations",
"v2.6.0-alpha/api-reference/endpoint/observations/list-observations", "v3/api-reference/endpoint/observations/list-observations",
"v2.6.0-alpha/api-reference/endpoint/observations/query-observations", "v3/api-reference/endpoint/observations/query-observations",
"v2.6.0-alpha/api-reference/endpoint/observations/delete-observation" "v3/api-reference/endpoint/observations/delete-observation"
] ]
}, },
{ {
"group": "webhooks", "group": "webhooks",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/webhooks/list-webhook-endpoints", "v3/api-reference/endpoint/webhooks/list-webhook-endpoints",
"v2.6.0-alpha/api-reference/endpoint/webhooks/get-or-create-webhook-endpoint", "v3/api-reference/endpoint/webhooks/get-or-create-webhook-endpoint",
"v2.6.0-alpha/api-reference/endpoint/webhooks/delete-webhook-endpoint", "v3/api-reference/endpoint/webhooks/delete-webhook-endpoint",
"v2.6.0-alpha/api-reference/endpoint/webhooks/test-emit" "v3/api-reference/endpoint/webhooks/test-emit"
] ]
}, },
{ {
"group": "miscellaneous", "group": "miscellaneous",
"pages": [ "pages": [
"v2.6.0-alpha/api-reference/endpoint/keys/create-key", "v3/api-reference/endpoint/keys/create-key",
"v2.6.0-alpha/api-reference/endpoint/metrics" "v3/api-reference/endpoint/metrics"
] ]
} }
] ]
@ -420,7 +442,9 @@
{ {
"version": "v1.1.0", "version": "v1.1.0",
"api": { "api": {
"openapi": ["openapi.json"] "openapi": [
"openapi.json"
]
}, },
"tabs": [ "tabs": [
{ {
@ -450,15 +474,23 @@
"groups": [ "groups": [
{ {
"group": "Getting Started", "group": "Getting Started",
"pages": ["v1/guides/overview", "v1/guides/streaming-response"] "pages": [
"v1/guides/overview",
"v1/guides/streaming-response"
]
}, },
{ {
"group": "Application Interfaces", "group": "Application Interfaces",
"pages": ["v1/guides/discord", "v1/guides/honcho-mcp"] "pages": [
"v1/guides/discord",
"v1/guides/honcho-mcp"
]
}, },
{ {
"group": "Personal Memory", "group": "Personal Memory",
"pages": ["v1/guides/dialectic-endpoint"] "pages": [
"v1/guides/dialectic-endpoint"
]
} }
] ]
}, },
@ -467,7 +499,9 @@
"groups": [ "groups": [
{ {
"group": "API Documentation", "group": "API Documentation",
"pages": ["v1/api-reference/introduction"] "pages": [
"v1/api-reference/introduction"
]
}, },
{ {
"group": "apps", "group": "apps",
@ -515,7 +549,9 @@
}, },
{ {
"group": "keys", "group": "keys",
"pages": ["v1/api-reference/endpoint/keys/create-key"] "pages": [
"v1/api-reference/endpoint/keys/create-key"
]
}, },
{ {
"group": "metamessages", "group": "metamessages",

View File

@ -5,7 +5,7 @@
"main": ".pnp.js", "main": ".pnp.js",
"scripts": { "scripts": {
"dev": "mint dev", "dev": "mint dev",
"openapi": "npx @mintlify/scraping openapi-file v2/openapi.json -o v2/api-reference/endpoint", "openapi": "npx @mintlify/scraping openapi-file v3/openapi.json -o v3/api-reference/endpoint",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"author": "", "author": "",

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/keys
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/messages/
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/messages/upload
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/messages/{message_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/messages/list
---

View File

@ -1,3 +0,0 @@
---
openapi: put /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/messages/{message_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/observations
---

View File

@ -1,3 +0,0 @@
---
openapi: delete /v2.6.0-alpha/workspaces/{workspace_id}/observations/{observation_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/observations/list
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/observations/query
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/chat
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/peers
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/card
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/context
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/peers/list
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/sessions
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/representation
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/search
---

View File

@ -1,3 +0,0 @@
---
openapi: put /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}/card
---

View File

@ -1,3 +0,0 @@
---
openapi: put /v2.6.0-alpha/workspaces/{workspace_id}/peers/{peer_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/clone
---

View File

@ -1,3 +0,0 @@
---
openapi: delete /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/peers/{peer_id}/config
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/context
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/summaries
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/list
---

View File

@ -1,3 +0,0 @@
---
openapi: delete /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/search
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/peers/{peer_id}/config
---

View File

@ -1,3 +0,0 @@
---
openapi: put /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -1,3 +0,0 @@
---
openapi: put /v2.6.0-alpha/workspaces/{workspace_id}/sessions/{session_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: delete /v2.6.0-alpha/workspaces/{workspace_id}/webhooks/{endpoint_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/webhooks
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/webhooks
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/webhooks/test
---

View File

@ -1,3 +0,0 @@
---
openapi: delete /v2.6.0-alpha/workspaces/{workspace_id}
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/list
---

View File

@ -1,3 +0,0 @@
---
openapi: get /v2.6.0-alpha/workspaces/{workspace_id}/deriver/status
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/search
---

View File

@ -1,3 +0,0 @@
---
openapi: post /v2.6.0-alpha/workspaces/{workspace_id}/trigger_dream
---

View File

@ -1,3 +0,0 @@
---
openapi: put /v2.6.0-alpha/workspaces/{workspace_id}
---

View File

@ -1,20 +0,0 @@
---
title: "Advanced Features"
icon: "brain"
description: "Advanced configuration and monitoring options for Honcho"
sidebarTitle: "Overview"
---
Advanced features give you fine-grained control over Honcho's behavior and implementation.
## Configuration & Monitoring
- [Queue Status](/v2.6.0-alpha/documentation/features/advanced/queue-status) - Monitor background processing and reasoning tasks
- [Configuration](/v2.6.0-alpha/documentation/features/advanced/toggle-reasoning) - Configure reasoning models and behavior
- [Summarizer](/v2.6.0-alpha/documentation/features/advanced/summarizer) - Automatic session summarization
## Querying & Filtering
- [Search](/v2.6.0-alpha/documentation/features/advanced/search) - Search across peers, sessions, and messages
- [Filters](/v2.6.0-alpha/documentation/features/advanced/using-filters) - Filter queries with advanced parameters
- [Streaming Responses](/v2.6.0-alpha/documentation/features/advanced/streaming-response) - Stream dialectic responses in real-time

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/keys
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/messages/
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/messages/upload
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/messages/{message_id}
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/messages/list
---

View File

@ -0,0 +1,3 @@
---
openapi: put /v3/workspaces/{workspace_id}/sessions/{session_id}/messages/{message_id}
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/observations
---

View File

@ -0,0 +1,3 @@
---
openapi: delete /v3/workspaces/{workspace_id}/observations/{observation_id}
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/observations/list
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/observations/query
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/peers/{peer_id}/chat
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/peers
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/peers/{peer_id}/card
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/peers/{peer_id}/context
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/peers/list
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/peers/{peer_id}/sessions
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/peers/{peer_id}/representation
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/peers/{peer_id}/search
---

View File

@ -0,0 +1,3 @@
---
openapi: put /v3/workspaces/{workspace_id}/peers/{peer_id}/card
---

View File

@ -0,0 +1,3 @@
---
openapi: put /v3/workspaces/{workspace_id}/peers/{peer_id}
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/clone
---

View File

@ -0,0 +1,3 @@
---
openapi: delete /v3/workspaces/{workspace_id}/sessions/{session_id}
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/peers/{peer_id}/config
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/context
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -0,0 +1,3 @@
---
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/summaries
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/list
---

View File

@ -0,0 +1,3 @@
---
openapi: delete /v3/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/search
---

View File

@ -0,0 +1,3 @@
---
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/peers/{peer_id}/config
---

View File

@ -0,0 +1,3 @@
---
openapi: put /v3/workspaces/{workspace_id}/sessions/{session_id}/peers
---

View File

@ -0,0 +1,3 @@
---
openapi: put /v3/workspaces/{workspace_id}/sessions/{session_id}
---

Some files were not shown because too many files have changed in this diff Show More