v3.1.0
Released: August 10, 2026
Highlights
- Tool overrides at init (
toolpack-sdk) —toolOverrideslets host packages replace built-in tools by name after built-ins load - Runtime multi-project loading (
toolpack-sdk) —loadToolProjects()registers several projects and rebuilds the BM25 index once;searchTools()/getRegisteredToolNames()expose registration for inspection and tests - Finer tool categories (
toolpack-sdk) — the oldnetworkcategory is split intohttp,web,github, andslack - Dynamic
tool.searchcategories (toolpack-sdk) — category enum is built from currently registered tools (excludingmeta) - Incremental knowledge APIs (
@toolpack-sdk/knowledge) —TextSource,ingest(),delete(),deleteWhere(), plusonAdd/onDeletehooks - Peer bump (
@toolpack-sdk/agents) — requirestoolpack-sdk@^3.1.0and@toolpack-sdk/knowledge@^3.1.0(optional)
Breaking changes
| Change | Migration |
|---|---|
Tool / project category network removed | Use http, web, github, or slack as appropriate |
CHAT_MODE.allowedToolCategories | Was ['network']; now ['http', 'web'] |
tool.search category enum | Replaces network with http, web, github, slack (and may be overridden dynamically from registered tools) |
If you filter modes or configs with category: 'network', update those allow/block lists to the new categories.
toolpack-sdk
toolOverrides on Toolpack.init()
Pass tool projects that should win over same-named built-ins. They load after built-ins and also feed the dynamic tool.search category enum.
const sdk = await Toolpack.init({
provider: 'anthropic',
tools: true,
toolOverrides: [customToolsProject],
});
| Field | Type | Default | Description |
|---|---|---|---|
toolOverrides | ToolProject[] | undefined | Projects loaded after built-ins; same tool name replaces the built-in |
loadToolProjects(), searchTools(), getRegisteredToolNames()
await sdk.loadToolProjects([projectA, projectB]); // single BM25 reindex at the end
const { found, tools } = sdk.searchTools('http get', 'http');
const names = sdk.getRegisteredToolNames();
loadToolProject() still exists and delegates to loadToolProjects([project]).
Category split: http / web / github / slack
Built-in HTTP, web, GitHub, and Slack tools no longer share network. Chat mode allows only http and web by default.
ToolRouter builds the tool.search schema with categories from registry.getCategories() (excluding meta). If none are registered yet, the static default enum is used.
Public skills exports
import { BM25Engine, parseSkillFile } from 'toolpack-sdk';
import type { BM25SearchResult } from 'toolpack-sdk';
@toolpack-sdk/knowledge
TextSource
Chunk plain text with optional metadata — suited to platform / tenant knowledge items.
import { TextSource } from '@toolpack-sdk/knowledge';
const source = new TextSource('item-abc', documentBody, {
namespace: 'tenant-knowledge',
metadata: { knowledge_item_id: 'abc', tenant_id: 't1' },
});
await knowledge.ingest(source);
Incremental updates
await knowledge.add(content, metadata); // Embed + store one chunk
await knowledge.ingest(source); // Add without clearing
await knowledge.delete([id]); // Delete by IDs
await knowledge.deleteWhere({ knowledge_item_id: 'abc' }); // Cascade by metadata
onAdd / onDelete handlers on Knowledge.create() fire after successful writes/deletes so an outer sync layer can mirror changes. matchesFilter is exported for reuse outside Knowledge.
@toolpack-sdk/agents
No agent-runtime API changes. Peer ranges now require toolpack-sdk@^3.1.0 and @toolpack-sdk/knowledge@^3.1.0 (optional).
Install
npm install toolpack-sdk@3.1.0
npm install @toolpack-sdk/knowledge@3.1.0
npm install @toolpack-sdk/agents@3.1.0