You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
All notable changes to this project are documented in this file.
4
+
5
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+
7
+
## [0.1.0] - 2026-06-02
8
+
9
+
### Added
10
+
11
+
-`__version__` in `app.py` for release tracking
12
+
- Startup guard refusing `--debug` with a non-loopback `--host`
13
+
-[Deprecation policy](docs/deprecation-policy.md) for API and JSON field changes
14
+
- API field **stability** tables in `docs/api-reference.md` (stable / experimental / deprecated)
15
+
16
+
### Changed
17
+
18
+
- README notes that the server enforces the debug + host safety rule at startup
19
+
20
+
### Deprecated
21
+
22
+
-`export_count` on `GET /api/export/state` (documented only; still returned). Use `last_export_session_count`. Removal planned in a follow-up release per [deprecation policy](docs/deprecation-policy.md).
|**stable**| Will not be renamed or removed without a documented deprecation period |
20
+
|**experimental**| May change in any release; do not build long-lived integrations on these fields |
21
+
|**deprecated**| Still returned; use the documented replacement; removal announced in [CHANGELOG](../CHANGELOG.md)|
22
+
23
+
**Migration:** Breaking changes use additive deprecation first (new field → deprecate old → remove after policy period). Versioned routes (e.g. `/api/v2/...`) are reserved for future breaking reshapes; none exist today.
24
+
9
25
---
10
26
11
27
## Authentication
@@ -100,13 +116,13 @@ None.
100
116
101
117
`application/json` — array of project objects:
102
118
103
-
| Field | Type | Description |
104
-
|-------|------|-------------|
105
-
|`name`| string | Directory name under `~/.claude/projects/` (e.g. `F--boost-capy`) |
106
-
|`path`| string | Absolute path to project directory |
107
-
|`display_name`| string | Friendly name derived from session `cwd` when available |
108
-
|`session_count`| integer | Count of titled sessions (updated in handler) |
109
-
|`last_modified`| string (ISO 8601) | Latest message timestamp across titled sessions |
119
+
| Field | Type |Stability |Description |
120
+
|-------|------|-----------|-------------|
121
+
|`name`| string |stable |Directory name under `~/.claude/projects/` (e.g. `F--boost-capy`) |
122
+
|`path`| string |stable |Absolute path to project directory |
123
+
|`display_name`| string |stable |Friendly name derived from session `cwd` when available |
124
+
|`session_count`| integer |stable |Count of titled sessions (updated in handler) |
125
+
|`last_modified`| string (ISO 8601) |stable |Latest message timestamp across titled sessions |
110
126
111
127
```json
112
128
[
@@ -148,19 +164,19 @@ Lists sessions in one project with summary fields for the workspace sidebar. Ski
148
164
149
165
`application/json` — array of session row objects:
150
166
151
-
| Field | Type | Description |
152
-
|-------|------|-------------|
153
-
|`id`| string | Session id (filename without `.jsonl`) |
154
-
|`path`| string | Absolute path to JSONL file |
155
-
|`size_bytes`| integer | File size |
156
-
|`modified`| number | File mtime (epoch seconds) |
157
-
|`title`| string | Parsed session title |
158
-
|`models`| string[]| Models used in session |
159
-
|`tokens`| integer | Sum of input + output tokens |
160
-
|`tool_calls`| integer | Total tool calls |
161
-
|`first_timestamp`| string \| null | First message timestamp |
162
-
|`last_timestamp`| string \| null | Last message timestamp |
See [`utils/jsonl_parser.py`](../utils/jsonl_parser.py)`parse_session()` for the full metadata shape.
217
+
Nested keys inside `messages[]` and `metadata` follow the parser output; new parser fields may appear as **experimental** until listed here. See [`utils/jsonl_parser.py`](../utils/jsonl_parser.py)`parse_session()` for the full metadata shape.
202
218
203
219
#### Errors
204
220
@@ -306,11 +322,11 @@ Read-only snapshot of bulk-export state persisted under `~/.claude-code-chat-bro
306
322
307
323
#### Response — `200 OK`
308
324
309
-
| Field | Type | Description |
310
-
|-------|------|-------------|
311
-
|`last_export_time`| string \| null | ISO timestamp of last completed bulk export |
312
-
|`last_export_session_count`| integer | Sessions in last bulk export run |
313
-
|`export_count`| integer |**Legacy alias** — same value as `last_export_session_count`; prefer `last_export_session_count` in new integrations (kept for SPA backwards compatibility) |
325
+
| Field | Type |Stability |Description |
326
+
|-------|------|-----------|-------------|
327
+
|`last_export_time`| string \| null |stable |ISO timestamp of last completed bulk export |
328
+
|`last_export_session_count`| integer |stable |Sessions in last bulk export run |
329
+
|`export_count`| integer |deprecated |Legacy alias of `last_export_session_count`; prefer `last_export_session_count` in new code (still returned for SPA compatibility; removal per [deprecation-policy.md](deprecation-policy.md)) |
This document defines how **claude-code-chat-browser** evolves its HTTP JSON API and CLI without breaking integrators and the bundled SPA unexpectedly.
4
+
5
+
## Principles
6
+
7
+
1.**Documented fields are a contract.** See [API reference](api-reference.md) — each field is marked `stable`, `experimental`, or `deprecated`.
8
+
2.**Additive first.** Prefer adding a new field over renaming an existing one.
9
+
3.**Deprecate before removing.** A deprecated field remains in responses for at least **one release** after the deprecation is announced in [CHANGELOG](../CHANGELOG.md) and the API reference.
10
+
4.**SPA and scripts.** Update `static/js/*.js` and any internal callers before removing a field.
11
+
12
+
## How we announce deprecation
13
+
14
+
| Channel | What to update |
15
+
|---------|----------------|
16
+
| CHANGELOG |`### Deprecated` under the release that announces the change |
17
+
| API reference | Set field stability to `deprecated` with a short note and replacement |
18
+
| Response (optional) | Future: `Deprecation` header or JSON `_deprecated` map — not required today |
19
+
20
+
## Removal criteria
21
+
22
+
A deprecated field may be removed when:
23
+
24
+
- At least one release has shipped with the field still present but documented as deprecated, and
Release versions follow `MAJOR.MINOR.PATCH` in `app.__version__` and [CHANGELOG](../CHANGELOG.md). This project is pre-1.0; minor releases may add features; patch releases are fixes and documentation.
0 commit comments