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,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Payload Contract Tests: GitHub Tools (E2E environment)
|
|
3
|
-
*
|
|
4
|
-
* Validates that all 16 GitHub tools return well-formed responses
|
|
5
|
-
* when called in the E2E test environment. Tools will either:
|
|
6
|
-
* - Return structured JSON errors (when no token or resolution fails)
|
|
7
|
-
* - Return success responses with data (if git remote auto-detected + token)
|
|
8
|
-
* - Return raw MCP error strings (if the tool throws before handler's catch)
|
|
9
|
-
*
|
|
10
|
-
* In all cases the response must be a non-empty, recognizable shape.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { test, expect } from '@playwright/test'
|
|
14
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
15
|
-
import { createClient } from './helpers.js'
|
|
16
|
-
|
|
17
|
-
test.describe.configure({ mode: 'serial' })
|
|
18
|
-
|
|
19
|
-
test.describe('Payload Contracts: GitHub Tools (E2E environment)', () => {
|
|
20
|
-
let client: Client
|
|
21
|
-
|
|
22
|
-
test.beforeAll(async () => {
|
|
23
|
-
client = await createClient()
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
test.afterAll(async () => {
|
|
27
|
-
await client.close()
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
function expectValidGitHubResponse(payload: Record<string, unknown>): void {
|
|
31
|
-
expect(typeof payload).toBe('object')
|
|
32
|
-
expect(payload).not.toBeNull()
|
|
33
|
-
expect(Object.keys(payload).length).toBeGreaterThan(0)
|
|
34
|
-
// If it's an error, it must have at minimum an error message string
|
|
35
|
-
if (payload.success === false) {
|
|
36
|
-
expect(typeof payload.error).toBe('string')
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Some GitHub tools throw before the handler's catch block when the GitHub
|
|
42
|
-
* API is unavailable, producing a raw non-JSON MCP error string as content.
|
|
43
|
-
* Return a synthetic error object so the test doesn't crash on JSON.parse.
|
|
44
|
-
*/
|
|
45
|
-
function parseResponse(text: string): Record<string, unknown> {
|
|
46
|
-
try {
|
|
47
|
-
return JSON.parse(text) as Record<string, unknown>
|
|
48
|
-
} catch {
|
|
49
|
-
return { success: false, error: text }
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function getText(response: Awaited<ReturnType<typeof client.callTool>>): string {
|
|
54
|
-
const content = response.content as Array<{ type: string; text: string }>
|
|
55
|
-
return content[0]!.text
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// --- Read tools ---
|
|
59
|
-
test('get_github_issues → valid response', async () => {
|
|
60
|
-
const response = await client.callTool({ name: 'get_github_issues', arguments: {} })
|
|
61
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
test('get_github_prs → valid response', async () => {
|
|
65
|
-
const response = await client.callTool({ name: 'get_github_prs', arguments: {} })
|
|
66
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
test('get_github_issue → valid response', async () => {
|
|
70
|
-
const response = await client.callTool({
|
|
71
|
-
name: 'get_github_issue',
|
|
72
|
-
arguments: { issue_number: 1 },
|
|
73
|
-
})
|
|
74
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
test('get_github_pr → valid response', async () => {
|
|
78
|
-
const response = await client.callTool({
|
|
79
|
-
name: 'get_github_pr',
|
|
80
|
-
arguments: { pr_number: 1 },
|
|
81
|
-
})
|
|
82
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
test('get_github_context → valid response', async () => {
|
|
86
|
-
const response = await client.callTool({ name: 'get_github_context', arguments: {} })
|
|
87
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
// --- Kanban tools ---
|
|
91
|
-
test('get_kanban_board → valid response', async () => {
|
|
92
|
-
const response = await client.callTool({
|
|
93
|
-
name: 'get_kanban_board',
|
|
94
|
-
arguments: { project_number: 1 },
|
|
95
|
-
})
|
|
96
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
test('move_kanban_item → valid response', async () => {
|
|
100
|
-
const response = await client.callTool({
|
|
101
|
-
name: 'move_kanban_item',
|
|
102
|
-
arguments: { project_number: 1, item_id: 'PVTI_test', target_status: 'Done' },
|
|
103
|
-
})
|
|
104
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
// --- Issue lifecycle ---
|
|
108
|
-
test('create_github_issue_with_entry → valid response', async () => {
|
|
109
|
-
const response = await client.callTool({
|
|
110
|
-
name: 'create_github_issue_with_entry',
|
|
111
|
-
arguments: { title: 'E2E test issue', body: 'test' },
|
|
112
|
-
})
|
|
113
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
test('close_github_issue_with_entry → valid response', async () => {
|
|
117
|
-
const response = await client.callTool({
|
|
118
|
-
name: 'close_github_issue_with_entry',
|
|
119
|
-
arguments: { issue_number: 99999, resolution_notes: 'test' },
|
|
120
|
-
})
|
|
121
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
// --- Milestones ---
|
|
125
|
-
test('get_github_milestones → valid response', async () => {
|
|
126
|
-
const response = await client.callTool({ name: 'get_github_milestones', arguments: {} })
|
|
127
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
test('get_github_milestone → valid response', async () => {
|
|
131
|
-
const response = await client.callTool({
|
|
132
|
-
name: 'get_github_milestone',
|
|
133
|
-
arguments: { milestone_number: 1 },
|
|
134
|
-
})
|
|
135
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
test('create_github_milestone → valid response', async () => {
|
|
139
|
-
const response = await client.callTool({
|
|
140
|
-
name: 'create_github_milestone',
|
|
141
|
-
arguments: { title: 'E2E test milestone' },
|
|
142
|
-
})
|
|
143
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
test('update_github_milestone → valid response', async () => {
|
|
147
|
-
const response = await client.callTool({
|
|
148
|
-
name: 'update_github_milestone',
|
|
149
|
-
arguments: { milestone_number: 1, title: 'Updated milestone' },
|
|
150
|
-
})
|
|
151
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
test('delete_github_milestone → valid response', async () => {
|
|
155
|
-
const response = await client.callTool({
|
|
156
|
-
name: 'delete_github_milestone',
|
|
157
|
-
arguments: { milestone_number: 1 },
|
|
158
|
-
})
|
|
159
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
// --- Insights ---
|
|
163
|
-
test('get_repo_insights → valid response', async () => {
|
|
164
|
-
const response = await client.callTool({ name: 'get_repo_insights', arguments: {} })
|
|
165
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
// --- Copilot ---
|
|
169
|
-
test('get_copilot_reviews → valid response', async () => {
|
|
170
|
-
const response = await client.callTool({
|
|
171
|
-
name: 'get_copilot_reviews',
|
|
172
|
-
arguments: { pr_number: 1 },
|
|
173
|
-
})
|
|
174
|
-
expectValidGitHubResponse(parseResponse(getText(response)))
|
|
175
|
-
})
|
|
176
|
-
})
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Payload Contract Tests: Relationships
|
|
3
|
-
*
|
|
4
|
-
* Validates response shapes for 2 relationship tools:
|
|
5
|
-
* link_entries, visualize_relationships.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { test, expect } from '@playwright/test'
|
|
9
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
10
|
-
import { createClient, callToolAndParse, expectSuccess } from './helpers.js'
|
|
11
|
-
|
|
12
|
-
test.describe.configure({ mode: 'serial' })
|
|
13
|
-
|
|
14
|
-
test.describe('Payload Contracts: Relationships', () => {
|
|
15
|
-
let client: Client
|
|
16
|
-
let entryId1: number
|
|
17
|
-
let entryId2: number
|
|
18
|
-
|
|
19
|
-
test.beforeAll(async () => {
|
|
20
|
-
client = await createClient()
|
|
21
|
-
// Create two entries for relationship tests
|
|
22
|
-
const e1 = await callToolAndParse(client, 'create_entry', {
|
|
23
|
-
content: 'Relationship source entry',
|
|
24
|
-
entry_type: 'test_entry',
|
|
25
|
-
})
|
|
26
|
-
const e2 = await callToolAndParse(client, 'create_entry', {
|
|
27
|
-
content: 'Relationship target entry',
|
|
28
|
-
entry_type: 'project_decision',
|
|
29
|
-
})
|
|
30
|
-
entryId1 = (e1.entry as Record<string, unknown>).id as number
|
|
31
|
-
entryId2 = (e2.entry as Record<string, unknown>).id as number
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
test.afterAll(async () => {
|
|
35
|
-
await client.close()
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
test('link_entries returns { success, relationship }', async () => {
|
|
39
|
-
const payload = await callToolAndParse(client, 'link_entries', {
|
|
40
|
-
from_entry_id: entryId1,
|
|
41
|
-
to_entry_id: entryId2,
|
|
42
|
-
relationship_type: 'references',
|
|
43
|
-
})
|
|
44
|
-
expectSuccess(payload)
|
|
45
|
-
expect(payload.success).toBe(true)
|
|
46
|
-
expect(payload.relationship).toBeDefined()
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
test('visualize_relationships returns Mermaid diagram', async () => {
|
|
50
|
-
const payload = await callToolAndParse(client, 'visualize_relationships', {
|
|
51
|
-
entry_id: entryId1,
|
|
52
|
-
})
|
|
53
|
-
expectSuccess(payload)
|
|
54
|
-
expect(typeof payload).toBe('object')
|
|
55
|
-
})
|
|
56
|
-
})
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Payload Contract Tests: Search
|
|
3
|
-
*
|
|
4
|
-
* Validates response shapes for 4 search tools:
|
|
5
|
-
* search_entries, search_by_date_range, semantic_search, get_vector_index_stats.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { test, expect } from '@playwright/test'
|
|
9
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
10
|
-
import { createClient, callToolAndParse, expectSuccess } from './helpers.js'
|
|
11
|
-
|
|
12
|
-
test.describe.configure({ mode: 'serial' })
|
|
13
|
-
|
|
14
|
-
test.describe('Payload Contracts: Search', () => {
|
|
15
|
-
let client: Client
|
|
16
|
-
|
|
17
|
-
test.beforeAll(async () => {
|
|
18
|
-
client = await createClient()
|
|
19
|
-
// Seed an entry for search tests
|
|
20
|
-
await callToolAndParse(client, 'create_entry', {
|
|
21
|
-
content: 'Searchable payload contract test entry about performance',
|
|
22
|
-
entry_type: 'test_entry',
|
|
23
|
-
tags: ['search-test'],
|
|
24
|
-
})
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
test.afterAll(async () => {
|
|
28
|
-
await client.close()
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
test('search_entries returns { entries, count }', async () => {
|
|
32
|
-
const payload = await callToolAndParse(client, 'search_entries', {
|
|
33
|
-
query: 'performance',
|
|
34
|
-
})
|
|
35
|
-
expectSuccess(payload)
|
|
36
|
-
expect(Array.isArray(payload.entries)).toBe(true)
|
|
37
|
-
expect(typeof payload.count).toBe('number')
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
test('search_by_date_range returns { entries, count }', async () => {
|
|
41
|
-
const payload = await callToolAndParse(client, 'search_by_date_range', {
|
|
42
|
-
start_date: '2020-01-01',
|
|
43
|
-
end_date: '2030-12-31',
|
|
44
|
-
})
|
|
45
|
-
expectSuccess(payload)
|
|
46
|
-
expect(Array.isArray(payload.entries)).toBe(true)
|
|
47
|
-
expect(typeof payload.count).toBe('number')
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
test('semantic_search returns results', async () => {
|
|
51
|
-
const payload = await callToolAndParse(client, 'semantic_search', {
|
|
52
|
-
query: 'performance optimization',
|
|
53
|
-
limit: 3,
|
|
54
|
-
})
|
|
55
|
-
// May return { entries, count } or { success: false } if index not ready
|
|
56
|
-
expect(typeof payload).toBe('object')
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
test('get_vector_index_stats returns stats', async () => {
|
|
60
|
-
const payload = await callToolAndParse(client, 'get_vector_index_stats', {})
|
|
61
|
-
expectSuccess(payload)
|
|
62
|
-
expect(payload.available).toBeDefined()
|
|
63
|
-
})
|
|
64
|
-
})
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Payload Contract Tests: Team Tools (Happy Path)
|
|
3
|
-
*
|
|
4
|
-
* Uses a dedicated server on port 3109 with TEAM_DB_PATH configured
|
|
5
|
-
* to validate full team tool CRUD lifecycle:
|
|
6
|
-
* create → get → search → update → link → visualize → export → backup → delete.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { test, expect } from '@playwright/test'
|
|
10
|
-
import type { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
11
|
-
import { Client as McpClient } from '@modelcontextprotocol/sdk/client/index.js'
|
|
12
|
-
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'
|
|
13
|
-
import { callToolAndParse, expectSuccess } from './helpers.js'
|
|
14
|
-
import { mkdirSync } from 'node:fs'
|
|
15
|
-
import { join } from 'node:path'
|
|
16
|
-
import { spawn, type ChildProcess } from 'node:child_process'
|
|
17
|
-
import { setTimeout as delay } from 'node:timers/promises'
|
|
18
|
-
|
|
19
|
-
const TEAM_PORT = 3109
|
|
20
|
-
const TEAM_BASE = `http://localhost:${TEAM_PORT}`
|
|
21
|
-
|
|
22
|
-
test.describe.configure({ mode: 'serial' })
|
|
23
|
-
|
|
24
|
-
test.describe('Payload Contracts: Team Tools (Happy Path)', () => {
|
|
25
|
-
let client: Client
|
|
26
|
-
let serverProcess: ChildProcess
|
|
27
|
-
let entryId1: number
|
|
28
|
-
let entryId2: number
|
|
29
|
-
|
|
30
|
-
test.beforeAll(async () => {
|
|
31
|
-
// Ensure test output directory exists
|
|
32
|
-
const testDir = join(process.cwd(), '.test-output', 'e2e')
|
|
33
|
-
mkdirSync(testDir, { recursive: true })
|
|
34
|
-
|
|
35
|
-
// Start server with TEAM_DB_PATH configured
|
|
36
|
-
serverProcess = spawn(
|
|
37
|
-
'node',
|
|
38
|
-
[
|
|
39
|
-
'dist/cli.js',
|
|
40
|
-
'--transport',
|
|
41
|
-
'http',
|
|
42
|
-
'--port',
|
|
43
|
-
String(TEAM_PORT),
|
|
44
|
-
'--db',
|
|
45
|
-
'./.test-output/e2e/test-e2e-team-happy.db',
|
|
46
|
-
],
|
|
47
|
-
{
|
|
48
|
-
cwd: process.cwd(),
|
|
49
|
-
stdio: 'pipe',
|
|
50
|
-
env: {
|
|
51
|
-
...process.env,
|
|
52
|
-
MCP_RATE_LIMIT_MAX: '10000',
|
|
53
|
-
TEAM_DB_PATH: './.test-output/e2e/test-e2e-team-happy-team.db',
|
|
54
|
-
},
|
|
55
|
-
}
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
// Wait for server readiness
|
|
59
|
-
for (let i = 0; i < 30; i++) {
|
|
60
|
-
try {
|
|
61
|
-
const res = await fetch(`${TEAM_BASE}/health`)
|
|
62
|
-
if (res.ok) break
|
|
63
|
-
} catch {
|
|
64
|
-
// Not ready
|
|
65
|
-
}
|
|
66
|
-
await delay(500)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const transport = new StreamableHTTPClientTransport(new URL(`${TEAM_BASE}/mcp`))
|
|
70
|
-
client = new McpClient({ name: 'team-happy-test', version: '1.0.0' }, { capabilities: {} })
|
|
71
|
-
await client.connect(transport)
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
test.afterAll(async () => {
|
|
75
|
-
await client.close()
|
|
76
|
-
serverProcess.kill('SIGTERM')
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
// --- Core ---
|
|
80
|
-
test('team_create_entry returns { success, entry }', async () => {
|
|
81
|
-
const payload = await callToolAndParse(client, 'team_create_entry', {
|
|
82
|
-
content: 'Team happy path test entry 1',
|
|
83
|
-
author: 'e2e-test',
|
|
84
|
-
entry_type: 'test_entry',
|
|
85
|
-
tags: ['team-test', 'happy-path'],
|
|
86
|
-
})
|
|
87
|
-
expectSuccess(payload)
|
|
88
|
-
expect(payload.success).toBe(true)
|
|
89
|
-
expect(payload.entry).toBeDefined()
|
|
90
|
-
entryId1 = (payload.entry as Record<string, unknown>).id as number
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
test('team_create_entry (second entry)', async () => {
|
|
94
|
-
const payload = await callToolAndParse(client, 'team_create_entry', {
|
|
95
|
-
content: 'Team happy path test entry 2',
|
|
96
|
-
author: 'e2e-test',
|
|
97
|
-
entry_type: 'project_decision',
|
|
98
|
-
tags: ['team-test', 'merge-source'],
|
|
99
|
-
})
|
|
100
|
-
expectSuccess(payload)
|
|
101
|
-
entryId2 = (payload.entry as Record<string, unknown>).id as number
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
test('team_get_entry_by_id returns entry', async () => {
|
|
105
|
-
const payload = await callToolAndParse(client, 'team_get_entry_by_id', {
|
|
106
|
-
entry_id: entryId1,
|
|
107
|
-
})
|
|
108
|
-
expectSuccess(payload)
|
|
109
|
-
expect(payload.entry).toBeDefined()
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
test('team_get_recent returns entries', async () => {
|
|
113
|
-
const payload = await callToolAndParse(client, 'team_get_recent', {
|
|
114
|
-
limit: 5,
|
|
115
|
-
})
|
|
116
|
-
expectSuccess(payload)
|
|
117
|
-
expect(Array.isArray(payload.entries)).toBe(true)
|
|
118
|
-
expect(typeof payload.count).toBe('number')
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
test('team_list_tags returns tags', async () => {
|
|
122
|
-
const payload = await callToolAndParse(client, 'team_list_tags', {})
|
|
123
|
-
expectSuccess(payload)
|
|
124
|
-
expect(Array.isArray(payload.tags)).toBe(true)
|
|
125
|
-
expect(typeof payload.count).toBe('number')
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
// --- Search ---
|
|
129
|
-
test('team_search returns matches', async () => {
|
|
130
|
-
const payload = await callToolAndParse(client, 'team_search', {
|
|
131
|
-
query: 'happy path',
|
|
132
|
-
})
|
|
133
|
-
expectSuccess(payload)
|
|
134
|
-
expect(Array.isArray(payload.entries)).toBe(true)
|
|
135
|
-
expect(typeof payload.count).toBe('number')
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
test('team_search_by_date_range returns entries', async () => {
|
|
139
|
-
const payload = await callToolAndParse(client, 'team_search_by_date_range', {
|
|
140
|
-
start_date: '2020-01-01',
|
|
141
|
-
end_date: '2030-12-31',
|
|
142
|
-
})
|
|
143
|
-
expectSuccess(payload)
|
|
144
|
-
expect(Array.isArray(payload.entries)).toBe(true)
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
// --- Admin ---
|
|
148
|
-
test('team_update_entry succeeds', async () => {
|
|
149
|
-
const payload = await callToolAndParse(client, 'team_update_entry', {
|
|
150
|
-
entry_id: entryId1,
|
|
151
|
-
content: 'Updated team entry content',
|
|
152
|
-
})
|
|
153
|
-
expectSuccess(payload)
|
|
154
|
-
expect(payload.success).toBe(true)
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
test('team_merge_tags succeeds', async () => {
|
|
158
|
-
const payload = await callToolAndParse(client, 'team_merge_tags', {
|
|
159
|
-
source_tag: 'merge-source',
|
|
160
|
-
target_tag: 'team-test',
|
|
161
|
-
})
|
|
162
|
-
expectSuccess(payload)
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
// --- Analytics ---
|
|
166
|
-
test('team_get_statistics returns stats', async () => {
|
|
167
|
-
const payload = await callToolAndParse(client, 'team_get_statistics', {})
|
|
168
|
-
expectSuccess(payload)
|
|
169
|
-
expect(typeof payload).toBe('object')
|
|
170
|
-
})
|
|
171
|
-
|
|
172
|
-
// --- Relationships ---
|
|
173
|
-
test('team_link_entries creates relationship', async () => {
|
|
174
|
-
const payload = await callToolAndParse(client, 'team_link_entries', {
|
|
175
|
-
from_entry_id: entryId1,
|
|
176
|
-
to_entry_id: entryId2,
|
|
177
|
-
relationship_type: 'references',
|
|
178
|
-
})
|
|
179
|
-
expectSuccess(payload)
|
|
180
|
-
expect(payload.success).toBe(true)
|
|
181
|
-
})
|
|
182
|
-
|
|
183
|
-
test('team_visualize_relationships returns diagram', async () => {
|
|
184
|
-
const payload = await callToolAndParse(client, 'team_visualize_relationships', {
|
|
185
|
-
entry_id: entryId1,
|
|
186
|
-
})
|
|
187
|
-
expectSuccess(payload)
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
// --- Export ---
|
|
191
|
-
test('team_export_entries (json) returns entries', async () => {
|
|
192
|
-
const payload = await callToolAndParse(client, 'team_export_entries', {
|
|
193
|
-
format: 'json',
|
|
194
|
-
})
|
|
195
|
-
expectSuccess(payload)
|
|
196
|
-
expect(payload.format).toBe('json')
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
test('team_export_entries (markdown) returns data string', async () => {
|
|
200
|
-
const payload = await callToolAndParse(client, 'team_export_entries', {
|
|
201
|
-
format: 'markdown',
|
|
202
|
-
})
|
|
203
|
-
expectSuccess(payload)
|
|
204
|
-
expect(payload.format).toBe('markdown')
|
|
205
|
-
// Handler returns `data` key (string), not `content`
|
|
206
|
-
expect(typeof payload.data).toBe('string')
|
|
207
|
-
expect((payload.data as string).length).toBeGreaterThan(0)
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
// --- Backup ---
|
|
211
|
-
test('team_backup creates backup', async () => {
|
|
212
|
-
const payload = await callToolAndParse(client, 'team_backup', {})
|
|
213
|
-
expectSuccess(payload)
|
|
214
|
-
expect(payload.success).toBe(true)
|
|
215
|
-
})
|
|
216
|
-
|
|
217
|
-
test('team_list_backups returns list', async () => {
|
|
218
|
-
const payload = await callToolAndParse(client, 'team_list_backups', {})
|
|
219
|
-
expectSuccess(payload)
|
|
220
|
-
expect(typeof payload).toBe('object')
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
// --- Delete (last to avoid breaking other tests) ---
|
|
224
|
-
test('team_delete_entry soft-deletes', async () => {
|
|
225
|
-
const payload = await callToolAndParse(client, 'team_delete_entry', {
|
|
226
|
-
entry_id: entryId2,
|
|
227
|
-
})
|
|
228
|
-
expectSuccess(payload)
|
|
229
|
-
expect(payload.success).toBe(true)
|
|
230
|
-
})
|
|
231
|
-
})
|