Skip to content

feat(mcp): upgrade to MCP 2026-07-28 spec (#424)#2

Open
advancedresearcharray wants to merge 158 commits into
mainfrom
feat/mcp-2026-07-28-issue-424
Open

feat(mcp): upgrade to MCP 2026-07-28 spec (#424)#2
advancedresearcharray wants to merge 158 commits into
mainfrom
feat/mcp-2026-07-28-issue-424

Conversation

@advancedresearcharray

Copy link
Copy Markdown
Owner

Summary

  • Add wrapMCP2026 HTTP middleware around Streamable HTTP to support MCP 2026-07-28 while mcp-go remains on 2025-11-25
  • Implement server/discover, Mcp-Method/Mcp-Name routing headers, and ttlMs/cacheScope on list/read responses
  • Upgrade tools/list input schemas with JSON Schema 2020-12 $schema metadata
  • Preserve backward compatibility for legacy initialize clients and stateless transport (no Mcp-Session-Id)

Upstream PR target: kiwifs#424

Test plan

  • go test ./internal/mcpserver/ -run 'MCP2026|EnhanceList|ParseMCP|BuildDiscover' -v -count=1 — 11/11 PASS
  • go test ./internal/api/ -run MCP -v -count=1 — PASS

Made with Cursor

advancedresearcharray and others added 30 commits June 3, 2026 20:49
Add --format skill for rules export and sync. Generates SKILL.md
content for agents to search the wiki via kiwi_search/kiwi_read,
writes .cursor/skills/team-wiki/SKILL.md on export, and exposes
format=skill on the rules API.

Closes kiwifs#155.

Co-authored-by: advancedresearcharray <advancedresearcharray@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…s#224)

Add tasks.json kanban workflow with WIP limits and task.md template
for UC-1 agent task orchestration. Document workflow in SCHEMA.md
and verify via init test.

Closes kiwifs#145

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
)

Agent-facing task lifecycle helpers for the default tasks workflow (kiwifs#148, kiwifs#149).

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Closes kiwifs#156. Boots pkg/kiwi + in-process MCP client, exercises
write/read/search/tree/delete/rename end-to-end.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ontent (kiwifs#228)

The `before` slice used `content[:idx+after+nextH2]` which double-counted
the `idx` offset (since `after` already includes `idx`). This caused content
duplication when a task file had H2 sections after ## Progress.

Rewrite to directly compose: header + existing progress + new entry + tail.

Add edge-case tests covering multi-H2 documents, empty content, long
messages, and YAML-special characters in task titles.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
)

Resolve blocked-by (and blocked_by) refs against page metadata, surface
blocked state with blocker titles on board cards, grey lock styling, and
prevent dragging blocked cards into in_progress (API + UI).

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…LETE (kiwifs#229)

Signed-off-by: Bobby <boby@codelabs.co.id>
Co-authored-by: Bobby <boby@codelabs.co.id>
…ifs#231)

- Register days_ago(n) compiling to datetime('now', '-n days')
- Add --infer-schema on kiwifs import for csv/json/jsonl sampling
- Add knowledge/README.md for docker-compose.dev sample root

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Mount contrib/dev-knowledge, connect backend to pgvector, add MCP HTTP
service on 8181, and document endpoints in CONTRIBUTING.md.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
SampleJSONRows was converting all JSON values to strings via
fmt.Sprint, which turned null into "<nil>", arrays into "[a b]",
and objects into "map[...]". The string-based InferFieldTypes
then misclassified these as "string" instead of the correct types.

Add SampleJSONRowsNative and InferFieldTypesNative that work with
map[string]any directly, correctly inferring integer, number,
boolean, array, and object types from JSON/JSONL sources. CSV
inference is unchanged (string-based is correct for CSV).

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…kiwifs#242)

Fixes kiwifs#240

Two bugs in cmd/update.go prevented `kiwifs update` from working:

1. assetNameForPlatform() generated "kiwifs_linux_amd64" (underscores)
   but goreleaser v2 produces "kiwifs-linux-amd64" (hyphens). The
   strings.Contains check never matched, so the command always reported
   "No binary found".

2. runUpdate() wrote the raw .tar.gz/.zip archive bytes directly as
   the new executable instead of extracting the kiwifs binary from
   inside the archive.

Fix: use hyphens in the asset name to match actual release assets,
and add extractBinary() to unpack .tar.gz (Linux/macOS) or .zip
(Windows) archives before writing the binary.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: deltasquare4 <deltasquare4@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
kiwifs#244)

The kiwifs binary inside goreleaser archives is named
"kiwifs-darwin-arm64" (with platform suffix), not just "kiwifs".
extractBinary() only matched the exact name "kiwifs", causing
extraction to fail even after the asset URL was found correctly.

Add isKiwifsBinary() that matches "kiwifs", "kiwifs.exe", and any
"kiwifs-*" or "kiwifs_*" variant. Add comprehensive unit tests for
assetNameForPlatform(), isKiwifsBinary(), and extractBinary() covering
tar.gz, zip, subdirectories, and missing-binary edge cases.

Verified end-to-end: built with version 0.0.1, ran `kiwifs update`,
binary successfully updated to v0.19.17.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Add --save-schema to persist --infer-schema output as .kiwi/schemas/<name>.json.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Factor record conversion into a pure helper so it can be tested without
calling the live Sheets API.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
* Add field mapping step to import wizard (kiwifs#142)

Introduce field_mappings on preview/import APIs with rename, skip, and type coercion in the importer. Add a wizard step between configure and preview for structured sources so users can map columns before previewing five sample pages.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(import): infer field types from sample rows in wizard

Add POST /import/infer-fields and upload infer-fields mode so the field
mapping step uses backend schema inference (up to 100 rows) instead of a
single-row client guess. Complements kiwifs#142 and addresses the UI gap in kiwifs#141.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Use ajs-page-id to map HTML pages onto entities.xml hierarchy and
avoid title collisions by disambiguating duplicate slugs per parent.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
)

Rewrite attachment src/href targets in HTML exports to local _assets paths,
associate attachment files with their page directory, and convert Confluence
storage-format attachment refs into markdown links/images.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…s, panel macro (kiwifs#247)

* fix(import): use basename for save-schema path and fix wizard file upload routing

Two bugs found during deep testing:
- --save-schema with absolute file path (e.g. /tmp/data.csv) used the full
  path as schema name, causing "no such file or directory" when writing to
  .kiwi/schemas/tmp/data.json. Now uses filepath.Base() to extract just
  the filename.
- Import wizard step 2 had a duplicate UPLOADABLE_SOURCES condition that
  matched before the UploadableSourceForm branch, causing CSV/JSON/JSONL/
  YAML/Excel/SQLite sources to render the database connection form (Host/
  Port/Database) instead of the file upload drop zone.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(import): write binary attachments as raw files and add img tag conversion

Two additional bugs found during deep Confluence import testing:
- Binary attachments (images, PDFs) were wrapped in frontmatter and saved
  as .md files. The import pipeline now checks _is_binary and writes raw
  bytes without the .md extension or frontmatter.
- The convertNodeWithPlaceholders function was missing an img case, causing
  <img> tags to be silently dropped during HTML-to-markdown conversion.
  Added img handling to produce ![alt](src) output.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(import): use innerHTMLToMarkdown for panel macro content

Panel macro content was rendered as raw HTML inside blockquote prefix,
causing text to fall outside the blockquote after HTML-to-markdown
conversion. Now uses innerHTMLToMarkdown (matching admonition macros)
to convert HTML body before applying the blockquote prefix.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…ifs#249)

Map internal HTML hrefs to hierarchy-based [[wiki]] links during import
and add a minimal export fixture for regression tests. Closes kiwifs#153.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ring (kiwifs#261)

Define lifecycle status constants, index memory_status in file_meta,
exclude superseded pages from default FTS search, and document the
field. Closes kiwifs#252.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ion (kiwifs#262)

Flag pages whose expires_at is in the past or whose ttl has elapsed,
and document the conventions. Closes kiwifs#253.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
…wifs#263)

Expose a check subcommand with stable exit codes (0/1/2) over the
existing janitor scan, plus --fail-on warn for stricter pipelines.

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
* Add memory_status frontmatter indexing and search filtering

Define lifecycle status constants, index memory_status in file_meta,
exclude superseded pages from default FTS search, and document the
field. Closes kiwifs#252.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(mcp): add kiwi_remember and kiwi_forget memory tools

kiwi_remember writes episodic files under episodes/{date}/{id}.md with
conventional frontmatter. kiwi_forget marks pages superseded via
memory_status without deleting content. Closes kiwifs#254 and kiwifs#255.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: root <root@thirtynince.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
advancedresearcharray and others added 30 commits June 20, 2026 13:06
…kflow (kiwifs#405)

* feat(workspace): ship research library init template with reading workflow

Replace legacy literature/experiments scaffold with UC-9 layout:
papers/, notes/, reviews/, reading workflow, and paper JSON Schema.
Adds regression tests for workflow transitions and schema validation.

Closes kiwifs#334

Signed-off-by: Array Fleet <fleet@advancedresearcharray.local>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(workspace): harden research template schema and regression tests

Require workflow/state in paper.json, ship research config with cites
typed_fields, add lint and metadata tests per peer review for kiwifs#334.

Signed-off-by: Array Fleet <fleet@advancedresearcharray.local>
Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(episodes): hands-on delivery verification for issue kiwifs#334

Confirm research library init template with reading workflow passes
workspace regression tests after overlay git index recovery.

Signed-off-by: advancedresearcharray <advancedresearcharray@github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(episodes): hands-on takeover verification for PR kiwifs#405

Document delivery after overlay git index corruption from mixed branding
takeover left research template reverted in staging area.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(workspace): peer-review hardening for research template tests

Extend regression coverage for cross-cited example papers, backward
reading workflow transitions, and invalid paper frontmatter. Document
backward transitions in SCHEMA and playbook.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Signed-off-by: Array Fleet <fleet@advancedresearcharray.local>
Signed-off-by: advancedresearcharray <advancedresearcharray@github.com>
Co-authored-by: Array Fleet <fleet@advancedresearcharray.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: advancedresearcharray <advancedresearcharray@github.com>
…ifs#406)

Adds `kiwifs init --template adr` to scaffold a MADR-format Architecture
Decision Record workspace with workflow, JSON schema, blank template,
example ADR, and agent playbook.

Co-authored-by: Cursor <cursoragent@cursor.com>
… knowledge→memory, prompt-library→prompt (kiwifs#408)

Template alignment with wiki use cases:
- UC-1 Knowledge Base: new `kb` template with article types, verification workflow, freshness enforcement
- UC-3 Structured Data Query: new `data` template with collections, DQL dashboards, chart blocks
- UC-4 Headless CMS: new `cms` template with blog, docs, pages, editorial workflow, feeds
- UC-10 Event Log: new `log` template with append-only entries, event taxonomy, daily partitioning
- UC-5 Agent Memory: renamed `knowledge` → `memory` (with migration error for old name)
- UC-8 Prompt Library: renamed `prompt-library` → `prompt` (with migration error for old name)
- UC-11 Agent Task Orchestration: renumbered from UC-1

All templates include: index.md, playbook.md, SCHEMA.md, .kiwi/ config, schemas, and workflows.
Tests updated across workspace, cmd, and spaces packages.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: align templates with use cases — add kb, cms, data, log; rename knowledge→memory, prompt-library→prompt

Template alignment with wiki use cases:
- UC-1 Knowledge Base: new `kb` template with article types, verification workflow, freshness enforcement
- UC-3 Structured Data Query: new `data` template with collections, DQL dashboards, chart blocks
- UC-4 Headless CMS: new `cms` template with blog, docs, pages, editorial workflow, feeds
- UC-10 Event Log: new `log` template with append-only entries, event taxonomy, daily partitioning
- UC-5 Agent Memory: renamed `knowledge` → `memory` (with migration error for old name)
- UC-8 Prompt Library: renamed `prompt-library` → `prompt` (with migration error for old name)
- UC-11 Agent Task Orchestration: renumbered from UC-1

All templates include: index.md, playbook.md, SCHEMA.md, .kiwi/ config, schemas, and workflows.
Tests updated across workspace, cmd, and spaces packages.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(demo): interactive template gallery on demo.kiwifs.com

11 template demos (kb, wiki, tasks, data, cms, memory, runbook, adr,
prompt, research, log) each with rich mock content showcasing charts,
progress bars, tabs, columns, mermaid diagrams, color palettes, kiwi-app
embeds, and theme presets.

- New Vite entry point (demo.html + vite.demo.config.ts) wrapping App
  with MockApiProvider and per-template overrides
- DemoGallery landing page with template cards and theme toggle
- DemoShell applies theme preset, branding, and mock data per template
- Extended apiMock with fileContents, queryRows, timelineEvents, uiConfig
- treeFromPages helper builds sidebar tree from flat page map
- copy-demo-routes.mjs creates /kb/, /wiki/, etc. index.html for clean URLs
- Deploy workflow builds demo + storybook into GitHub Pages (_site/)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: remove unused imports (React, fs) breaking tsc build

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…radients (kiwifs#414)

- Hero section with KiwiFS tagline, description, and mascot
- Storybook, Docs, GitHub as prominent pill-style links in header
- Template cards with colored gradient headers matching theme presets
- Arrow-right hover animation on cards
- Proper footer with branding

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…imary (kiwifs#415)

The chartreuse primary at bg-primary/10 was too vivid in dark mode,
rendering as a garish bright-yellow pill that obscured surrounding text.
Switch to bg-muted + text-muted-foreground for a subtler, theme-neutral look.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Anh Lam <amelia751@users.noreply.github.com>
)

kiwi_workflow_advance rebuilt frontmatter with a broken yamlMarshal shim, which auto_sequence then replaced with only adr_number. Use SetFrontmatterField instead and sync status with state for ADR pages.

Closes kiwifs#328

Co-authored-by: Array Fleet <fleet@advancedresearcharray.local>
* feat(ui): add link-type filter controls to graph view

Closes kiwifs#340. Filter graph edges by typed link relation
(cites, contradicts, etc.) with multi-select chips, session persistence,
and node dimming for non-matching pages.

* fix(ui): restore toolbarViews type removed during graph filter work

The issue-340 cherry-pick accidentally dropped toolbarViews from the
ui-config response type; restore it so uiConfigStore stays typed correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(episodes): record issue-340 graph link-type filter delivery

Episodic run log for clean cherry-pick onto origin/main and toolbarViews fix.
Durable fix doc updated on Kiwi depot (pages/fixes/...).

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(episodes): hands-on verification for issue-340 graph link-type filter

Record test verification, PR kiwifs#409, and delivery checklist after fleet
agent failed delivery check.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: mkdocs export

* fix(ui): harden graph link-type filter after peer review

Reconcile session filter with current graph relations, derive relation
chips from resolved links only, and respect relation filter in path-finder
adjacency to avoid stuck dimmed graphs and misleading paths.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ui): sanitize graph relation metadata after peer review

Validate API and sessionStorage relation strings with the same rules as
backend typed-link fields, reject unknown types in filter matching, and
expand kiwiGraphFilters regression coverage to 25 tests.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Array Fleet <fleet@advancedresearcharray.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(reader): apply workspace theme and branding to published pages

Published /p/* HTML now reads .kiwi/theme.json (cached by mtime) and
[ui.branding] for CSS tokens, favicon, document title prefix, and footer
logo. Reader CSS variables align with the main app token names.

Closes kiwifs#348.

* docs(episodes): record issue-348 reader theme delivery verification

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(episodes): hands-on delivery verification for issue-348 reader theme

Record verified test pass and clean rebase onto origin/main after
restoring accidentally emptied mkdocs.go.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(readertheme): sanitize theme.json token keys against CSS injection

Validate custom-property names before emitting CSS overrides on published
reader pages. Adds TestBuildCSS_RejectsUnsafeKeys regression test.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(episodes): link PR kiwifs#407 in issue-348 hands-on delivery log

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(api): peer-review hardening for published reader theme

Add HTTP regression tests for dark/system theme modes, invalid theme.json
fallback, and HTML-only theme injection to close peer-review gaps on PR kiwifs#407.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Array Fleet <fleet@advancedresearcharray.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Closes kiwifs#326

Configurable [janitor.execution_staleness] flags runbooks with stale
date frontmatter or matching flag_values (e.g. last_outcome=failure).
Wired through kiwifs check, scheduled janitor, and GET /api/kiwi/janitor.
Includes config.toml examples, UC-6 docs, and edge-case regression tests.

Co-authored-by: Array Fleet <fleet@advancedresearcharray.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…iwifs#418)

Replaces legacy runbook init scaffold with UC-6 DevHelm format: 7-section
example runbook, JSON Schema validation, blank template, MCP playbook,
and regression tests including kiwifs check integration.

Co-authored-by: Cursor <cursoragent@cursor.com>
…sues

- Mark UC-6 (kiwifs#325, kiwifs#326, kiwifs#327), UC-7 (kiwifs#328-kiwifs#330), UC-8 (kiwifs#331-kiwifs#333),
  UC-9 (kiwifs#334-kiwifs#336, kiwifs#340), UC-10 (kiwifs#337-kiwifs#339), and cross-cutting
  (kiwifs#322-kiwifs#324) as Done
- Mark UC-3 kiwifs#140 (temporal DQL) as Done
- Add new "New Features" section with 9 fresh issues (kiwifs#420-kiwifs#428)
  from June 2026 industry research
- Link UC-5 recall to new kiwifs#422

Co-authored-by: Cursor <cursoragent@cursor.com>
…wifs#439)

The Table of Contents sidebar had no max-height constraint, causing
long heading lists to overflow offscreen without any way to scroll.
Adds max-h-[calc(100vh-6rem)] and overflow-y-auto so the nav stays
within the viewport and becomes independently scrollable.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
- ROADMAP.md: mark webhooks done, add v0.5 shipped features (workflows, schemas, 12 templates, widgets, tasks, publishing, etc.), bump RBAC to v0.6
- FAQ.md: update version to v0.19.x, add workflows/templates/widgets/publishing section, update export formats
- EXAMPLES.md: add template, widget, workflow, task orchestration, publishing examples
- ARCHITECTURE.md: update system diagram, write pipeline (9 steps), source tree (12 new packages), frontend deps
- LAYOUT.md: add 7 new toolbar views (bases, canvas, whiteboard, kanban, timeline, data, analytics)
- wiki/Home.md: fix UC-1 → Knowledge Base, add UC-11 Task Orchestration
- wiki/Roadmap.md: fix UC table, update foundation roadmap
- wiki/UC-6 through UC-10: mark shipped milestones as done, update MCP tool count
)

Adds a "My Notes" feature that renders personal annotations from
.local/<filename>.md as a collapsible section below page content.

Backend: GET /api/kiwi/local-note?path=<page-path> reads directly
from .local/ on disk, bypassing the hidden-dir filter. Returns 404
if no companion note exists.

Frontend: KiwiPage fetches the local note and renders it using the
same ReactMarkdown pipeline (Shiki highlighting, widgets, etc.) in
a visually distinct CollapsibleFooterSection.

Privacy: .local/ remains excluded from tree/search/file APIs. Notes
only exist on the user's disk (gitignored) and are only accessible
through this explicit local-only endpoint.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
The previous height was too generous — nearly full viewport — making
the ToC look messy and the last items hard to reach. 60vh keeps it
contained while still showing plenty of headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
Adds a generic local-state persistence layer and a page completion
tracker widget for kiwifs workspaces.

Backend:
- GET/PUT /api/kiwi/local-state?name=<id> reads/writes JSON files
  in .local/<name>.json — private state that never enters git or
  the standard file/search/tree APIs.

Frontend:
- api.getLocalState / api.putLocalState client methods
- PageTracker widget: derives folder groups from the tree, renders
  checkboxes with per-group progress bars. Completion state persists
  to .local/progress.json via local-state API.
- Embeddable via ```widget:tracker in any markdown page.

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Frontmatter fields containing http/https URLs (e.g. leetcode: https://...)
were rendered as plain text. Now they render as clickable <a> tags that
open in a new tab.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- README: add "Live Demos" link in top nav and new section with table
  linking all 11 template demos at demo.kiwifs.com
- Wiki Home: add Live Demos + Storybook to Resources section
- Each UC page (UC-1 through UC-11): add "Live demo" link after label

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
kiwifs#443)

Personal state directory renamed from .local/ to .me/ — clearer semantics
that align with the /me/ API concept (storage-agnostic, auth-aware).

API routes: /me/note, /me/state (GET/PUT)
Frontend: api.readMyNote, api.getMyState, api.putMyState
CSS: .kiwi-my-notes-section

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…anel (kiwifs#444)

- Selection toolbar: select text on any page → click bookmark icon → pick color
- Five highlight colors: yellow, blue, pink, green, purple
- Highlights stored in .me/bookmarks.json via /me/state API (personal, never shared)
- Toolbar panel: "Highlights" button in header opens full-page notebook view
  - All highlights aggregated across pages, grouped by page
  - Filter by color
  - Click any highlight to navigate to the source page
  - Add/edit notes on highlights, delete highlights
- Extends existing highlights.ts with wrapBookmark() for colored DOM wraps
- Renders highlights on page load via the same anchor system as comments

Co-authored-by: Lam Dao Que Anh <anhlam@Lams-MacBook-Air-9.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Reverts commits 7706269, 724b122, 68a9d15 to restore stable 0.19.40 state.
The bookmarks feature and .local→.me rename introduced regressions.
These will be re-implemented properly in a future PR.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Move KiwiComments out of CollapsibleFooterSection so the floating
  "+Comment" button appears on text selection even with zero comments.
- Add ::selection styling using the primary/kiwi color (40% light, 55% dark).

Co-authored-by: Cursor <cursoragent@cursor.com>
Add transport wrapper for server/discover, Mcp-Method/Mcp-Name routing
headers, and ttlMs/cacheScope on list responses while preserving legacy
initialize clients and stateless session handling.

Closes kiwifs#424

Co-authored-by: Cursor <cursoragent@cursor.com>
Upgrade tools/list responses with draft/2020-12 $schema metadata and add
regression test for MCP 2026-07-28 acceptance criteria.

Co-authored-by: Cursor <cursoragent@cursor.com>
Document the transport wrapper approach, regression tests, and hands-on
delivery verification for issue kiwifs#424.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants