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
68 changes: 0 additions & 68 deletions .github/workflows/cd.yml

This file was deleted.

65 changes: 65 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Release

on:
workflow_dispatch:
inputs:
release_type:
description: Release bump type
required: true
type: choice
options:
- patch
- minor
- major
default: patch
first_release:
description: Use --first-release for initial npm publish
required: true
type: boolean
default: false

concurrency:
group: release-${{ github.repository }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: write

jobs:
release:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "24"
registry-url: "https://registry.npmjs.org"
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Configure git author
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
RELEASE_TYPE: ${{ inputs.release_type }}
FIRST_RELEASE: ${{ inputs.first_release }}
run: pnpm run release:ci
27 changes: 27 additions & 0 deletions .release-it.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"git": {
"commitMessage": "chore(release): v${version}",
"tagName": "v${version}",
"requireCleanWorkingDir": true,
"requireUpstream": true,
"addUntrackedFiles": true,
"commit": true,
"tag": true,
"push": true
},
"github": {
"release": true
},
"npm": {
"publish": true
},
"plugins": {
"@release-it/conventional-changelog": {
"preset": "conventionalcommits",
"infile": "CHANGELOG.md"
}
},
"hooks": {
"before:init": "pnpm run check"
}
}
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Changelog

## Unreleased

- Expected release: TBD
- PR: TBD
- Authors: @ayagmar

### Added

- Documented new duration parsing and path identity utility work that supports history filters, scheduling, and path deduplication.

### Changed

- Release automation now serializes manual runs and only publishes from `main`.
- Community browse caching now follows the shared search-cache path.

### Fixed

- Unified manager interactions keep staged changes, filters, and selection when returning from details, action menus, and stay-in-manager prompts.
- Disabled local extensions deduplicate correctly, manifest entrypoints only resolve real files, and npm author selection now prefers maintainer usernames before fallback emails.
- Metadata cache freshness no longer refreshes inherited stale fields.
- Relative path selection rejects Windows absolute and UNC paths, and unified UI tests now use platform-safe temp directories.

26 changes: 18 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,29 @@ pi install npm:pi-extmgr

If Pi is already running, use `/reload`.

Requires Node.js `>=22`.
Requires Node.js `>=22.20.0`.

## Features

- **Unified manager UI**
- Local extensions (`~/.pi/agent/extensions`, `.pi/extensions`) and installed packages in one list
- Scope indicators (global/project), status indicators, update badges
- Grouped sections for local extensions vs installed packages
- Compact rows with selected-item details below the list, so large extension sets stay scannable
- Built-in search and filter shortcuts for large extension sets
- Scope indicators (global/project), status indicators, update badges, and package sizes when known
- **Package extension configuration panel**
- Configure individual extension entrypoints inside an installed package (`c` on package row)
- Works with manifest-declared entrypoints and conventional `extensions/` package layouts
- Persists to package filters in `settings.json` (no manual JSON editing)
- **Safe staged local extension toggles**
- Toggle with `Space/Enter`, apply with `S`
- Toggle with `Space`, apply with `S`
- Unsaved-change guard when leaving (save/discard/stay)
- **Package management**
- Install, update, remove from UI and command line
- Quick actions (`A`, `u`, `X`) and bulk update (`U`)
- **Remote discovery and install**
- npm search/browse with pagination
- npm search/browse with pagination, inline browse search, and keyboard page navigation
- Path- and git-like queries are handled explicitly instead of surfacing unrelated npm results
- Install by source (`npm:`, `git:`, `https://`, `ssh://`, `git@...`, local path)
- Supports direct GitHub `.ts` installs and standalone local install for self-contained packages
- Long-running discovery/detail screens now show dedicated loading UI, and cancellable reads can be aborted with `Esc`
Expand Down Expand Up @@ -66,20 +70,26 @@ Open the manager:
| Key | Action |
| ------------- | ----------------------------------------------------- |
| `↑↓` | Navigate |
| `Space/Enter` | Toggle local extension on/off |
| `PageUp/Down` | Jump through longer lists |
| `Home/End` | Jump to top or bottom |
| `Space` | Toggle selected local extension on/off |
| `S` | Save local extension changes |
| `Enter` / `A` | Actions on selected package (configure/update/remove) |
| `Enter` / `A` | Actions on selected item |
| `/` / `Ctrl+F`| Search visible items |
| `Tab` / `Shift+Tab` | Cycle filters |
| `1-5` | Filters: All / Local / Packages / Updates / Disabled |
| `c` | Configure selected package extensions |
| `u` | Update selected package directly |
| `V` | View full details for selected item |
| `X` | Remove selected item (package/local extension) |
| `i` | Quick install by source |
| `f` | Quick search |
| `f` | Remote package search |
| `U` | Update all packages |
| `t` | Auto-update wizard |
| `P` / `M` | Quick actions palette |
| `R` | Browse remote packages |
| `?` / `H` | Help |
| `Esc` | Exit |
| `Esc` | Clear search or exit |

### Commands

Expand Down
10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@
"smoke-test": "node --import=tsx ./scripts/smoke-test.mjs",
"test": "node --import=tsx --test ./test/*.test.ts",
"check": "tsc --noEmit -p tsconfig.json && node --import=tsx ./scripts/smoke-test.mjs && node --import=tsx --test ./test/*.test.ts && pnpm run lint && pnpm run format:check",
"release": "release-it",
"release:patch": "release-it patch",
"release:minor": "release-it minor",
"release:major": "release-it major",
"release:first": "release-it --first-release",
"release:ci": "node --import=tsx ./scripts/release-ci.ts",
"prepublishOnly": "pnpm run check",
"prepare": "husky"
},
Expand All @@ -45,16 +51,18 @@
"@biomejs/biome": "^2.4.9",
"@mariozechner/pi-coding-agent": "^0.63.1",
"@mariozechner/pi-tui": "^0.63.1",
"@release-it/conventional-changelog": "^10.0.5",
"@types/node": "^22.19.10",
"husky": "^9.1.7",
"release-it": "^19.2.4",
"tsx": "^4.21.0",
"typescript": "^5.9.3"
},
"author": "ayagmar",
"license": "MIT",
"packageManager": "[email protected]",
"engines": {
"node": ">=22"
"node": ">=22.20.0"
},
"repository": {
"type": "git",
Expand Down
Loading
Loading