81 lines
4.6 KiB
Markdown
81 lines
4.6 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to noz-cli are documented here.
|
|
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning: [Semantic Versioning](https://semver.org/).
|
|
|
|
---
|
|
|
|
## [Unreleased]
|
|
|
|
## [0.2.0] — 2026-05-17
|
|
|
|
### Added
|
|
|
|
**REPL commands**
|
|
- `mv <old> <new>` — rename a note and atomically rewrite all inbound wikilinks and markdown links
|
|
- `mkdir <name>` — create a folder by writing a `_index.md`; navigates into the new folder immediately
|
|
- `link <source> <target>` — add a wikilink to the "Siehe auch" section (or create it); `--both` for bidirectional
|
|
- `search <query>` — full-text search via Meilisearch; context-aware (defaults to current topic); `--topic`, `--limit` flags
|
|
- `templates` — list available server-side note templates
|
|
- `new --template <name> <slug>` — create a note from a template with `{{title}}`, `{{date}}`, `{{topic}}` placeholders
|
|
- `cat --raw <slug>` — print raw markdown (default now renders via MarkdownRenderer)
|
|
- `clear` — clear the terminal screen
|
|
|
|
**PowerShell module**
|
|
- `Get-NozGraph` — all wikilink edges as `NozGraphEdge` objects; filterable by `-Source` / `-Target`
|
|
- `Find-NozNote` — Meilisearch full-text search; `-Topic`, `-Limit`
|
|
- `Measure-NozGarden` — garden-wide statistics: note counts by status/topic/lang, link count, orphan count
|
|
- `Set-NozNoteStatus` — patch the `status:` frontmatter field in place; `SupportsShouldProcess`
|
|
- `Get-NozOrphans` — notes with no incoming wikilinks; `-Topic` filter
|
|
- `Rename-NozNote` — wraps `NoteRenamer` for pipeline use; `-PassThru`, `-WhatIf`
|
|
- `Get-NozTemplate` — list server-side templates
|
|
- `Add-NozLink` — add wikilinks between notes; `-Both`, `-Section`
|
|
|
|
**Server API routes** (noz Next.js app)
|
|
- `GET /api/cli/graph` — full wikilink adjacency list from pre-built index
|
|
- `GET /api/cli/search` — Meilisearch / local-search with `?q`, `?topic`, `?limit`
|
|
- `PUT /api/cli/folders/[...path]` — create `_index.md` for a folder
|
|
- `GET /api/cli/templates` — list templates from `_templates/`
|
|
- `GET /api/cli/templates/[name]` — fetch a single template body
|
|
- `PUT /api/cli/templates/[name]` — create or update a template
|
|
|
|
**Core library**
|
|
- `NoteRenamer` — fetches inbound edges, creates new note, rewrites links, deletes old slug
|
|
- `NoteLinkHelper` — `AddLink()` inserts wikilinks into existing sections or appends new ones; `ApplyPlaceholders()` for template rendering
|
|
- `NozApiClient.GetGraphAsync()`, `SearchAsync()`, `GetTemplatesAsync()`, `GetTemplateAsync()`, `PutFolderIndexAsync()`
|
|
|
|
**Templates**
|
|
- Four sample templates in `content/noosphere/_templates/`: `rezept`, `buch-notiz`, `konzept`, `meeting`
|
|
|
|
### Fixed
|
|
- `walkNotes` now skips directories with `_` prefix (previously only filenames were checked — `_templates/` content was indexed as regular notes)
|
|
- Notes listing API now includes the `date` field
|
|
|
|
---
|
|
|
|
## [0.1.0] — 2026-05-16
|
|
|
|
### Added
|
|
- Interactive REPL with topic-based navigation (`cd`, `ls`, `ls -la`, `tree`)
|
|
- `cat` — render a note with MarkdownRenderer (headings, blockquotes, code blocks, inline formatting)
|
|
- `edit` — open note in terminal editor (nano/vim) or VS Code / Zed / Sublime (`-c`)
|
|
- `new` — create a note with frontmatter template, open in editor
|
|
- `rm` — delete a note from server
|
|
- `sync` — pull notes from server to local directory (parallel downloads, SHA-256 hash diffing, `--all`, `--dry-run`)
|
|
- `push` — push local `.md` files to server with slug validation
|
|
- `status` — diff between a local folder and the server
|
|
- `config` — view and set `editor` / `code_editor` preferences
|
|
- `version` — print version and git hash
|
|
- `help` — list all commands with usage
|
|
- `exit` / `quit` / `q` — quit the REPL
|
|
- JSON note cache (`~/.cache/noz/notes.json`) — instant startup, background refresh, `chmod 600`, atomic write
|
|
- Cache age shown in startup stats line ("vor 5 Min.")
|
|
- Ctrl+C: idle → exit REPL; during command → cancel command only
|
|
- Native AOT binary for macOS arm64 (~7.6 MB, no runtime required)
|
|
- Tab completion for commands, slugs, and folder segments
|
|
- `SlugGuard` — path traversal prevention for all slug inputs and file operations
|
|
- `MarkdownRenderer` — segment-based inline escaping (prevents Spectre markup injection from note content)
|
|
- PowerShell module `Noz` with `Get-NozNote`, `Get-NozNoteContent`, `Set-NozNote`, `New-NozNote`, `Remove-NozNote`
|
|
- xUnit test suite (52 tests): `SlugGuardTests`, `ReplContextTests`, `NotesCacheTests`, `NoteRenamerTests`, `NoteLinkHelperTests`
|
|
- Forgejo Actions CI pipeline (`.forgejo/workflows/ci.yml`): build + test on every push/PR
|
|
- Version string from `AssemblyInformationalVersion` with embedded git short hash
|