paperclip/packages/plugins/plugin-llm-wiki
Nicky Leach 71acf83070
build(deps): align react-dom with react@19.2.7 (replaces dependabot #8471) (#8557)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - The board UI, plugin examples, and plugin SDK all share the same
React dependency graph.
> - Dependabot PR #8471 raised `react` and `@types/react`, but left
`react-dom` and `@types/react-dom` on older 19.x ranges.
> - That let dependency resolution install incompatible React runtime
versions, which makes React refuse to run and breaks UI-oriented test
suites.
> - Current PR policy keeps `pnpm-lock.yaml` owned by CI for
non-dependabot authors, so this PR updates manifests and lets CI
regenerate the lockfile artifact.
> - This pull request replaces #8471 with a complete React toolchain
alignment across the package manifests it touched.
> - The benefit is a single React 19.2.7 runtime graph that keeps
dependency consumers from deduping onto a stale `react-dom` patch.

## Linked Issues or Issue Description

Refs #8471

This PR replaces #8471, which updated `react` and `@types/react` but
left `react-dom` and `@types/react-dom` behind. The resulting dependency
graph can install mismatched `react` and `react-dom` versions, producing
React's incompatible-version runtime error in UI tests.

## What Changed

- Aligned `react-dom` package ranges to `^19.2.7` anywhere the React
dependency set is present.
- Aligned `@types/react-dom` package ranges to the 19.2 line.
- Kept the `react@^19.2.7` and `@types/react@^19.2.17` bumps from #8471.
- Added root pnpm overrides for `react` and `react-dom` so peer-only
consumers resolve to the same 19.2.7 runtime instead of a stale patch.
- Left `pnpm-lock.yaml` out of the PR, per the PR workflow policy; CI
regenerates and shares the lockfile artifact when manifests change.

## Verification

- `cd ui && NODE_ENV=test npx vitest run` passed locally before handoff:
243 files / 1739 tests.
- `NODE_ENV=development pnpm install --lockfile-only --ignore-scripts
--no-frozen-lockfile` passed locally on the rebased branch.
- Confirmed regenerated `pnpm-lock.yaml` resolves `react` and
`react-dom` to 19.2.7 and contains no `react@19.2.4` /
`react-dom@19.2.4` entries.
- GitHub Actions are green on this PR, including `policy`, `Typecheck +
Release Registry`, all general test shards, `Build`, `e2e`, and
`verify`.
- Greptile completed at 5/5 with zero unresolved threads.

## Risks

Low risk. This is a dependency-version alignment only, but React
dependency changes can expose package-manager resolution issues. The
root overrides intentionally constrain the React runtime pair to the
same patch version to avoid that class of failure.

## Model Used

OpenAI Codex based on GPT-5, using command-line tool execution and
GitHub CLI operations in a Paperclip-managed workspace.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [x] All Paperclip CI gates are green
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-06-23 11:56:23 -07:00
..
agents/wiki-maintainer
fixtures/basic-root
migrations Fix LLM Wiki package and migration validation (#6010) 2026-05-15 10:20:02 -05:00
skills
src [codex] Roll up May 17 branch changes (#6210) 2026-05-17 17:15:06 -05:00
templates Fix LLM Wiki package and migration validation (#6010) 2026-05-15 10:20:02 -05:00
tests Information Architecture + project/agent visual refresh (experimental) (#7543) 2026-06-06 09:17:27 -05:00
.gitignore
README.md
esbuild.config.mjs
package.json build(deps): align react-dom with react@19.2.7 (replaces dependabot #8471) (#8557) 2026-06-23 11:56:23 -07:00
rollup.config.mjs
tsconfig.json
vitest.config.ts

README.md

LLM Wiki

Local-file LLM Wiki plugin for source ingestion, wiki browsing, query, lint, and maintenance workflows.

Scope

This package is the standalone home for LLM Wiki behavior. Wiki-specific routes, UI, prompts, tools, local-folder templates, migrations, fixtures, and tests live here rather than in Paperclip core.

The alpha surface includes:

  • manifest-declared Wiki page, sidebar entry, and settings page
  • trusted local folder declaration for raw/, wiki/, AGENTS.md, IDEA.md, wiki/index.md, and wiki/log.md
  • plugin database namespace migration for wiki instances, sources, pages, operations, query sessions, and resource bindings
  • managed Wiki Maintainer agent, managed LLM Wiki project, and paused managed routines for wiki update processing, lint, and index refresh
  • plugin-operation issue creation using surfaceVisibility: "plugin_operation"
  • local source capture into raw/ with metadata rows in the plugin DB namespace
  • opt-in company-scoped Paperclip event ingestion controls for issues, comments, and documents; event ingestion is disabled by default and routes captured raw provenance into the default space only
  • manual Paperclip project/root issue distillation and bounded backfill actions with explicit work items, operation issues, source caps, and estimated cost recording
  • Paperclip-derived distillation (cursor windows, manual distill-now, backfill) always writes into the default wiki space in Phase 1; non-default spaces remain on manual / raw-file ingest until per-space Paperclip ingestion profiles ship
  • Paperclip-derived distillation maintains wiki/projects/<slug>/standup.md as the executive current-state view for each represented project, alongside durable wiki/projects/<slug>/index.md knowledge pages
  • wiki page writes with plugin path validation, atomic local-folder writes, metadata/revision rows, backlink extraction, and optional stale-hash protection
  • wiki tools for search/read/write/propose patch/source/log/index/backlinks workflows

Phase 5 Security Gate

Paperclip-derived text ingestion stays limited to issue titles/descriptions, issue comments, and issue documents.

  • Issue attachments/assets are metadata-only in Phase 5.
  • Issue work products are metadata-only in Phase 5.
  • The wiki must not fetch /api/assets/:id/content, dereference work-product url fields, or store those capability-bearing links in source bundles/snapshots.

The accepted policy lives in doc/plans/2026-05-06-llm-wiki-paperclip-asset-security-gate.md.

Development

pnpm install
pnpm dev            # watch builds
pnpm dev:ui         # local dev server with hot-reload events
pnpm test

From the Paperclip repo root:

pnpm --filter @paperclipai/plugin-llm-wiki typecheck
pnpm --filter @paperclipai/plugin-llm-wiki test
pnpm --filter @paperclipai/plugin-llm-wiki build

Alpha Verification

Run these commands from the Paperclip repo root before handing off alpha plugin changes:

pnpm --filter @paperclipai/plugin-llm-wiki typecheck
pnpm --filter @paperclipai/plugin-llm-wiki test
pnpm --filter @paperclipai/plugin-llm-wiki build

The focused Vitest suite covers:

  • standalone package boundaries and package-local harness dependencies
  • required local folder bootstrap writes
  • raw source capture plus ingest metadata persistence
  • hidden plugin-operation issue creation for ingest/query/file-as-page workflows
  • disabled and enabled Paperclip event ingestion paths
  • managed routine declarations, manual distill/backfill work items, source cap handling, and backfill project/date scoping
  • atomic page writes, metadata/revision rows, backlinks, and stale-hash refusal
  • query session creation, run-id recording, stream event forwarding, and completion updates
  • filing a streamed query answer back into the wiki through a hidden operation

Remaining alpha gaps:

  • Browser screenshot capture is maintained separately under tests/screenshots; generated screenshots/ outputs are local artifacts and are ignored by git.
  • Host-level plugin install and live agent invocation still need Paperclip server/runtime smoke coverage when preparing a release candidate.

Install Into Paperclip

curl -X POST http://127.0.0.1:3100/api/plugins/install \
  -H "Content-Type: application/json" \
  -d '{"packageName":"/Users/dotta/paperclip/.paperclip/worktrees/PAP-3179-design-a-llm-wiki-plugin/packages/plugins/plugin-llm-wiki","isLocalPath":true}'

Build Options

  • pnpm build uses esbuild presets from @paperclipai/plugin-sdk/bundlers.
  • pnpm build:rollup uses rollup presets from the same SDK.

After changing manifest-loaded assets such as skills, agent instructions, or templates, recompile the local plugin before re-enabling it:

pnpm --filter @paperclipai/plugin-llm-wiki build

The package-local dist/ directory is ignored by git, but local Paperclip installs load the compiled dist/manifest.js and dist/worker.js files at runtime. If activation failed before the rebuild, re-enable the plugin or restart the Paperclip dev server so the host imports the fresh bundle.

Local File Layout

<configured-wiki-root>/
  AGENTS.md
  IDEA.md
  .gitignore
  raw/
    .gitkeep
  wiki/
    index.md
    log.md
    sources/
      .gitkeep
    projects/
      .gitkeep
      <project-slug>/
        index.md
        standup.md
        decisions.md
        history.md
    entities/
      .gitkeep
    concepts/
      .gitkeep
    synthesis/
      .gitkeep

Use the settings page or bootstrap-root action to configure the folder and write the starter files. The plugin uses Paperclip's local folder API for path containment, symlink checks, read/write validation, and atomic writes.

Bootstrap preserves existing files rather than overwriting operator edits. The default first-install skeleton is copied from the vanilla LLM Wiki layout, with CLAUDE.md renamed to AGENTS.md and Paperclip project overviews, standups, decisions, and history kept together under wiki/projects/<slug>/.

Managed Agent Instructions

Plugin-managed agent instruction bundles live under:

agents/<agent-key>/AGENTS.md

For this plugin the Wiki Maintainer source bundle is agents/wiki-maintainer/AGENTS.md. Any additional files in that folder are installed as sibling instruction files for the managed agent. The settings health check reports drift from these defaults, and resetting the managed agent asks for confirmation before replacing customized instructions.