mirror of
https://github.com/wassname/pi-lgtm.git
synced 2026-06-27 16:46:17 +08:00
8.7 KiB
8.7 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.2 - 2026-03-17
Fixed
- Completed tasks no longer vanish from the list — completed tasks are now persisted to disk so they survive reloads and show as strikethrough instead of disappearing. Use "Clear completed" in
/tasksto explicitly remove them.
0.3.1 - 2026-03-16
Added
- Local-by-default task persistence — tasks now auto-persist to
<cwd>/.pi/tasks/tasks.jsonon every mutation and reload on restart. No config needed. SetPI_TASKS=offto opt out (CI/automation). - Settings persistence —
persistTasksandautoCascadesettings survive restarts via<cwd>/.pi/tasks-config.json. - "Persist tasks" toggle in Settings —
/tasks→ Settings now shows two toggles: auto-execute and persist. Both are saved immediately totasks-config.json. - Completed tasks excluded from disk — only
pendingandin_progresstasks are written to disk. Completed tasks are in-memory only and pruned on restart. (Reverted in 0.3.2 — completed tasks are now persisted.) - Absolute path support —
TaskStorenow accepts an absolute file path in addition to a short list ID.
Changed
- ⚠ BREAKING:
PI_TASKS_FILE/PI_TASKS_LIST→PI_TASKS— two env vars consolidated into one. Values:off(in-memory),sprint-1(named list →~/.pi/tasks/sprint-1.json),/abs/path(absolute),./rel/path(relative to cwd).PI_TASKS_LIST=nameusers: rename toPI_TASKS=name. - Settings menu — extracted to
src/ui/settings-menu.tsand rebuilt usingui.custom()+SettingsListfor native TUI rendering: keyboard navigation, live toggle, per-row descriptions, theme-consistent styling. autoCascadesetting — now loaded fromtasks-config.jsonon startup so the toggle survives restarts.- Hardened
TaskUpdatedescription — added "Before starting work on a task: mark itin_progressBEFORE beginning" as an explicit use case. Previously this rule only appeared inTaskCreate; now it lives in the tool actually used to set that status. - Removed
before_agent_startsystem prompt injection — task state is no longer injected into the system prompt on every agent loop. Analysis showed this creates wallpaper noise that trains the model to ignore the task block. Claude Code itself does not do this: the workflow contract lives in tool descriptions (read at decision time) and the periodic<system-reminder>nudge (fired when task tools haven't been used recently). Removed the corresponding 3 tests. - Widget render-once refactor —
TaskWidgetnow registers the widget callback a single time and usestui.requestRender()for subsequent updates instead of callingsetWidget()on every tick. Rendering logic extracted torenderWidget(). Eliminates redundant callback re-registration and keeps a cachedtuireference for lightweight invalidation.
0.3.0 - 2026-03-14
Changed
- Eventbus RPC for subagent communication — replaced the
Symbol.forglobal registry bridge with a proper eventbus RPC protocol.pi-tasksnow communicates with@tintinweb/pi-subagentsvia scoped request/reply channels (subagents:rpc:spawn,subagents:rpc:ping), eliminating shared mutable global state and enabling reliable cross-extension coordination regardless of load order. - Presence detection — two-path handshake: (1) ping RPC on init with scoped reply channel, (2)
subagents:readybroadcast listener. Works whetherpi-subagentsloads before or afterpi-tasks. - Agent-task mapping — in-memory
agentTaskMap(agentId → taskId) replaces linearstore.list().find()scans for O(1) completion event lookup. - Spawn error handling —
spawnSubagent()returns a Promise with 30s timeout. Failed spawns revert tasks topendingwith error in metadata instead of silently failing. - Removed
SubagentBridgetype — thetypes.tsinterface for the global registry bridge is no longer needed. - Widget icon colors — completed tasks show green
✔, in-progress tasks show accent-colored◼(matching Claude Code's UI).
0.2.0 - 2026-03-12
Added
TaskExecutetool — execute tasks as background subagents via @tintinweb/pi-subagents. Tasks withagentTypemetadata are spawned as independent agents; validates status, dependencies, and agent type before launching.agentTypeparameter onTaskCreate— opt-in field (e.g.,"general-purpose","Explore") that marks tasks for subagent execution.- Auto-cascade — when enabled via
/tasks→ Settings, completed agent tasks automatically trigger execution of their unblocked dependents, flowing through the task DAG like a build system. Off by default. - Subagent completion listener — listens to
subagents:completedandsubagents:failedevents to automatically update task status. Failed tasks revert topendingwith error stored in metadata. - READY tags in system prompt — pending tasks with
agentTypeand all dependencies completed are marked[READY — use TaskExecute to start]in the system prompt. - Agent ID in widget — in-progress tasks backed by subagents show the agent ID (e.g.,
✳ Writing tests (agent abc12)…). - Settings menu —
/tasks→ Settings → toggle "Auto-execute tasks with agents". SubagentBridgetype — typed interface for the cross-extension Symbol.for bridge.
Changed
@tintinweb/pi-subagentsglobal registry now exposesspawn()andgetRecord()in addition towaitForAll()andhasRunning().@tintinweb/pi-subagentsemits lifecycle events onpi.events:subagents:created,subagents:started,subagents:completed,subagents:failed,subagents:steered.AgentManageraccepts an optionalonStartcallback, fired when an agent transitions to running (including from queue).
0.1.0 - 2026-03-12
Initial release — Claude Code-style task tracking and coordination for pi.
Added
- 6 LLM-callable tools —
TaskCreate,TaskList,TaskGet,TaskUpdate,TaskOutput,TaskStop— matching Claude Code's exact tool specs, descriptions, and schemas. - System-reminder injection — periodic
<system-reminder>nudges appended to non-task tool results when tasks exist but task tools haven't been used for 4+ turns. Matches Claude Code's host-level reminder mechanism. - Prompt guidelines —
promptGuidelineson TaskCreate injects persistent guidance into the system prompt, nudging the LLM to use task tools for complex work. - Task state in system prompt —
before_agent_startevent appends current task state to the system prompt on every agent loop, ensuring task awareness survives context compaction. - Persistent widget — live task list above editor with
✔(completed, strikethrough + dim),◼(in-progress),◻(pending), animated star spinner (✳✽) for active tasks with elapsed time and token counts (e.g.,✳ Running tests… (2m 49s · ↑ 4.1k ↓ 1.2k)). - Multiple parallel active tasks — widget supports multiple simultaneous spinners.
/taskscommand — interactive menu: view tasks with actions (start, complete, delete), create tasks, clear completed.- Bidirectional dependency management —
addBlocks/addBlockedBymaintain both sides automatically. Edges cleaned up on task deletion. - Dependency warnings — cycles, self-dependencies, and dangling references produce warnings in TaskUpdate responses. Edges are still stored, matching Claude Code's permissive behavior.
- File-backed shared storage — set
PI_TASK_LIST_IDenv var for multi-session coordination at~/.pi/tasks/<id>.json. File locking with stale-lock detection prevents race conditions. - In-memory session-scoped mode — default when no env var is set, zero disk I/O.
- Background process tracker — output buffering (stdout + stderr), waiter notification, graceful stop with timeout escalation (SIGTERM → 5s → SIGKILL).
- 78 unit tests — task store CRUD, dependencies, warnings, file persistence; widget rendering, icons, spinners, token/duration formatting; process tracker lifecycle.