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.
- Streamlit web UI improvements: Further refinements to the chat-like interface
- Enhanced fixed input positioning to ensure it stays at viewport bottom
- Improved JavaScript handling for better reliability across Streamlit reruns
- Ploa desktop alternative mention: Added references to Ploa - a desktop application designed for users who prefer point-and-click interfaces over command-line tools
- Mentioned in README introduction and web interface section
- Added info box in Streamlit web UI sidebar
- Added link in web UI title area
- Improved Streamlit web UI: Enhanced chat-like interface with better fixed input positioning
- Command input now properly fixed at bottom of viewport
- Improved JavaScript to maintain fixed positioning after Streamlit reruns
- Better layout structure to prevent input from scrolling off screen
- Streamlit command repetition: Clearing the command input now happens safely before the widget is instantiated, preventing duplicate command execution in the web UI.
- Prompt authentication indicator: REPL prompt now shows the current login status (e.g.,
plone (admin)>orplone (anonymous)>)
- Automated build metadata cleanup:
sdist/bdist_wheelcommands now strip unsupported metadata fields automatically, so manual post-build fixes are no longer needed.
- Index-based block operations: Block commands now support 1-based index notation (matching web interface behavior)
delete-block 3- Delete block at position 3 (1-based index)move-block 3 up- Move block at position 3 up one positionmove-block-up 3- Shortcut command to move block at position 3 up- Index-based operations work alongside existing block ID/partial ID support
- When moving block at position 3 up, it becomes position 2, and old position 2 becomes position 3 (matching web UI behavior)
- Improved Streamlit web UI: Results now display at the top in a running commentary style
- Most recent command and result appear at the top
- Command history shows chronologically with newest entries first
- Command input field moved to bottom for better workflow
- Each command/result pair clearly separated with dividers
- More intuitive interface similar to chat/terminal applications
- Login base URL normalization: Fixed login failure when base URL doesn't include
/++api++/- Login function now normalizes base URL before attempting authentication
- Fixes issue where users couldn't log in after upgrading from versions <= 0.1.16
- Base URLs are now automatically normalized and saved for future use
- Works with both old config files and new installations
- Object rename commands: New commands for renaming Plone objects
rename <new_title> [path]- Rename item title (update the title field)set-id <new_id> [path]- Change item id/shortname/objectname (update the id field)- Both commands support optional path argument to target specific items
- Both commands require confirmation (respect
-yflag) - Path autocompletion works for both commands
- Move command: New
mvcommand to move items between foldersmv <source> <dest>- Move item to new locationmv <source> <dest-folder/new-name>- Move and rename in one operation- Uses Plone REST API's
@moveendpoint - Requires confirmation (respects
-yflag) - Path autocompletion for both source and destination
- Improved error messages: Better error handling for
set-idcommand- Clear syntax explanation when item not found (404 errors)
- Helpful hints and examples for correct usage
- Distinguishes between path errors and other API errors
- Auto-confirm mode: New
-y/--yesflag for REPL to automatically answer "yes" to all confirmation prompts- Use
ploneapi-shell repl -yto enable auto-confirm mode - All confirmation prompts default to "yes" (Y/n instead of y/N)
- Makes batch operations much faster when you know you want to confirm everything
- Use
- Plone 6 block manipulation: New commands for managing blocks in Plone 6 content items
blocks [path]- List all blocks in an item with their order, type, and previewshow-block <id|partial> [path]- Show full details of a specific block (supports partial block IDs)delete-block <id|partial> [path]- Delete a block from an item (supports partial block IDs, with confirmation)move-block <id|partial> <up|down|to <pos>> [path]- Move blocks up, down, or to a specific position- Examples:
move-block abc123 up,move-block abc up my-item,move-block abc123 to 0(move to first position) - All block commands support partial block IDs (e.g.,
abcmatchesabc123xyzif unique) - All block commands respect the
-yflag for automatic confirmation - Path autocompletion works for all block commands
- Path autocompletion for block commands: Tab completion now works for paths in block commands
- Type
blocks test-video <tab>to autocomplete toblocks test-video-playback - Works with deep paths like
blocks files/myfolder/test <tab> - Suggests items from the current directory or the directory being typed
- Type
- Confirmation prompts default to "yes": All
typer.confirm()calls in REPL now default toTrue(Y/n instead of y/N)- Pressing Enter now confirms instead of canceling
- More convenient for users who typically want to proceed with operations
- Use
-yflag for completely automatic confirmation
- Improved block command usability: Block commands now support partial block IDs
- If multiple blocks match a partial ID, all matches are shown
- If only one block matches, it's used automatically
- Makes working with long block IDs much easier
- Search by object type: New
searchcommand to find items by their portal_typesearch Document- Find all Document itemssearch Folder --path /some/path- Find Folders in a specific path- Works in both CLI and REPL modes
- Results displayed using the same format as
lscommand - Supports pagination for large result sets
- Improved
lsoutput format: Type information now integrated into the Title column- Removed separate "Type" column for more compact display
- Format:
Title (id) [Type]where title is bold, ID is dim, and type is cyan in brackets - Makes better use of horizontal space while maintaining all information
- Enhanced tag rename verification: Improved verification logic in
merge-tagscommand- Now verifies that updates actually succeed (matches REPL behavior)
- Better error reporting when updates fail silently
- Fetches current item tags directly for more reliable updates
- Added small delay before verification to allow server processing
- Improved search pagination:
search_by_subjectnow handles pagination properly- Can find more than 25 items when searching by tag
- Better handling of large result sets
- Tag rename verification: Added verification to
merge-tagscommand to detect failed updates- Verifies that old tags are removed and new tags are added
- Better error messages explaining why updates failed
- Improved tag fetching for more reliable updates
lscommand now shows Title and ID columns: Thelscommand was missing the Title column and didn't display object IDs. Now shows both Title and ID (object name) columns, making it much easier to identify and distinguish items. The ID is extracted from theidfield or derived from the@idURL path.
- Combined Title and ID into single column: The
lscommand now displays title (bold) and ID (dim) in a single "Title (ID)" column for better space utilization, using color to distinguish between the two. - Enhanced tab completion for deep paths: Tab completion now works for nested paths like
cd files/mystuff/<Tab>, automatically fetching items from the specified directory and suggesting completions. This makes navigating deep folder structures much faster.
connectcommand inside the REPL to switch the active site without exiting. Accepts bare hosts, addshttp(s)://as needed (prefershttp://for localhost/IPs), and appends/++api++/automatically.- Base URL normalization helpers that verify connectivity before saving, clear old tokens when switching sites, and ensure the config always points at the API root.
- Quick Start and command docs now cover the
connectworkflow and note the auto-scheme/++api++behavior.
- Automatic token renewal via
@login-renewwhen saved JWTs near expiry, so REPL/CLI sessions keep working without manuallogin.
- Updated Quick Start and command docs to highlight the new background refresh behavior.
- Added
loginandlogoutcommands directly to the REPL so you can refresh or clear credentials without leaving the shell.
- Updated README Quick Start and command docs to make REPL-based authentication the preferred onboarding path.
- Clarified REPL help text to distinguish
exit/quit(leave shell) fromlogout(clear saved credentials) - Updated README command list so
logoutis documented alongsideexit/quit, reducing onboarding confusion
- Fixed
rename-tagcommand: Tag renaming now works correctly- Improved tag replacement logic to properly remove old tag and add new tag
- Added verification to ensure updates actually succeed
- Better error reporting when updates fail
- Fixed case-sensitive tag matching issues
- Tag autocompletion in REPL: Tab completion now works for tag names in tag management commands
- Autocomplete tag names for
merge-tags,rename-tag,remove-tag, andsimilar-tagscommands - Tags are cached per path/base URL for performance
- Makes tag management much faster and easier in the interactive shell
- Note: First autocomplete may be slow as it fetches all tags; subsequent completions are cached
- Autocomplete tag names for
- Multiple tag merging:
merge-tagscommand now supports merging multiple source tags into one target tag- Example:
merge-tags swimming diving water-polo water-sportsmerges all three tags into "water-sports" - Shows summary of items found for each source tag
- Deduplicates items that have multiple source tags
- Example:
- Enhanced
similar-tagsdocumentation: Comprehensive examples showing all usage patterns- CLI and REPL examples for all threshold syntax options (positional,
-t,--threshold) - Examples for finding all similar pairs vs. finding similar tags for a specific tag
- Guidance on finding misspellings: misspelled tags typically have 98%+ similarity scores
- CLI and REPL examples for all threshold syntax options (positional,
- Enhanced documentation with examples of tag autocompletion and multiple tag merging
- Clearer error messages for tag management commands using
<source_tag>and<target_tag>terminology - More explicit examples for
similar-tagscommand showing all syntax variations - Added guidance on using high thresholds (98%+) to find misspelled tags
- Tag Management Documentation: Comprehensive README section covering all tag management features
- Detailed examples for
tags,similar-tags,merge-tags,rename-tag, andremove-tagcommands - Usage examples for both CLI and REPL modes
- Explanation of Plone's Subject field and tag indexing
- Detailed examples for
- Configurable similarity threshold:
similar-tagscommand now supports-t/--thresholdflags in REPL- Use
similar-tags -t 80orsimilar-tags mytag --threshold 80to set custom threshold - Threshold validation (0-100) with helpful warnings for invalid values
- Use
- Enhanced tag discovery: Improved Subject field detection for Plone's standard tagging system
- Prioritizes checking the
Subjectfield (Plone's standard field name) - Checks multiple field locations and formats
- Better handling of different REST API response formats
- Prioritizes checking the
- Performance improvements: Strategic caching for recursive tag browsing
- Caches fetched items to avoid re-fetching during recursive browsing
- Warning message when falling back to recursive browsing (indicates slower performance on large sites)
- Enhanced debug output: Improved debugging for tag collection
- Shows whether Subject field is found in API responses
- Displays item structure and field locations for troubleshooting
- Better diagnostic information when tags aren't found
- Improved tag collection reliability by checking Subject field in multiple locations
- Better error handling and validation for threshold values
- Similar tags command: New
similar-tagscommand to find tags similar to a given tag using fuzzy matching- Uses thefuzz library for intelligent tag similarity detection
- Configurable similarity threshold (default: 70%)
- Shows tag name, frequency, and similarity score
- Available in both CLI and REPL:
ploneapi-shell similar-tags <tag> [--threshold 70]
- Improved tags command: Now uses search endpoint instead of browsing, finding tags across all items
- Handles pagination to collect tags from large sites
- More reliable tag discovery across the entire site or specific paths
- Fixed
tagscommand returning "No tags found" when tags exist elsewhere in the site
- Critical: Fixed URL resolution bug where base URLs without trailing slashes caused login endpoint to resolve incorrectly
@loginendpoint now correctly resolves tobase/++api++/@logininstead ofbase/@login- Fixes 404 errors when logging in with base URLs like
https://site.com/++api++(without trailing slash)
- Fixed handling of Typer Option objects being passed to API functions
- Added type checks in all API functions to ensure
baseparameter is always a string - Prevents "expected str or httpx.URL got class <typer.models.OptionInfo>" errors
- Functions now gracefully fall back to default base URL if invalid type is passed
- Added type checks in all API functions to ensure
- Fixed syntax errors in
merge-tagsandremove-tagcommands (missing exception handlers) - Fixed package metadata issues for PyPI upload compatibility
- Web UI: Streamlit-based web interface (
ploneapi-shell web) with command interface- Same commands as REPL but with visual tables and JSON viewers
- Sidebar with configuration and authentication
- Plone logo support
- Interactive REPL shell with filesystem-like navigation (
ls,cd,pwd) - Metadata-rich
lscommand showing title, type, review state, and modification date - Improved tab completion: Shows item names (e.g., "images") instead of full URLs
- Full URL support:
cdcommand now accepts both relative paths and full URLscd imagesandcd https://demo.plone.org/imagesboth work
- Default behavior: Running
ploneapi-shellwith no arguments launches the REPL - Command history persistence
get,items,raw, andcomponentscommands for API exploration- Authentication support via
loginandlogoutcommands - Configurable base URL with automatic persistence
- Support for custom headers and query parameters
- Default base URL set to demo.plone.org for quick testing
rename,cp,mvcommands for content managementtransitionscommand to list available workflow transitionstransitioncommand to execute workflow transitionsbulk-transitioncommand for bulk workflow operations- Tag/keyword management commands (list, merge, rename, remove)
- Initial release
- Basic CLI commands:
get,items,components - Authentication via token-based login
- Interactive REPL shell
- Rich terminal output with tables and formatting
- Configuration file management