Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
713e07c
docs(rfc): propose source and artifact REST APIs
Zxf-xufeng Sep 1, 2026
596e99f
feat(api): add source and artifact access
Zxf-xufeng Sep 2, 2026
b1ad58a
docs(rfc): separate list and search APIs
Zxf-xufeng Sep 2, 2026
d2556d5
docs(rfc): present final REST URL mapping
Zxf-xufeng Sep 2, 2026
1b440cd
docs(rfc): format API contracts as JSON
Zxf-xufeng Sep 2, 2026
767fa0f
docs(rfc): generate source identifiers server-side
Zxf-xufeng Sep 2, 2026
a234a6f
docs(rfc): scope source and artifact paths
Zxf-xufeng Sep 2, 2026
0dd51cf
docs(rfc): summarize new REST APIs
Zxf-xufeng Sep 2, 2026
90a0536
docs(rfc): flatten source identity fields
Zxf-xufeng Sep 2, 2026
735f79f
Merge branch 'master' into codex/source-artifact-rest-api-docs
Zxf-xufeng Sep 2, 2026
f35b67a
Merge branch 'master' into codex/source-artifact-rest-api-implementation
Zxf-xufeng Sep 2, 2026
bccb7ba
docs(rfc): align source and artifact REST API design
Zxf-xufeng Sep 2, 2026
d0b21c0
feat(api): align source and artifact access with RFC
Zxf-xufeng Sep 2, 2026
00cc4e8
docs(rfc): number source and artifact REST API RFC 1437
Zxf-xufeng Sep 2, 2026
7f7f246
docs(rfc): align source and artifact API design
Zxf-xufeng Sep 2, 2026
70c3242
docs(rfc): update source and artifact REST API design
Zxf-xufeng Sep 3, 2026
c859468
feat(api): implement latest source and artifact RFC
Zxf-xufeng Sep 3, 2026
edd44c4
fix(api): validate artifact family content as JSON
Zxf-xufeng Sep 3, 2026
e5006f7
Merge origin/master into codex/source-artifact-rest-api-implementation
Zxf-xufeng Sep 3, 2026
c62a65c
docs(rfc): define replace revision source lineage
Zxf-xufeng Sep 4, 2026
c764d64
fix(api): align artifact revision source semantics
Zxf-xufeng Sep 4, 2026
ba04cab
Merge remote-tracking branch 'origin/master' into codex/source-artifa…
Zxf-xufeng Sep 4, 2026
3a4b4fd
Merge remote-tracking branch 'origin/master' into codex/source-artifa…
Zxf-xufeng Sep 4, 2026
fb73d51
docs(rfc): define family-owned artifact writes
Zxf-xufeng Sep 4, 2026
0153496
fix(api): reuse family artifact write flows
Zxf-xufeng Sep 4, 2026
9757a99
fix: env file parser (#1444)
thunguo Sep 4, 2026
f669836
Merge remote-tracking branch 'origin/master' into codex/source-artifa…
Zxf-xufeng Sep 4, 2026
20cb679
fix(ci): sync base API generated artifacts
Zxf-xufeng Sep 4, 2026
d7eb3d3
test(cli): follow current config validation path
Zxf-xufeng Sep 4, 2026
7c0e573
feat(generation): standardize source access
Zxf-xufeng Sep 4, 2026
17f3d8d
feat(website): establish new site style and structure (#1456)
PsiACE Sep 4, 2026
fc75f92
feat(api): implement source and artifact base REST APIs (#1438)
Zxf-xufeng Sep 4, 2026
3a8f5dc
Merge remote-tracking branch 'origin/master' into codex/source-artifa…
Zxf-xufeng Sep 4, 2026
daa948a
Merge pull request #1437 from oceanbase/codex/source-artifact-rest-ap…
Zxf-xufeng Sep 4, 2026
f117db3
fix(persistence): stop leaking sqlite-vec rows on Memory commits (#1470)
AbyssWhalen Sep 5, 2026
74b961f
build(deps-dev): bump postcss from 8.5.6 to 8.5.23 in /website (#1462)
dependabot[bot] Sep 5, 2026
3ba607f
feat(server): add access control (#1398)
Teingi Sep 6, 2026
77cfb48
fix(server): preserve binary cursor keys on Windows (#1464)
knqiufan Sep 6, 2026
392ec17
fix(dsh): handle Scope failures at tool and command boundaries (#1452)
knqiufan Sep 6, 2026
8550f9f
feat: add default scope for powercontext web (#1453)
jiannnnyyyyy Sep 6, 2026
685b31d
chore(release): prepare v0.2.0 (#1481)
Teingi Sep 7, 2026
aa75916
fix(service): kickstart newly bootstrapped LaunchAgents (#1480)
knqiufan Sep 7, 2026
3fff8c3
feat(service): enhance error message for shell environment variable h…
Alanxtl Sep 7, 2026
4513247
docs(tracing): add Langfuse tracing guide and fix OTLP endpoint examp…
Ethan-Xingyue Sep 7, 2026
3cdc3a2
merge: resolve PR 1461 against latest master
Zxf-xufeng Sep 7, 2026
8332e52
docs(rfc): define scope-owned prompt management (#1468)
Teingi Sep 7, 2026
2f9e75e
docs(rfc): define unified artifact tags (#1467)
Teingi Sep 7, 2026
40a354b
feat(tags): add unified artifact and memory entry tags (#1472)
Teingi Sep 7, 2026
32a8788
feat(examples): add guided PowerContext Jupyter tutorials (#1477)
Teingi Sep 7, 2026
d0371b4
fix(dsh): complete automatic-path diagnostics and recall presentation…
knqiufan Sep 7, 2026
961eeb8
fix(website): resolve relative documentation links (#1486)
beatenevo Sep 7, 2026
bf87546
feat(prompts): add scope-owned prompt management (#1473)
Teingi Sep 7, 2026
e4ebdcd
refactor(website): align default locale and publish RFCs (#1478)
PsiACE Sep 7, 2026
bac14d7
fix(generation): guard memory evidence and retain failing references
Zxf-xufeng Sep 7, 2026
fc6a87a
fix(generation): preserve source identity on definition lookup failure
Zxf-xufeng Sep 7, 2026
fd21b36
docs(rfc): standardize source access for artifact generation (#1458)
Zxf-xufeng Sep 8, 2026
b137a95
merge: resolve PR 1461 against latest master
Zxf-xufeng Sep 8, 2026
90f349e
Merge pull request #1461 from oceanbase/codex/artifact-generation-sou…
Zxf-xufeng Sep 8, 2026
cd56df5
docs(rfc): propose profile artifacts and subject source writes (#1485)
Zxf-xufeng Sep 8, 2026
c9ab811
feat(profile): implement scoped profiles and subject source writes (#…
Zxf-xufeng Sep 8, 2026
80d618b
fix(auth): enforce revoked subject scope contribution (#1496)
Zxf-xufeng Sep 8, 2026
6c16fa7
fix(server): honor weak and list forms of If-None-Match on artifact r…
yixius Sep 8, 2026
b2ce8ba
feat(topic-memory): add end-to-end topic memory (#1490)
frf12 Sep 8, 2026
fe4002d
fix(skill): validate raw archive entry names (#1511)
Praying Sep 8, 2026
ed3c978
build(deps): bump httpcore2 from 2.7.0 to 2.10.0 (#1518)
dependabot[bot] Sep 9, 2026
e9ca309
fix(server): use square symbol favicon in dashboard (#1513)
Lkx-JY Sep 9, 2026
ebed90b
build(deps): bump httpx2 from 2.10.0 to 2.12.0 (#1516)
dependabot[bot] Sep 9, 2026
0e2b461
docs(rfc): add scope and source discovery (#1502)
Zxf-xufeng Sep 9, 2026
b7b133a
feat(dsh): diagnose effective Server configuration and matched setup …
knqiufan Sep 9, 2026
bec63d2
fix(topic-memory): guard runtime profiles and reuse worker indexes (#…
frf12 Sep 9, 2026
999158c
fix(prompts): reject generic artifact publication (#1492)
Teingi Sep 9, 2026
61f0dec
docs: reorganize documentation around the user journey (#1519)
PsiACE Sep 9, 2026
240e6b2
feat(api): add scope and source discovery (#1503)
Zxf-xufeng Sep 9, 2026
80f56ad
fix(cli): make default deployment model-free (#1506)
Zxf-xufeng Sep 9, 2026
4043710
feat(context): add configurable prepared text assembly (#1489)
Teingi Sep 9, 2026
76a9707
docs(rfc): evolve the artifact processing supervisor (#1515)
frf12 Sep 9, 2026
d46cb88
feat: implement artifact processing supervisors (#1523)
frf12 Sep 9, 2026
ca14497
feat(dashboard)!: replace bundled UI with an opt-in personal dashboar…
PsiACE Sep 9, 2026
245601d
fix(cli): load local dotenv for server startup (#1525)
Zxf-xufeng Sep 9, 2026
c33df8d
feat(minimax): add PowerContext plugin (#1526)
PsiACE Sep 9, 2026
00e6900
fix(claude-code): send MCP authorization header (#1531)
frf12 Sep 10, 2026
ce46f8d
feat(website): enable bilingual static documentation search (#1540)
PsiACE Sep 10, 2026
393c08b
perf(website): split search indexes by language (#1542)
PsiACE Sep 10, 2026
4108f34
feat(profile): support scoped custom prompts (#1541)
Zxf-xufeng Sep 10, 2026
5da78b4
chore(release): prepare v1.0.0rc1 (#1543)
Teingi Sep 10, 2026
aa9d27f
feat: add Topic Memory dashboard (#1537)
frf12 Sep 10, 2026
b15b586
feat(config): add guided setup for first-time Server and Agent onboar…
frf12 Sep 10, 2026
56e9c66
feat(client): add explicit insecure HTTP opt-in across integrations (…
frf12 Sep 10, 2026
495cc93
feat(setup): persist PowerContext Agent authorization (#1548)
frf12 Sep 10, 2026
c201666
feat(dream): add reviewed Memory-to-Experience-to-Skill workflows (#1…
Teingi Sep 10, 2026
2f644be
chore(release): prepare v1.0.0rc2 (#1555)
Teingi Sep 10, 2026
20eca0a
docs(operate): clarify deployment and tracing setup (#1527)
Zxf-xufeng Sep 11, 2026
f6cf3a3
chore(release): prepare v1.0.0 (#1559)
Teingi Sep 11, 2026
8a64676
RFC: unify artifact family reads and registration (#1549)
Zxf-xufeng Sep 11, 2026
ec97efb
feat: unify artifact family reads and registration (#1550)
Zxf-xufeng Sep 11, 2026
4895b15
docs: migrate website links to official domain
happy-v587 Sep 11, 2026
5151c0c
docs: align English deployment and tracing guides (#1567)
Zxf-xufeng Sep 11, 2026
ebe77c9
Merge pull request #1568 from happy-v587/docs/migrate-site-domain
AlexStocks Sep 11, 2026
04b780c
docs: correct context management workflows (#1566)
Zxf-xufeng Sep 11, 2026
e48b2b8
chore: clean outdated links (#1570)
PsiACE Sep 12, 2026
62e4c82
docs(rfc): record recurring failures and gate their repair (#1557)
AlexStocks Sep 12, 2026
48d463d
test(native): report the service's state at the moment it fails to st…
L4XB Sep 13, 2026
e0967ea
docs: remove accidentally committed superpowers working spec (#1582)
frf12 Sep 13, 2026
e5ec790
fix(website): handle Windows paths in link validation (#1576)
Doar999 Sep 13, 2026
96511d2
feat(cli): add Experience read commands (#1579)
happy-v587 Sep 13, 2026
5cf02f9
docs(readme): add contributor wall (#1584)
zhanghuidinah Sep 13, 2026
91f117d
feat(website): add GitHub stars to shared navigation (#1581)
zhanghuidinah Sep 13, 2026
7e7a1f3
ci: harden workflow reproducibility and evidence gates (#1587)
AlexStocks Sep 14, 2026
41622fc
fix(pi): keep failure diagnostics off stderr by default (#1562)
L4XB Sep 14, 2026
da16dcd
feat(openclaw): add pc commands and work coordination workflows (#1569)
XnLemon Sep 14, 2026
5ecfad1
docs: add project governance (#1588)
zhanghuidinah Sep 14, 2026
3738c58
docs(rfc): add recall sufficiency gate proposal (#1560)
AlexStocks Sep 14, 2026
ee92b71
fix(opencode): normalize Windows file URI paths (#1592)
sunlight798 Sep 14, 2026
3f019ea
refactor(windows): switch from PowerShell to schtasks for task info r…
Alanxtl Sep 14, 2026
545b160
test: 修复 Windows Skill 快照测试的平台假设 (#1595)
Lianminx Sep 14, 2026
2a6bc1d
test: 修复 Windows CLI 测试的平台假设 (#1603)
Lianminx Sep 15, 2026
c962462
feat(evaluation): validate LongMemEval-V2 smoke inputs (#1460)
chenncy Sep 15, 2026
1dd7190
fix(website): support CRLF frontmatter (#1552)
Doar999 Sep 15, 2026
0e00f27
fix(website): remove duplicate test script (#1606)
XnLemon Sep 15, 2026
cab6f5a
feat(prompts): add Topic Memory prompt management (#1563)
frf12 Sep 15, 2026
9b356a7
Feat/memory write tracing (#1605)
Oxidaner Sep 15, 2026
9ff03ee
feat(pi): add artifact inspection tools (#1604)
wutongyuonce Sep 15, 2026
160587e
ci: improve evidence scan diagnostics and action pinning (#1589)
AlexStocks Sep 15, 2026
13518e4
feat(pi): add Topic Memory read tools (#1608)
wutongyuonce Sep 15, 2026
35a8811
build(deps): bump actions/configure-pages from 5.0.0 to 6.0.0
dependabot[bot] Sep 15, 2026
9d1afbf
build(deps): bump apache/skywalking-eyes/header from 0.8.0 to 0.9.0
dependabot[bot] Sep 15, 2026
5517fba
perf(server): read POST /v1/stats in one transaction per selection (#…
L4XB Sep 15, 2026
5ea7126
feat(pi): add structured work continuity tools (#1617)
wutongyuonce Sep 15, 2026
847203d
feat(dsh): expose observed recall and capture status through /pc (#1600)
knqiufan Sep 15, 2026
43642fa
docs: add Topic Memory guide (#1565)
frf12 Sep 15, 2026
0ed20c5
feat(integrations): align agent guidance and tool routing (#1522)
knqiufan Sep 15, 2026
346fef7
test(windows): fix process and checkout fixture portability (#1623)
knqiufan Sep 16, 2026
db3492f
Merge pull request #1612 from oceanbase/dependabot/github_actions/act…
AlexStocks Sep 16, 2026
b0ec629
Merge pull request #1613 from oceanbase/dependabot/github_actions/apa…
AlexStocks Sep 16, 2026
fa1e7d2
feat(pi): add external skill tools (#1626)
wutongyuonce Sep 16, 2026
534460e
feat(pi): add artifact candidate review tools (#1625)
wutongyuonce Sep 16, 2026
69823b1
feat(integrations): add layered PowerContext Skill routing (#1622)
knqiufan Sep 16, 2026
893e77f
feat(pi): add experience and skill generation tools (#1621)
wutongyuonce Sep 17, 2026
037dc2f
feat(pi): add Memory Changes and Stats tools (#1633)
wutongyuonce Sep 17, 2026
63d5f77
docs(rfc): complete topic memory generic Artifact APIs (#1614)
Zxf-xufeng Sep 17, 2026
ee5c076
feat(integrations): show token savings in Claude Code, OpenCode, and …
happy-v587 Sep 17, 2026
95bad08
feat(topic-memory): complete generic Artifact APIs (#1615)
Zxf-xufeng Sep 17, 2026
8d9b6ec
docs: vendor integration icons for README and website (#1638)
Holidayrabbit Sep 17, 2026
63764ab
Codex/fix windows command encoding (#1636)
Doar999 Sep 17, 2026
7ea6dbb
feat(pi): promote integration to Full profile (#1639)
wutongyuonce Sep 17, 2026
f30af1d
feat(authz): shared filter derivation, snapshot decision boundary, an…
tlyyxjz Sep 17, 2026
fae1a94
fix(codex): verify native MCP authentication on Windows (#1632)
beatenevo Sep 17, 2026
6ffc526
feat(dashboard): profile reading and exact handoff Markdown export (#…
Zxf-xufeng Sep 17, 2026
cd03cef
fix(sqlite): batch vector completeness checks (#1640)
notepix Sep 18, 2026
ec023c2
docs(rfc): profile dashboard and exact handoff Markdown export (#1629)
Zxf-xufeng Sep 18, 2026
7b53762
feat: record recurring failures and gate their repair (#1557) (#1586)
AlexStocks Sep 18, 2026
92d2516
feat(runtime): add a bounded recall sufficiency gate to prepare_conte…
AlexStocks Sep 18, 2026
82be518
feat(tags): support all artifact families
Teingi Sep 18, 2026
f2231d6
Merge pull request #1650 from Teingi/codex/tags-all-artifacts
Zxf-xufeng Sep 18, 2026
aa697c5
docs(rfc): propose Tauri desktop control center (#1455)
knqiufan Sep 18, 2026
662fcff
docs: add memory quality and lifecycle RFC
jiannnnyyyyy Sep 18, 2026
5ddb51b
docs: complete memory lifecycle RFC
larry-zy Sep 19, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"name": "powercontext",
"source": "./integrations/claude-code/plugins/powercontext",
"description": "Restore project memory and transfer current work from Claude Code",
"version": "0.1.0",
"version": "0.1.2",
"category": "Productivity"
}
]
Expand Down
48 changes: 41 additions & 7 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,30 @@ POWERCONTEXT_SERVER_HTTP_PORT=8000
POWERCONTEXT_SERVER_MCP_ENABLED=true
POWERCONTEXT_SERVER_MCP_PATH=/mcp

# Authentication is optional on loopback. Load the real token from a secret manager.
POWERCONTEXT_SERVER_AUTH_ENABLED=false
# Access Control --------------------------------------------------------------
# ACCESS_MODE is the only supported Access Control switch.
POWERCONTEXT_SERVER_ACCESS_MODE=disabled
# Legacy static Bearer compatibility. An injected Authentication Provider takes precedence.
# POWERCONTEXT_SERVER_AUTH_ENABLED=true
# POWERCONTEXT_SERVER_AUTH_TOKEN=replace-me
POWERCONTEXT_SERVER_ACCESS_DEPLOYMENT_ID=powercontext
# Multi-user deployments with background capabilities must bind an explicit service Principal.
# POWERCONTEXT_SERVER_ACCESS_BACKGROUND_PRINCIPAL_ID=service:scheduled-processing
# POWERCONTEXT_SERVER_ACCESS_BACKGROUND_PRINCIPAL_DESCRIPTION=Scheduled processing

# Dashboard -------------------------------------------------------------------
# The Dashboard discovers Scopes from the Server. The Server creates a default Scope on first startup.
POWERCONTEXT_SERVER_DASHBOARD_ENABLED=true
# Personal/demo viewer. Enabling requires ACCESS_MODE=enforced and a static AUTH_TOKEN.
# Injected authentication or authorization Providers are not supported by the Dashboard.
POWERCONTEXT_SERVER_DASHBOARD_ENABLED=false

# Logging, metrics, and tracing -----------------------------------------------
POWERCONTEXT_SERVER_LOGGING_LEVEL=INFO
POWERCONTEXT_SERVER_LOGGING_FORMAT=console
POWERCONTEXT_SERVER_LOGGING_ACCESS=true
POWERCONTEXT_SERVER_METRICS_ENABLED=true
POWERCONTEXT_SERVER_TRACING_ENABLED=false
# OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:6006/v1/traces
# The OpenTelemetry SDK appends /v1/traces to this base URL.
# OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:6006
# OTEL_SERVICE_NAME=powercontext

# Database --------------------------------------------------------------------
Expand All @@ -53,15 +62,39 @@ POWERCONTEXT_SERVER_DATABASE_KIND=sqlite
# POWERCONTEXT_SERVER_DATABASE_KIND=oceanbase
# POWERCONTEXT_SERVER_DATABASE_URL=mysql+aoceanbase://user:password@host:2881/powercontext?charset=utf8mb4

# Embedded seekDB alternative: install powercontext[cli,server,seekdb], then replace the SQLite kind.
# Embedded seekdb alternative: install powercontext[cli,server,seekdb], then replace the SQLite kind.
# Leave DATABASE_PATH unset to use the seekdb subdirectory below POWERCONTEXT_HOME.
# POWERCONTEXT_SERVER_DATABASE_KIND=seekdb
# POWERCONTEXT_SERVER_DATABASE_PATH=/absolute/path/to/seekdb

# Runtime ---------------------------------------------------------------------
POWERCONTEXT_SERVER_RUNTIME_SOURCE_WINDOW_LIMIT=100
# Maximum sum of explicit assembly section limits; per-family limits still apply.
POWERCONTEXT_SERVER_RUNTIME_CONTEXT_ASSEMBLY_MAX_ENTRIES=8
POWERCONTEXT_SERVER_RUNTIME_MEMORY_EXTRACTION_PROFILE=coding
POWERCONTEXT_SERVER_RUNTIME_SCHEDULE_SECONDS=60
POWERCONTEXT_SERVER_RUNTIME_MEMORY_SCHEDULE_SECONDS=60
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_SCHEDULE_SECONDS=60
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_SOURCE_WINDOW_LIMIT=10
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_HISTORY_MAX_CANDIDATES=20
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_HISTORY_RRF_THRESHOLD=70
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_HISTORY_MIN_CANDIDATES=5
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_MAX_WORKERS=10
POWERCONTEXT_SERVER_RUNTIME_TOPIC_MEMORY_WORKER_TIMEOUT_SECONDS=600
POWERCONTEXT_SERVER_RUNTIME_ARTIFACT_PROCESSING_ROLE=all
POWERCONTEXT_SERVER_RUNTIME_ARTIFACT_PROCESSING_SUPERVISOR_MODE=global
# Each Family owns its quota; dedicated creates one controller per Family.
# POWERCONTEXT_SERVER_RUNTIME_MEMORY_MAX_WORKERS=1
# POWERCONTEXT_SERVER_RUNTIME_EXPERIENCE_MAX_WORKERS=1
POWERCONTEXT_SERVER_RUNTIME_SKILL_MAX_WORKERS=1
POWERCONTEXT_SERVER_RUNTIME_SKILL_WORKER_TIMEOUT_SECONDS=600
# Explicit Dream requests run through the Experience and Skill Supervisors.
POWERCONTEXT_SERVER_RUNTIME_DREAM_ENABLED=true
POWERCONTEXT_SERVER_RUNTIME_DREAM_MAX_PENDING_PER_SCOPE=32
# POWERCONTEXT_SERVER_RUNTIME_DREAM_BUDGET='{"max_model_calls":2,"timeout_seconds":120}'
# POWERCONTEXT_SERVER_RUNTIME_PROFILE_MAX_WORKERS=4
# All migrated Families default to a 600-second total Scope invocation timeout.
# Old SCHEDULE_SECONDS, PROFILE_MAX_CONCURRENCY, and ARTIFACT_PROCESSING_MAX_WORKERS/
# WORKER_TIMEOUT_SECONDS remain aliases; conflicting old/new values fail startup.

# Optional generation-backed jobs. Enable only when their extra model cost is intended.
# POWERCONTEXT_SERVER_RUNTIME_MEMORY_RERANK_ENABLED=true
Expand All @@ -72,6 +105,7 @@ POWERCONTEXT_SERVER_RUNTIME_SCHEDULE_SECONDS=60
# Generation and Embedding may use different providers; `powercontext config init` configures valid combinations.
POWERCONTEXT_SERVER_INFERENCE_GENERATION_TIMEOUT_SECONDS=30
POWERCONTEXT_SERVER_INFERENCE_GENERATION_MAX_REQUESTS=2
POWERCONTEXT_SERVER_INFERENCE_GENERATION_MODEL_CONTEXT_WINDOW_TOKENS=125000
# Optional Pydantic AI model settings. Provider-specific request fields belong under `extra_body`.
# POWERCONTEXT_SERVER_INFERENCE_GENERATION_MODEL_SETTINGS='{"extra_body":{"chat_template_kwargs":{"enable_thinking":false}}}'
POWERCONTEXT_SERVER_INFERENCE_EMBEDDING_NORMALIZATION=unit
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/setup-python-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ inputs:
runs:
using: "composite"
steps:
- uses: actions/setup-python@v7
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: ${{ inputs.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v10.0.0
uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: ${{ inputs.uv-version }}
enable-cache: 'true'
Expand Down
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
35 changes: 35 additions & 0 deletions .github/scripts/report_pytest_failures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env python3
"""Expose pytest JUnit failures as public GitHub Actions annotations."""

from __future__ import annotations

import sys
import xml.etree.ElementTree as ET
from pathlib import Path


def _escape(value: str) -> str:
return value.replace("%", "%25").replace("\r", "%0D").replace("\n", "%0A")


def main() -> int:
report = Path(sys.argv[1])
if not report.is_file():
print(f"::error title=pytest report missing::{_escape(str(report))}")
return 0

root = ET.parse(report).getroot() # noqa: S314 - parses a local pytest report
for case in root.iter("testcase"):
problem = next((case.find(kind) for kind in ("failure", "error") if case.find(kind) is not None), None)
if problem is None:
continue
identity = ".".join(filter(None, (case.get("classname"), case.get("name"))))
summary = (problem.get("message") or "pytest failed").strip()
traceback = (problem.text or "").strip()
detail = f"{summary}\n{traceback}" if traceback else summary
print(f"::error title={_escape(identity)}::{_escape(detail[:8000])}")
return 0


if __name__ == "__main__":
raise SystemExit(main())
10 changes: 6 additions & 4 deletions .github/workflows/build-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,19 @@ jobs:

steps:
- name: Check out requested source
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
ref: ${{ inputs.ref || github.sha }}
fetch-depth: 0
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v7
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Set up uv
uses: astral-sh/setup-uv@v10.0.0
uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: ${{ env.UV_VERSION }}
enable-cache: true
Expand Down Expand Up @@ -261,6 +262,7 @@ jobs:
"SessionStart": "session_binding.py",
"PreToolUse": "bind_tools.py",
"UserPromptSubmit": "recall.py",
"Stop": "token_savings.py",
}
for event, script in hook_scripts.items():
hook = hooks["hooks"][event][0]["hooks"][0]
Expand Down Expand Up @@ -400,7 +402,7 @@ jobs:
> "build/output/${ARTIFACT_NAME}.tar.gz.sha256"

- name: Upload customer artifact
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: ${{ steps.metadata.outputs.artifact_name }}
path: |
Expand Down
11 changes: 6 additions & 5 deletions .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,22 @@ jobs:

steps:
- name: Check out
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
persist-credentials: false

- name: Set up uv
uses: astral-sh/setup-uv@v10.0.0
uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: "0.10.12"
enable-cache: true

- name: Set up QEMU
uses: docker/setup-qemu-action@v4
uses: docker/setup-qemu-action@1f40c72289eff860ee54a304f1438e3cff362e0a # v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
uses: docker/setup-buildx-action@37fe631027851001ddb9b187196cc803df7f5f0e # v4

- name: Resolve image metadata
id: metadata
Expand Down Expand Up @@ -116,7 +117,7 @@ jobs:
exit 1

- name: Upload Docker image archives
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: ${{ steps.metadata.outputs.artifact_name }}
path: docker-images/*.tar
Expand Down
34 changes: 25 additions & 9 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Deploy documentation
name: Deploy website

on:
workflow_dispatch:
Expand All @@ -13,27 +13,43 @@ concurrency:
cancel-in-progress: false

jobs:
deploy-docs:
if: github.ref == 'refs/heads/master'
deploy-website:
if: >-
github.repository == 'oceanbase/powercontext' && github.ref == 'refs/heads/master'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
timeout-minutes: 20
env:
NEXT_PUBLIC_BASE_PATH: ''
NEXT_PUBLIC_SITE_URL: https://powercontext.oceanbase.io
NEXT_PUBLIC_REPOSITORY_URL: https://github.com/oceanbase/powercontext
steps:
- name: Check out
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false

- name: Set up the environment
uses: ./.github/actions/setup-python-env

- name: Build documentation
- name: Set up website tools
uses: jdx/mise-action@c37c93293d6b742fc901e1406b8f764f6fb19dac # v2

- name: Build website
run: make docs-build
env:
GITHUB_TOKEN: ${{ github.token }}

- name: Configure GitHub Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0

- name: Upload artifact
uses: actions/upload-pages-artifact@v5
- name: Upload website artifact
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
with:
path: site
path: website/out

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5
51 changes: 25 additions & 26 deletions .github/workflows/e2e-harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ permissions:
contents: read

env:
TRUFFLEHOG_IMAGE: ghcr.io/trufflesecurity/trufflehog:3.96.0
TRUFFLEHOG_IMAGE: ghcr.io/trufflesecurity/trufflehog@sha256:562bc231afa9de3d04de44cfe624252b08207de1fc3cebc5e7ed92bed7f279e4 # v3.97.4
UV_VERSION: "0.10.12"

concurrency:
Expand All @@ -22,14 +22,16 @@ concurrency:
jobs:
validate:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Check out
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
persist-credentials: false

- name: Install uv
uses: astral-sh/setup-uv@v10.0.0
uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: ${{ env.UV_VERSION }}

Expand All @@ -50,16 +52,18 @@ jobs:
name: Acceptance (${{ matrix.database }})
steps:
- name: Check out
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
persist-credentials: false

- name: Install uv
uses: astral-sh/setup-uv@v10.0.0
uses: astral-sh/setup-uv@ae62891fec2bb8e7d6c99fc78c9fec3a63790f8d # v10.0.0
with:
version: ${{ env.UV_VERSION }}

- name: Run deterministic scenarios
id: acceptance_scenarios
env:
POWERCONTEXT_E2E_DATABASE: ${{ matrix.database }}
POWERCONTEXT_E2E_OUTPUT: ${{ github.workspace }}/.powercontext-e2e/${{ matrix.database }}/acceptance
Expand All @@ -68,33 +72,28 @@ jobs:
- name: Scan replay evidence
id: evidence_scan
if: always()
continue-on-error: true
env:
DATABASE: ${{ matrix.database }}
DIAGNOSTICS_PATH: ${{ runner.temp }}/powercontext-e2e-diagnostics-${{ matrix.database }}
EVIDENCE_PATH: ${{ github.workspace }}/.powercontext-e2e/${{ matrix.database }}/acceptance
run: |
test -d "${EVIDENCE_PATH}"
if ! find "${EVIDENCE_PATH}" -type f -print -quit | grep -q .; then
echo "No replay evidence was produced." >&2
exit 1
fi
docker run --rm \
--volume "${EVIDENCE_PATH}:/evidence:ro" \
"${TRUFFLEHOG_IMAGE}" \
filesystem /evidence \
--no-verification \
--results=verified,unknown,unverified \
--fail \
--fail-on-scan-errors \
--no-update \
--json > "${RUNNER_TEMP}/trufflehog-acceptance-${{ matrix.database }}.jsonl"
SCENARIO_OUTCOME: ${{ steps.acceptance_scenarios.outcome }}
run: bash scripts/scan_e2e_evidence.sh

- name: Report suppressed replay evidence
if: always() && steps.evidence_scan.outcome != 'success'
run: echo "::warning::Replay evidence was missing or secret scanning did not complete cleanly."
- name: Upload sanitized replay diagnostics
if: >-
always() &&
(steps.evidence_scan.outcome != 'success' ||
steps.acceptance_scenarios.outcome != 'success')
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: e2e-acceptance-diagnostics-${{ matrix.database }}-${{ github.sha }}
path: ${{ runner.temp }}/powercontext-e2e-diagnostics-${{ matrix.database }}/summary.txt
if-no-files-found: error
retention-days: 14

- name: Upload replay evidence
if: always() && steps.evidence_scan.outcome == 'success'
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: e2e-acceptance-${{ matrix.database }}-${{ github.sha }}
path: .powercontext-e2e/${{ matrix.database }}/acceptance
Expand Down
Loading