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,295 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filter-Aware Instruction Validation
|
|
3
|
-
*
|
|
4
|
-
* Starts the server with various --tool-filter configs and verifies that
|
|
5
|
-
* each instruction section is correctly included or excluded based on enabled
|
|
6
|
-
* tool groups. Also reports char counts and token estimates per configuration.
|
|
7
|
-
*
|
|
8
|
-
* Validated sections:
|
|
9
|
-
* CORE — always present (Session Start, Behaviors, Rule & Skill Suggestions)
|
|
10
|
-
* COPILOT — only when `github` group is enabled
|
|
11
|
-
* CODE_MODE — only when `codemode` group is enabled
|
|
12
|
-
* GITHUB — only when `github` group is enabled (standard+ level)
|
|
13
|
-
* SEARCH_ROW — `semantic_search` Quick Access row only when `search` group enabled
|
|
14
|
-
*
|
|
15
|
-
* Usage:
|
|
16
|
-
* npm run build && node test-server/test-filter-instructions.mjs
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { spawn } from 'child_process'
|
|
20
|
-
import { resolve, dirname } from 'path'
|
|
21
|
-
import { fileURLToPath } from 'url'
|
|
22
|
-
|
|
23
|
-
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
24
|
-
const PROJECT_DIR = resolve(__dirname, '..')
|
|
25
|
-
|
|
26
|
-
// Section markers — substrings we check for presence/absence in instructions
|
|
27
|
-
const SECTIONS = {
|
|
28
|
-
CORE: 'Rule & Skill Suggestions', // Always present
|
|
29
|
-
COPILOT: 'Copilot Review Patterns', // github group only
|
|
30
|
-
CODE_MODE: 'Code Mode (Token-Efficient', // codemode group only
|
|
31
|
-
GITHUB_INTEGRATION: '## GitHub Integration', // github group, standard+ level
|
|
32
|
-
SEARCH_ROW: '| Semantic search |', // search group only
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Test matrix: each entry defines a filter config and expected section presence
|
|
36
|
-
const TEST_CONFIGS = [
|
|
37
|
-
{
|
|
38
|
-
label: 'full (all groups)',
|
|
39
|
-
filter: null, // default
|
|
40
|
-
level: 'standard',
|
|
41
|
-
expect: {
|
|
42
|
-
CORE: true,
|
|
43
|
-
COPILOT: true,
|
|
44
|
-
CODE_MODE: true,
|
|
45
|
-
GITHUB_INTEGRATION: true,
|
|
46
|
-
SEARCH_ROW: true,
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
label: 'codemode only',
|
|
51
|
-
filter: 'codemode',
|
|
52
|
-
level: 'standard',
|
|
53
|
-
expect: {
|
|
54
|
-
CORE: true,
|
|
55
|
-
COPILOT: false,
|
|
56
|
-
CODE_MODE: true,
|
|
57
|
-
GITHUB_INTEGRATION: false,
|
|
58
|
-
SEARCH_ROW: false,
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
label: 'essential (core+codemode — no github)',
|
|
63
|
-
filter: 'essential',
|
|
64
|
-
level: 'standard',
|
|
65
|
-
// META_GROUPS.essential = ['core', 'codemode'] — no github, no search
|
|
66
|
-
expect: {
|
|
67
|
-
CORE: true,
|
|
68
|
-
COPILOT: false,
|
|
69
|
-
CODE_MODE: true,
|
|
70
|
-
GITHUB_INTEGRATION: false,
|
|
71
|
-
SEARCH_ROW: false,
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
label: 'starter (core+search+codemode — no github)',
|
|
76
|
-
filter: 'starter',
|
|
77
|
-
level: 'standard',
|
|
78
|
-
// META_GROUPS.starter = ['core', 'search', 'codemode']
|
|
79
|
-
expect: {
|
|
80
|
-
CORE: true,
|
|
81
|
-
COPILOT: false,
|
|
82
|
-
CODE_MODE: true,
|
|
83
|
-
GITHUB_INTEGRATION: false,
|
|
84
|
-
SEARCH_ROW: true,
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
label: 'core only (no codemode, no github, no search)',
|
|
89
|
-
filter: 'core',
|
|
90
|
-
level: 'standard',
|
|
91
|
-
expect: {
|
|
92
|
-
CORE: true,
|
|
93
|
-
COPILOT: false,
|
|
94
|
-
CODE_MODE: false,
|
|
95
|
-
GITHUB_INTEGRATION: false,
|
|
96
|
-
SEARCH_ROW: false,
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
label: 'full -codemode (github present, no code mode)',
|
|
101
|
-
filter: '-codemode',
|
|
102
|
-
level: 'standard',
|
|
103
|
-
expect: {
|
|
104
|
-
CORE: true,
|
|
105
|
-
COPILOT: true,
|
|
106
|
-
CODE_MODE: false,
|
|
107
|
-
GITHUB_INTEGRATION: true,
|
|
108
|
-
SEARCH_ROW: true,
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
label: 'full -github (no github, no copilot)',
|
|
113
|
-
filter: '-github',
|
|
114
|
-
level: 'standard',
|
|
115
|
-
expect: {
|
|
116
|
-
CORE: true,
|
|
117
|
-
COPILOT: false,
|
|
118
|
-
CODE_MODE: true,
|
|
119
|
-
GITHUB_INTEGRATION: false,
|
|
120
|
-
SEARCH_ROW: true,
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
label: 'readonly (core+search+analytics+relationships+export — no github, no codemode)',
|
|
125
|
-
filter: 'readonly',
|
|
126
|
-
level: 'standard',
|
|
127
|
-
// META_GROUPS.readonly excludes github and codemode groups
|
|
128
|
-
expect: {
|
|
129
|
-
CORE: true,
|
|
130
|
-
COPILOT: false,
|
|
131
|
-
CODE_MODE: false,
|
|
132
|
-
GITHUB_INTEGRATION: false,
|
|
133
|
-
SEARCH_ROW: true,
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
label: 'full — essential level (no github patterns even with github enabled)',
|
|
138
|
-
filter: null,
|
|
139
|
-
level: 'essential',
|
|
140
|
-
expect: {
|
|
141
|
-
CORE: true,
|
|
142
|
-
COPILOT: true,
|
|
143
|
-
CODE_MODE: true,
|
|
144
|
-
GITHUB_INTEGRATION: false,
|
|
145
|
-
SEARCH_ROW: true,
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
]
|
|
149
|
-
|
|
150
|
-
/** Spawn server with given filter/level, send initialize, capture instructions */
|
|
151
|
-
function runConfig(filter, level) {
|
|
152
|
-
return new Promise((resolve, reject) => {
|
|
153
|
-
const args = ['dist/cli.js']
|
|
154
|
-
if (filter) args.push('--tool-filter', filter)
|
|
155
|
-
if (level) args.push('--instruction-level', level)
|
|
156
|
-
|
|
157
|
-
const proc = spawn('node', args, {
|
|
158
|
-
cwd: PROJECT_DIR,
|
|
159
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
let buffer = ''
|
|
163
|
-
|
|
164
|
-
proc.stdout.on('data', (chunk) => {
|
|
165
|
-
buffer += chunk.toString()
|
|
166
|
-
const lines = buffer.split('\n')
|
|
167
|
-
for (const line of lines) {
|
|
168
|
-
const trimmed = line.trim()
|
|
169
|
-
if (!trimmed) continue
|
|
170
|
-
try {
|
|
171
|
-
const msg = JSON.parse(trimmed)
|
|
172
|
-
if (msg.id === 1 && msg.result) {
|
|
173
|
-
const instructions =
|
|
174
|
-
msg.result?.serverInfo?.instructions ||
|
|
175
|
-
msg.result?.instructions ||
|
|
176
|
-
msg.result?.capabilities?.instructions ||
|
|
177
|
-
''
|
|
178
|
-
proc.kill()
|
|
179
|
-
resolve(instructions)
|
|
180
|
-
}
|
|
181
|
-
} catch {
|
|
182
|
-
// Incomplete JSON, keep buffering
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
proc.stderr.on('data', () => {})
|
|
188
|
-
|
|
189
|
-
proc.stdin.write(
|
|
190
|
-
JSON.stringify({
|
|
191
|
-
jsonrpc: '2.0',
|
|
192
|
-
id: 1,
|
|
193
|
-
method: 'initialize',
|
|
194
|
-
params: {
|
|
195
|
-
protocolVersion: '2025-03-26',
|
|
196
|
-
capabilities: {},
|
|
197
|
-
clientInfo: { name: 'filter-instruction-test', version: '1.0' },
|
|
198
|
-
},
|
|
199
|
-
}) + '\n'
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
setTimeout(() => {
|
|
203
|
-
proc.kill()
|
|
204
|
-
reject(new Error('Timeout'))
|
|
205
|
-
}, 10000)
|
|
206
|
-
})
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function tokenEstimate(text) {
|
|
210
|
-
return Math.round(text.length / 4)
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function checkSections(instructions, expect) {
|
|
214
|
-
const results = {}
|
|
215
|
-
for (const [key, marker] of Object.entries(SECTIONS)) {
|
|
216
|
-
const present = instructions.includes(marker)
|
|
217
|
-
const shouldBePresent = expect[key]
|
|
218
|
-
results[key] = {
|
|
219
|
-
present,
|
|
220
|
-
expected: shouldBePresent,
|
|
221
|
-
pass: present === shouldBePresent,
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return results
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
async function main() {
|
|
228
|
-
console.log('=== Filter-Aware Instruction Validation ===\n')
|
|
229
|
-
console.log('Checking that instruction sections are correctly included/excluded')
|
|
230
|
-
console.log('per enabled tool groups.\n')
|
|
231
|
-
|
|
232
|
-
let totalPassed = 0
|
|
233
|
-
let totalFailed = 0
|
|
234
|
-
const rows = []
|
|
235
|
-
|
|
236
|
-
for (const config of TEST_CONFIGS) {
|
|
237
|
-
process.stdout.write(` Testing: ${config.label} ... `)
|
|
238
|
-
let instructions
|
|
239
|
-
try {
|
|
240
|
-
instructions = await runConfig(config.filter, config.level)
|
|
241
|
-
} catch (err) {
|
|
242
|
-
console.log(`❌ ERROR: ${err.message}`)
|
|
243
|
-
totalFailed++
|
|
244
|
-
continue
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const chars = instructions.length
|
|
248
|
-
const tokens = tokenEstimate(instructions)
|
|
249
|
-
const sectionResults = checkSections(instructions, config.expect)
|
|
250
|
-
|
|
251
|
-
const failures = Object.entries(sectionResults).filter(([, r]) => !r.pass)
|
|
252
|
-
const allPass = failures.length === 0
|
|
253
|
-
|
|
254
|
-
if (allPass) {
|
|
255
|
-
console.log(`✅ (${chars} chars, ~${tokens} tokens)`)
|
|
256
|
-
totalPassed++
|
|
257
|
-
} else {
|
|
258
|
-
console.log(`❌ (${chars} chars, ~${tokens} tokens)`)
|
|
259
|
-
totalFailed++
|
|
260
|
-
for (const [section, result] of failures) {
|
|
261
|
-
const action = result.expected ? 'MISSING' : 'UNEXPECTED'
|
|
262
|
-
console.log(
|
|
263
|
-
` [${action}] ${section} — expected ${result.expected ? 'present' : 'absent'}, got ${result.present ? 'present' : 'absent'}`
|
|
264
|
-
)
|
|
265
|
-
console.log(` marker: "${SECTIONS[section]}"`)
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
rows.push({ label: config.label, chars, tokens, pass: allPass, sectionResults })
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// Token summary table
|
|
273
|
-
console.log('\n=== Token Estimates by Filter ===\n')
|
|
274
|
-
console.log(
|
|
275
|
-
` ${'Filter'.padEnd(52)} ${'Chars'.padStart(6)} ${'~Tokens'.padStart(8)} ${'Sections'.padStart(30)}`
|
|
276
|
-
)
|
|
277
|
-
console.log(` ${'-'.repeat(52)} ${'-'.repeat(6)} ${'-'.repeat(8)} ${'-'.repeat(30)}`)
|
|
278
|
-
for (const row of rows) {
|
|
279
|
-
const sectionSummary = Object.entries(row.sectionResults)
|
|
280
|
-
.map(([k, r]) => (r.present ? k.toLowerCase().replace('_', '-').slice(0, 5) : null))
|
|
281
|
-
.filter(Boolean)
|
|
282
|
-
.join('+')
|
|
283
|
-
console.log(
|
|
284
|
-
` ${row.label.padEnd(52)} ${String(row.chars).padStart(6)} ${String(row.tokens).padStart(8)} ${sectionSummary}`
|
|
285
|
-
)
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
console.log(`\n=== Results: ${totalPassed} passed, ${totalFailed} failed ===\n`)
|
|
289
|
-
process.exit(totalFailed > 0 ? 1 : 0)
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
main().catch((err) => {
|
|
293
|
-
console.error('Fatal:', err.message)
|
|
294
|
-
process.exit(1)
|
|
295
|
-
})
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phase 1.3A: Instruction Level Test
|
|
3
|
-
*
|
|
4
|
-
* Starts the server with each --instruction-level value (essential, standard, full)
|
|
5
|
-
* and verifies that instruction text length increases across levels.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* node test-server/test-instruction-levels.mjs
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { spawn } from 'child_process'
|
|
12
|
-
|
|
13
|
-
const PROJECT_DIR = 'C:\\Users\\chris\\Desktop\\memory-journal-mcp'
|
|
14
|
-
const LEVELS = ['essential', 'standard', 'full']
|
|
15
|
-
|
|
16
|
-
function testLevel(level) {
|
|
17
|
-
return new Promise((resolve, reject) => {
|
|
18
|
-
const proc = spawn('node', ['dist/cli.js', '--instruction-level', level], {
|
|
19
|
-
cwd: PROJECT_DIR,
|
|
20
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
let buffer = ''
|
|
24
|
-
proc.stdout.on('data', (chunk) => {
|
|
25
|
-
buffer += chunk.toString()
|
|
26
|
-
const lines = buffer.split('\n')
|
|
27
|
-
for (const line of lines) {
|
|
28
|
-
const trimmed = line.trim()
|
|
29
|
-
if (!trimmed) continue
|
|
30
|
-
try {
|
|
31
|
-
const msg = JSON.parse(trimmed)
|
|
32
|
-
if (msg.id === 1 && msg.result) {
|
|
33
|
-
const instructions =
|
|
34
|
-
msg.result?.serverInfo?.instructions || msg.result?.instructions || ''
|
|
35
|
-
|
|
36
|
-
// Also check for the instructions field in capabilities
|
|
37
|
-
const capInstructions = msg.result?.capabilities?.instructions || ''
|
|
38
|
-
const text = instructions || capInstructions
|
|
39
|
-
|
|
40
|
-
proc.kill()
|
|
41
|
-
resolve({
|
|
42
|
-
level,
|
|
43
|
-
charCount: text.length,
|
|
44
|
-
tokenEstimate: Math.round(text.length / 4),
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
} catch {
|
|
48
|
-
// Not complete JSON yet
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
proc.stderr.on('data', () => {})
|
|
54
|
-
|
|
55
|
-
// Send initialize request
|
|
56
|
-
proc.stdin.write(
|
|
57
|
-
JSON.stringify({
|
|
58
|
-
jsonrpc: '2.0',
|
|
59
|
-
id: 1,
|
|
60
|
-
method: 'initialize',
|
|
61
|
-
params: {
|
|
62
|
-
protocolVersion: '2025-03-26',
|
|
63
|
-
capabilities: {},
|
|
64
|
-
clientInfo: { name: 'instruction-test', version: '1.0' },
|
|
65
|
-
},
|
|
66
|
-
}) + '\n'
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
proc.kill()
|
|
71
|
-
reject(new Error(`Timeout for level ${level}`))
|
|
72
|
-
}, 10000)
|
|
73
|
-
})
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function main() {
|
|
77
|
-
console.log('=== Phase 1.3A: Instruction Level Test ===\n')
|
|
78
|
-
|
|
79
|
-
const results = []
|
|
80
|
-
for (const level of LEVELS) {
|
|
81
|
-
const result = await testLevel(level)
|
|
82
|
-
results.push(result)
|
|
83
|
-
console.log(` ${level}: ${result.charCount} chars (~${result.tokenEstimate} tokens)`)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Verify ordering
|
|
87
|
-
const [essential, standard, full] = results
|
|
88
|
-
const orderCorrect =
|
|
89
|
-
essential.charCount < standard.charCount && standard.charCount < full.charCount
|
|
90
|
-
|
|
91
|
-
console.log(`\n Order correct (essential < standard < full): ${orderCorrect ? '✅' : '❌'}`)
|
|
92
|
-
console.log(
|
|
93
|
-
` ${essential.tokenEstimate} < ${standard.tokenEstimate} < ${full.tokenEstimate}`
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
process.exit(orderCorrect ? 0 : 1)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
main().catch((err) => {
|
|
100
|
-
console.error('Fatal:', err.message)
|
|
101
|
-
process.exit(1)
|
|
102
|
-
})
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# MCP Server Pre-Flight Check — memory-journal-mcp
|
|
2
|
-
|
|
3
|
-
> **Purpose:** Validate that tiered instructions and resources are working correctly before running full test passes. Run this in a fresh conversation with the server enabled.
|
|
4
|
-
|
|
5
|
-
Do NOT read any files from disk. Answer using ONLY what you received via MCP initialization and resource reads.
|
|
6
|
-
|
|
7
|
-
## Step 1: Instructions Audit
|
|
8
|
-
|
|
9
|
-
Report exactly what you received in the MCP server instructions during initialization:
|
|
10
|
-
|
|
11
|
-
- Paste the FULL raw text you received (use a code block)
|
|
12
|
-
- Character count of the instructions
|
|
13
|
-
- Does it mention `memory://briefing`? (It should)
|
|
14
|
-
- Does it contain Code Mode namespace reference (`mj.*`)? (It should at `essential` level)
|
|
15
|
-
- What instruction tier does the content suggest? (essential ~2KB, standard ~3KB, full ~8KB)
|
|
16
|
-
|
|
17
|
-
## Step 2: Resource Access
|
|
18
|
-
|
|
19
|
-
Read `memory://briefing`. Report:
|
|
20
|
-
|
|
21
|
-
- Did it succeed?
|
|
22
|
-
- Does it contain a `userMessage` field?
|
|
23
|
-
- What key sections are present? (entry counts, GitHub, milestones, etc.)
|
|
24
|
-
|
|
25
|
-
Read `memory://health`. Report:
|
|
26
|
-
|
|
27
|
-
- Did it succeed?
|
|
28
|
-
- What database backend and tool filter status does it show?
|
|
29
|
-
|
|
30
|
-
## Step 3: Instructions Resource
|
|
31
|
-
|
|
32
|
-
Read `memory://instructions`. Report:
|
|
33
|
-
|
|
34
|
-
- Did it succeed?
|
|
35
|
-
- Approximate character count
|
|
36
|
-
- Does it contain tool parameter tables? (It should — this is the full reference)
|
|
37
|
-
- Is it significantly larger than the initialization instructions? (It should be)
|
|
38
|
-
|
|
39
|
-
## Step 4: Tool Inventory
|
|
40
|
-
|
|
41
|
-
List the tool groups you see and count of tools per group. Do NOT call any tools — just report what's in your tool list.
|
|
42
|
-
|
|
43
|
-
## Step 5: Verdict
|
|
44
|
-
|
|
45
|
-
Based on steps 1-4, answer:
|
|
46
|
-
|
|
47
|
-
| # | Check | Result |
|
|
48
|
-
| --- | ---------------------------------------------------------------------- | -------- |
|
|
49
|
-
| 1 | Initialization instructions are tiered (not the full 30KB reference) | ✅ or ❌ |
|
|
50
|
-
| 2 | Instructions mention `memory://briefing` as required first action | ✅ or ❌ |
|
|
51
|
-
| 3 | `memory://briefing` is readable and contains `userMessage` | ✅ or ❌ |
|
|
52
|
-
| 4 | `memory://health` is readable and shows server status | ✅ or ❌ |
|
|
53
|
-
| 5 | `memory://instructions` contains the full reference (larger than init) | ✅ or ❌ |
|
|
54
|
-
| 6 | Tool count matches expected for configured `--tool-filter` | ✅ or ❌ |
|
|
55
|
-
| 7 | No full parameter tables leaked into initialization instructions | ✅ or ❌ |
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process'
|
|
2
|
-
import { join, dirname } from 'path'
|
|
3
|
-
import { fileURLToPath } from 'url'
|
|
4
|
-
|
|
5
|
-
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
6
|
-
const projectDir = join(__dirname, '..')
|
|
7
|
-
const proc = spawn('node', ['dist/cli.js', '--instruction-level', 'essential'], {
|
|
8
|
-
cwd: projectDir,
|
|
9
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
let buffer = ''
|
|
13
|
-
const pending = new Map() // id -> resolve
|
|
14
|
-
|
|
15
|
-
proc.stdout.on('data', (chunk) => {
|
|
16
|
-
buffer += chunk.toString()
|
|
17
|
-
const lines = buffer.split('\n')
|
|
18
|
-
buffer = lines.pop() // keep incomplete
|
|
19
|
-
for (const line of lines) {
|
|
20
|
-
const trimmed = line.trim()
|
|
21
|
-
if (!trimmed) continue
|
|
22
|
-
try {
|
|
23
|
-
const msg = JSON.parse(trimmed)
|
|
24
|
-
if (msg.id && pending.has(msg.id)) {
|
|
25
|
-
pending.get(msg.id)(msg)
|
|
26
|
-
pending.delete(msg.id)
|
|
27
|
-
}
|
|
28
|
-
} catch {}
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
proc.stderr.on('data', () => {})
|
|
32
|
-
|
|
33
|
-
let nextId = 1
|
|
34
|
-
function rpc(method, params = {}) {
|
|
35
|
-
const id = nextId++
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
const timer = setTimeout(() => {
|
|
38
|
-
pending.delete(id)
|
|
39
|
-
reject(new Error(`Timeout: ${method}`))
|
|
40
|
-
}, 20000)
|
|
41
|
-
pending.set(id, (msg) => {
|
|
42
|
-
clearTimeout(timer)
|
|
43
|
-
resolve(msg)
|
|
44
|
-
})
|
|
45
|
-
proc.stdin.write(JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n')
|
|
46
|
-
})
|
|
47
|
-
}
|
|
48
|
-
function notify(method, params = {}) {
|
|
49
|
-
proc.stdin.write(JSON.stringify({ jsonrpc: '2.0', method, params }) + '\n')
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const delay = (ms) => new Promise((r) => setTimeout(r, ms))
|
|
53
|
-
|
|
54
|
-
async function main() {
|
|
55
|
-
// Initialize
|
|
56
|
-
await rpc('initialize', {
|
|
57
|
-
protocolVersion: '2025-03-26',
|
|
58
|
-
capabilities: {},
|
|
59
|
-
clientInfo: { name: 'test-prompts', version: '1.0' },
|
|
60
|
-
})
|
|
61
|
-
await delay(500)
|
|
62
|
-
notify('notifications/initialized')
|
|
63
|
-
await delay(1000)
|
|
64
|
-
|
|
65
|
-
// List prompts
|
|
66
|
-
const listResp = await rpc('prompts/list', {})
|
|
67
|
-
const prompts = listResp.result?.prompts ?? []
|
|
68
|
-
console.log(`\n=== PROMPTS LIST: ${prompts.length} prompts ===`)
|
|
69
|
-
for (const p of prompts) {
|
|
70
|
-
const args = (p.arguments || []).map((a) => `${a.name}${a.required ? '*' : ''}`).join(', ')
|
|
71
|
-
console.log(` ${p.name}(${args})`)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const testCases = [
|
|
75
|
-
// 8.1 No-argument prompts
|
|
76
|
-
{ name: 'prepare-standup', args: {}, expect: 'standup' },
|
|
77
|
-
{ name: 'weekly-digest', args: {}, expect: 'weekly' },
|
|
78
|
-
{ name: 'goal-tracker', args: {}, expect: 'goal' },
|
|
79
|
-
{ name: 'get-context-bundle', args: {}, expect: 'context' },
|
|
80
|
-
{ name: 'confirm-briefing', args: {}, expect: 'session' },
|
|
81
|
-
{ name: 'session-summary', args: {}, expect: 'session' },
|
|
82
|
-
// 8.1 Required-argument prompts
|
|
83
|
-
{ name: 'find-related', args: { query: 'architecture' }, expect: 'architecture' },
|
|
84
|
-
{
|
|
85
|
-
name: 'analyze-period',
|
|
86
|
-
args: { start_date: '2026-01-01', end_date: '2026-12-31' },
|
|
87
|
-
expect: '2026',
|
|
88
|
-
},
|
|
89
|
-
// 8.1 Optional-argument prompts
|
|
90
|
-
{ name: 'prepare-retro', args: {}, expect: 'retrospective' },
|
|
91
|
-
{ name: 'prepare-retro', args: { days: '7' }, expect: '7' },
|
|
92
|
-
{ name: 'get-recent-entries', args: {}, expect: '' },
|
|
93
|
-
{ name: 'get-recent-entries', args: { limit: '3' }, expect: '' },
|
|
94
|
-
// 8.2 GitHub prompts
|
|
95
|
-
{ name: 'project-status-summary', args: { project_number: '5' }, expect: '5' },
|
|
96
|
-
{ name: 'pr-summary', args: { pr_number: '67' }, expect: '67' },
|
|
97
|
-
{ name: 'code-review-prep', args: { pr_number: '67' }, expect: '67' },
|
|
98
|
-
{ name: 'pr-retrospective', args: { pr_number: '67' }, expect: '67' },
|
|
99
|
-
{ name: 'project-milestone-tracker', args: { project_number: '5' }, expect: '5' },
|
|
100
|
-
{ name: 'actions-failure-digest', args: {}, expect: '' },
|
|
101
|
-
]
|
|
102
|
-
|
|
103
|
-
console.log(`\n=== TESTING ${testCases.length} PROMPT CALLS ===\n`)
|
|
104
|
-
let pass = 0,
|
|
105
|
-
fail = 0
|
|
106
|
-
|
|
107
|
-
for (const tc of testCases) {
|
|
108
|
-
const argsStr = Object.keys(tc.args).length ? JSON.stringify(tc.args) : '(none)'
|
|
109
|
-
try {
|
|
110
|
-
const resp = await rpc('prompts/get', { name: tc.name, arguments: tc.args })
|
|
111
|
-
if (resp.error) {
|
|
112
|
-
console.log(`FAIL ${tc.name}(${argsStr}): MCP error: ${JSON.stringify(resp.error)}`)
|
|
113
|
-
fail++
|
|
114
|
-
continue
|
|
115
|
-
}
|
|
116
|
-
const messages = resp.result?.messages
|
|
117
|
-
const checks = []
|
|
118
|
-
if (!Array.isArray(messages)) checks.push('messages not array')
|
|
119
|
-
else if (messages.length < 1) checks.push('messages empty')
|
|
120
|
-
else {
|
|
121
|
-
const m = messages[0]
|
|
122
|
-
if (m.role !== 'user') checks.push(`role=${m.role}`)
|
|
123
|
-
if (!m.content) checks.push('no content')
|
|
124
|
-
else {
|
|
125
|
-
const c = m.content
|
|
126
|
-
if (c.type !== 'text') checks.push(`type=${c.type}`)
|
|
127
|
-
if (!c.text || c.text.length === 0) checks.push('text empty')
|
|
128
|
-
else if (tc.expect && !c.text.toLowerCase().includes(tc.expect.toLowerCase())) {
|
|
129
|
-
checks.push(`missing '${tc.expect}' (len=${c.text.length})`)
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (checks.length === 0) {
|
|
134
|
-
const textLen = messages?.[0]?.content?.text?.length ?? 0
|
|
135
|
-
console.log(
|
|
136
|
-
`PASS ${tc.name}(${argsStr}) — msgs:${messages.length}, textLen:${textLen}`
|
|
137
|
-
)
|
|
138
|
-
pass++
|
|
139
|
-
} else {
|
|
140
|
-
console.log(`FAIL ${tc.name}(${argsStr}): ${checks.join('; ')}`)
|
|
141
|
-
fail++
|
|
142
|
-
}
|
|
143
|
-
} catch (err) {
|
|
144
|
-
console.log(`FAIL ${tc.name}(${argsStr}): ${err.message}`)
|
|
145
|
-
fail++
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Error handling tests
|
|
150
|
-
try {
|
|
151
|
-
const resp = await rpc('prompts/get', { name: 'nonexistent-prompt', arguments: {} })
|
|
152
|
-
if (resp.error) {
|
|
153
|
-
console.log(`PASS nonexistent-prompt: MCP error (code=${resp.error.code})`)
|
|
154
|
-
pass++
|
|
155
|
-
} else {
|
|
156
|
-
console.log(`FAIL nonexistent-prompt: expected error`)
|
|
157
|
-
fail++
|
|
158
|
-
}
|
|
159
|
-
} catch (err) {
|
|
160
|
-
console.log(`FAIL nonexistent-prompt: ${err.message}`)
|
|
161
|
-
fail++
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
try {
|
|
165
|
-
const resp = await rpc('prompts/get', { name: 'find-related', arguments: {} })
|
|
166
|
-
if (resp.error) {
|
|
167
|
-
console.log(`PASS find-related(no args): error returned`)
|
|
168
|
-
} else {
|
|
169
|
-
console.log(`PASS find-related(no args): handled gracefully`)
|
|
170
|
-
}
|
|
171
|
-
pass++
|
|
172
|
-
} catch (err) {
|
|
173
|
-
console.log(`FAIL find-related(no args): ${err.message}`)
|
|
174
|
-
fail++
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
console.log(`\n=== RESULTS: ${pass} pass, ${fail} fail (${pass + fail} total) ===`)
|
|
178
|
-
proc.kill()
|
|
179
|
-
process.exit(fail > 0 ? 1 : 0)
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
main().catch((err) => {
|
|
183
|
-
console.error(err)
|
|
184
|
-
process.exit(1)
|
|
185
|
-
})
|