Commit Graph
54 Commits
Author SHA1 Message Date
Lucas WintherandClaude Opus 5 c47f0669ca feat(search): add two-phase pipeline with bounded concurrency and recency backfill
Adds searchPipeline, which ranks candidates shallowly at no API cost, then
enriches a bounded subset (DEFAULT_ENRICH_LIMIT=25, DEFAULT_CONCURRENCY=8)
and re-ranks, taking max(shallow, deep) so a strong title match is never
diluted by unrelated deep content. Auth and rate-limit errors abort the
whole search via isFatalSearchError instead of degrading silently; other
enrichment failures degrade one record and are counted. A recency backfill
spends leftover enrichment budget on the most recently updated candidates
so a deep-only match is reachable at all. Adds the src/search/ barrel
export.

Reconciles the previously uncommitted pipeline.ts (written against an
earlier, defective version of this task's brief) with the corrected brief:
mapWithConcurrency's phase-2 callback is now given an explicit
EnrichedCandidate return type so its `deep: TDeep | undefined` field is a
single type rather than an inferred union, which is what the `entry is
Pair` narrowing predicate requires under TS2677.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-18 07:30:48 +02:00
Lucas WintherandClaude Opus 5 3d3b8ff512 feat(search): add generic field-spec record ranking with exact-mode bypass
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:55:37 +02:00
Lucas WintherandClaude Haiku 4.5 df9f093b5d feat(search): add match-centred snippet extraction
Co-Authored-By: Claude Haiku 4.5 <[email protected]>
2026-09-17 10:50:54 +02:00
Lucas WintherandClaude Opus 5 926e241c7b feat(search): add bounded levenshtein and coverage-weighted field scoring
Adds boundedLevenshtein with row-minimum early exit, token scoring
(exact / prefix / contains / shared-prefix / edit distance), and
coverage-weighted field aggregation scaled by BASE_SCALE so that only a
verbatim phrase match reaches 1.0.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:46:58 +02:00
Lucas WintherandClaude Opus 5 28a834eb32 fix(search): eliminate mutable regex state with matchAll
Replace manual exec loop with matchAll to eliminate cross-call mutable
lastIndex state on module-level TOKEN_PATTERN regex. matchAll clones
the regex internally, ensuring no shared state while maintaining
identical behavior and original-text offset semantics.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:19:17 +02:00
Lucas WintherandClaude Opus 5 5b0f73ae0e feat(search): add unicode-aware tokenizer with original-text offsets
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:14:30 +02:00
Lucas Winther 7097d1c174 fix: resolve final review findings (wiki cache tenant isolation, meeting search pagination, ambient test) 2026-09-07 03:12:55 +02:00
Lucas Winther d6e78d8cc3 feat: wire meetings, wikis, and activities tools into server registry (18 tools) 2026-09-07 02:56:00 +02:00
Lucas Winther 2fb25a9604 fix(wikis): refine projectId schema in searchWikiPagesShape 2026-09-07 02:51:46 +02:00
Lucas Winther 16e54614ac feat: add wikis MCP tools 2026-09-07 02:50:09 +02:00
Lucas Winther 271f15b4e3 feat: add meetings MCP tools 2026-09-07 02:43:04 +02:00
Lucas Winther 190278fcce feat: add openproject_list_work_package_activities MCP tool 2026-09-07 02:39:01 +02:00
Lucas Winther 6003925bcf fix: discriminate discovery probe errors and evict cache on refresh 2026-09-07 02:34:35 +02:00
Lucas Winther 1ce61506b2 feat: add wikis domain service with caching discovery search 2026-09-07 02:31:03 +02:00
Lucas Winther c0125121cc fix: resolve typecheck errors and improve searchMeetings pagination slicing 2026-09-07 02:26:14 +02:00
Lucas Winther 8c3db68307 feat: add meetings domain service 2026-09-07 02:22:10 +02:00
Lucas Winther 456c90adba feat: add listWorkPackageActivities domain service 2026-09-07 02:14:18 +02:00
Lucas Winther 75531eca2d feat(http): add OpenAPI 3.1.0 specification and REST tool execution endpoint 2026-09-07 01:38:32 +02:00
Lucas Winther ba1ce2171e feat(http): support MCP Streamable HTTP transport on /sse, /mcp, and / for Open WebUI 2026-09-07 01:31:04 +02:00
Lucas Winther 2c1ff8f7db feat(http): allow config.apiKey fallback on server for single-tenant deployments 2026-09-07 01:23:31 +02:00
Lucas Winther 914883957e docs: ensure consistent PORT and HOST_PORT documentation across codebase and docs 2026-09-07 01:20:29 +02:00
Lucas Winther 86c7dadb9b fix(config): support HOST_PORT as fallback for PORT environment variable 2026-09-07 01:16:48 +02:00
Lucas Winther d0dc27b2e3 feat(server): wire HTTP transport into CLI, add docker-compose.server.yml, and update docs 2026-09-07 00:14:49 +02:00
Lucas Winther ec85bf811b feat(http): implement hosted remote MCP server with HTTP/SSE transport 2026-09-06 23:36:34 +02:00
Lucas Winther cda83e320f feat(config): support port and host options for HTTP/SSE transport 2026-09-06 21:22:50 +02:00
Lucas Winther 03a1f44517 fix: restore strict noUncheckedIndexedAccess and skip redundant docker build in CI 2026-09-06 20:54:12 +02:00
Lucas Winther 82138fff61 fix(types): resolve typecheck errors in queries service and tool registration 2026-09-06 20:48:52 +02:00
Lucas Winther a5f4dcc2ca feat(tools): add openproject_get_openapi_spec tool definition and registration 2026-09-06 19:56:34 +02:00
Lucas Winther 69f2a95371 fix(openapi): guard suffix matching and add ambient context test 2026-09-06 19:49:13 +02:00
Lucas Winther 25fc2c9057 feat(services): implement OpenAPI specification service and in-memory caching 2026-09-06 19:40:33 +02:00
Lucas Winther 3d4a064593 refactor(server): add shutdown idempotency guard and test teardown blocks 2026-09-06 19:22:46 +02:00
Lucas Winther f1e84d281a feat(server): wire CLI entrypoint, live E2E tool calling, and mark Task 4 complete in TODO.md 2026-09-06 19:17:40 +02:00
Lucas Winther af2a8f3af8 feat(server): add read-only mode enforcement and execution guard tests 2026-09-06 19:14:25 +02:00
Lucas Winther d49e0fc881 feat(server): implement MCP server factory and transport lifecycle 2026-09-06 19:03:09 +02:00
Lucas Winther 3f618b2cf3 feat(tools): add execution wrapper support to tool registration 2026-09-06 18:52:22 +02:00
Lucas Winther 6b8045111b fix(tools): address final code review findings on validation, concurrency, and testing 2026-09-06 18:37:21 +02:00
Lucas Winther 4eb17c2e5c feat(tools): add tool registry and barrel export 2026-09-06 18:04:50 +02:00
Lucas Winther 8cdca0fd83 feat(tools): implement metadata tools and registration 2026-09-06 18:01:43 +02:00
Lucas Winther ff05b48f81 feat(tools): implement query tools and registration 2026-09-06 17:54:42 +02:00
Lucas Winther 3910c5548f fix(tools): address review finding on heterogeneous tool registration and McpToolResponse index signature 2026-09-06 02:18:47 +02:00
Lucas Winther d9176a258c feat(tools): implement work package tools and registration 2026-09-06 01:50:58 +02:00
Lucas Winther 8ccbebe34f feat(tools): implement project tools and registration 2026-09-06 01:30:17 +02:00
Lucas Winther 43eeee2e04 fix(tools): address review findings on error codes, registerTool assertions, and strict typing 2026-09-06 01:03:40 +02:00
Lucas Winther bb321bfdbe feat(tools): add common tool utilities, types, and error formatting 2026-09-06 00:48:25 +02:00
Lucas Winther 290d9a2cc9 refactor(client): expose error hierarchy via src/client/errors.ts and add code property 2026-09-06 00:48:04 +02:00
Lucas Winther a57e8ba7df fix(services): encode URI in getProject and improve test assertions 2026-09-06 00:23:58 +02:00
Lucas Winther ed38e5b537 fix(services): resolve project identifier in queries/work packages and use results link 2026-09-05 23:12:46 +02:00
Lucas Winther a8e4ce9bc4 feat(services): implement metadata domain service and barrel export 2026-09-05 22:57:31 +02:00
Lucas Winther 8db5a92bc5 feat(services): implement queries domain service 2026-09-05 22:49:18 +02:00
Lucas Winther b1348dbea8 feat(services): implement work packages domain service 2026-09-05 18:17:24 +02:00