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>
89 lines
4.0 KiB
SQL
89 lines
4.0 KiB
SQL
CREATE TABLE plugin_llm_wiki_8f50da974f.paperclip_distillation_cursors (
|
|
id uuid PRIMARY KEY,
|
|
company_id uuid NOT NULL REFERENCES public.companies(id) ON DELETE CASCADE,
|
|
wiki_id text NOT NULL,
|
|
source_scope text NOT NULL,
|
|
scope_key text NOT NULL,
|
|
project_id uuid REFERENCES public.projects(id) ON DELETE CASCADE,
|
|
root_issue_id uuid REFERENCES public.issues(id) ON DELETE CASCADE,
|
|
source_kind text NOT NULL DEFAULT 'paperclip_issue_history',
|
|
last_processed_at timestamptz,
|
|
last_observed_at timestamptz,
|
|
pending_event_count integer NOT NULL DEFAULT 0,
|
|
last_successful_run_id uuid,
|
|
last_source_hash text,
|
|
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
UNIQUE (company_id, wiki_id, source_scope, scope_key, source_kind)
|
|
);
|
|
|
|
CREATE TABLE plugin_llm_wiki_8f50da974f.paperclip_distillation_work_items (
|
|
id uuid PRIMARY KEY,
|
|
company_id uuid NOT NULL REFERENCES public.companies(id) ON DELETE CASCADE,
|
|
wiki_id text NOT NULL,
|
|
work_item_kind text NOT NULL,
|
|
status text NOT NULL DEFAULT 'pending',
|
|
priority text NOT NULL DEFAULT 'medium',
|
|
project_id uuid REFERENCES public.projects(id) ON DELETE CASCADE,
|
|
root_issue_id uuid REFERENCES public.issues(id) ON DELETE CASCADE,
|
|
requested_by_issue_id uuid REFERENCES public.issues(id) ON DELETE SET NULL,
|
|
idempotency_key text,
|
|
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
UNIQUE (company_id, wiki_id, idempotency_key)
|
|
);
|
|
|
|
CREATE TABLE plugin_llm_wiki_8f50da974f.paperclip_distillation_runs (
|
|
id uuid PRIMARY KEY,
|
|
company_id uuid NOT NULL REFERENCES public.companies(id) ON DELETE CASCADE,
|
|
wiki_id text NOT NULL,
|
|
cursor_id uuid REFERENCES plugin_llm_wiki_8f50da974f.paperclip_distillation_cursors(id) ON DELETE SET NULL,
|
|
work_item_id uuid REFERENCES plugin_llm_wiki_8f50da974f.paperclip_distillation_work_items(id) ON DELETE SET NULL,
|
|
project_id uuid REFERENCES public.projects(id) ON DELETE SET NULL,
|
|
root_issue_id uuid REFERENCES public.issues(id) ON DELETE SET NULL,
|
|
source_window_start timestamptz,
|
|
source_window_end timestamptz,
|
|
source_hash text,
|
|
status text NOT NULL,
|
|
operation_issue_id uuid REFERENCES public.issues(id) ON DELETE SET NULL,
|
|
retry_count integer NOT NULL DEFAULT 0,
|
|
cost_cents integer NOT NULL DEFAULT 0,
|
|
warnings jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE plugin_llm_wiki_8f50da974f.paperclip_source_snapshots (
|
|
id uuid PRIMARY KEY,
|
|
company_id uuid NOT NULL REFERENCES public.companies(id) ON DELETE CASCADE,
|
|
wiki_id text NOT NULL,
|
|
distillation_run_id uuid REFERENCES plugin_llm_wiki_8f50da974f.paperclip_distillation_runs(id) ON DELETE CASCADE,
|
|
project_id uuid REFERENCES public.projects(id) ON DELETE SET NULL,
|
|
root_issue_id uuid REFERENCES public.issues(id) ON DELETE SET NULL,
|
|
source_hash text NOT NULL,
|
|
max_characters integer NOT NULL,
|
|
clipped boolean NOT NULL DEFAULT false,
|
|
source_refs jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
bundle_markdown text NOT NULL,
|
|
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE plugin_llm_wiki_8f50da974f.paperclip_page_bindings (
|
|
id uuid PRIMARY KEY,
|
|
company_id uuid NOT NULL REFERENCES public.companies(id) ON DELETE CASCADE,
|
|
wiki_id text NOT NULL,
|
|
project_id uuid REFERENCES public.projects(id) ON DELETE CASCADE,
|
|
root_issue_id uuid REFERENCES public.issues(id) ON DELETE CASCADE,
|
|
page_path text NOT NULL,
|
|
last_applied_source_hash text,
|
|
last_distillation_run_id uuid REFERENCES plugin_llm_wiki_8f50da974f.paperclip_distillation_runs(id) ON DELETE SET NULL,
|
|
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
UNIQUE (company_id, wiki_id, page_path)
|
|
);
|