Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
0d48dab
Add product design document
Jack11111eee Nov 1, 2026
00c29a5
Initialize feature-branch workflow: gitignore and worktrees dir
Jack11111eee Nov 1, 2026
8670c0d
issue/fork-import: import pinned openwiki tree and record verifiable …
Jack11111eee Nov 1, 2026
9de9c91
merge(level-0): issue/094fbb29-01-fork-import
Jack11111eee Nov 1, 2026
7aa59e8
issue/fork-patches: add writeRepoFiles opt-out and learning entry link
Jack11111eee Nov 1, 2026
d71f65f
issue/toolchain-env: pin the Node runtime behind a launcher and split…
Jack11111eee Nov 1, 2026
5633733
issue/toolchain-env: judge the env report by the pinned interpreter
Jack11111eee Nov 1, 2026
ef33623
issue/fork-patches: cover creation and marker-validation gaps in the …
Jack11111eee Nov 2, 2026
2268052
merge(level-1): issue/094fbb29-03-fork-patches
Jack11111eee Nov 2, 2026
fc5aa2e
issue/toolchain-env: run the learning suite without a missing setup file
Jack11111eee Nov 2, 2026
e1b05e1
merge(level-1): issue/094fbb29-02-toolchain-env
Jack11111eee Nov 2, 2026
d8be292
issue/contracts: freeze the shared type, id, error and DI contract layer
Jack11111eee Nov 2, 2026
762323e
merge(level-2): issue/094fbb29-04-contracts
Jack11111eee Nov 2, 2026
4d27e7f
issue/store: SQLite migrations, the twenty tables and fifteen reposit…
Jack11111eee Nov 2, 2026
5924a85
issue/config: add data paths, frozen defaults, hardening and model seam
Jack11111eee Nov 2, 2026
fef5ec6
issue/config: reject dangling symlinks in assertInsideDataDir
Jack11111eee Nov 2, 2026
7015b32
issue/test-harness: build the deterministic, offline test substrate
Jack11111eee Nov 2, 2026
d2060d7
issue/test-harness: keep generated fixtures out of test and lint runs
Jack11111eee Nov 2, 2026
b1ce57d
issue/store: cover constraint, transaction, migration and message-fie…
Jack11111eee Nov 2, 2026
f5edc70
merge(level-3): issue/094fbb29-05-config
Jack11111eee Nov 2, 2026
5f69469
merge(level-3): issue/094fbb29-06-store
Jack11111eee Nov 2, 2026
fb4256d
issue/test-harness: give ESM scripts Node runtime globals in lint
Jack11111eee Nov 2, 2026
1c794ca
merge(level-3): issue/094fbb29-07-test-harness
Jack11111eee Nov 2, 2026
87a3707
issue/api-auth: loopback-only sessions with Host and Origin guards
Jack11111eee Nov 2, 2026
ffb9133
issue/scripted-model: add deterministic scripted model, clock and fau…
Jack11111eee Nov 2, 2026
ed814b5
issue/projects-snapshots: identity, mirrors, immutable snapshots, rem…
Jack11111eee Nov 2, 2026
003b156
issue/scripted-model: derive bound tools from call options, not share…
Jack11111eee Nov 2, 2026
85557b6
merge(level-4): issue/094fbb29-09-scripted-model
Jack11111eee Nov 2, 2026
722c028
merge(level-4): issue/094fbb29-08-projects-snapshots
Jack11111eee Nov 2, 2026
717d60f
merge(level-4): issue/094fbb29-10-api-auth
Jack11111eee Nov 2, 2026
346a16c
issue/projects-scope: read scope, language coverage and the coverage …
Jack11111eee Nov 2, 2026
cda6214
issue/api-core: loopback server, frozen route table, error funnel and…
Jack11111eee Nov 2, 2026
46446ac
merge(level-5): issue/094fbb29-11-projects-scope
Jack11111eee Nov 2, 2026
e0eb0dd
merge(level-5): issue/094fbb29-12-api-core
Jack11111eee Nov 2, 2026
067eb9b
issue/lesson-schema: lesson schema, structural gate and deterministic…
Jack11111eee Nov 2, 2026
a5628ab
issue/upstream-adapter: isolate the upstream coupling point
Jack11111eee Nov 2, 2026
2238cf9
issue/094fbb29-14-evidence: source registry, external docs with SSRF …
Jack11111eee Nov 2, 2026
78932f7
issue/routes-prefs-ops: preferences, terms, model settings, usage and…
Jack11111eee Nov 2, 2026
bf60b74
merge(level-6): issue/094fbb29-13-upstream-adapter
Jack11111eee Nov 2, 2026
f6775e6
merge(level-6): issue/094fbb29-14-evidence
Jack11111eee Nov 2, 2026
57ff928
merge(level-6): issue/094fbb29-15-lesson-schema
Jack11111eee Nov 2, 2026
7792391
merge(level-6): issue/094fbb29-16-routes-prefs-ops
Jack11111eee Nov 2, 2026
102d997
issue/retrieval: add Chinese-aware retrieval, snapshot fallback and s…
Jack11111eee Nov 2, 2026
ea7eb98
issue/lesson-builders: research, change and comparison builders with …
Jack11111eee Nov 2, 2026
f520611
issue/lesson-builders: map schema failures to their rule codes
Jack11111eee Nov 2, 2026
8ea22c4
issue/lesson-builders: stage diff evidence before the change/comparis…
Jack11111eee Nov 2, 2026
5ee75fc
merge(level-7): issue/094fbb29-18-retrieval
Jack11111eee Nov 2, 2026
6cf6f94
merge(level-7): issue/094fbb29-17-lesson-builders
Jack11111eee Nov 2, 2026
c849299
issue/qa: read-only tools, budgeted context, streaming answer loop an…
Jack11111eee Nov 2, 2026
798999f
issue/ui: server-rendered learning pages, sanitised Markdown and SVG …
Jack11111eee Nov 2, 2026
eda8a6d
issue/jobs-publish: durable job state machine, generation pipelines a…
Jack11111eee Nov 2, 2026
1abd6fe
issue/qa: accept citations returned by read-only tools
Jack11111eee Nov 3, 2026
bfe7b90
issue/jobs-publish: roll back a publish that races a cancel and keep …
Jack11111eee Nov 3, 2026
a43c542
issue/ui: never claim complete coverage beside gaps
Jack11111eee Nov 3, 2026
3c5c861
issue/qa: envelope tool results as untrusted content and exclude the …
Jack11111eee Nov 3, 2026
13a6663
issue/ui: make the learning UI interactive and honest about coverage
Jack11111eee Nov 3, 2026
f60985d
merge(level-8): issue/094fbb29-19-jobs-publish
Jack11111eee Nov 3, 2026
69d3a50
merge(level-8): issue/094fbb29-20-qa
Jack11111eee Nov 3, 2026
6f463ff
merge(level-8): issue/094fbb29-21-ui
Jack11111eee Nov 3, 2026
2e2de86
issue/routes-conversations: expose conversations with SSE and restart…
Jack11111eee Nov 3, 2026
ea983e2
issue/routes-conversations: expose conversations with SSE and restart…
Jack11111eee Nov 3, 2026
670e470
issue/updates: GitHub discovery, watch scheduler, local diff, change …
Jack11111eee Nov 3, 2026
241739e
issue/updates: let linkage be constructed without repositories
Jack11111eee Nov 3, 2026
a7dcb8a
issue/routes-projects: project, job and generation routes with state,…
Jack11111eee Nov 3, 2026
6f695f2
issue/updates: dedupe baselines and unstick PR discovery
Jack11111eee Nov 3, 2026
7f06d9a
issue/routes-projects: report local_path_and_url for two-source imports
Jack11111eee Nov 3, 2026
16d05f4
merge(level-9): issue/094fbb29-22-routes-projects
Jack11111eee Nov 3, 2026
9c51f92
merge(level-9): issue/094fbb29-24-updates
Jack11111eee Nov 3, 2026
bda1671
merge(level-9): issue/094fbb29-23-routes-conversations
Jack11111eee Nov 3, 2026
47a58ae
issue/routes-changes: watch control and change-inbox routes
Jack11111eee Nov 3, 2026
83626c1
issue/gate-a: add the phase-check harness and the Phase A gate
Jack11111eee Nov 3, 2026
203fb15
merge(level-10): issue/094fbb29-26-gate-a
Jack11111eee Nov 3, 2026
03e053e
merge(level-10): issue/094fbb29-25-routes-changes
Jack11111eee Nov 3, 2026
55edece
issue/composition-root: assemble AppDeps, boot the loopback server an…
Jack11111eee Nov 3, 2026
35a66cb
issue/gate-b: add the Phase B gate for reading, follow-ups, restart a…
Jack11111eee Nov 3, 2026
59f014c
merge(level-11): issue/094fbb29-28-gate-b
Jack11111eee Nov 3, 2026
4eb4151
merge(level-11): issue/094fbb29-27-composition-root
Jack11111eee Nov 3, 2026
09b816b
issue/ops-scripts: add smoke, accept, backup/restore, gc, licences an…
Jack11111eee Nov 3, 2026
2b9a8aa
issue/regression-research: add R01-R09, R16, R17 regression suite
Jack11111eee Nov 3, 2026
4449987
issue/gate-c: add the Phase C gate for change discovery, streams and …
Jack11111eee Nov 3, 2026
f6602d9
issue/gate-c: make the phase-check C stage block hermetic and cheap
Jack11111eee Nov 3, 2026
22d873b
issue/regression-research: cover boundary, Chinese identifier and ver…
Jack11111eee Nov 3, 2026
0a05510
merge(level-12): issue/094fbb29-31-regression-research
Jack11111eee Nov 3, 2026
c60128e
WIP issue/ops-scripts: licence checker refinements (paused mid-iterat…
Jack11111eee Nov 3, 2026
dd8ce39
issue/ops-scripts: format the operator scripts and ops tests with Pre…
Jack11111eee Nov 3, 2026
cef7634
issue/ops-scripts: sandbox restore paths and fall back to canonical l…
Jack11111eee Nov 3, 2026
11be120
merge(level-12): issue/094fbb29-30-gate-c
Jack11111eee Nov 3, 2026
c67fa64
merge(level-12): issue/094fbb29-29-ops-scripts
Jack11111eee Nov 3, 2026
3989fb4
issue/regression-updates: add R04 and R10-R15 durability regressions
Jack11111eee Nov 3, 2026
443300f
issue/acceptance-flows: add F01-F10 HTTP acceptance flows and the App…
Jack11111eee Nov 3, 2026
487d7aa
issue/acceptance-flows: keep budget exhaustion a distinct job failure
Jack11111eee Nov 3, 2026
d2ea9fe
merge(level-13): issue/094fbb29-32-regression-updates
Jack11111eee Nov 3, 2026
6d17703
merge(level-13): issue/094fbb29-33-acceptance-flows
Jack11111eee Nov 3, 2026
d86218a
issue/gate-d: register the D stage and gate both flows end to end
Jack11111eee Nov 3, 2026
796324b
issue/gate-d: short-circuit a simulated red in --verify-order
Jack11111eee Nov 3, 2026
1be684f
merge(level-14): issue/094fbb29-35-gate-d
Jack11111eee Nov 4, 2026
6fe814f
merge: bring main's LICENSE commit into the feature history
Jack11111eee Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Changesets

Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets).

We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md).
16 changes: 16 additions & 0 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json",
"changelog": [
"@changesets/changelog-github",
{
"repo": "langchain-ai/openwiki"
}
],
"commit": false,
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
5 changes: 5 additions & 0 deletions .changeset/secure-runtime-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"openwiki": patch
---

Update runtime dependencies to address security vulnerabilities in DOMPurify, Azure authentication, request parsing, HTTP transport, and schema validation.
5 changes: 5 additions & 0 deletions .changeset/tidy-wiki-compatibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"openwiki": patch
---

Use a React 19-compatible CLI renderer and keep browser graph types independent of the Node.js graph loader.
5 changes: 5 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"permissions": {
"allow": ["Skill(artifact-design)", "Skill(artifact-design:*)"]
}
}
56 changes: 56 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Bug Report
description: Report a bug to help us improve OpenWiki
title: "[Bug]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: Thanks for taking the time to file a bug report!
- type: textarea
id: description
attributes:
label: Description
description: A clear and concise description of the bug.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to Reproduce
placeholder: |
1.
2.
3.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: Describe what you expected to happen.
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual Behavior
description: Describe what actually happened.
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
value: |
- OS:
- Node.js version:
- OpenWiki version:
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional Context
description: If applicable, include error messages, stack traces, logs, or screenshots.
validations:
required: false
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: OpenWiki Documentation
url: https://github.com/langchain-ai/openwiki#readme
about: Check the README and docs first. They may already answer your question.
40 changes: 40 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Feature Request
description: Suggest an idea or enhancement for OpenWiki
title: "[Feature]: "
labels: ["enhancement"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: Provide a short description of the feature.
validations:
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: What problem does this solve? Why would this feature be useful?
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed Solution
description: Describe your proposed solution.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives Considered
description: Describe any alternative solutions you've considered.
validations:
required: false
- type: textarea
id: context
attributes:
label: Additional Context
description: Add any other context or examples here.
validations:
required: false
35 changes: 35 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: monthly
groups:
minor-and-patch:
patterns:
- "*"
update-types:
- minor
- patch
major:
patterns:
- "*"
update-types:
- major

- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
groups:
minor-and-patch:
patterns:
- "*"
update-types:
- minor
- patch
major:
patterns:
- "*"
update-types:
- major
200 changes: 200 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
name: Checks

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

jobs:
format:
name: Format
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Set up pnpm
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: "22"
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Check formatting
run: pnpm run format:check

lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Set up pnpm
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: "22"
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Check lint
run: pnpm run lint:check

build:
name: Build, Typecheck & CLI Smoke (${{ matrix.os }}, Node ${{ matrix.node-version }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
node-version: "22"
- os: ubuntu-latest
node-version: "24"
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Set up pnpm
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: ${{ matrix.node-version }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Typecheck
run: pnpm run typecheck

- name: Build
run: pnpm run build

- name: Smoke test CLI
run: node dist/cli/cli.js code --dry-run --init
env:
OPENWIKI_DEV: "1"

test:
name: Test
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ["22", "24"]
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Set up pnpm
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: ${{ matrix.node-version }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run tests
run: pnpm test

windows-test:
name: Windows portability tests
runs-on: windows-latest
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Set up pnpm
uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: "22"
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run Windows portability tests
run: pnpm exec vitest run test/agent/skills.test.ts test/config/env-behavior.test.ts test/agent/repository-source-fingerprint.test.ts

audit:
name: Audit
permissions:
contents: read
security-events: write
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

# `pnpm audit` calls npm's retired quick-audit endpoint (HTTP 410), so we
# scan the lockfile with Trivy instead. Keep the blocking gate in table
# mode so Trivy applies the severity filter to the exit code and prints
# the vulnerable package in the job log.
- name: Audit dependencies
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
with:
scan-type: fs
scan-ref: .
scanners: vuln
format: table
severity: HIGH,CRITICAL
exit-code: "1"
ignore-unfixed: false

# Generate all-severity SARIF for the Security tab separately from the
# blocking gate. Trivy's SARIF mode intentionally builds the report with
# all severities unless limit-severities-for-sarif is set.
- name: Build Trivy SARIF report
if: always()
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
with:
scan-type: fs
scan-ref: .
scanners: vuln
format: sarif
output: trivy-results.sarif
exit-code: "0"
ignore-unfixed: false

# Populates the Security tab. Fork PRs run with a read-only GITHUB_TOKEN
# that cannot write security events, so this upload fails there ("No
# server is currently available"). Skip it on fork PRs only; same-repo PRs
# and pushes to main still upload and stay strict. The real gate is Trivy's
# `exit-code: 1` above, which runs regardless.
- name: Upload Trivy results to GitHub Security
if: always() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false)
uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4
with:
sarif_file: trivy-results.sarif
Loading
Loading