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,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Payload Contract Tests: Team Tools (Error Path)
|
|
3
|
-
*
|
|
4
|
-
* Validates that all 20 team tools return well-formed structured errors
|
|
5
|
-
* when TEAM_DB_PATH is not configured. Every response must include
|
|
6
|
-
* { success: false, code: 'CONFIGURATION_ERROR' } — never raw MCP exceptions.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { test, expect } from '@playwright/test'
|
|
10
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
11
|
-
import { createClient, callToolAndParse } from './helpers.js'
|
|
12
|
-
|
|
13
|
-
test.describe.configure({ mode: 'serial' })
|
|
14
|
-
|
|
15
|
-
test.describe('Payload Contracts: Team Tools (no TEAM_DB_PATH)', () => {
|
|
16
|
-
let client: Client
|
|
17
|
-
|
|
18
|
-
test.beforeAll(async () => {
|
|
19
|
-
client = await createClient()
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
test.afterAll(async () => {
|
|
23
|
-
await client.close()
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
function expectConfigError(payload: Record<string, unknown>): void {
|
|
27
|
-
expect(payload.success).toBe(false)
|
|
28
|
-
expect(payload.code).toBe('CONFIGURATION_ERROR')
|
|
29
|
-
expect(typeof payload.error).toBe('string')
|
|
30
|
-
expect(payload.category).toBe('configuration')
|
|
31
|
-
expect(typeof payload.suggestion).toBe('string')
|
|
32
|
-
expect(typeof payload.recoverable).toBe('boolean')
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// --- Core ---
|
|
36
|
-
test('team_create_entry → CONFIGURATION_ERROR', async () => {
|
|
37
|
-
const payload = await callToolAndParse(client, 'team_create_entry', {
|
|
38
|
-
content: 'test',
|
|
39
|
-
author: 'e2e',
|
|
40
|
-
})
|
|
41
|
-
expectConfigError(payload)
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
test('team_get_entry_by_id → CONFIGURATION_ERROR', async () => {
|
|
45
|
-
const payload = await callToolAndParse(client, 'team_get_entry_by_id', {
|
|
46
|
-
entry_id: 1,
|
|
47
|
-
})
|
|
48
|
-
expectConfigError(payload)
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
test('team_get_recent → CONFIGURATION_ERROR', async () => {
|
|
52
|
-
const payload = await callToolAndParse(client, 'team_get_recent', {})
|
|
53
|
-
expectConfigError(payload)
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
test('team_list_tags → CONFIGURATION_ERROR', async () => {
|
|
57
|
-
const payload = await callToolAndParse(client, 'team_list_tags', {})
|
|
58
|
-
expectConfigError(payload)
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
// --- Search ---
|
|
62
|
-
test('team_search → CONFIGURATION_ERROR', async () => {
|
|
63
|
-
const payload = await callToolAndParse(client, 'team_search', {
|
|
64
|
-
query: 'test',
|
|
65
|
-
})
|
|
66
|
-
expectConfigError(payload)
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
test('team_search_by_date_range → CONFIGURATION_ERROR', async () => {
|
|
70
|
-
const payload = await callToolAndParse(client, 'team_search_by_date_range', {
|
|
71
|
-
start_date: '2020-01-01',
|
|
72
|
-
end_date: '2030-12-31',
|
|
73
|
-
})
|
|
74
|
-
expectConfigError(payload)
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
// --- Admin ---
|
|
78
|
-
test('team_update_entry → CONFIGURATION_ERROR', async () => {
|
|
79
|
-
const payload = await callToolAndParse(client, 'team_update_entry', {
|
|
80
|
-
entry_id: 1,
|
|
81
|
-
content: 'updated',
|
|
82
|
-
})
|
|
83
|
-
expectConfigError(payload)
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
test('team_delete_entry → CONFIGURATION_ERROR', async () => {
|
|
87
|
-
const payload = await callToolAndParse(client, 'team_delete_entry', {
|
|
88
|
-
entry_id: 1,
|
|
89
|
-
})
|
|
90
|
-
expectConfigError(payload)
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
test('team_merge_tags → CONFIGURATION_ERROR', async () => {
|
|
94
|
-
const payload = await callToolAndParse(client, 'team_merge_tags', {
|
|
95
|
-
source_tag: 'old',
|
|
96
|
-
target_tag: 'new',
|
|
97
|
-
})
|
|
98
|
-
expectConfigError(payload)
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
// --- Analytics ---
|
|
102
|
-
test('team_get_statistics → CONFIGURATION_ERROR', async () => {
|
|
103
|
-
const payload = await callToolAndParse(client, 'team_get_statistics', {})
|
|
104
|
-
expectConfigError(payload)
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
test('team_get_cross_project_insights → CONFIGURATION_ERROR', async () => {
|
|
108
|
-
const payload = await callToolAndParse(client, 'team_get_cross_project_insights', {})
|
|
109
|
-
expectConfigError(payload)
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
// --- Relationships ---
|
|
113
|
-
test('team_link_entries → CONFIGURATION_ERROR', async () => {
|
|
114
|
-
const payload = await callToolAndParse(client, 'team_link_entries', {
|
|
115
|
-
from_entry_id: 1,
|
|
116
|
-
to_entry_id: 2,
|
|
117
|
-
})
|
|
118
|
-
expectConfigError(payload)
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
test('team_visualize_relationships → CONFIGURATION_ERROR', async () => {
|
|
122
|
-
const payload = await callToolAndParse(client, 'team_visualize_relationships', {
|
|
123
|
-
entry_id: 1,
|
|
124
|
-
})
|
|
125
|
-
expectConfigError(payload)
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
// --- Export ---
|
|
129
|
-
test('team_export_entries → CONFIGURATION_ERROR', async () => {
|
|
130
|
-
const payload = await callToolAndParse(client, 'team_export_entries', {
|
|
131
|
-
format: 'json',
|
|
132
|
-
})
|
|
133
|
-
expectConfigError(payload)
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
// --- Backup ---
|
|
137
|
-
test('team_backup → CONFIGURATION_ERROR', async () => {
|
|
138
|
-
const payload = await callToolAndParse(client, 'team_backup', {})
|
|
139
|
-
expectConfigError(payload)
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
test('team_list_backups → CONFIGURATION_ERROR', async () => {
|
|
143
|
-
const payload = await callToolAndParse(client, 'team_list_backups', {})
|
|
144
|
-
expectConfigError(payload)
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
// --- Vector ---
|
|
148
|
-
test('team_semantic_search → CONFIGURATION_ERROR', async () => {
|
|
149
|
-
const payload = await callToolAndParse(client, 'team_semantic_search', {
|
|
150
|
-
query: 'test',
|
|
151
|
-
})
|
|
152
|
-
expectConfigError(payload)
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
test('team_get_vector_index_stats → { available: false } when unconfigured', async () => {
|
|
156
|
-
// This tool uses a different response shape when teamDb is null:
|
|
157
|
-
// { available: false, error: string } instead of TEAM_DB_ERROR_RESPONSE
|
|
158
|
-
const payload = await callToolAndParse(client, 'team_get_vector_index_stats', {})
|
|
159
|
-
expect(payload.available).toBe(false)
|
|
160
|
-
expect(typeof payload.error).toBe('string')
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
test('team_rebuild_vector_index → CONFIGURATION_ERROR', async () => {
|
|
164
|
-
const payload = await callToolAndParse(client, 'team_rebuild_vector_index', {})
|
|
165
|
-
expectConfigError(payload)
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
test('team_add_to_vector_index → CONFIGURATION_ERROR', async () => {
|
|
169
|
-
const payload = await callToolAndParse(client, 'team_add_to_vector_index', {
|
|
170
|
-
entry_id: 1,
|
|
171
|
-
})
|
|
172
|
-
expectConfigError(payload)
|
|
173
|
-
})
|
|
174
|
-
})
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* E2E Tests: Expanded Prompt Coverage
|
|
3
|
-
*
|
|
4
|
-
* Tests 13 prompts not individually exercised by prompts.spec.ts:
|
|
5
|
-
* session-summary, weekly-digest, prepare-retro, analyze-period,
|
|
6
|
-
* goal-tracker, get-context-bundle, get-recent-entries, confirm-briefing,
|
|
7
|
-
* and 6 GitHub prompts.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { test, expect } from '@playwright/test'
|
|
11
|
-
import { createClient } from './helpers.js'
|
|
12
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
13
|
-
|
|
14
|
-
test.describe.configure({ mode: 'serial' })
|
|
15
|
-
|
|
16
|
-
test.describe('E2E Prompts: Expanded Coverage', () => {
|
|
17
|
-
let client: Client
|
|
18
|
-
|
|
19
|
-
test.beforeAll(async () => {
|
|
20
|
-
client = await createClient()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
test.afterAll(async () => {
|
|
24
|
-
await client.close()
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
function expectValidPrompt(response: {
|
|
28
|
-
messages: Array<{ role: string; content: unknown }>
|
|
29
|
-
}): void {
|
|
30
|
-
expect(response.messages).toBeDefined()
|
|
31
|
-
expect(Array.isArray(response.messages)).toBe(true)
|
|
32
|
-
expect(response.messages.length).toBeGreaterThan(0)
|
|
33
|
-
|
|
34
|
-
const first = response.messages[0]!
|
|
35
|
-
expect(first).toHaveProperty('role')
|
|
36
|
-
expect(first).toHaveProperty('content')
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// --- Workflow prompts ---
|
|
40
|
-
test('session-summary prompt', async () => {
|
|
41
|
-
const response = await client.getPrompt({ name: 'session-summary', arguments: {} })
|
|
42
|
-
expectValidPrompt(response)
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
test('weekly-digest prompt', async () => {
|
|
46
|
-
const response = await client.getPrompt({ name: 'weekly-digest', arguments: {} })
|
|
47
|
-
expectValidPrompt(response)
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
test('prepare-retro prompt', async () => {
|
|
51
|
-
const response = await client.getPrompt({
|
|
52
|
-
name: 'prepare-retro',
|
|
53
|
-
arguments: {},
|
|
54
|
-
})
|
|
55
|
-
expectValidPrompt(response)
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
test('analyze-period prompt', async () => {
|
|
59
|
-
const response = await client.getPrompt({
|
|
60
|
-
name: 'analyze-period',
|
|
61
|
-
arguments: {
|
|
62
|
-
start_date: new Date(Date.now() - 7 * 86_400_000).toISOString().split('T')[0]!,
|
|
63
|
-
end_date: new Date().toISOString().split('T')[0]!,
|
|
64
|
-
},
|
|
65
|
-
})
|
|
66
|
-
expectValidPrompt(response)
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
test('goal-tracker prompt', async () => {
|
|
70
|
-
const response = await client.getPrompt({ name: 'goal-tracker', arguments: {} })
|
|
71
|
-
expectValidPrompt(response)
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
test('get-context-bundle prompt', async () => {
|
|
75
|
-
const response = await client.getPrompt({
|
|
76
|
-
name: 'get-context-bundle',
|
|
77
|
-
arguments: { query: 'architecture' },
|
|
78
|
-
})
|
|
79
|
-
expectValidPrompt(response)
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
test('get-recent-entries prompt', async () => {
|
|
83
|
-
const response = await client.getPrompt({ name: 'get-recent-entries', arguments: {} })
|
|
84
|
-
expectValidPrompt(response)
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
test('confirm-briefing prompt', async () => {
|
|
88
|
-
const response = await client.getPrompt({ name: 'confirm-briefing', arguments: {} })
|
|
89
|
-
expectValidPrompt(response)
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
// --- GitHub prompts ---
|
|
93
|
-
test('project-status-summary prompt', async () => {
|
|
94
|
-
const response = await client.getPrompt({
|
|
95
|
-
name: 'project-status-summary',
|
|
96
|
-
arguments: { project_number: '1' },
|
|
97
|
-
})
|
|
98
|
-
expectValidPrompt(response)
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
test('pr-summary prompt', async () => {
|
|
102
|
-
const response = await client.getPrompt({
|
|
103
|
-
name: 'pr-summary',
|
|
104
|
-
arguments: { pr_number: '1' },
|
|
105
|
-
})
|
|
106
|
-
expectValidPrompt(response)
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
test('code-review-prep prompt', async () => {
|
|
110
|
-
const response = await client.getPrompt({
|
|
111
|
-
name: 'code-review-prep',
|
|
112
|
-
arguments: { pr_number: '1' },
|
|
113
|
-
})
|
|
114
|
-
expectValidPrompt(response)
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
test('pr-retrospective prompt', async () => {
|
|
118
|
-
const response = await client.getPrompt({
|
|
119
|
-
name: 'pr-retrospective',
|
|
120
|
-
arguments: { pr_number: '1' },
|
|
121
|
-
})
|
|
122
|
-
expectValidPrompt(response)
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
test('actions-failure-digest prompt', async () => {
|
|
126
|
-
const response = await client.getPrompt({ name: 'actions-failure-digest', arguments: {} })
|
|
127
|
-
expectValidPrompt(response)
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
test('project-milestone-tracker prompt', async () => {
|
|
131
|
-
const response = await client.getPrompt({
|
|
132
|
-
name: 'project-milestone-tracker',
|
|
133
|
-
arguments: { project_number: '1' },
|
|
134
|
-
})
|
|
135
|
-
expectValidPrompt(response)
|
|
136
|
-
})
|
|
137
|
-
})
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* E2E Tests: MCP Prompts via SDK Client
|
|
3
|
-
*
|
|
4
|
-
* Validates prompt listing and retrieval via the Streamable HTTP transport.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { test, expect } from '@playwright/test'
|
|
8
|
-
import { createClient } from './helpers.js'
|
|
9
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
10
|
-
|
|
11
|
-
test.describe.configure({ mode: 'serial' })
|
|
12
|
-
|
|
13
|
-
test.describe('E2E Prompts (via MCP SDK Client)', () => {
|
|
14
|
-
let client: Client
|
|
15
|
-
|
|
16
|
-
test.beforeAll(async () => {
|
|
17
|
-
client = await createClient()
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
test.afterAll(async () => {
|
|
21
|
-
await client.close()
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
test('should list all available prompts', async () => {
|
|
25
|
-
const response = await client.listPrompts()
|
|
26
|
-
|
|
27
|
-
expect(response.prompts).toBeDefined()
|
|
28
|
-
expect(Array.isArray(response.prompts)).toBe(true)
|
|
29
|
-
expect(response.prompts.length).toBeGreaterThanOrEqual(16)
|
|
30
|
-
|
|
31
|
-
const promptNames = response.prompts.map((p) => p.name)
|
|
32
|
-
expect(promptNames).toContain('prepare-standup')
|
|
33
|
-
expect(promptNames).toContain('session-summary')
|
|
34
|
-
expect(promptNames).toContain('weekly-digest')
|
|
35
|
-
expect(promptNames).toContain('find-related')
|
|
36
|
-
expect(promptNames).toContain('confirm-briefing')
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
test('should get a specific prompt (prepare-standup)', async () => {
|
|
40
|
-
const response = await client.getPrompt({ name: 'prepare-standup' })
|
|
41
|
-
|
|
42
|
-
expect(response.messages).toBeDefined()
|
|
43
|
-
expect(Array.isArray(response.messages)).toBe(true)
|
|
44
|
-
expect(response.messages.length).toBeGreaterThan(0)
|
|
45
|
-
|
|
46
|
-
// Each message should have role and content
|
|
47
|
-
const firstMessage = response.messages[0]!
|
|
48
|
-
expect(firstMessage).toHaveProperty('role')
|
|
49
|
-
expect(firstMessage).toHaveProperty('content')
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
test('should get a parameterized prompt (find-related)', async () => {
|
|
53
|
-
const response = await client.getPrompt({
|
|
54
|
-
name: 'find-related',
|
|
55
|
-
arguments: { query: 'performance optimization' },
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
expect(response.messages).toBeDefined()
|
|
59
|
-
expect(Array.isArray(response.messages)).toBe(true)
|
|
60
|
-
expect(response.messages.length).toBeGreaterThan(0)
|
|
61
|
-
})
|
|
62
|
-
})
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* E2E Tests: HTTP Transport Protocols
|
|
3
|
-
*
|
|
4
|
-
* Tests both Streamable HTTP (MCP 2025-03-26) and Legacy SSE (MCP 2024-11-05)
|
|
5
|
-
* protocol error handling and routing.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { test, expect } from '@playwright/test'
|
|
9
|
-
|
|
10
|
-
test.describe('HTTP Transport Protocols', () => {
|
|
11
|
-
test.describe('Streamable HTTP (MCP 2025-03-26)', () => {
|
|
12
|
-
test('should reject non-init request without session ID', async ({ request }) => {
|
|
13
|
-
const response = await request.post('/mcp', {
|
|
14
|
-
headers: {
|
|
15
|
-
Accept: 'application/json, text/event-stream',
|
|
16
|
-
},
|
|
17
|
-
data: {
|
|
18
|
-
jsonrpc: '2.0',
|
|
19
|
-
id: 1,
|
|
20
|
-
method: 'ping',
|
|
21
|
-
},
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
expect(response.status()).toBe(400)
|
|
25
|
-
const body = await response.json()
|
|
26
|
-
expect(body.error).toHaveProperty(
|
|
27
|
-
'message',
|
|
28
|
-
'Bad Request: No valid session ID provided'
|
|
29
|
-
)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
test('should reject malformed JSON body on /mcp', async ({ request }) => {
|
|
33
|
-
const response = await request.post('/mcp', {
|
|
34
|
-
headers: {
|
|
35
|
-
Accept: 'application/json, text/event-stream',
|
|
36
|
-
'Content-Type': 'application/json',
|
|
37
|
-
},
|
|
38
|
-
data: Buffer.from('{"broken": json}'),
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
// Express JSON parser rejects invalid JSON before reaching our handler
|
|
42
|
-
expect(response.status()).toBe(400)
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
test('should accept initialization and return session ID', async ({ request }) => {
|
|
46
|
-
const response = await request.post('/mcp', {
|
|
47
|
-
headers: {
|
|
48
|
-
Accept: 'application/json, text/event-stream',
|
|
49
|
-
},
|
|
50
|
-
data: {
|
|
51
|
-
jsonrpc: '2.0',
|
|
52
|
-
id: 1,
|
|
53
|
-
method: 'initialize',
|
|
54
|
-
params: {
|
|
55
|
-
protocolVersion: '2025-03-26',
|
|
56
|
-
capabilities: {},
|
|
57
|
-
clientInfo: {
|
|
58
|
-
name: 'playwright-protocol-test',
|
|
59
|
-
version: '1.0.0',
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
expect(response.status()).toBe(200)
|
|
66
|
-
const sessionId = response.headers()['mcp-session-id']
|
|
67
|
-
expect(sessionId).toBeDefined()
|
|
68
|
-
})
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
test.describe('Legacy SSE (MCP 2024-11-05)', () => {
|
|
72
|
-
test('should reject /messages POST without sessionId parameter', async ({ request }) => {
|
|
73
|
-
const response = await request.post('/messages', {
|
|
74
|
-
data: {
|
|
75
|
-
jsonrpc: '2.0',
|
|
76
|
-
id: 1,
|
|
77
|
-
method: 'initialize',
|
|
78
|
-
params: {
|
|
79
|
-
protocolVersion: '2024-11-05',
|
|
80
|
-
capabilities: {},
|
|
81
|
-
clientInfo: { name: 'test', version: '1.0' },
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
expect(response.status()).toBe(400)
|
|
87
|
-
const body = await response.json()
|
|
88
|
-
expect(body.error).toHaveProperty('message', 'Missing sessionId parameter')
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
test('should reject /messages POST with unknown sessionId', async ({ request }) => {
|
|
92
|
-
const response = await request.post('/messages?sessionId=invalid-session-uuid', {
|
|
93
|
-
data: {
|
|
94
|
-
jsonrpc: '2.0',
|
|
95
|
-
id: 1,
|
|
96
|
-
method: 'ping',
|
|
97
|
-
},
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
expect(response.status()).toBe(404)
|
|
101
|
-
const body = await response.json()
|
|
102
|
-
expect(body.error).toHaveProperty('message', 'Session not found')
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
test('should complete full SDK client round-trip via Legacy SSE', async () => {
|
|
106
|
-
// Regression test: server.connect() auto-calls start() on SSEServerTransport,
|
|
107
|
-
// so a redundant start() call would throw "already started!" and break SSE entirely.
|
|
108
|
-
const { Client } = await import('@modelcontextprotocol/sdk/client/index.js')
|
|
109
|
-
const { SSEClientTransport } = await import('@modelcontextprotocol/sdk/client/sse.js')
|
|
110
|
-
|
|
111
|
-
const transport = new SSEClientTransport(new URL('http://localhost:3100/sse'))
|
|
112
|
-
const client = new Client(
|
|
113
|
-
{ name: 'playwright-sse-regression', version: '1.0.0' },
|
|
114
|
-
{ capabilities: {} }
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
try {
|
|
118
|
-
await client.connect(transport)
|
|
119
|
-
|
|
120
|
-
const response = await client.callTool({
|
|
121
|
-
name: 'test_simple',
|
|
122
|
-
arguments: { message: 'SSE round-trip' },
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
expect(response.isError).toBeUndefined()
|
|
126
|
-
expect(Array.isArray(response.content)).toBe(true)
|
|
127
|
-
const text = (response.content[0] as { type: string; text: string }).text
|
|
128
|
-
expect(text).toContain('SSE round-trip')
|
|
129
|
-
} finally {
|
|
130
|
-
await client.close()
|
|
131
|
-
}
|
|
132
|
-
})
|
|
133
|
-
})
|
|
134
|
-
})
|