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
package/src/types/index.ts
DELETED
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Journal MCP Server - Type Definitions
|
|
3
|
-
*
|
|
4
|
-
* Barrel file re-exporting all types from sub-modules, plus types
|
|
5
|
-
* that depend on external imports (SqliteAdapter, VectorSearchManager, etc.).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { IDatabaseAdapter } from '../database/core/interfaces.js'
|
|
9
|
-
import type { VectorSearchManager } from '../vector/vector-search-manager.js'
|
|
10
|
-
import type { GitHubIntegration } from '../github/github-integration/index.js'
|
|
11
|
-
import type { ProgressContext } from '../utils/progress-utils.js'
|
|
12
|
-
|
|
13
|
-
// Re-export sub-module types
|
|
14
|
-
export type { ToolGroup, MetaGroup, ToolFilterRule, ToolFilterConfig } from './filtering.js'
|
|
15
|
-
export { ErrorCategory } from './error-types.js'
|
|
16
|
-
export type { ErrorResponse, ErrorContext } from './error-types.js'
|
|
17
|
-
export {
|
|
18
|
-
MemoryJournalMcpError,
|
|
19
|
-
ConnectionError,
|
|
20
|
-
QueryError,
|
|
21
|
-
ValidationError,
|
|
22
|
-
ResourceNotFoundError,
|
|
23
|
-
ConfigurationError,
|
|
24
|
-
PermissionError,
|
|
25
|
-
} from './errors.js'
|
|
26
|
-
export type {
|
|
27
|
-
EntryType,
|
|
28
|
-
SignificanceType,
|
|
29
|
-
RelationshipType,
|
|
30
|
-
JournalEntry,
|
|
31
|
-
Tag,
|
|
32
|
-
Relationship,
|
|
33
|
-
Embedding,
|
|
34
|
-
ImportanceBreakdown,
|
|
35
|
-
ImportanceResult,
|
|
36
|
-
} from './entities.js'
|
|
37
|
-
export type {
|
|
38
|
-
GitHubProject,
|
|
39
|
-
GitHubIssue,
|
|
40
|
-
GitHubPullRequest,
|
|
41
|
-
GitHubMilestone,
|
|
42
|
-
GitHubWorkflowRun,
|
|
43
|
-
GitHubReview,
|
|
44
|
-
GitHubReviewComment,
|
|
45
|
-
CopilotReviewSummary,
|
|
46
|
-
ProjectContext,
|
|
47
|
-
RepoStats,
|
|
48
|
-
TrafficData,
|
|
49
|
-
TrafficReferrer,
|
|
50
|
-
PopularPath,
|
|
51
|
-
ProjectV2StatusOption,
|
|
52
|
-
ProjectV2Item,
|
|
53
|
-
KanbanColumn,
|
|
54
|
-
KanbanBoard,
|
|
55
|
-
} from './github.js'
|
|
56
|
-
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// MCP 2025-11-25 Annotations
|
|
59
|
-
// ============================================================================
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* MCP Tool Annotations (MCP Spec 2025-11-25)
|
|
63
|
-
*
|
|
64
|
-
* Behavioral hints for AI clients to understand tool characteristics.
|
|
65
|
-
*/
|
|
66
|
-
export interface ToolAnnotations {
|
|
67
|
-
/** Tool does not modify state (idempotent reads) */
|
|
68
|
-
readOnlyHint?: boolean
|
|
69
|
-
|
|
70
|
-
/** Tool may permanently delete/destroy data */
|
|
71
|
-
destructiveHint?: boolean
|
|
72
|
-
|
|
73
|
-
/** Repeated calls with same args produce same result */
|
|
74
|
-
idempotentHint?: boolean
|
|
75
|
-
|
|
76
|
-
/** Tool interacts with external services (network, APIs) */
|
|
77
|
-
openWorldHint?: boolean
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* MCP Resource Annotations (MCP Spec 2025-11-25)
|
|
82
|
-
*/
|
|
83
|
-
export interface ResourceAnnotations {
|
|
84
|
-
/** Intended audience: 'user' or 'assistant' */
|
|
85
|
-
audience?: ('user' | 'assistant')[]
|
|
86
|
-
|
|
87
|
-
/** Importance level from 0.0 (optional) to 1.0 (required) */
|
|
88
|
-
priority?: number
|
|
89
|
-
|
|
90
|
-
/** ISO 8601 timestamp of last modification */
|
|
91
|
-
lastModified?: string
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* MCP Icon Definition (MCP Spec 2025-11-25)
|
|
96
|
-
*
|
|
97
|
-
* Icons can be added to servers, tools, resources, and prompts for
|
|
98
|
-
* visual representation in client interfaces.
|
|
99
|
-
*/
|
|
100
|
-
export interface McpIcon {
|
|
101
|
-
/** Icon source - URL or data URI */
|
|
102
|
-
src: string
|
|
103
|
-
|
|
104
|
-
/** MIME type (e.g., 'image/svg+xml', 'image/png') */
|
|
105
|
-
mimeType?: string
|
|
106
|
-
|
|
107
|
-
/** Size descriptors (e.g., ['48x48'], ['any']) */
|
|
108
|
-
sizes?: string[]
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ============================================================================
|
|
112
|
-
// Tool, Resource, Prompt Definitions
|
|
113
|
-
// ============================================================================
|
|
114
|
-
|
|
115
|
-
import type { ToolGroup } from './filtering.js'
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Tool definition for registration
|
|
119
|
-
*/
|
|
120
|
-
export interface ToolDefinition {
|
|
121
|
-
/** Unique tool name */
|
|
122
|
-
name: string
|
|
123
|
-
|
|
124
|
-
/** Human-readable display title (MCP 2025-11-25) */
|
|
125
|
-
title: string
|
|
126
|
-
|
|
127
|
-
/** Human-readable description */
|
|
128
|
-
description: string
|
|
129
|
-
|
|
130
|
-
/** Tool group for filtering */
|
|
131
|
-
group: ToolGroup
|
|
132
|
-
|
|
133
|
-
/** Zod schema for input validation */
|
|
134
|
-
inputSchema: unknown
|
|
135
|
-
|
|
136
|
-
/** Zod schema for output validation (MCP 2025-11-25 outputSchema) */
|
|
137
|
-
outputSchema?: unknown
|
|
138
|
-
|
|
139
|
-
/** Behavioral hints for AI clients */
|
|
140
|
-
annotations: ToolAnnotations
|
|
141
|
-
|
|
142
|
-
/** Tool handler function */
|
|
143
|
-
handler: (params: unknown) => unknown
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Shape returned by `getTools()` for MCP SDK registration.
|
|
148
|
-
* Derived from `ToolDefinition` but excludes internal fields (group, handler).
|
|
149
|
-
*/
|
|
150
|
-
export interface ToolRegistration {
|
|
151
|
-
name: string
|
|
152
|
-
/** Human-readable display title (MCP 2025-11-25) */
|
|
153
|
-
title?: string
|
|
154
|
-
description: string
|
|
155
|
-
inputSchema: unknown
|
|
156
|
-
outputSchema?: unknown
|
|
157
|
-
annotations: ToolAnnotations
|
|
158
|
-
icons?: { iconUrl: string; title: string; description: string }
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Tool handler configuration options
|
|
163
|
-
*/
|
|
164
|
-
export interface ToolHandlerConfig {
|
|
165
|
-
/** Default GitHub Project number for auto-assignment */
|
|
166
|
-
defaultProjectNumber?: number
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Tool execution context passed to all tool group modules
|
|
171
|
-
*/
|
|
172
|
-
export interface ToolContext {
|
|
173
|
-
/** Database adapter */
|
|
174
|
-
db: IDatabaseAdapter
|
|
175
|
-
/** Team database adapter (optional, requires TEAM_DB_PATH) */
|
|
176
|
-
teamDb?: IDatabaseAdapter
|
|
177
|
-
/** Vector search manager (optional) */
|
|
178
|
-
vectorManager?: VectorSearchManager
|
|
179
|
-
/** Team vector search manager (optional, bound to team DB) */
|
|
180
|
-
teamVectorManager?: VectorSearchManager
|
|
181
|
-
/** GitHub integration (optional) */
|
|
182
|
-
github?: GitHubIntegration
|
|
183
|
-
/** Handler configuration */
|
|
184
|
-
config?: ToolHandlerConfig
|
|
185
|
-
/** Progress reporting context */
|
|
186
|
-
progress?: ProgressContext
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Resource definition for MCP
|
|
191
|
-
*/
|
|
192
|
-
export interface ResourceDefinition {
|
|
193
|
-
/** Resource URI template */
|
|
194
|
-
uri: string
|
|
195
|
-
|
|
196
|
-
/** Human-readable name */
|
|
197
|
-
name: string
|
|
198
|
-
|
|
199
|
-
/** Human-readable display title */
|
|
200
|
-
title: string
|
|
201
|
-
|
|
202
|
-
/** Description */
|
|
203
|
-
description: string
|
|
204
|
-
|
|
205
|
-
/** MIME type */
|
|
206
|
-
mimeType: string
|
|
207
|
-
|
|
208
|
-
/** Resource metadata annotations */
|
|
209
|
-
annotations?: ResourceAnnotations
|
|
210
|
-
|
|
211
|
-
/** Resource handler - NOTE: db is passed at runtime, not in the definition */
|
|
212
|
-
handler: (uri: string) => Promise<unknown>
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Prompt definition for MCP
|
|
217
|
-
*/
|
|
218
|
-
export interface PromptDefinition {
|
|
219
|
-
/** Prompt name */
|
|
220
|
-
name: string
|
|
221
|
-
|
|
222
|
-
/** Description */
|
|
223
|
-
description: string
|
|
224
|
-
|
|
225
|
-
/** Argument definitions */
|
|
226
|
-
arguments?: {
|
|
227
|
-
name: string
|
|
228
|
-
description: string
|
|
229
|
-
required?: boolean
|
|
230
|
-
}[]
|
|
231
|
-
|
|
232
|
-
/** Prompt handler */
|
|
233
|
-
handler: (args: Record<string, string>) => Promise<unknown>
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// ============================================================================
|
|
237
|
-
// Configuration Types
|
|
238
|
-
// ============================================================================
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Server configuration
|
|
242
|
-
*/
|
|
243
|
-
export interface ServerConfig {
|
|
244
|
-
/** Path to SQLite database file */
|
|
245
|
-
dbPath: string
|
|
246
|
-
|
|
247
|
-
/** GitHub personal access token */
|
|
248
|
-
githubToken?: string
|
|
249
|
-
|
|
250
|
-
/** GitHub organization token (for org projects) */
|
|
251
|
-
githubOrgToken?: string
|
|
252
|
-
|
|
253
|
-
/** Default organization name */
|
|
254
|
-
defaultOrg?: string
|
|
255
|
-
|
|
256
|
-
/** Tool filter string */
|
|
257
|
-
toolFilter?: string
|
|
258
|
-
|
|
259
|
-
/** Default GitHub Project number for auto-assignment */
|
|
260
|
-
defaultProjectNumber?: number
|
|
261
|
-
|
|
262
|
-
/** Enable semantic search */
|
|
263
|
-
enableSemanticSearch: boolean
|
|
264
|
-
|
|
265
|
-
/** Sentence transformer model name */
|
|
266
|
-
modelName: string
|
|
267
|
-
|
|
268
|
-
/** Briefing depth for AI client instructions */
|
|
269
|
-
instructionLevel?: 'essential' | 'standard' | 'full'
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Default configuration values
|
|
274
|
-
*/
|
|
275
|
-
export const DEFAULT_CONFIG: Partial<ServerConfig> = {
|
|
276
|
-
dbPath: './memory_journal.db',
|
|
277
|
-
enableSemanticSearch: true,
|
|
278
|
-
modelName: 'all-MiniLM-L6-v2',
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// ============================================================================
|
|
282
|
-
// Backup Types
|
|
283
|
-
// ============================================================================
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Backup file information
|
|
287
|
-
*/
|
|
288
|
-
export interface BackupInfo {
|
|
289
|
-
/** Backup filename */
|
|
290
|
-
filename: string
|
|
291
|
-
|
|
292
|
-
/** Full path to backup file */
|
|
293
|
-
path: string
|
|
294
|
-
|
|
295
|
-
/** File size in bytes */
|
|
296
|
-
sizeBytes: number
|
|
297
|
-
|
|
298
|
-
/** Backup creation time (ISO 8601) */
|
|
299
|
-
createdAt: string
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// ============================================================================
|
|
303
|
-
// Health Status Types
|
|
304
|
-
// ============================================================================
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Server health and diagnostics status
|
|
308
|
-
*/
|
|
309
|
-
export interface HealthStatus {
|
|
310
|
-
/** Database statistics */
|
|
311
|
-
database: {
|
|
312
|
-
path: string
|
|
313
|
-
sizeBytes: number
|
|
314
|
-
entryCount: number
|
|
315
|
-
deletedEntryCount: number
|
|
316
|
-
relationshipCount: number
|
|
317
|
-
tagCount: number
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/** Backup information */
|
|
321
|
-
backups: {
|
|
322
|
-
directory: string
|
|
323
|
-
count: number
|
|
324
|
-
lastBackup: {
|
|
325
|
-
filename: string
|
|
326
|
-
createdAt: string
|
|
327
|
-
sizeBytes: number
|
|
328
|
-
} | null
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/** Vector search index status */
|
|
332
|
-
vectorIndex: {
|
|
333
|
-
available: boolean
|
|
334
|
-
itemCount: number
|
|
335
|
-
modelName: string | null
|
|
336
|
-
} | null
|
|
337
|
-
|
|
338
|
-
/** Tool filter configuration */
|
|
339
|
-
toolFilter: {
|
|
340
|
-
active: boolean
|
|
341
|
-
enabledCount: number
|
|
342
|
-
totalCount: number
|
|
343
|
-
filterString: string | null
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/** Health check timestamp (ISO 8601) */
|
|
347
|
-
timestamp: string
|
|
348
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Centralized Error Helpers for Memory Journal MCP
|
|
3
|
-
*
|
|
4
|
-
* Provides consistent error formatting across all tool handlers.
|
|
5
|
-
* All errors return structured responses instead of throwing
|
|
6
|
-
* uncaught exceptions.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ZodError } from 'zod'
|
|
10
|
-
import { MemoryJournalMcpError } from '../types/errors.js'
|
|
11
|
-
import { ErrorCategory, type ErrorResponse } from '../types/error-types.js'
|
|
12
|
-
import { matchSuggestion } from './errors/suggestions.js'
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Extract human-readable messages from a ZodError instead of raw JSON array.
|
|
16
|
-
* Maps each Zod issue to its path + message for clear validation feedback.
|
|
17
|
-
*/
|
|
18
|
-
export function formatZodError(error: ZodError): string {
|
|
19
|
-
return error.issues
|
|
20
|
-
.map((issue) => {
|
|
21
|
-
const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : ''
|
|
22
|
-
return `${path}${issue.message}`
|
|
23
|
-
})
|
|
24
|
-
.join('; ')
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Format any caught error into an enriched ErrorResponse.
|
|
29
|
-
*
|
|
30
|
-
* Returns structured error information including code, category,
|
|
31
|
-
* suggestion, and recoverable flag. Handles MemoryJournalMcpError
|
|
32
|
-
* (full context), ZodError (validation), and raw errors (internal
|
|
33
|
-
* with pattern-matched suggestions from ERROR_SUGGESTIONS).
|
|
34
|
-
*
|
|
35
|
-
* Use as the single catch block for all tool handlers:
|
|
36
|
-
*
|
|
37
|
-
* ```typescript
|
|
38
|
-
* handler: async (params) => {
|
|
39
|
-
* try {
|
|
40
|
-
* const parsed = Schema.parse(params);
|
|
41
|
-
* // ... domain logic ...
|
|
42
|
-
* return { success: true, ... };
|
|
43
|
-
* } catch (err) {
|
|
44
|
-
* return formatHandlerError(err);
|
|
45
|
-
* }
|
|
46
|
-
* }
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export function formatHandlerError(err: unknown): ErrorResponse {
|
|
50
|
-
// MemoryJournalMcpError and subclasses (OAuthError, SecurityError, etc.)
|
|
51
|
-
if (err instanceof MemoryJournalMcpError) {
|
|
52
|
-
return err.toResponse()
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Zod validation errors
|
|
56
|
-
if (err instanceof ZodError) {
|
|
57
|
-
return {
|
|
58
|
-
success: false,
|
|
59
|
-
error: formatZodError(err),
|
|
60
|
-
code: 'VALIDATION_ERROR',
|
|
61
|
-
category: ErrorCategory.VALIDATION,
|
|
62
|
-
suggestion: 'Check input parameters against the tool schema',
|
|
63
|
-
recoverable: false,
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Unknown / raw errors — enrich via ERROR_SUGGESTIONS pattern matching
|
|
68
|
-
const message = err instanceof Error ? err.message : String(err)
|
|
69
|
-
const matched = matchSuggestion(message)
|
|
70
|
-
return {
|
|
71
|
-
success: false,
|
|
72
|
-
error: message,
|
|
73
|
-
code: matched?.code ?? 'INTERNAL_ERROR',
|
|
74
|
-
category: ErrorCategory.INTERNAL,
|
|
75
|
-
recoverable: false,
|
|
76
|
-
...(matched?.suggestion ? { suggestion: matched.suggestion } : {}),
|
|
77
|
-
}
|
|
78
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared Error Response Fields for Output Schemas
|
|
3
|
-
*
|
|
4
|
-
* Defines the ErrorFieldsMixin Zod schema fragment that gets extended into
|
|
5
|
-
* every output schema. This ensures formatHandlerError() responses pass
|
|
6
|
-
* output schema validation (MCP SDK enforces additionalProperties: false).
|
|
7
|
-
*
|
|
8
|
-
* SSoT location: src/utils/errors/error-response-fields.ts
|
|
9
|
-
* All output schemas should import from here.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { z } from 'zod'
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Standard error response fields returned by formatHandlerError().
|
|
16
|
-
* Extend this into every output schema:
|
|
17
|
-
* export const MyOutputSchema = z.object({ ... }).extend(ErrorFieldsMixin.shape);
|
|
18
|
-
*/
|
|
19
|
-
export const ErrorFieldsMixin = z.object({
|
|
20
|
-
error: z.string().optional().describe('Human-readable error message'),
|
|
21
|
-
code: z.string().optional().describe('Error code (e.g. VALIDATION_ERROR, INTERNAL_ERROR)'),
|
|
22
|
-
category: z
|
|
23
|
-
.string()
|
|
24
|
-
.optional()
|
|
25
|
-
.describe('Error category (validation, query, connection, internal)'),
|
|
26
|
-
recoverable: z.boolean().optional().describe('Whether the error is recoverable'),
|
|
27
|
-
suggestion: z.string().optional().describe('Suggested fix for the error'),
|
|
28
|
-
details: z.record(z.string(), z.unknown()).optional().describe('Additional error context'),
|
|
29
|
-
})
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error Suggestions — Fuzzy Pattern Matching for Error Messages
|
|
3
|
-
*
|
|
4
|
-
* Maps common error message patterns to actionable suggestions and
|
|
5
|
-
* specific error codes. Used by:
|
|
6
|
-
* 1. MemoryJournalMcpError constructor — auto-refines generic codes
|
|
7
|
-
* 2. formatHandlerError() — enriches raw Error responses
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
// =============================================================================
|
|
11
|
-
// Types
|
|
12
|
-
// =============================================================================
|
|
13
|
-
|
|
14
|
-
interface ErrorSuggestion {
|
|
15
|
-
/** RegExp to test against error messages (case-insensitive) */
|
|
16
|
-
pattern: RegExp
|
|
17
|
-
/** Human-readable suggestion for resolving the error */
|
|
18
|
-
suggestion: string
|
|
19
|
-
/** Optional specific code to auto-refine generic codes into */
|
|
20
|
-
code?: string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// =============================================================================
|
|
24
|
-
// Generic codes eligible for auto-refinement
|
|
25
|
-
// =============================================================================
|
|
26
|
-
|
|
27
|
-
/** Codes that can be refined to a more specific code when a pattern matches */
|
|
28
|
-
export const GENERIC_CODES = new Set(['QUERY_FAILED', 'INTERNAL_ERROR', 'UNKNOWN_ERROR'])
|
|
29
|
-
|
|
30
|
-
// =============================================================================
|
|
31
|
-
// Suggestion Table
|
|
32
|
-
// =============================================================================
|
|
33
|
-
|
|
34
|
-
export const ERROR_SUGGESTIONS: ErrorSuggestion[] = [
|
|
35
|
-
// Resource not found patterns
|
|
36
|
-
{
|
|
37
|
-
pattern: /not found/i,
|
|
38
|
-
suggestion: 'Verify the resource identifier and try again',
|
|
39
|
-
code: 'RESOURCE_NOT_FOUND',
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
pattern: /no such table/i,
|
|
43
|
-
suggestion: 'The database table does not exist. Run database initialization.',
|
|
44
|
-
code: 'TABLE_NOT_FOUND',
|
|
45
|
-
},
|
|
46
|
-
// Permission / access patterns
|
|
47
|
-
{
|
|
48
|
-
pattern: /permission denied|SQLITE_READONLY/i,
|
|
49
|
-
suggestion: 'Check file permissions and database access rights',
|
|
50
|
-
code: 'PERMISSION_DENIED',
|
|
51
|
-
},
|
|
52
|
-
// Connection / lock patterns
|
|
53
|
-
{
|
|
54
|
-
pattern: /database is locked/i,
|
|
55
|
-
suggestion: 'The database is locked by another process. Retry after a short delay.',
|
|
56
|
-
code: 'CONNECTION_FAILED',
|
|
57
|
-
},
|
|
58
|
-
// Constraint patterns
|
|
59
|
-
{
|
|
60
|
-
pattern: /SQLITE_CONSTRAINT|unique constraint/i,
|
|
61
|
-
suggestion: 'A uniqueness or integrity constraint was violated. Check input values.',
|
|
62
|
-
code: 'VALIDATION_FAILED',
|
|
63
|
-
},
|
|
64
|
-
// Disk / space patterns
|
|
65
|
-
{
|
|
66
|
-
pattern: /disk I\/O|SQLITE_FULL/i,
|
|
67
|
-
suggestion: 'The disk may be full or the filesystem is read-only.',
|
|
68
|
-
},
|
|
69
|
-
// Malformed input patterns
|
|
70
|
-
{
|
|
71
|
-
pattern: /malformed|invalid json|unexpected token/i,
|
|
72
|
-
suggestion: 'The input appears malformed. Check the format and try again.',
|
|
73
|
-
code: 'VALIDATION_FAILED',
|
|
74
|
-
},
|
|
75
|
-
]
|
|
76
|
-
|
|
77
|
-
// =============================================================================
|
|
78
|
-
// Matching
|
|
79
|
-
// =============================================================================
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Find the first matching suggestion for an error message.
|
|
83
|
-
* Returns `undefined` if no pattern matches.
|
|
84
|
-
*/
|
|
85
|
-
export function matchSuggestion(
|
|
86
|
-
message: string
|
|
87
|
-
): { suggestion: string; code?: string } | undefined {
|
|
88
|
-
for (const entry of ERROR_SUGGESTIONS) {
|
|
89
|
-
if (entry.pattern.test(message)) {
|
|
90
|
-
return { suggestion: entry.suggestion, code: entry.code }
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return undefined
|
|
94
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub URL Helpers
|
|
3
|
-
*
|
|
4
|
-
* Shared utilities for resolving GitHub URLs from cached repo info.
|
|
5
|
-
* Eliminates duplication between core and team tool handlers.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { GitHubIntegration } from '../github/github-integration/index.js'
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Resolve a GitHub issue URL from the cached repo info.
|
|
12
|
-
*
|
|
13
|
-
* If `existingUrl` is already provided, returns it unchanged.
|
|
14
|
-
* If `issueNumber` is provided without a URL and GitHub is available
|
|
15
|
-
* with cached repo info, constructs the URL automatically.
|
|
16
|
-
*
|
|
17
|
-
* @returns The resolved issue URL, or undefined if not resolvable
|
|
18
|
-
*/
|
|
19
|
-
export function resolveIssueUrl(
|
|
20
|
-
github: GitHubIntegration | undefined,
|
|
21
|
-
issueNumber: number | undefined,
|
|
22
|
-
existingUrl: string | undefined
|
|
23
|
-
): string | undefined {
|
|
24
|
-
if (existingUrl) return existingUrl
|
|
25
|
-
if (issueNumber === undefined || !github) return undefined
|
|
26
|
-
|
|
27
|
-
const cachedRepo = github.getCachedRepoInfo()
|
|
28
|
-
if (cachedRepo?.owner && cachedRepo?.repo) {
|
|
29
|
-
return `https://github.com/${cachedRepo.owner}/${cachedRepo.repo}/issues/${String(issueNumber)}`
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return undefined
|
|
33
|
-
}
|
package/src/utils/logger.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Journal MCP Server - Logger
|
|
3
|
-
*
|
|
4
|
-
* Centralized logging to stderr only (stdout reserved for MCP protocol).
|
|
5
|
-
* Follows RFC 5424 severity levels.
|
|
6
|
-
* Automatically sanitizes error fields to prevent token leakage.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { sanitizeErrorForLogging } from './security-utils.js'
|
|
10
|
-
|
|
11
|
-
type LogLevel = 'debug' | 'info' | 'notice' | 'warning' | 'error' | 'critical'
|
|
12
|
-
|
|
13
|
-
interface LogContext {
|
|
14
|
-
module?: string
|
|
15
|
-
operation?: string
|
|
16
|
-
entityId?: string | number
|
|
17
|
-
[key: string]: unknown
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const LOG_LEVELS: Record<LogLevel, number> = {
|
|
21
|
-
debug: 7,
|
|
22
|
-
info: 6,
|
|
23
|
-
notice: 5,
|
|
24
|
-
warning: 4,
|
|
25
|
-
error: 3,
|
|
26
|
-
critical: 2,
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
class Logger {
|
|
30
|
-
private minLevel: number
|
|
31
|
-
|
|
32
|
-
constructor(level: LogLevel = 'info') {
|
|
33
|
-
this.minLevel = LOG_LEVELS[level]
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
private shouldLog(level: LogLevel): boolean {
|
|
37
|
-
return LOG_LEVELS[level] <= this.minLevel
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
private log(level: LogLevel, message: string, context?: LogContext): void {
|
|
41
|
-
if (!this.shouldLog(level)) return
|
|
42
|
-
|
|
43
|
-
// Sanitize all user-controlled inputs to prevent log injection (CodeQL js/log-injection).
|
|
44
|
-
// Each .replace() must be applied inline — CodeQL cannot track sanitization through method calls.
|
|
45
|
-
const safeMessage = message.replace(/\n|\r/g, '')
|
|
46
|
-
const timestamp = new Date().toISOString()
|
|
47
|
-
const levelUpper = level.toUpperCase().padEnd(8)
|
|
48
|
-
|
|
49
|
-
const mod = context?.module ? `[${context.module.replace(/\n|\r/g, '')}]` : ''
|
|
50
|
-
const op = context?.operation ? `[${context.operation.replace(/\n|\r/g, '')}]` : ''
|
|
51
|
-
|
|
52
|
-
let line = `[${timestamp}] [${levelUpper}] ${mod}${op} ${safeMessage}`
|
|
53
|
-
|
|
54
|
-
// Add context as JSON if there are additional fields
|
|
55
|
-
const extras: Record<string, unknown> = { ...context }
|
|
56
|
-
delete extras['module']
|
|
57
|
-
delete extras['operation']
|
|
58
|
-
|
|
59
|
-
// Sanitize error fields to prevent token leakage
|
|
60
|
-
if (extras['error'] != null && typeof extras['error'] === 'string') {
|
|
61
|
-
extras['error'] = sanitizeErrorForLogging(extras['error'])
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (Object.keys(extras).length > 0) {
|
|
65
|
-
line += ` ${JSON.stringify(extras).replace(/\n|\r/g, '')}`
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Always write to stderr (stdout is reserved for MCP protocol)
|
|
69
|
-
console.error(line)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
debug(message: string, context?: LogContext): void {
|
|
73
|
-
this.log('debug', message, context)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
info(message: string, context?: LogContext): void {
|
|
77
|
-
this.log('info', message, context)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
notice(message: string, context?: LogContext): void {
|
|
81
|
-
this.log('notice', message, context)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
warning(message: string, context?: LogContext): void {
|
|
85
|
-
this.log('warning', message, context)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
error(message: string, context?: LogContext): void {
|
|
89
|
-
this.log('error', message, context)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
critical(message: string, context?: LogContext): void {
|
|
93
|
-
this.log('critical', message, context)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
setLevel(level: LogLevel): void {
|
|
97
|
-
if (level in LOG_LEVELS) {
|
|
98
|
-
this.minLevel = LOG_LEVELS[level]
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Get log level from environment (validated against known levels)
|
|
104
|
-
const rawLevel = process.env['LOG_LEVEL'] ?? 'info'
|
|
105
|
-
const envLevel: LogLevel = rawLevel in LOG_LEVELS ? (rawLevel as LogLevel) : 'info'
|
|
106
|
-
|
|
107
|
-
export const logger = new Logger(envLevel)
|