kandown 0.24.0 → 0.25.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 CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.25.0 — 2026-07-20 — "Task Deep Links"
4
+
5
+ - **Added**: **Shareable task deep links** — opening a task drawer now updates the browser URL to a copy-pasteable route such as `/210?p=kandown`, where numeric task segments are normalized to Kandown task ids like `t210`. This makes it possible to send a direct link to a specific task instead of asking someone to find it manually on the board.
6
+ - **Added**: **Direct URL hydration for task drawers** — pasted links are parsed on web app startup and after browser navigation. Kandown now accepts the canonical `/210?p=kandown` format plus tolerant alternatives such as `/t210?p=kandown`, `?task=210`, and `?p=kandown/210`, then opens the matching drawer once the project is loaded.
7
+ - **Added**: **Browser history support for task navigation** — drawer open and close actions now synchronize with `pushState`/`replaceState`, and Kandown listens for `popstate` so browser Back and Forward switch between board-only and task-focused URLs instead of leaving stale drawer state behind.
8
+ - **Added**: **Copy URL action in the task drawer** — the opened task header now includes a lightweight Copy URL control that writes the absolute task link to the clipboard, with a toast fallback that displays the URL if clipboard access is denied.
9
+ - **Fixed**: **Daemon routing for deep links** — the local web daemon now serves the single-page app for safe one-segment task paths like `/210`, preventing direct task URLs from returning `404 Not found` before React has a chance to hydrate and open the drawer.
10
+ - **Changed**: **Project URL handling** — board/project URLs now go through shared URL helpers so project-only navigation keeps `/?p=<project>` while task navigation cleanly adds or removes the task path segment.
11
+ - **Changed**: **Board housekeeping** — completed Kandown task files were archived or removed from the active task set, new backlog tasks were added for upcoming archive/subtask/opened-task redesign work, and local board config/runtime ignore files were updated to match the current project workflow.
12
+
3
13
  ## 0.24.0 — 2026-07-20 — "Work Output Configurator"
4
14
 
5
15
  - **Added**: **`kandown work` Output Configurator** — added a new Settings panel under Agent configuration that lets each project control the markdown emitted by `kandown work`. Users can enable or disable the base rules, project instructions, and live board digest blocks without editing generated files by hand.
package/bin/kandown.js CHANGED
@@ -2726,6 +2726,15 @@ function serveStaticAsset(req, res, pathname) {
2726
2726
  return false;
2727
2727
  }
2728
2728
 
2729
+ function isTaskDeepLinkPath(pathname) {
2730
+ try {
2731
+ const cleaned = decodeURIComponent(pathname).replace(/^\/+|\/+$/g, '');
2732
+ return !!cleaned && !cleaned.includes('/') && !cleaned.includes('.') && /^[A-Za-z0-9_-]+$/.test(cleaned);
2733
+ } catch {
2734
+ return false;
2735
+ }
2736
+ }
2737
+
2729
2738
  function createServeServer(kandownDir) {
2730
2739
  try {
2731
2740
  const tasksDir = getTasksDir(kandownDir);
@@ -2750,6 +2759,7 @@ function createServeServer(kandownDir) {
2750
2759
  return handleApi(req, res, requestUrl, kandownDir);
2751
2760
  }
2752
2761
  if (serveStaticAsset(req, res, requestUrl.pathname)) return;
2762
+ if (req.method === 'GET' && isTaskDeepLinkPath(requestUrl.pathname)) return serveApp(res, kandownDir);
2753
2763
  return writeText(res, 404, 'Not found');
2754
2764
  });
2755
2765
  }