Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .changeset/aimock-deterministic-e2e.md

This file was deleted.

6 changes: 0 additions & 6 deletions .changeset/fix-offload-exempt-retrieval.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/fix-sp5-literal-tool-inputs.md

This file was deleted.

24 changes: 0 additions & 24 deletions .changeset/phase3-conversation-summarization.md

This file was deleted.

8 changes: 0 additions & 8 deletions .changeset/phase3-tool-output-offloading.md

This file was deleted.

14 changes: 14 additions & 0 deletions examples/chat/server/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# @dawn-example/chat-server

## 0.0.2

### Patch Changes

- Updated dependencies [30db6ed]
- Updated dependencies [55b69f0]
- Updated dependencies [2e3bc8d]
- Updated dependencies [8133553]
- Updated dependencies [027b1cc]
- @dawn-ai/langchain@0.3.0
- @dawn-ai/core@0.3.0
- @dawn-ai/cli@0.3.0
- @dawn-ai/sdk@0.3.0

## 0.0.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion examples/chat/server/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@dawn-example/chat-server",
"private": true,
"version": "0.0.1",
"version": "0.0.2",
"type": "module",
"scripts": {
"dev": "node node_modules/@dawn-ai/cli/dist/index.js dev --port 3001",
Expand Down
39 changes: 39 additions & 0 deletions packages/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,44 @@
# @dawn-ai/cli

## 0.3.0

### Minor Changes

- 8133553: Add opt-in conversation summarization (Phase 3 sub-project 6b). When a thread's history exceeds a token threshold, the agent is fed a condensed view — a running summary of older turns plus the most recent turns verbatim — while the **full history stays intact in the checkpoint**. This is non-destructive: summarization runs as a LangGraph `preModelHook` that returns `llmInputMessages` for the turn only and never rewrites saved `messages`, so `GET /threads/:id/state`, resume, and restart always see the complete history (and there is no tool-call/result pairing hazard).

Enable it in `dawn.config.ts`:

```ts
export default {
summarization: {
enabled: true, // default false
maxTokens: 12_000, // threshold over which older turns are summarized
keepRecentTurns: 6, // most-recent turns kept verbatim
// model defaults to the route's model
// tokenCounter defaults to a lazy gpt-tokenizer (o200k_base) counter
// summarize defaults to a built-in single-LLM-call running-summary fold
},
};
```

Both the token counter and the summarizer are pluggable (`tokenCounter`, `summarize`). The running summary is cached in agent state and refreshed incrementally — each turn folds only the newly-aged messages, so cost stays bounded. The turn-boundary split is pairing-safe (a tool-call message is never separated from its results). When summarization is disabled (the default), behavior is unchanged and `gpt-tokenizer` is never loaded. If the summarizer call fails on a given turn, the agent falls back to the full history for that turn rather than failing the run.

- 027b1cc: Add tool-output offloading. When a tool returns output larger than `toolOutput.offloadThresholdChars` (default 40,000), the full payload is written to `workspace/tool-outputs/` and the in-context ToolMessage is replaced with a preview+pointer stub; the agent retrieves the full content with the existing `readFile` tool (which bypasses the size cap for `tool-outputs/` paths). Active automatically when a workspace exists. The directory is bounded by a size + TTL cap (defaults 256MB / 3h) with throttled evict-on-write and LRU-by-access eviction (readFile bumps mtime for tool-outputs/ files). Large content never enters message state, so there is no tool-call/result pairing hazard. Configurable via `dawn.config.ts` `toolOutput`. The `FilesystemBackend` interface gains optional `statFile`/`removeFile`/`touchFile`/`mkdir` methods and an optional per-call `maxBytes` override on `readFile`.

### Patch Changes

- 55b69f0: Fix tool-output offloading so retrieval tools are exempt. Previously the workspace `readFile` tool — the very tool the agent uses to read back an offloaded output — had its own (large) result offloaded again, replacing it with a second pointer stub. The agent could never see the retrieved content. Retrieval/inspection tools (`readFile`, `listDir`) are now never offloaded; the new `dawn.config.ts` `toolOutput.noOffloadTools` option adds further exemptions (merged with the always-exempt built-ins). Found by a live-API smoke test.
- Updated dependencies [30db6ed]
- Updated dependencies [55b69f0]
- Updated dependencies [2e3bc8d]
- Updated dependencies [8133553]
- Updated dependencies [027b1cc]
- @dawn-ai/langchain@0.3.0
- @dawn-ai/core@0.3.0
- @dawn-ai/langgraph@0.3.0
- @dawn-ai/permissions@0.1.8
- @dawn-ai/sqlite-storage@0.2.0

## 0.2.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/cli",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
2 changes: 2 additions & 0 deletions packages/config-biome/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# @dawn-ai/config-biome

## 0.3.0

## 0.2.0

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/config-biome/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/config-biome",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
2 changes: 2 additions & 0 deletions packages/config-typescript/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# @dawn-ai/config-typescript

## 0.3.0

## 0.2.0

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/config-typescript/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/config-typescript",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
35 changes: 35 additions & 0 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
# @dawn-ai/core

## 0.3.0

### Minor Changes

- 8133553: Add opt-in conversation summarization (Phase 3 sub-project 6b). When a thread's history exceeds a token threshold, the agent is fed a condensed view — a running summary of older turns plus the most recent turns verbatim — while the **full history stays intact in the checkpoint**. This is non-destructive: summarization runs as a LangGraph `preModelHook` that returns `llmInputMessages` for the turn only and never rewrites saved `messages`, so `GET /threads/:id/state`, resume, and restart always see the complete history (and there is no tool-call/result pairing hazard).

Enable it in `dawn.config.ts`:

```ts
export default {
summarization: {
enabled: true, // default false
maxTokens: 12_000, // threshold over which older turns are summarized
keepRecentTurns: 6, // most-recent turns kept verbatim
// model defaults to the route's model
// tokenCounter defaults to a lazy gpt-tokenizer (o200k_base) counter
// summarize defaults to a built-in single-LLM-call running-summary fold
},
};
```

Both the token counter and the summarizer are pluggable (`tokenCounter`, `summarize`). The running summary is cached in agent state and refreshed incrementally — each turn folds only the newly-aged messages, so cost stays bounded. The turn-boundary split is pairing-safe (a tool-call message is never separated from its results). When summarization is disabled (the default), behavior is unchanged and `gpt-tokenizer` is never loaded. If the summarizer call fails on a given turn, the agent falls back to the full history for that turn rather than failing the run.

- 027b1cc: Add tool-output offloading. When a tool returns output larger than `toolOutput.offloadThresholdChars` (default 40,000), the full payload is written to `workspace/tool-outputs/` and the in-context ToolMessage is replaced with a preview+pointer stub; the agent retrieves the full content with the existing `readFile` tool (which bypasses the size cap for `tool-outputs/` paths). Active automatically when a workspace exists. The directory is bounded by a size + TTL cap (defaults 256MB / 3h) with throttled evict-on-write and LRU-by-access eviction (readFile bumps mtime for tool-outputs/ files). Large content never enters message state, so there is no tool-call/result pairing hazard. Configurable via `dawn.config.ts` `toolOutput`. The `FilesystemBackend` interface gains optional `statFile`/`removeFile`/`touchFile`/`mkdir` methods and an optional per-call `maxBytes` override on `readFile`.

### Patch Changes

- 55b69f0: Fix tool-output offloading so retrieval tools are exempt. Previously the workspace `readFile` tool — the very tool the agent uses to read back an offloaded output — had its own (large) result offloaded again, replacing it with a second pointer stub. The agent could never see the retrieved content. Retrieval/inspection tools (`readFile`, `listDir`) are now never offloaded; the new `dawn.config.ts` `toolOutput.noOffloadTools` option adds further exemptions (merged with the always-exempt built-ins). Found by a live-API smoke test.
- 2e3bc8d: Fix tool-input schema extraction for standalone literal types. A single string-literal type (e.g. a discriminated-union discriminant like `by: "date"`) was not recognized as an enum (only multi-member literal unions were), so it fell through to object extraction and was misread as an object carrying `String.prototype` methods (`charAt`, `toString`, …). This produced a bogus schema that rejected the correct argument, breaking every discriminated/object-union tool parameter end-to-end. Standalone string/number/boolean literals now extract correctly, and object extraction is guarded to genuine object types. Found by a live-API smoke test.
- Updated dependencies [027b1cc]
- @dawn-ai/workspace@0.2.0
- @dawn-ai/sdk@0.3.0
- @dawn-ai/permissions@0.1.8
- @dawn-ai/sqlite-storage@0.2.0

## 0.2.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/core",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
6 changes: 6 additions & 0 deletions packages/create-dawn-app/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# create-dawn-app

## 0.3.0

### Patch Changes

- @dawn-ai/devkit@0.3.0

## 0.2.0

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/create-dawn-app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "create-dawn-ai-app",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
2 changes: 2 additions & 0 deletions packages/devkit/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# @dawn-ai/devkit

## 0.3.0

## 0.2.0

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/devkit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/devkit",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
36 changes: 36 additions & 0 deletions packages/langchain/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
# @dawn-ai/langchain

## 0.3.0

### Minor Changes

- 8133553: Add opt-in conversation summarization (Phase 3 sub-project 6b). When a thread's history exceeds a token threshold, the agent is fed a condensed view — a running summary of older turns plus the most recent turns verbatim — while the **full history stays intact in the checkpoint**. This is non-destructive: summarization runs as a LangGraph `preModelHook` that returns `llmInputMessages` for the turn only and never rewrites saved `messages`, so `GET /threads/:id/state`, resume, and restart always see the complete history (and there is no tool-call/result pairing hazard).

Enable it in `dawn.config.ts`:

```ts
export default {
summarization: {
enabled: true, // default false
maxTokens: 12_000, // threshold over which older turns are summarized
keepRecentTurns: 6, // most-recent turns kept verbatim
// model defaults to the route's model
// tokenCounter defaults to a lazy gpt-tokenizer (o200k_base) counter
// summarize defaults to a built-in single-LLM-call running-summary fold
},
};
```

Both the token counter and the summarizer are pluggable (`tokenCounter`, `summarize`). The running summary is cached in agent state and refreshed incrementally — each turn folds only the newly-aged messages, so cost stays bounded. The turn-boundary split is pairing-safe (a tool-call message is never separated from its results). When summarization is disabled (the default), behavior is unchanged and `gpt-tokenizer` is never loaded. If the summarizer call fails on a given turn, the agent falls back to the full history for that turn rather than failing the run.

- 027b1cc: Add tool-output offloading. When a tool returns output larger than `toolOutput.offloadThresholdChars` (default 40,000), the full payload is written to `workspace/tool-outputs/` and the in-context ToolMessage is replaced with a preview+pointer stub; the agent retrieves the full content with the existing `readFile` tool (which bypasses the size cap for `tool-outputs/` paths). Active automatically when a workspace exists. The directory is bounded by a size + TTL cap (defaults 256MB / 3h) with throttled evict-on-write and LRU-by-access eviction (readFile bumps mtime for tool-outputs/ files). Large content never enters message state, so there is no tool-call/result pairing hazard. Configurable via `dawn.config.ts` `toolOutput`. The `FilesystemBackend` interface gains optional `statFile`/`removeFile`/`touchFile`/`mkdir` methods and an optional per-call `maxBytes` override on `readFile`.

### Patch Changes

- 30db6ed: Offloaded tool-output filenames are now deterministic — keyed on the originating `tool_call_id` (with a content-hash fallback when absent) instead of `timestamp+random`. This makes offloaded paths stable and traceable and enables deterministic agent e2e tests. The openai chat model now also honors `OPENAI_BASE_URL`, allowing a local mock provider (used by the new CI-safe aimock-based agent e2e regression tests for the discriminated-union tool-input and tool-output-offload-retrieval paths).
- Updated dependencies [55b69f0]
- Updated dependencies [2e3bc8d]
- Updated dependencies [8133553]
- Updated dependencies [027b1cc]
- @dawn-ai/core@0.3.0
- @dawn-ai/workspace@0.2.0
- @dawn-ai/sdk@0.3.0

## 0.2.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/langchain/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/langchain",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
6 changes: 6 additions & 0 deletions packages/langgraph/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# @dawn-ai/langgraph

## 0.3.0

### Patch Changes

- @dawn-ai/sdk@0.3.0

## 0.2.0

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/langgraph/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/langgraph",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
2 changes: 2 additions & 0 deletions packages/sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# @dawn-ai/sdk

## 0.3.0

## 0.2.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/sdk",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
10 changes: 10 additions & 0 deletions packages/vite-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# @dawn-ai/vite-plugin

## 0.3.0

### Patch Changes

- Updated dependencies [55b69f0]
- Updated dependencies [2e3bc8d]
- Updated dependencies [8133553]
- Updated dependencies [027b1cc]
- @dawn-ai/core@0.3.0

## 0.2.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/vite-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/vite-plugin",
"version": "0.2.0",
"version": "0.3.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down
7 changes: 7 additions & 0 deletions packages/workspace/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# @dawn-ai/workspace

## 0.2.0

### Minor Changes

- 027b1cc: Add tool-output offloading. When a tool returns output larger than `toolOutput.offloadThresholdChars` (default 40,000), the full payload is written to `workspace/tool-outputs/` and the in-context ToolMessage is replaced with a preview+pointer stub; the agent retrieves the full content with the existing `readFile` tool (which bypasses the size cap for `tool-outputs/` paths). Active automatically when a workspace exists. The directory is bounded by a size + TTL cap (defaults 256MB / 3h) with throttled evict-on-write and LRU-by-access eviction (readFile bumps mtime for tool-outputs/ files). Large content never enters message state, so there is no tool-call/result pairing hazard. Configurable via `dawn.config.ts` `toolOutput`. The `FilesystemBackend` interface gains optional `statFile`/`removeFile`/`touchFile`/`mkdir` methods and an optional per-call `maxBytes` override on `readFile`.
2 changes: 1 addition & 1 deletion packages/workspace/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@dawn-ai/workspace",
"version": "0.1.8",
"version": "0.2.0",
"private": false,
"type": "module",
"license": "MIT",
Expand Down