forked from farhoodlabs/paperclip
508355b8fc
## Thinking Path > - Paperclip orchestrates AI agents for zero-human companies. > - The plugin system is the extension surface for optional product capabilities without baking every workflow into core. > - The LLM Wiki plugin package was reviewed in stacked PR #5592, which targeted `pap-9173-llm-wiki-rest`. > - The stack base PR #5597 merged to `master` before #5592 was merged into that branch, so the plugin package never reached `master`. > - A direct PR from `pap-9173-llm-wiki-rest` back to `master` would be noisy because that branch has diverged from current `master`. > - This pull request reapplies the reviewed `packages/plugins/plugin-llm-wiki/` package onto current `master` and updates Docker deps-stage manifest coverage. > - The branch intentionally no longer changes `pnpm-workspace.yaml` after maintainer feedback; because the new package is now a root workspace importer, the remaining integration question is how maintainers want the root lockfile handled under the current PR policy. ## What Changed - Added the LLM Wiki plugin package under `packages/plugins/plugin-llm-wiki/` from the merged PR #5592 head. - Preserved the post-review cleanup from #5592: generated design/screenshot artifacts are not committed, and `src/ui/index.tsx` / `src/wiki.ts` are small public entrypoints. - Added the new plugin package manifest to the Docker deps stage so policy can validate package manifest coverage. - Removed the earlier `pnpm-workspace.yaml` exclusion per maintainer request, so the plugin is included by the existing `packages/plugins/*` workspace glob. ## Verification Current head: - PGlite migration harness: ran migrations 001-003, verified old non-space distillation unique constraints were removed, inserted duplicate cursor and work-item keys in a second space, then reran migration 003 successfully - `node ./scripts/check-docker-deps-stage.mjs` - `git diff --check` Known current-head install result after removing the workspace exclusion: - `pnpm install --frozen-lockfile` fails because `pnpm-lock.yaml` has no importer for `packages/plugins/plugin-llm-wiki/package.json`. Previously verified on the same plugin source before the workspace-exclusion removal: - `pnpm --filter @paperclipai/plugin-sdk build` - `cd packages/plugins/plugin-llm-wiki && pnpm install --lockfile=false && pnpm test` ## Risks - The branch now includes `packages/plugins/plugin-llm-wiki` in the root workspace but does not update `pnpm-lock.yaml`. Root frozen install will fail until maintainers choose a lockfile path that fits repo policy. - Committing `pnpm-lock.yaml` directly on this PR conflicts with the current PR policy check, while excluding the package from `pnpm-workspace.yaml` was rejected in maintainer feedback. - The package includes UI code already reviewed in #5592; generated screenshot/design artifacts were intentionally removed per maintainer request, so visual review should regenerate screenshots locally if needed. - The package depends on plugin host support from #5597, which is already merged to `master`. > For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and discuss it in `#dev` before opening the PR. Feature PRs that overlap with planned core work may need to be redirected — check the roadmap first. See `CONTRIBUTING.md`. ## Model Used - OpenAI GPT-5 Codex via Codex CLI, tool use and local code execution enabled; context window not exposed. ## 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 run the targeted checks listed above - [x] I have added or updated tests where applicable - [ ] If this change affects the UI, I have included before/after screenshots - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] I will address all Greptile and reviewer comments before requesting merge Stack context: #5592 was merged into `pap-9173-llm-wiki-rest` after #5597 had already merged that branch to `master`, so this follow-up PR is needed to carry the plugin package itself into `master`. Co-authored-by: Paperclip <noreply@paperclip.ing>
161 lines
6.5 KiB
Markdown
161 lines
6.5 KiB
Markdown
# 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](../../../doc/plans/2026-05-06-llm-wiki-paperclip-asset-security-gate.md).
|
|
|
|
## Development
|
|
|
|
```bash
|
|
pnpm install
|
|
pnpm dev # watch builds
|
|
pnpm dev:ui # local dev server with hot-reload events
|
|
pnpm test
|
|
```
|
|
|
|
From the Paperclip repo root:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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
|
|
|
|
```text
|
|
<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:
|
|
|
|
```text
|
|
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.
|