esedre 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.md +24 -9
- package/dist/esedre.mjs +1168 -155
- package/dist/web/assets/{index-CqLRSVQd.js → index-Bx4_5X7t.js} +9 -7
- package/dist/web/assets/index-lVT1j3Rg.css +2 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-hrxboO8S.css +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,36 @@ All notable changes to Esedre are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.3.0] - 2026-10-15
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **TTL-Backed Advisory Ticket Leases (`ese lease`) (Ticket #69)**:
|
|
12
|
+
- Added ephemeral ticket lease storage (`projects/<Code>/tickets/<id>/lease.json`) providing TTL-backed mutual exclusion across concurrent LLM coding agents, subagents, CLI scripts, and multi-machine sessions without overwriting durable `meta.assignee`.
|
|
13
|
+
- Added `ese lease [claim|renew|release|list]` CLI commands (and top-level aliases `ese claim`, `ese renew`, `ese release`, `ese leases`), plus `--leased` and `--leased-by <holder>` filters on `ese list`.
|
|
14
|
+
- Added `esedre_claim_ticket`, `esedre_renew_lease`, `esedre_release_ticket`, and `esedre_list_leases` MCP tools with lease conflict detection (`EsedreLeaseConflictError` / JSON-RPC `-32001`).
|
|
15
|
+
- Added `activeLeases` summary array and per-ticket `lease` metadata to `.esedre/snapshot.json`.
|
|
16
|
+
- **First-Class `Task Breakdown`, `Fix Breakdown`, and `Implementation Breakdown` Heading Aliases (Ticket #71)**:
|
|
17
|
+
- Extended `FilesystemStorageAdapter.parseDetailMarkdown` and `planParser.ts` to recognize `### Task Breakdown`, `### Fix Breakdown`, and `### Implementation Breakdown` as first-class aliases alongside `### Feature Breakdown`.
|
|
18
|
+
- Preserved indented sub-bullets under numbered breakdown items instead of prematurely terminating the breakdown list.
|
|
19
|
+
- Documented canonical `detail.md` section headings and bullet conventions in `ESEDRE_SKILL_TEMPLATE` (`.agents/skills/esedre/SKILL.md`).
|
|
20
|
+
- **Windows PowerShell & CMD CLI Invocation Documentation and Lease Flag Parity (Ticket #72)**:
|
|
21
|
+
- Updated generated `.agents/skills/esedre/SKILL.md` to explicitly document `.\.esedre\ese.cmd` and `.\.esedre\ese.ps1` for Windows PowerShell/CMD environments alongside POSIX `.esedre/ese`.
|
|
22
|
+
- Standardized `--worker-id` / `--by`, `--system`, and `release --status` / `--notes` flags across CLI and MCP lease tools.
|
|
23
|
+
- **Global Antigravity MCP Configuration Auto-Registration (Ticket #73)**:
|
|
24
|
+
- Extended `setupMcpConfig` (`ese init`, `ese upgrade`, `ese configure`) to automatically register and maintain the `esedre` MCP entry in `~/.gemini/config/mcp_config.json` with a resilient launcher that prefers `.esedre\esedre.cmd` when inside an initialized workspace and falls back to global `ese mcp`.
|
|
25
|
+
- **Variadic Multi-Ticket Lookup in `ese get <id...>` (Ticket #75)**:
|
|
26
|
+
- Extended `ese get <id...> [--json]` to accept one or more positional ticket IDs, returning a single object for 1 ID, a JSON array when multiple IDs are requested with `--json`, or divider-separated human-readable summaries in text mode.
|
|
27
|
+
- **`lastTicketId` High-Water Mark in `.esedre/snapshot.json` (Ticket #77)**:
|
|
28
|
+
- Added `lastTicketId` alongside `totalTickets` in the root of `.esedre/snapshot.json` so agents can inspect the highest allocated numeric ticket ID even when historical ticket numbers were skipped or removed.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- **`detail.md` Combined Technical Details & Open Questions Section Routing (Ticket #70)**:
|
|
32
|
+
- Fixed `FilesystemStorageAdapter.parseDetailMarkdown` and `planParser.ts` so `- **Technical Detail**:`, `- **Architecture**:`, and `- **Root Cause**:` bullets under `### Technical Details` or combined `### Technical Detail(s) & Open Questions` headings route to `technicalDetails[]` rather than leaking into `openQuestions[]`.
|
|
33
|
+
- **In-Body `detail.md` Metadata Header Reconciliation on Partial Updates (Ticket #74)**:
|
|
34
|
+
- Centralized `reconcileDetailMetadataHeaders` in `FilesystemStorageAdapter` so partial metadata updates (`ese update --status`, `--complexity`, `--effort`, `--priority`, `--type`, `--milestone`, `--title`, and `ese lease claim/release`) keep inline metadata headers (both unbulleted `**Key**:` and bulleted `- **Key**:`) at the top of `detail.md` synchronized with `meta.json` and deduplicate redundant header lines.
|
|
35
|
+
- **Duplicate `lease` Command Blocks in `ese --help` Output (Ticket #76)**:
|
|
36
|
+
- Removed 3 duplicate `lease` command help blocks from `printHelp()` in `bin/esedre.ts`.
|
|
37
|
+
|
|
8
38
|
## [1.2.0] - 2026-10-09
|
|
9
39
|
|
|
10
40
|
### Added
|
package/README.md
CHANGED
|
@@ -41,6 +41,7 @@ LLM coding agents possess extraordinary implementation speed, but face a fundame
|
|
|
41
41
|
5. **Optimistic Concurrency Control**: SHA-1 content hashing on all tickets and plans, preventing concurrent agents or humans from clobbering each other's edits.
|
|
42
42
|
6. **Local Web Dashboard & Embeddable Component**: Run a visual dashboard with `ese start` to manage tickets in your browser, or embed `<esedre-planner>` into any web app without adding UI framework dependencies to your project.
|
|
43
43
|
7. **Project Milestones & Umbrella Flags**: Group tickets into release deliverables with real-time completion progress and umbrella feature flag propagation.
|
|
44
|
+
8. **Ticket Leases & Multi-Session Mutual Exclusion (`ese lease`)**: Ephemeral TTL-backed ticket leases (`lease.json`) prevent concurrent LLM agents, subagents, or multi-machine sessions from colliding on the same ticket without overwriting durable ticket assignees.
|
|
44
45
|
|
|
45
46
|
---
|
|
46
47
|
|
|
@@ -114,16 +115,17 @@ Core day-to-day workflow commands for scoping, viewing, planning, and verifying
|
|
|
114
115
|
|
|
115
116
|
| Command | Usage | Description |
|
|
116
117
|
|---|---|---|
|
|
117
|
-
| `list` | `ese list [-p\|--project <code\|all>] [-s\|--status <status>] [-t\|--type <type>] [-P\|--priority <priority>] [-m\|--milestone <name>] [--blocked] [--linked-to <key>] [--json]` | List roadmap tickets with optional filters. Defaults to the active project. |
|
|
118
|
-
| `get` | `ese get <id
|
|
118
|
+
| `list` | `ese list [-p\|--project <code\|all>] [-s\|--status <status>] [-t\|--type <type>] [-P\|--priority <priority>] [-m\|--milestone <name>] [--blocked] [--leased] [--leased-by <holder>] [--linked-to <key>] [--json]` | List roadmap tickets with optional filters. Defaults to the active project. |
|
|
119
|
+
| `get` | `ese get <id...> [--json]` | View ticket specifications, feature/task/fix breakdown, comments, links, active lease, and SHA-1 hash for one or more tickets. |
|
|
119
120
|
| `plan` | `ese plan <id> [--set "<markdown>"] [--file <path>] [--last-hash <h>]` | Read or update the active implementation plan markdown. |
|
|
120
121
|
| `create` | `ese create --title "..." [-p\|--project <code>] [-t\|--type <type>] [-P\|--priority <priority>] [-m\|--milestone <name>] [--detail "<md>"] [--file <path>]` | Create a new ticket with auto-sequential ID, optional priority, optional milestone, and specification markdown. Title strictly capped at 48 chars. |
|
|
121
|
-
| `update` | `ese update <id> [-s\|--status <status>] [-t\|--type <type>] [-P\|--priority <priority\|none>] [-m\|--milestone <name\|none>] [--title "..."] [--detail "<md>"] [--file <path>] [--last-hash <h>]` | Update ticket status, type, priority, milestone, title, or specification markdown with optimistic concurrency protection. |
|
|
122
|
+
| `update` | `ese update <id> [-s\|--status <status>] [-t\|--type <type>] [-P\|--priority <priority\|none>] [-m\|--milestone <name\|none>] [--title "..."] [--detail "<md>"] [--file <path>] [--last-hash <h>]` | Update ticket status, type, priority, milestone, title, or specification markdown with optimistic concurrency protection and header sync. |
|
|
123
|
+
| `lease` | `ese lease [claim\|renew\|release\|list] [args...]` | Claim, renew, release, or list TTL-backed advisory ticket leases (aliases: `ese claim`, `ese renew`, `ese release`, `ese leases`). |
|
|
122
124
|
| `link` | `ese link <sourceId> <relation> <targetId> [--author "..."]` | Establish a bi-directional link between two tickets. Relations: `relates-to`, `blocks`, `parent-of`, `duplicates`. |
|
|
123
125
|
| `unlink` | `ese unlink <sourceId> <targetId> [--relation <relation>]` | Remove a bi-directional link between two tickets. |
|
|
124
126
|
| `milestone` | `ese milestone [list\|get\|create\|update\|delete] [args...]` | Manage project milestones and umbrella feature flags with deliverables tracking. |
|
|
125
127
|
| `comment` | `ese comment <id> ["<text>"] [--file <path>] [--text "..."] [--author "..."]` | Append a developer or LLM agent note to ticket history. |
|
|
126
|
-
| `snapshot`, `refresh` | `ese snapshot [--project <code>] [--json]` | Generate or refresh projection `.esedre/snapshot.json` for zero-latency agent context. |
|
|
128
|
+
| `snapshot`, `refresh` | `ese snapshot [--project <code>] [--json]` | Generate or refresh projection `.esedre/snapshot.json` (`totalTickets`, `lastTicketId`, `activeLeases`, `tickets`) for zero-latency agent context. |
|
|
127
129
|
| `projects` | `ese projects [--json]` | List registered projects within authorized scope. |
|
|
128
130
|
|
|
129
131
|
### Service Daemon Commands
|
|
@@ -148,9 +150,9 @@ Commands for repository onboarding, central machine linking, and maintenance:
|
|
|
148
150
|
| `configure` | `ese configure [add <path> \| remove <code\|path> \| set <k> <v>]` | Inspect or mutate central configuration (`~/.esedre/config.json`). Link external project repositories or data hubs. |
|
|
149
151
|
| `rename-project` | `ese rename-project <oldCode> <newCode> [--name "<name>"]` | Rename a project code across directory storage paths, manifests, and tickets. |
|
|
150
152
|
| `project set` | `ese project set <code> [--name "<name>"]` | Update metadata for an existing project (e.g. display name). |
|
|
151
|
-
| `upgrade` | `ese upgrade [<path>] [--all \| -a] [--force \| -f]` | Upgrade workspace configuration schema, in-repo wrappers, and agent skills across current or all registered workspaces. |
|
|
153
|
+
| `upgrade` | `ese upgrade [<path>] [--all \| -a] [--force \| -f]` | Upgrade workspace configuration schema, in-repo wrappers, workspace and global Antigravity MCP configs (`.agents/mcp.json`, `.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json`), and agent skills across current or all registered workspaces, with 24 KB rule size checks. |
|
|
152
154
|
|
|
153
|
-
> **Human vs LLM Agent Workflows**: Developer Administration commands (`init`, `configure`, `upgrade`) manage system-level repository linking and central machine configuration. They are intended for human developers during initial setup. Autonomous LLM coding partners operate within the authorized workspace scope using Roadmap and Service Daemon commands (`list`, `get`, `plan`, `create`, `update`, `comment`, `snapshot`, `start`, `status`).
|
|
155
|
+
> **Human vs LLM Agent Workflows**: Developer Administration commands (`init`, `configure`, `upgrade`) manage system-level repository linking and central machine configuration. They are intended for human developers during initial setup. Autonomous LLM coding partners operate within the authorized workspace scope using Roadmap and Service Daemon commands (`list`, `get`, `plan`, `create`, `update`, `lease`, `comment`, `snapshot`, `start`, `status`).
|
|
154
156
|
|
|
155
157
|
#### Linking External Repositories vs Data Hub Projects
|
|
156
158
|
|
|
@@ -199,11 +201,15 @@ To connect Esedre to **Google Antigravity**, **Claude Code**, **Cursor**, or any
|
|
|
199
201
|
```
|
|
200
202
|
|
|
201
203
|
### Registered Tools
|
|
202
|
-
- `esedre_list_tickets`: List tickets with optional project, status, type, priority, milestone, isBlocked, linkedTo, search, or includePlan filter.
|
|
203
|
-
- `esedre_get_ticket`: Retrieve full specification, summary, comments, revision, links, blocker status, and content hash (`sha1`).
|
|
204
|
+
- `esedre_list_tickets`: List tickets with optional project, status, type, priority, milestone, isBlocked, leased, leasedBy, linkedTo, search, or includePlan filter.
|
|
205
|
+
- `esedre_get_ticket`: Retrieve full specification, summary, comments, revision, links, active lease, blocker status, and content hash (`sha1`).
|
|
204
206
|
- `esedre_get_plan` & `esedre_save_plan`: Inspect and update implementation plans with optimistic concurrency (`lastHash`).
|
|
205
207
|
- `esedre_create_ticket`: Mint new roadmap tickets with project code validation (up to 8 chars), optional priority, optional milestone, and specification detail markdown.
|
|
206
|
-
- `esedre_update_ticket`: Modify status, title, type, priority, milestone, complexity, or effort with optimistic concurrency (`lastHash`).
|
|
208
|
+
- `esedre_update_ticket`: Modify status, title, type, priority, milestone, specification detail (`detail`/`detailMarkdown`), complexity, or effort with optimistic concurrency (`lastHash`).
|
|
209
|
+
- `esedre_claim_ticket`: Acquire an exclusive TTL-backed lease on a ticket (`In Development`) with conflict protection (`-32001`).
|
|
210
|
+
- `esedre_renew_lease`: Extend the expiration TTL of an active ticket lease.
|
|
211
|
+
- `esedre_release_ticket`: Release an active ticket lease and optionally transition status (`Completed`, `Planned`, etc.).
|
|
212
|
+
- `esedre_list_leases`: List all active, unexpired ticket leases across authorized projects.
|
|
207
213
|
- `esedre_link_ticket`: Establish a bi-directional link between two tickets (`relates-to`, `blocks`, `parent-of`, `duplicates`).
|
|
208
214
|
- `esedre_unlink_ticket`: Remove a bi-directional relationship between two tickets.
|
|
209
215
|
- `esedre_list_milestones`: List milestones and progress metrics for a project.
|
|
@@ -242,6 +248,15 @@ Esedre introduces first-class milestone management to group related tickets towa
|
|
|
242
248
|
<img src="https://cdn.jsdelivr.net/npm/esedre/docs/assets/esedre-milestones.png" alt="Esedre Milestones & Deliverables Tracking" width="100%" />
|
|
243
249
|
</p>
|
|
244
250
|
|
|
251
|
+
### Ticket Leases & Multi-Agent Mutual Exclusion (`ese lease`)
|
|
252
|
+
|
|
253
|
+
Esedre provides TTL-backed advisory ticket leases (`projects/<Code>/tickets/<id>/lease.json`) so concurrent LLM coding agents, subagents, CLI scripts, or multi-machine sessions can coordinate without colliding on the same ticket:
|
|
254
|
+
|
|
255
|
+
- **Ephemeral vs. Durable Ownership**: Leases track active real-time execution (`holder`, `system`, `claimedAt`, `expiresAt`, `ttlMinutes`, `branch`, `pid`) without overwriting the ticket's durable `meta.assignee`.
|
|
256
|
+
- **Automatic TTL Expiration & Completion Cleanup**: Leases default to a 60-minute TTL (`--ttl <minutes>`) and are automatically evicted once expired or when a ticket transitions to `Completed` or `Rejected`.
|
|
257
|
+
- **Conflict Protection**: Claiming a ticket already held by another active worker throws `EsedreLeaseConflictError` (CLI exit `1`, MCP JSON-RPC `-32001`, REST HTTP `409 Conflict`) unless `--force` is passed. Re-claiming by the same holder idempotently renews the lease.
|
|
258
|
+
- **CLI & MCP Parity**: Manage leases via `ese lease [claim|renew|release|list]` (or top-level aliases `ese claim`, `ese renew`, `ese release`, `ese leases`) and MCP tools (`esedre_claim_ticket`, `esedre_renew_lease`, `esedre_release_ticket`, `esedre_list_leases`).
|
|
259
|
+
|
|
245
260
|
### Resources
|
|
246
261
|
- URI Scheme: `esedre://tickets/{id}` (MIME type: `text/markdown`)
|
|
247
262
|
|