memory-journal-mcp 6.1.2 → 6.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -28
- package/dist/{chunk-X4SWFATC.js → chunk-BI4ZNSKA.js} +38 -24
- package/dist/{chunk-HCEWINSB.js → chunk-N6EBIDN7.js} +99 -102
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/tools-WPRY5MJ6.js +2 -0
- package/package.json +10 -1
- package/skills/github-commander/SKILL.md +151 -0
- package/skills/github-commander/config/project-config.example.md +125 -0
- package/skills/github-commander/workflows/code-quality-audit.md +80 -0
- package/skills/github-commander/workflows/full-audit.md +134 -0
- package/skills/github-commander/workflows/issue-triage.md +239 -0
- package/skills/github-commander/workflows/milestone-sprint.md +81 -0
- package/skills/github-commander/workflows/perf-audit.md +142 -0
- package/skills/github-commander/workflows/pr-review.md +123 -0
- package/skills/github-commander/workflows/security-audit.md +170 -0
- package/skills/github-commander/workflows/update-deps.md +109 -0
- package/.dockerignore +0 -139
- package/.gitattributes +0 -20
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -95
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -110
- package/.github/ISSUE_TEMPLATE/question.md +0 -78
- package/.github/aw/actions-lock.json +0 -14
- package/.github/copilot-instructions.md +0 -122
- package/.github/dependabot.yml +0 -93
- package/.github/pull_request_template.md +0 -135
- package/.github/workflows/README.md +0 -133
- package/.github/workflows/agentics-maintenance.yml +0 -141
- package/.github/workflows/auto-release.yml +0 -68
- package/.github/workflows/ci-health-monitor.lock.yml +0 -1121
- package/.github/workflows/ci-health-monitor.md +0 -87
- package/.github/workflows/codeql.yml +0 -41
- package/.github/workflows/dependabot-auto-merge.yml +0 -42
- package/.github/workflows/dependency-maintenance.lock.yml +0 -1182
- package/.github/workflows/dependency-maintenance.md +0 -147
- package/.github/workflows/docker-publish.yml +0 -254
- package/.github/workflows/docs-drift-detector.lock.yml +0 -1142
- package/.github/workflows/docs-drift-detector.md +0 -115
- package/.github/workflows/lint-and-test.yml +0 -60
- package/.github/workflows/publish-npm.yml +0 -85
- package/.github/workflows/secrets-scanning.yml +0 -32
- package/.github/workflows/security-update.yml +0 -127
- package/.gitleaks.toml +0 -9
- package/.prettierignore +0 -21
- package/.prettierrc +0 -33
- package/.scout-ignore +0 -12
- package/.trivyignore +0 -21
- package/CHANGELOG.md +0 -1814
- package/CODE_OF_CONDUCT.md +0 -133
- package/CONTRIBUTING.md +0 -263
- package/DOCKER_README.md +0 -331
- package/Dockerfile +0 -128
- package/SECURITY.md +0 -227
- package/UNRELEASED.md +0 -1
- package/dist/tools-T4U5A3X4.js +0 -2
- package/docker-compose.yml +0 -71
- package/docs/README.md +0 -18
- package/docs/agentic-journal-synergy.md +0 -175
- package/docs/copilot-setup.md +0 -72
- package/eslint.config.js +0 -110
- package/mcp-config-example.json +0 -21
- package/playwright.config.ts +0 -35
- package/releases/v2.1.0.md +0 -220
- package/releases/v2.2.0.md +0 -168
- package/releases/v3.0.0.md +0 -237
- package/releases/v3.1.0.md +0 -104
- package/releases/v3.1.1.md +0 -42
- package/releases/v3.1.2.md +0 -40
- package/releases/v3.1.3.md +0 -64
- package/releases/v3.1.4.md +0 -32
- package/releases/v3.1.5.md +0 -44
- package/releases/v4.0.0.md +0 -71
- package/releases/v4.1.0.md +0 -88
- package/releases/v4.2.0.md +0 -90
- package/releases/v4.3.0.md +0 -92
- package/releases/v4.3.1.md +0 -69
- package/releases/v4.4.0.md +0 -120
- package/releases/v4.4.1.md +0 -33
- package/releases/v4.4.2.md +0 -31
- package/releases/v4.5.0.md +0 -116
- package/releases/v5.0.0.md +0 -105
- package/releases/v5.0.1.md +0 -25
- package/releases/v5.1.0.md +0 -83
- package/releases/v5.1.1.md +0 -10
- package/releases/v6.0.0.md +0 -48
- package/releases/v6.0.1.md +0 -36
- package/releases/v6.1.0.md +0 -68
- package/releases/v6.1.1.md +0 -30
- package/releases/v6.1.2.md +0 -23
- package/scripts/generate-server-instructions.ts +0 -306
- package/scripts/server-instructions-function-body.ts +0 -107
- package/scripts/server-instructions-gotchas.ts +0 -45
- package/server.json +0 -42
- package/social-preview.png +0 -0
- package/src/auth/auth-context.ts +0 -78
- package/src/auth/authorization-server-discovery.ts +0 -263
- package/src/auth/errors.ts +0 -215
- package/src/auth/index.ts +0 -58
- package/src/auth/middleware.ts +0 -392
- package/src/auth/oauth-resource-server.ts +0 -170
- package/src/auth/scope-map.ts +0 -46
- package/src/auth/scopes.ts +0 -256
- package/src/auth/token-validator.ts +0 -293
- package/src/auth/transport-agnostic.ts +0 -164
- package/src/auth/types.ts +0 -372
- package/src/cli.ts +0 -279
- package/src/codemode/api-constants.ts +0 -263
- package/src/codemode/api.ts +0 -302
- package/src/codemode/auto-return.ts +0 -65
- package/src/codemode/index.ts +0 -47
- package/src/codemode/sandbox-factory.ts +0 -144
- package/src/codemode/sandbox.ts +0 -220
- package/src/codemode/security.ts +0 -155
- package/src/codemode/types.ts +0 -228
- package/src/codemode/worker-sandbox.ts +0 -277
- package/src/codemode/worker-script.ts +0 -239
- package/src/constants/icons.ts +0 -183
- package/src/constants/server-instructions.md +0 -166
- package/src/constants/server-instructions.ts +0 -514
- package/src/database/adapter-factory.ts +0 -16
- package/src/database/core/entry-columns.ts +0 -10
- package/src/database/core/interfaces.ts +0 -188
- package/src/database/core/schema.ts +0 -152
- package/src/database/sqlite-adapter/backup.ts +0 -167
- package/src/database/sqlite-adapter/entries/crud.ts +0 -233
- package/src/database/sqlite-adapter/entries/importance.ts +0 -76
- package/src/database/sqlite-adapter/entries/index.ts +0 -142
- package/src/database/sqlite-adapter/entries/search.ts +0 -294
- package/src/database/sqlite-adapter/entries/shared.ts +0 -102
- package/src/database/sqlite-adapter/entries/statistics.ts +0 -162
- package/src/database/sqlite-adapter/index.ts +0 -265
- package/src/database/sqlite-adapter/native-connection.ts +0 -301
- package/src/database/sqlite-adapter/relationships.ts +0 -70
- package/src/database/sqlite-adapter/tags.ts +0 -182
- package/src/filtering/tool-filter.ts +0 -312
- package/src/github/github-integration/client.ts +0 -114
- package/src/github/github-integration/index.ts +0 -297
- package/src/github/github-integration/insights.ts +0 -155
- package/src/github/github-integration/issues.ts +0 -213
- package/src/github/github-integration/milestones.ts +0 -262
- package/src/github/github-integration/projects.ts +0 -414
- package/src/github/github-integration/pull-requests.ts +0 -235
- package/src/github/github-integration/repository.ts +0 -110
- package/src/github/github-integration/types.ts +0 -43
- package/src/handlers/prompts/github.ts +0 -210
- package/src/handlers/prompts/index.ts +0 -97
- package/src/handlers/prompts/workflow.ts +0 -361
- package/src/handlers/resources/core/briefing/context-section.ts +0 -182
- package/src/handlers/resources/core/briefing/github-section.ts +0 -354
- package/src/handlers/resources/core/briefing/index.ts +0 -106
- package/src/handlers/resources/core/briefing/user-message.ts +0 -114
- package/src/handlers/resources/core/health.ts +0 -75
- package/src/handlers/resources/core/index.ts +0 -31
- package/src/handlers/resources/core/instructions.ts +0 -45
- package/src/handlers/resources/core/utilities.ts +0 -310
- package/src/handlers/resources/github.ts +0 -340
- package/src/handlers/resources/graph.ts +0 -218
- package/src/handlers/resources/help.ts +0 -410
- package/src/handlers/resources/index.ts +0 -143
- package/src/handlers/resources/shared.ts +0 -219
- package/src/handlers/resources/team.ts +0 -134
- package/src/handlers/resources/templates.ts +0 -334
- package/src/handlers/tools/admin.ts +0 -351
- package/src/handlers/tools/analytics.ts +0 -346
- package/src/handlers/tools/backup.ts +0 -272
- package/src/handlers/tools/codemode.ts +0 -188
- package/src/handlers/tools/core.ts +0 -359
- package/src/handlers/tools/error-fields-mixin.ts +0 -10
- package/src/handlers/tools/export.ts +0 -150
- package/src/handlers/tools/github/copilot-tools.ts +0 -72
- package/src/handlers/tools/github/helpers.ts +0 -125
- package/src/handlers/tools/github/insights-tools.ts +0 -112
- package/src/handlers/tools/github/issue-tools.ts +0 -442
- package/src/handlers/tools/github/kanban-tools.ts +0 -153
- package/src/handlers/tools/github/milestone-tools.ts +0 -371
- package/src/handlers/tools/github/mutation-tools.ts +0 -17
- package/src/handlers/tools/github/read-tools.ts +0 -302
- package/src/handlers/tools/github/schemas.ts +0 -435
- package/src/handlers/tools/github.ts +0 -39
- package/src/handlers/tools/index.ts +0 -255
- package/src/handlers/tools/relationships.ts +0 -390
- package/src/handlers/tools/schemas.ts +0 -165
- package/src/handlers/tools/search.ts +0 -448
- package/src/handlers/tools/team/admin-tools.ts +0 -164
- package/src/handlers/tools/team/analytics-tools.ts +0 -233
- package/src/handlers/tools/team/backup-tools.ts +0 -83
- package/src/handlers/tools/team/core-tools.ts +0 -197
- package/src/handlers/tools/team/export-tools.ts +0 -130
- package/src/handlers/tools/team/helpers.ts +0 -66
- package/src/handlers/tools/team/index.ts +0 -45
- package/src/handlers/tools/team/relationship-tools.ts +0 -219
- package/src/handlers/tools/team/schemas.ts +0 -558
- package/src/handlers/tools/team/search-tools.ts +0 -145
- package/src/handlers/tools/team/vector-tools.ts +0 -261
- package/src/index.ts +0 -57
- package/src/server/mcp-server.ts +0 -446
- package/src/server/registration.ts +0 -141
- package/src/server/scheduler.ts +0 -283
- package/src/transports/http/handlers.ts +0 -78
- package/src/transports/http/index.ts +0 -8
- package/src/transports/http/security.ts +0 -147
- package/src/transports/http/server/index.ts +0 -397
- package/src/transports/http/server/legacy-sse.ts +0 -87
- package/src/transports/http/server/stateful.ts +0 -222
- package/src/transports/http/server/stateless.ts +0 -42
- package/src/transports/http/types.ts +0 -132
- package/src/types/entities.ts +0 -145
- package/src/types/error-types.ts +0 -92
- package/src/types/errors.ts +0 -200
- package/src/types/filtering.ts +0 -55
- package/src/types/github.ts +0 -216
- package/src/types/index.ts +0 -348
- package/src/utils/error-helpers.ts +0 -78
- package/src/utils/errors/error-response-fields.ts +0 -29
- package/src/utils/errors/suggestions.ts +0 -94
- package/src/utils/github-helpers.ts +0 -33
- package/src/utils/logger.ts +0 -107
- package/src/utils/mcp-logger.ts +0 -155
- package/src/utils/progress-utils.ts +0 -100
- package/src/utils/query-helpers.ts +0 -78
- package/src/utils/resource-annotations.ts +0 -75
- package/src/utils/security-utils.ts +0 -198
- package/src/utils/vector-index-helpers.ts +0 -24
- package/src/vector/vector-search-manager.ts +0 -409
- package/src/version.ts +0 -15
- package/test-server/README.md +0 -193
- package/test-server/code-map.md +0 -399
- package/test-server/test-agent-experience.md +0 -213
- package/test-server/test-filter-instructions.mjs +0 -295
- package/test-server/test-instruction-levels.mjs +0 -102
- package/test-server/test-preflight.md +0 -55
- package/test-server/test-prompts.mjs +0 -185
- package/test-server/test-scheduler.mjs +0 -174
- package/test-server/test-tool-annotations.mjs +0 -115
- package/test-server/test-tools-codemode.md +0 -632
- package/test-server/test-tools-codemode2.md +0 -1218
- package/test-server/test-tools-team.md +0 -215
- package/test-server/test-tools.md +0 -429
- package/test-server/test-tools2.md +0 -361
- package/test-server/test-tools3.md +0 -396
- package/test-server/tool-reference.md +0 -231
- package/tests/README.md +0 -54
- package/tests/auth/auth-context.test.ts +0 -162
- package/tests/auth/authorization-server-discovery.test.ts +0 -265
- package/tests/auth/errors.test.ts +0 -170
- package/tests/auth/middleware.test.ts +0 -585
- package/tests/auth/oauth-resource-server.test.ts +0 -173
- package/tests/auth/scope-map.test.ts +0 -66
- package/tests/auth/scopes.test.ts +0 -347
- package/tests/auth/token-validator.test.ts +0 -271
- package/tests/codemode/api.test.ts +0 -396
- package/tests/codemode/auto-return.test.ts +0 -167
- package/tests/codemode/codemode-tool-handlers.test.ts +0 -197
- package/tests/codemode/sandbox-factory.test.ts +0 -152
- package/tests/codemode/sandbox.test.ts +0 -190
- package/tests/codemode/security.test.ts +0 -242
- package/tests/codemode/worker-sandbox.test.ts +0 -106
- package/tests/constants/icons.test.ts +0 -101
- package/tests/constants/server-instructions.test.ts +0 -514
- package/tests/database/crud-workflow-branches.test.ts +0 -418
- package/tests/database/database-branches.test.ts +0 -132
- package/tests/database/entries-auth-branches.test.ts +0 -390
- package/tests/database/native-connection.test.ts +0 -249
- package/tests/database/shared-helpers.test.ts +0 -103
- package/tests/database/sqlite-adapter.bench.ts +0 -63
- package/tests/database/sqlite-adapter.test.ts +0 -690
- package/tests/database/tags.test.ts +0 -134
- package/tests/e2e/README.md +0 -39
- package/tests/e2e/auth.spec.ts +0 -106
- package/tests/e2e/codemode-abuse.spec.ts +0 -75
- package/tests/e2e/health.spec.ts +0 -63
- package/tests/e2e/helpers.ts +0 -139
- package/tests/e2e/oauth-discovery.spec.ts +0 -102
- package/tests/e2e/oauth-scopes.spec.ts +0 -222
- package/tests/e2e/payloads-admin.spec.ts +0 -76
- package/tests/e2e/payloads-analytics.spec.ts +0 -37
- package/tests/e2e/payloads-backup-restore.spec.ts +0 -102
- package/tests/e2e/payloads-backup.spec.ts +0 -44
- package/tests/e2e/payloads-codemode-api.spec.ts +0 -131
- package/tests/e2e/payloads-codemode-readonly.spec.ts +0 -116
- package/tests/e2e/payloads-codemode.spec.ts +0 -116
- package/tests/e2e/payloads-core.spec.ts +0 -82
- package/tests/e2e/payloads-error-contracts.spec.ts +0 -159
- package/tests/e2e/payloads-export.spec.ts +0 -46
- package/tests/e2e/payloads-github-degradation.spec.ts +0 -73
- package/tests/e2e/payloads-github.spec.ts +0 -176
- package/tests/e2e/payloads-relationships.spec.ts +0 -56
- package/tests/e2e/payloads-search.spec.ts +0 -64
- package/tests/e2e/payloads-team-happy.spec.ts +0 -231
- package/tests/e2e/payloads-team.spec.ts +0 -174
- package/tests/e2e/prompts-expanded.spec.ts +0 -137
- package/tests/e2e/prompts.spec.ts +0 -62
- package/tests/e2e/protocols.spec.ts +0 -134
- package/tests/e2e/rate-limiting.spec.ts +0 -291
- package/tests/e2e/resources-briefing-env.spec.ts +0 -106
- package/tests/e2e/resources-complete.spec.ts +0 -180
- package/tests/e2e/resources-expanded.spec.ts +0 -83
- package/tests/e2e/resources-instructions-levels.spec.ts +0 -145
- package/tests/e2e/resources-templates.spec.ts +0 -123
- package/tests/e2e/resources.spec.ts +0 -103
- package/tests/e2e/scheduler.spec.ts +0 -79
- package/tests/e2e/security.spec.ts +0 -112
- package/tests/e2e/session-advanced.spec.ts +0 -152
- package/tests/e2e/sessions.spec.ts +0 -95
- package/tests/e2e/stateless.spec.ts +0 -79
- package/tests/e2e/streaming.spec.ts +0 -176
- package/tests/e2e/tool-filtering-presets.spec.ts +0 -192
- package/tests/e2e/tool-filtering.spec.ts +0 -77
- package/tests/e2e/tools.spec.ts +0 -111
- package/tests/filtering/tool-filter.test.ts +0 -314
- package/tests/github/client-issues-errors.test.ts +0 -433
- package/tests/github/github-integration-branches.test.ts +0 -490
- package/tests/github/github-integration.test.ts +0 -1015
- package/tests/github/github-managers-branches.test.ts +0 -907
- package/tests/github/pull-requests.test.ts +0 -334
- package/tests/handlers/analytics-branches.test.ts +0 -222
- package/tests/handlers/backup-branches.test.ts +0 -270
- package/tests/handlers/briefing-context-section.test.ts +0 -388
- package/tests/handlers/briefing-github-section.test.ts +0 -392
- package/tests/handlers/briefing-user-message.test.ts +0 -405
- package/tests/handlers/codemode-tools.test.ts +0 -85
- package/tests/handlers/copilot-tools.test.ts +0 -126
- package/tests/handlers/error-path-coverage.test.ts +0 -324
- package/tests/handlers/export-tools.test.ts +0 -203
- package/tests/handlers/github-resource-handlers.test.ts +0 -929
- package/tests/handlers/github-tool-handlers.test.ts +0 -1452
- package/tests/handlers/handler-error-branches.test.ts +0 -346
- package/tests/handlers/help-resource.test.ts +0 -92
- package/tests/handlers/prompt-handler-coverage.test.ts +0 -108
- package/tests/handlers/prompt-handlers.test.ts +0 -131
- package/tests/handlers/resource-handler-coverage.test.ts +0 -281
- package/tests/handlers/resource-handlers.test.ts +0 -357
- package/tests/handlers/resource-prompt-branches.test.ts +0 -495
- package/tests/handlers/search-tool-handlers.test.ts +0 -379
- package/tests/handlers/targeted-gap-closure.test.ts +0 -387
- package/tests/handlers/team-admin.test.ts +0 -291
- package/tests/handlers/team-analytics.test.ts +0 -220
- package/tests/handlers/team-core.test.ts +0 -148
- package/tests/handlers/team-data.test.ts +0 -198
- package/tests/handlers/team-relationships.test.ts +0 -271
- package/tests/handlers/team-resource-handlers.test.ts +0 -161
- package/tests/handlers/team-search.test.ts +0 -134
- package/tests/handlers/team-tool-handlers.test.ts +0 -301
- package/tests/handlers/team-vector.test.ts +0 -213
- package/tests/handlers/template-github-branches.test.ts +0 -676
- package/tests/handlers/tool-annotations.test.ts +0 -90
- package/tests/handlers/tool-handler-coverage.test.ts +0 -514
- package/tests/handlers/tool-handlers.test.ts +0 -510
- package/tests/handlers/tool-output-schemas.test.ts +0 -116
- package/tests/handlers/vector-tool-handlers.test.ts +0 -238
- package/tests/security/sql-injection.test.ts +0 -284
- package/tests/server/mcp-server.bench.ts +0 -55
- package/tests/server/mcp-server.test.ts +0 -1326
- package/tests/server/scheduler.test.ts +0 -400
- package/tests/transports/http-legacy-sse.test.ts +0 -275
- package/tests/transports/http-security.test.ts +0 -322
- package/tests/transports/http-stateful.test.ts +0 -487
- package/tests/transports/http-transport-server.test.ts +0 -301
- package/tests/transports/http-transport.test.ts +0 -771
- package/tests/utils/github-helpers.test.ts +0 -58
- package/tests/utils/logger.test.ts +0 -180
- package/tests/utils/mcp-logger.test.ts +0 -211
- package/tests/utils/progress-utils.test.ts +0 -156
- package/tests/utils/query-helpers.test.ts +0 -80
- package/tests/utils/security-utils.test.ts +0 -82
- package/tests/vector/vector-search-branches.test.ts +0 -111
- package/tests/vector/vector-search-manager.test.ts +0 -375
- package/tests/vector/vector-search.bench.ts +0 -48
- package/tsconfig.json +0 -42
- package/tsup.config.ts +0 -19
- package/vitest.config.ts +0 -25
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Search Tool Handler Coverage Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for search tool uncovered code paths:
|
|
5
|
-
* - search_entries with teamDb (cross-database merge)
|
|
6
|
-
* - search_by_date_range with teamDb
|
|
7
|
-
* - search_entries with GitHub filters
|
|
8
|
-
* - search_entries with no query and no filters (recent entries path)
|
|
9
|
-
* - search_by_date_range with entry_type filter
|
|
10
|
-
* - mergeAndDedup helper (dedup, sort, limit)
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { describe, it, expect, beforeAll, afterAll } from 'vitest'
|
|
14
|
-
import { callTool } from '../../src/handlers/tools/index.js'
|
|
15
|
-
import { DatabaseAdapter } from '../../src/database/sqlite-adapter/index.js'
|
|
16
|
-
|
|
17
|
-
describe('Search Tool Handlers - Coverage', () => {
|
|
18
|
-
let db: DatabaseAdapter
|
|
19
|
-
let teamDb: DatabaseAdapter
|
|
20
|
-
const testDbPath = './test-search-cov.db'
|
|
21
|
-
const teamDbPath = './test-search-team-cov.db'
|
|
22
|
-
|
|
23
|
-
beforeAll(async () => {
|
|
24
|
-
db = new DatabaseAdapter(testDbPath)
|
|
25
|
-
await db.initialize()
|
|
26
|
-
teamDb = new DatabaseAdapter(teamDbPath)
|
|
27
|
-
await teamDb.initialize()
|
|
28
|
-
|
|
29
|
-
// Seed personal entries
|
|
30
|
-
db.createEntry({
|
|
31
|
-
content: 'Personal alpha entry',
|
|
32
|
-
entryType: 'personal_reflection',
|
|
33
|
-
tags: ['alpha'],
|
|
34
|
-
projectNumber: 42,
|
|
35
|
-
issueNumber: 7,
|
|
36
|
-
prNumber: 10,
|
|
37
|
-
})
|
|
38
|
-
db.createEntry({
|
|
39
|
-
content: 'Personal beta entry',
|
|
40
|
-
entryType: 'project_decision',
|
|
41
|
-
tags: ['beta'],
|
|
42
|
-
isPersonal: true,
|
|
43
|
-
})
|
|
44
|
-
// BUG-S1 seed: entry with pr_status for filter regression test
|
|
45
|
-
db.createEntry({
|
|
46
|
-
content: 'Merged PR entry for filter test',
|
|
47
|
-
entryType: 'code_review',
|
|
48
|
-
prNumber: 10,
|
|
49
|
-
prStatus: 'merged',
|
|
50
|
-
})
|
|
51
|
-
// BUG-S2 seed: entry with workflowRunId for filter regression test
|
|
52
|
-
db.createEntry({
|
|
53
|
-
content: 'CI run entry for filter test',
|
|
54
|
-
entryType: 'technical_note',
|
|
55
|
-
workflowRunId: 9999,
|
|
56
|
-
workflowName: 'ci',
|
|
57
|
-
workflowStatus: 'success',
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
// Seed team entries
|
|
61
|
-
teamDb.createEntry({
|
|
62
|
-
content: 'Team gamma entry',
|
|
63
|
-
entryType: 'personal_reflection',
|
|
64
|
-
tags: ['gamma'],
|
|
65
|
-
projectNumber: 42,
|
|
66
|
-
})
|
|
67
|
-
teamDb.createEntry({
|
|
68
|
-
content: 'Team delta entry',
|
|
69
|
-
entryType: 'project_decision',
|
|
70
|
-
tags: ['delta'],
|
|
71
|
-
})
|
|
72
|
-
// Duplicate content to test dedup
|
|
73
|
-
teamDb.createEntry({
|
|
74
|
-
content: 'Personal alpha entry',
|
|
75
|
-
entryType: 'personal_reflection',
|
|
76
|
-
tags: ['dup'],
|
|
77
|
-
})
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
afterAll(() => {
|
|
81
|
-
db.close()
|
|
82
|
-
teamDb.close()
|
|
83
|
-
try {
|
|
84
|
-
const fs = require('node:fs')
|
|
85
|
-
for (const p of [testDbPath, teamDbPath]) {
|
|
86
|
-
if (fs.existsSync(p)) fs.unlinkSync(p)
|
|
87
|
-
}
|
|
88
|
-
} catch {
|
|
89
|
-
// Ignore cleanup errors
|
|
90
|
-
}
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
// ========================================================================
|
|
94
|
-
// search_entries — cross-database merge
|
|
95
|
-
// ========================================================================
|
|
96
|
-
|
|
97
|
-
describe('search_entries with teamDb', () => {
|
|
98
|
-
it('should merge personal and team results', async () => {
|
|
99
|
-
const result = (await callTool(
|
|
100
|
-
'search_entries',
|
|
101
|
-
{ query: 'entry', limit: 10 },
|
|
102
|
-
db,
|
|
103
|
-
undefined,
|
|
104
|
-
undefined,
|
|
105
|
-
undefined,
|
|
106
|
-
undefined,
|
|
107
|
-
teamDb
|
|
108
|
-
)) as { entries: unknown[]; count: number }
|
|
109
|
-
|
|
110
|
-
// Should have entries from both DBs (deduped)
|
|
111
|
-
expect(result.count).toBeGreaterThan(0)
|
|
112
|
-
expect(result.entries.length).toBe(result.count)
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
it('should deduplicate entries with same content', async () => {
|
|
116
|
-
const result = (await callTool(
|
|
117
|
-
'search_entries',
|
|
118
|
-
{ query: 'alpha', limit: 50 },
|
|
119
|
-
db,
|
|
120
|
-
undefined,
|
|
121
|
-
undefined,
|
|
122
|
-
undefined,
|
|
123
|
-
undefined,
|
|
124
|
-
teamDb
|
|
125
|
-
)) as { entries: { content: string }[]; count: number }
|
|
126
|
-
|
|
127
|
-
// "Personal alpha entry" exists in both DBs — should be deduped
|
|
128
|
-
const alphaEntries = result.entries.filter((e) =>
|
|
129
|
-
e.content.includes('Personal alpha entry')
|
|
130
|
-
)
|
|
131
|
-
expect(alphaEntries.length).toBe(1)
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
it('should merge recent entries (no query, no filters)', async () => {
|
|
135
|
-
const result = (await callTool(
|
|
136
|
-
'search_entries',
|
|
137
|
-
{ limit: 10 },
|
|
138
|
-
db,
|
|
139
|
-
undefined,
|
|
140
|
-
undefined,
|
|
141
|
-
undefined,
|
|
142
|
-
undefined,
|
|
143
|
-
teamDb
|
|
144
|
-
)) as { entries: unknown[]; count: number }
|
|
145
|
-
|
|
146
|
-
expect(result.count).toBeGreaterThan(0)
|
|
147
|
-
})
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
// ========================================================================
|
|
151
|
-
// search_entries — GitHub filters
|
|
152
|
-
// ========================================================================
|
|
153
|
-
|
|
154
|
-
describe('search_entries with filters', () => {
|
|
155
|
-
it('should filter by project_number', async () => {
|
|
156
|
-
const result = (await callTool(
|
|
157
|
-
'search_entries',
|
|
158
|
-
{ project_number: 42, limit: 10 },
|
|
159
|
-
db
|
|
160
|
-
)) as { entries: unknown[]; count: number }
|
|
161
|
-
|
|
162
|
-
expect(result.count).toBeGreaterThan(0)
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
it('should filter by issue_number', async () => {
|
|
166
|
-
const result = (await callTool(
|
|
167
|
-
'search_entries',
|
|
168
|
-
{ issue_number: 7, limit: 10 },
|
|
169
|
-
db
|
|
170
|
-
)) as { entries: unknown[]; count: number }
|
|
171
|
-
|
|
172
|
-
expect(result.count).toBeGreaterThan(0)
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
it('should filter by pr_number', async () => {
|
|
176
|
-
const result = (await callTool('search_entries', { pr_number: 10, limit: 10 }, db)) as {
|
|
177
|
-
entries: unknown[]
|
|
178
|
-
count: number
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
expect(result.count).toBeGreaterThan(0)
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
it('should filter by is_personal', async () => {
|
|
185
|
-
const result = (await callTool(
|
|
186
|
-
'search_entries',
|
|
187
|
-
{ is_personal: true, limit: 10 },
|
|
188
|
-
db
|
|
189
|
-
)) as { entries: unknown[]; count: number }
|
|
190
|
-
|
|
191
|
-
expect(result.count).toBeGreaterThan(0)
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
it('should handle combined filters with teamDb', async () => {
|
|
195
|
-
const result = (await callTool(
|
|
196
|
-
'search_entries',
|
|
197
|
-
{ project_number: 42, limit: 10 },
|
|
198
|
-
db,
|
|
199
|
-
undefined,
|
|
200
|
-
undefined,
|
|
201
|
-
undefined,
|
|
202
|
-
undefined,
|
|
203
|
-
teamDb
|
|
204
|
-
)) as { entries: unknown[]; count: number }
|
|
205
|
-
|
|
206
|
-
expect(result.count).toBeGreaterThan(0)
|
|
207
|
-
})
|
|
208
|
-
|
|
209
|
-
it('[BUG-S1] should filter by pr_status alone (regression)', async () => {
|
|
210
|
-
const result = (await callTool(
|
|
211
|
-
'search_entries',
|
|
212
|
-
{ pr_status: 'merged', limit: 50 },
|
|
213
|
-
db
|
|
214
|
-
)) as { entries: { prStatus: string }[]; count: number }
|
|
215
|
-
|
|
216
|
-
expect(result.count).toBeGreaterThan(0)
|
|
217
|
-
// Every returned entry must have pr_status = 'merged'
|
|
218
|
-
for (const entry of result.entries) {
|
|
219
|
-
expect(entry.prStatus).toBe('merged')
|
|
220
|
-
}
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
it('[BUG-S2] should filter by workflow_run_id alone (regression)', async () => {
|
|
224
|
-
const result = (await callTool(
|
|
225
|
-
'search_entries',
|
|
226
|
-
{ workflow_run_id: 9999, limit: 50 },
|
|
227
|
-
db
|
|
228
|
-
)) as { entries: { workflowRunId: number }[]; count: number }
|
|
229
|
-
|
|
230
|
-
expect(result.count).toBeGreaterThan(0)
|
|
231
|
-
// Every returned entry must have workflowRunId = 9999
|
|
232
|
-
for (const entry of result.entries) {
|
|
233
|
-
expect(entry.workflowRunId).toBe(9999)
|
|
234
|
-
}
|
|
235
|
-
})
|
|
236
|
-
})
|
|
237
|
-
|
|
238
|
-
// ========================================================================
|
|
239
|
-
// search_by_date_range — cross-database merge
|
|
240
|
-
// ========================================================================
|
|
241
|
-
|
|
242
|
-
describe('search_by_date_range with teamDb', () => {
|
|
243
|
-
it('should merge personal and team results by date', async () => {
|
|
244
|
-
const today = new Date().toISOString().split('T')[0]!
|
|
245
|
-
const result = (await callTool(
|
|
246
|
-
'search_by_date_range',
|
|
247
|
-
{ start_date: today, end_date: today },
|
|
248
|
-
db,
|
|
249
|
-
undefined,
|
|
250
|
-
undefined,
|
|
251
|
-
undefined,
|
|
252
|
-
undefined,
|
|
253
|
-
teamDb
|
|
254
|
-
)) as { entries: unknown[]; count: number }
|
|
255
|
-
|
|
256
|
-
expect(result.count).toBeGreaterThan(0)
|
|
257
|
-
})
|
|
258
|
-
|
|
259
|
-
it('should apply entry_type filter', async () => {
|
|
260
|
-
const today = new Date().toISOString().split('T')[0]!
|
|
261
|
-
const result = (await callTool(
|
|
262
|
-
'search_by_date_range',
|
|
263
|
-
{
|
|
264
|
-
start_date: today,
|
|
265
|
-
end_date: today,
|
|
266
|
-
entry_type: 'project_decision',
|
|
267
|
-
},
|
|
268
|
-
db
|
|
269
|
-
)) as { entries: unknown[]; count: number }
|
|
270
|
-
|
|
271
|
-
expect(result.count).toBeGreaterThan(0)
|
|
272
|
-
})
|
|
273
|
-
|
|
274
|
-
it('should apply tags filter', async () => {
|
|
275
|
-
const today = new Date().toISOString().split('T')[0]!
|
|
276
|
-
const result = (await callTool(
|
|
277
|
-
'search_by_date_range',
|
|
278
|
-
{
|
|
279
|
-
start_date: today,
|
|
280
|
-
end_date: today,
|
|
281
|
-
tags: ['alpha'],
|
|
282
|
-
},
|
|
283
|
-
db
|
|
284
|
-
)) as { entries: unknown[]; count: number }
|
|
285
|
-
|
|
286
|
-
expect(result.count).toBeGreaterThan(0)
|
|
287
|
-
})
|
|
288
|
-
|
|
289
|
-
it('should return Zod error for invalid date format', async () => {
|
|
290
|
-
const result = (await callTool(
|
|
291
|
-
'search_by_date_range',
|
|
292
|
-
{ start_date: 'not-a-date', end_date: 'invalid' },
|
|
293
|
-
db
|
|
294
|
-
)) as { error: string }
|
|
295
|
-
|
|
296
|
-
expect(result.error).toBeDefined()
|
|
297
|
-
})
|
|
298
|
-
})
|
|
299
|
-
|
|
300
|
-
// ========================================================================
|
|
301
|
-
// search_entries — Zod error handling
|
|
302
|
-
// ========================================================================
|
|
303
|
-
|
|
304
|
-
describe('search_entries error handling', () => {
|
|
305
|
-
it('should return error for invalid pr_status enum', async () => {
|
|
306
|
-
const result = (await callTool(
|
|
307
|
-
'search_entries',
|
|
308
|
-
{ pr_status: 'invalid_status', limit: 5 },
|
|
309
|
-
db
|
|
310
|
-
)) as { error: string }
|
|
311
|
-
|
|
312
|
-
expect(result.error).toBeDefined()
|
|
313
|
-
})
|
|
314
|
-
})
|
|
315
|
-
|
|
316
|
-
// ========================================================================
|
|
317
|
-
// search_entries — FTS5 phrase query (porter-stemmer sanitization)
|
|
318
|
-
// ========================================================================
|
|
319
|
-
|
|
320
|
-
describe('search_entries FTS5 phrase query', () => {
|
|
321
|
-
it('should match entries when using a quoted phrase query', async () => {
|
|
322
|
-
// Seed an entry with the phrase "error handling"
|
|
323
|
-
db.createEntry({
|
|
324
|
-
content: 'Improved error handling without breaking the API',
|
|
325
|
-
entryType: 'bug_fix',
|
|
326
|
-
tags: ['fts5-phrase-test'],
|
|
327
|
-
})
|
|
328
|
-
|
|
329
|
-
// Unquoted — should match
|
|
330
|
-
const unquoted = (await callTool(
|
|
331
|
-
'search_entries',
|
|
332
|
-
{ query: 'error handling', limit: 10 },
|
|
333
|
-
db
|
|
334
|
-
)) as { entries: { content: string }[]; count: number }
|
|
335
|
-
expect(unquoted.count).toBeGreaterThan(0)
|
|
336
|
-
|
|
337
|
-
// Quoted phrase — should also match after sanitizeFtsQuery rewrites it
|
|
338
|
-
const quoted = (await callTool(
|
|
339
|
-
'search_entries',
|
|
340
|
-
{ query: '"error handling"', limit: 10 },
|
|
341
|
-
db
|
|
342
|
-
)) as { entries: { content: string }[]; count: number }
|
|
343
|
-
expect(quoted.count).toBeGreaterThan(0)
|
|
344
|
-
|
|
345
|
-
// Both should find the same entry
|
|
346
|
-
const unquotedContents = unquoted.entries.map((e) => e.content)
|
|
347
|
-
const quotedContents = quoted.entries.map((e) => e.content)
|
|
348
|
-
const phraseEntry = 'Improved error handling without breaking the API'
|
|
349
|
-
expect(unquotedContents).toContain(phraseEntry)
|
|
350
|
-
expect(quotedContents).toContain(phraseEntry)
|
|
351
|
-
})
|
|
352
|
-
|
|
353
|
-
it('should pass through non-phrase queries unchanged', async () => {
|
|
354
|
-
const result = (await callTool(
|
|
355
|
-
'search_entries',
|
|
356
|
-
{ query: 'deploy OR release', limit: 10 },
|
|
357
|
-
db
|
|
358
|
-
)) as { entries: unknown[]; count: number }
|
|
359
|
-
// Should not throw and may return results
|
|
360
|
-
expect(result).toBeDefined()
|
|
361
|
-
expect(typeof result.count).toBe('number')
|
|
362
|
-
})
|
|
363
|
-
|
|
364
|
-
it('should handle single-word quoted phrase', async () => {
|
|
365
|
-
db.createEntry({
|
|
366
|
-
content: 'Architecture decision for the backend',
|
|
367
|
-
entryType: 'project_decision',
|
|
368
|
-
tags: ['fts5-single-word-test'],
|
|
369
|
-
})
|
|
370
|
-
|
|
371
|
-
const result = (await callTool(
|
|
372
|
-
'search_entries',
|
|
373
|
-
{ query: '"architecture"', limit: 10 },
|
|
374
|
-
db
|
|
375
|
-
)) as { entries: { content: string }[]; count: number }
|
|
376
|
-
expect(result.count).toBeGreaterThan(0)
|
|
377
|
-
})
|
|
378
|
-
})
|
|
379
|
-
})
|