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,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Journal MCP Server - Resource Handlers
|
|
3
|
-
*
|
|
4
|
-
* Barrel file composing resource definitions from sub-modules.
|
|
5
|
-
* Exports all MCP resources with annotations following MCP 2025-11-25 spec.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { VectorSearchManager } from '../../vector/vector-search-manager.js'
|
|
9
|
-
import type { ToolFilterConfig } from '../../filtering/tool-filter.js'
|
|
10
|
-
import type { GitHubIntegration } from '../../github/github-integration/index.js'
|
|
11
|
-
import type { Scheduler } from '../../server/scheduler.js'
|
|
12
|
-
import type { IDatabaseAdapter } from '../../database/core/interfaces.js'
|
|
13
|
-
import type { BriefingConfig } from './shared.js'
|
|
14
|
-
|
|
15
|
-
// Re-export shared types
|
|
16
|
-
export type { ResourceContext, ResourceResult, InternalResourceDef } from './shared.js'
|
|
17
|
-
|
|
18
|
-
// Import sub-module definitions
|
|
19
|
-
import { getCoreResourceDefinitions } from './core/index.js'
|
|
20
|
-
import { getGraphResourceDefinitions } from './graph.js'
|
|
21
|
-
import { getGitHubResourceDefinitions } from './github.js'
|
|
22
|
-
import { getTemplateResourceDefinitions } from './templates.js'
|
|
23
|
-
import { getTeamResourceDefinitions } from './team.js'
|
|
24
|
-
import { getHelpResourceDefinitions } from './help.js'
|
|
25
|
-
import type { InternalResourceDef, ResourceResult } from './shared.js'
|
|
26
|
-
import { ResourceNotFoundError } from '../../types/errors.js'
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Get all resource definitions for MCP list
|
|
30
|
-
*/
|
|
31
|
-
export function getResources(): object[] {
|
|
32
|
-
const resources = getAllResourceDefinitions()
|
|
33
|
-
return resources.map((r) => ({
|
|
34
|
-
uri: r.uri,
|
|
35
|
-
name: r.name,
|
|
36
|
-
description: r.description,
|
|
37
|
-
mimeType: r.mimeType,
|
|
38
|
-
annotations: r.annotations,
|
|
39
|
-
icons: r.icons,
|
|
40
|
-
}))
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Check if a result is a ResourceResult with annotations
|
|
45
|
-
*/
|
|
46
|
-
function isResourceResult(result: unknown): result is ResourceResult {
|
|
47
|
-
return (
|
|
48
|
-
result !== null &&
|
|
49
|
-
typeof result === 'object' &&
|
|
50
|
-
'data' in result &&
|
|
51
|
-
(result as Record<string, unknown>)['data'] !== undefined
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Extract base URI without query parameters for matching
|
|
57
|
-
*/
|
|
58
|
-
function getBaseUri(uri: string): string {
|
|
59
|
-
// Handle memory:// URIs specially since URL parser treats the path as host
|
|
60
|
-
if (uri.startsWith('memory://')) {
|
|
61
|
-
const withoutScheme = uri.slice('memory://'.length)
|
|
62
|
-
const queryIndex = withoutScheme.indexOf('?')
|
|
63
|
-
const hashIndex = withoutScheme.indexOf('#')
|
|
64
|
-
|
|
65
|
-
// Find first delimiter (query or hash)
|
|
66
|
-
let endIndex = withoutScheme.length
|
|
67
|
-
if (queryIndex !== -1 && queryIndex < endIndex) endIndex = queryIndex
|
|
68
|
-
if (hashIndex !== -1 && hashIndex < endIndex) endIndex = hashIndex
|
|
69
|
-
|
|
70
|
-
return 'memory://' + withoutScheme.slice(0, endIndex)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Fallback for other URI schemes
|
|
74
|
-
try {
|
|
75
|
-
const url = new URL(uri)
|
|
76
|
-
return `${url.protocol}//${url.host}${url.pathname}`
|
|
77
|
-
} catch {
|
|
78
|
-
// Invalid URL, return original
|
|
79
|
-
return uri
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Read a resource by URI - returns data and optional annotations
|
|
85
|
-
*/
|
|
86
|
-
export async function readResource(
|
|
87
|
-
uri: string,
|
|
88
|
-
db: IDatabaseAdapter,
|
|
89
|
-
vectorManager?: VectorSearchManager,
|
|
90
|
-
filterConfig?: ToolFilterConfig | null,
|
|
91
|
-
github?: GitHubIntegration | null,
|
|
92
|
-
scheduler?: Scheduler | null,
|
|
93
|
-
teamDb?: IDatabaseAdapter,
|
|
94
|
-
briefingConfig?: BriefingConfig
|
|
95
|
-
): Promise<{ data: unknown; annotations?: { lastModified?: string } }> {
|
|
96
|
-
const resources = getAllResourceDefinitions()
|
|
97
|
-
const context = { db, teamDb, vectorManager, filterConfig, github, scheduler, briefingConfig }
|
|
98
|
-
|
|
99
|
-
// Strip query parameters for matching, but pass full URI to handler
|
|
100
|
-
const baseUri = getBaseUri(uri)
|
|
101
|
-
|
|
102
|
-
// Check for exact match first (using base URI without query params)
|
|
103
|
-
const exactMatch = resources.find((r) => r.uri === baseUri)
|
|
104
|
-
if (exactMatch) {
|
|
105
|
-
// Pass full URI (with query params) to handler so it can parse them
|
|
106
|
-
const result = await Promise.resolve(exactMatch.handler(uri, context))
|
|
107
|
-
if (isResourceResult(result)) {
|
|
108
|
-
return { data: result.data, annotations: result.annotations }
|
|
109
|
-
}
|
|
110
|
-
return { data: result }
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Check for template matches (also use base URI)
|
|
114
|
-
for (const resource of resources) {
|
|
115
|
-
if (resource.uri.includes('{')) {
|
|
116
|
-
const pattern = resource.uri.replace(/\{[^}]+\}/g, '([^/]+)')
|
|
117
|
-
const regex = new RegExp(`^${pattern}$`)
|
|
118
|
-
if (regex.test(baseUri)) {
|
|
119
|
-
const result = await Promise.resolve(resource.handler(uri, context))
|
|
120
|
-
if (isResourceResult(result)) {
|
|
121
|
-
return { data: result.data, annotations: result.annotations }
|
|
122
|
-
}
|
|
123
|
-
return { data: result }
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
throw new ResourceNotFoundError('Resource', uri)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Get all resource definitions by composing sub-module definitions
|
|
133
|
-
*/
|
|
134
|
-
function getAllResourceDefinitions(): InternalResourceDef[] {
|
|
135
|
-
return [
|
|
136
|
-
...getCoreResourceDefinitions(),
|
|
137
|
-
...getGraphResourceDefinitions(),
|
|
138
|
-
...getGitHubResourceDefinitions(),
|
|
139
|
-
...getTemplateResourceDefinitions(),
|
|
140
|
-
...getTeamResourceDefinitions(),
|
|
141
|
-
...getHelpResourceDefinitions(),
|
|
142
|
-
]
|
|
143
|
-
}
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Journal MCP Server - Resource Shared Types & Helpers
|
|
3
|
-
*
|
|
4
|
-
* Shared types, helpers, and utilities used by all resource group modules.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { IDatabaseAdapter } from '../../database/core/interfaces.js'
|
|
8
|
-
import type { VectorSearchManager } from '../../vector/vector-search-manager.js'
|
|
9
|
-
import type { ToolFilterConfig } from '../../filtering/tool-filter.js'
|
|
10
|
-
import type { McpIcon } from '../../types/index.js'
|
|
11
|
-
import type { GitHubIntegration } from '../../github/github-integration/index.js'
|
|
12
|
-
import type { Scheduler } from '../../server/scheduler.js'
|
|
13
|
-
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// GitHub Resource Guard
|
|
16
|
-
// ============================================================================
|
|
17
|
-
|
|
18
|
-
/** Successful result from resolveGitHubRepo */
|
|
19
|
-
export interface GitHubRepoResolved {
|
|
20
|
-
owner: string
|
|
21
|
-
repo: string
|
|
22
|
-
branch: string | null
|
|
23
|
-
lastModified: string
|
|
24
|
-
/** Narrowed non-null reference — safe to use without `!` after guard */
|
|
25
|
-
github: GitHubIntegration
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Resolve GitHub owner/repo or return a ResourceResult error.
|
|
30
|
-
*
|
|
31
|
-
* Encapsulates the three-step guard pattern used by all GitHub resource
|
|
32
|
-
* handlers: check github integration → getRepoInfo → validate owner/repo.
|
|
33
|
-
*
|
|
34
|
-
* @returns Resolved repo info, or a ResourceResult error to return directly
|
|
35
|
-
*/
|
|
36
|
-
export async function resolveGitHubRepo(
|
|
37
|
-
github: GitHubIntegration | null | undefined
|
|
38
|
-
): Promise<GitHubRepoResolved | ResourceResult> {
|
|
39
|
-
const lastModified = new Date().toISOString()
|
|
40
|
-
|
|
41
|
-
if (!github) {
|
|
42
|
-
return {
|
|
43
|
-
data: {
|
|
44
|
-
error: 'GitHub integration not available',
|
|
45
|
-
hint: 'Set GITHUB_TOKEN and GITHUB_REPO_PATH environment variables.',
|
|
46
|
-
},
|
|
47
|
-
annotations: { lastModified },
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const repoInfo = await github.getRepoInfo()
|
|
52
|
-
const owner = repoInfo.owner
|
|
53
|
-
const repo = repoInfo.repo
|
|
54
|
-
|
|
55
|
-
if (!owner || !repo) {
|
|
56
|
-
return {
|
|
57
|
-
data: {
|
|
58
|
-
error: 'Could not detect repository',
|
|
59
|
-
hint: 'Set GITHUB_REPO_PATH to your git repository.',
|
|
60
|
-
...(repoInfo.branch ? { branch: repoInfo.branch } : {}),
|
|
61
|
-
},
|
|
62
|
-
annotations: { lastModified },
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return { owner, repo, branch: repoInfo.branch ?? null, lastModified, github }
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Type guard: returns true if the result is a ResourceResult error.
|
|
71
|
-
*/
|
|
72
|
-
export function isResourceError(
|
|
73
|
-
result: GitHubRepoResolved | ResourceResult
|
|
74
|
-
): result is ResourceResult {
|
|
75
|
-
return 'data' in result
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Configuration for the memory://briefing resource.
|
|
80
|
-
* All values have sensible defaults — users opt-in via env vars or CLI flags.
|
|
81
|
-
*/
|
|
82
|
-
export interface BriefingConfig {
|
|
83
|
-
/** Number of recent journal entries to include (default: 3) */
|
|
84
|
-
entryCount: number
|
|
85
|
-
/** Include team DB entries in briefing preview (default: false) */
|
|
86
|
-
includeTeam: boolean
|
|
87
|
-
/** Number of open issues to list with titles; 0 = count only (default: 0) */
|
|
88
|
-
issueCount: number
|
|
89
|
-
/** Number of PRs to list with titles; 0 = count only (default: 0) */
|
|
90
|
-
prCount: number
|
|
91
|
-
/** Show PR status breakdown (open/merged/closed) instead of simple count (default: false) */
|
|
92
|
-
prStatusBreakdown: boolean
|
|
93
|
-
/** Path to the user's rules file (e.g., .gemini/GEMINI.md) for awareness in briefing */
|
|
94
|
-
rulesFilePath?: string
|
|
95
|
-
/** Path to the user's skills directory for awareness in briefing */
|
|
96
|
-
skillsDirPath?: string
|
|
97
|
-
/** Number of recent workflow runs to list; 0 = latest-only status (default: 0) */
|
|
98
|
-
workflowCount: number
|
|
99
|
-
/** Show workflow run status breakdown (passing/failing/pending) (default: false) */
|
|
100
|
-
workflowStatusBreakdown: boolean
|
|
101
|
-
/** Aggregate Copilot review state across recent PRs in briefing (default: false) */
|
|
102
|
-
copilotReviews: boolean
|
|
103
|
-
/** Workflow summary string for the memory://workflows resource (env: MEMORY_JOURNAL_WORKFLOW_SUMMARY) */
|
|
104
|
-
workflowSummary?: string
|
|
105
|
-
/** Default GitHub Project number for Kanban resources and issue tools (env: DEFAULT_PROJECT_NUMBER) */
|
|
106
|
-
defaultProjectNumber?: number
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** Default briefing configuration — preserves pre-existing behavior */
|
|
110
|
-
export const DEFAULT_BRIEFING_CONFIG: BriefingConfig = {
|
|
111
|
-
entryCount: 3,
|
|
112
|
-
includeTeam: false,
|
|
113
|
-
issueCount: 0,
|
|
114
|
-
prCount: 0,
|
|
115
|
-
prStatusBreakdown: false,
|
|
116
|
-
workflowCount: 0,
|
|
117
|
-
workflowStatusBreakdown: false,
|
|
118
|
-
copilotReviews: false,
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Resource context for handlers that need extended access
|
|
123
|
-
*/
|
|
124
|
-
export interface ResourceContext {
|
|
125
|
-
db: IDatabaseAdapter
|
|
126
|
-
teamDb?: IDatabaseAdapter
|
|
127
|
-
vectorManager?: VectorSearchManager
|
|
128
|
-
filterConfig?: ToolFilterConfig | null
|
|
129
|
-
github?: GitHubIntegration | null
|
|
130
|
-
scheduler?: Scheduler | null
|
|
131
|
-
briefingConfig?: BriefingConfig
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Resource handler result with optional annotations for MCP 2025-11-25
|
|
136
|
-
*/
|
|
137
|
-
export interface ResourceResult {
|
|
138
|
-
data: unknown
|
|
139
|
-
annotations?: {
|
|
140
|
-
lastModified?: string // ISO 8601 timestamp
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Internal resource definition with db handler
|
|
146
|
-
*/
|
|
147
|
-
export interface InternalResourceDef {
|
|
148
|
-
uri: string
|
|
149
|
-
name: string
|
|
150
|
-
title: string
|
|
151
|
-
description: string
|
|
152
|
-
mimeType: string
|
|
153
|
-
icons?: McpIcon[] // MCP 2025-11-25 icons
|
|
154
|
-
annotations?: {
|
|
155
|
-
audience?: ('user' | 'assistant')[]
|
|
156
|
-
priority?: number
|
|
157
|
-
lastModified?: string
|
|
158
|
-
autoRead?: boolean
|
|
159
|
-
sessionInit?: boolean
|
|
160
|
-
}
|
|
161
|
-
handler: (uri: string, context: ResourceContext) => unknown
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Execute a raw SQL query on the database
|
|
166
|
-
*/
|
|
167
|
-
export function execQuery(
|
|
168
|
-
db: IDatabaseAdapter,
|
|
169
|
-
sql: string,
|
|
170
|
-
params: unknown[] = []
|
|
171
|
-
): Record<string, unknown>[] {
|
|
172
|
-
const result = db.executeRawQuery(sql, params)
|
|
173
|
-
if (result.length === 0) return []
|
|
174
|
-
|
|
175
|
-
const columns = result[0]?.columns ?? []
|
|
176
|
-
return (result[0]?.values ?? []).map((values: unknown[]) => {
|
|
177
|
-
const obj: Record<string, unknown> = {}
|
|
178
|
-
columns.forEach((col: string, i: number) => {
|
|
179
|
-
obj[col] = values[i]
|
|
180
|
-
})
|
|
181
|
-
return obj
|
|
182
|
-
})
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Transform snake_case SQL row to camelCase entry object
|
|
187
|
-
* Ensures consistency with SqliteAdapter.getRecentEntries() output
|
|
188
|
-
*/
|
|
189
|
-
export function transformEntryRow(row: Record<string, unknown>): Record<string, unknown> {
|
|
190
|
-
return {
|
|
191
|
-
id: row['id'],
|
|
192
|
-
entryType: row['entry_type'],
|
|
193
|
-
content: row['content'],
|
|
194
|
-
timestamp: row['timestamp'],
|
|
195
|
-
isPersonal: row['is_personal'] === 1 || row['is_personal'] === true,
|
|
196
|
-
significanceType: row['significance_type'] ?? null,
|
|
197
|
-
autoContext: row['auto_context'] ?? null,
|
|
198
|
-
deletedAt: row['deleted_at'] ?? null,
|
|
199
|
-
projectNumber: row['project_number'] ?? null,
|
|
200
|
-
projectOwner: row['project_owner'] ?? null,
|
|
201
|
-
issueNumber: row['issue_number'] ?? null,
|
|
202
|
-
issueUrl: row['issue_url'] ?? null,
|
|
203
|
-
prNumber: row['pr_number'] ?? null,
|
|
204
|
-
prUrl: row['pr_url'] ?? null,
|
|
205
|
-
prStatus: row['pr_status'] ?? null,
|
|
206
|
-
workflowRunId: row['workflow_run_id'] ?? null,
|
|
207
|
-
workflowName: row['workflow_name'] ?? null,
|
|
208
|
-
workflowStatus: row['workflow_status'] ?? null,
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Calculate milestone completion percentage from open/closed issue counts.
|
|
214
|
-
* Shared helper to avoid duplicated logic across resource handlers.
|
|
215
|
-
*/
|
|
216
|
-
export function milestoneCompletionPct(openIssues: number, closedIssues: number): number {
|
|
217
|
-
const total = openIssues + closedIssues
|
|
218
|
-
return total > 0 ? Math.round((closedIssues / total) * 100) : 0
|
|
219
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Team Resource Definitions - 2 resources
|
|
3
|
-
*
|
|
4
|
-
* Resources: memory://team/recent, memory://team/statistics
|
|
5
|
-
*
|
|
6
|
-
* Requires TEAM_DB_PATH to be configured.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ICON_CLOCK, ICON_TEAM } from '../../constants/icons.js'
|
|
10
|
-
import {
|
|
11
|
-
withPriority,
|
|
12
|
-
ASSISTANT_FOCUSED,
|
|
13
|
-
MEDIUM_PRIORITY,
|
|
14
|
-
} from '../../utils/resource-annotations.js'
|
|
15
|
-
import type { InternalResourceDef, ResourceContext, ResourceResult } from './shared.js'
|
|
16
|
-
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Helpers
|
|
19
|
-
// ============================================================================
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Enrich entries with author column from the team database
|
|
23
|
-
*/
|
|
24
|
-
function enrichWithAuthor<T extends { id: number }>(
|
|
25
|
-
entries: T[],
|
|
26
|
-
context: ResourceContext
|
|
27
|
-
): (T & { author: string | null })[] {
|
|
28
|
-
const teamDb = context.teamDb
|
|
29
|
-
if (!teamDb) return entries.map((e: T) => ({ ...e, author: null }))
|
|
30
|
-
return entries.map((e: T) => {
|
|
31
|
-
const authorResult = teamDb.executeRawQuery(
|
|
32
|
-
'SELECT author FROM memory_journal WHERE id = ?',
|
|
33
|
-
[e.id]
|
|
34
|
-
)
|
|
35
|
-
const author = (authorResult[0]?.values[0]?.[0] as string) ?? null
|
|
36
|
-
return { ...e, author }
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// ============================================================================
|
|
41
|
-
// Resource Definitions
|
|
42
|
-
// ============================================================================
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get team resource definitions
|
|
46
|
-
*/
|
|
47
|
-
export function getTeamResourceDefinitions(): InternalResourceDef[] {
|
|
48
|
-
return [
|
|
49
|
-
{
|
|
50
|
-
uri: 'memory://team/recent',
|
|
51
|
-
name: 'Recent Team Entries',
|
|
52
|
-
title: 'Recent Team-Shared Entries',
|
|
53
|
-
description:
|
|
54
|
-
'Recent entries from the team database. Requires TEAM_DB_PATH configuration.',
|
|
55
|
-
mimeType: 'application/json',
|
|
56
|
-
icons: [ICON_CLOCK],
|
|
57
|
-
annotations: withPriority(0.7, ASSISTANT_FOCUSED),
|
|
58
|
-
handler: (_uri: string, context: ResourceContext): ResourceResult => {
|
|
59
|
-
if (!context.teamDb) {
|
|
60
|
-
return {
|
|
61
|
-
data: {
|
|
62
|
-
error: 'Team database not configured. Set TEAM_DB_PATH to enable.',
|
|
63
|
-
entries: [],
|
|
64
|
-
count: 0,
|
|
65
|
-
},
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const entries = context.teamDb.getRecentEntries(10)
|
|
70
|
-
const lastModified = entries[0]?.timestamp ?? new Date().toISOString()
|
|
71
|
-
const enriched = enrichWithAuthor(entries, context)
|
|
72
|
-
|
|
73
|
-
return {
|
|
74
|
-
data: {
|
|
75
|
-
entries: enriched,
|
|
76
|
-
count: enriched.length,
|
|
77
|
-
source: 'team',
|
|
78
|
-
},
|
|
79
|
-
annotations: { lastModified },
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
uri: 'memory://team/statistics',
|
|
85
|
-
name: 'Team Statistics',
|
|
86
|
-
title: 'Team Database Statistics',
|
|
87
|
-
description: 'Entry counts, types, and contributor breakdown for the team database.',
|
|
88
|
-
mimeType: 'application/json',
|
|
89
|
-
icons: [ICON_TEAM],
|
|
90
|
-
annotations: { ...MEDIUM_PRIORITY, audience: ['assistant'] },
|
|
91
|
-
handler: (_uri: string, context: ResourceContext): ResourceResult => {
|
|
92
|
-
if (!context.teamDb) {
|
|
93
|
-
return {
|
|
94
|
-
data: {
|
|
95
|
-
error: 'Team database not configured. Set TEAM_DB_PATH to enable.',
|
|
96
|
-
configured: false,
|
|
97
|
-
},
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const stats = context.teamDb.getStatistics('week')
|
|
102
|
-
|
|
103
|
-
// Author breakdown
|
|
104
|
-
let authors: { author: string; count: number }[] = []
|
|
105
|
-
try {
|
|
106
|
-
const authorResult = context.teamDb.executeRawQuery(
|
|
107
|
-
`SELECT COALESCE(author, 'unknown') as author, COUNT(*) as count
|
|
108
|
-
FROM memory_journal
|
|
109
|
-
WHERE deleted_at IS NULL
|
|
110
|
-
GROUP BY COALESCE(author, 'unknown')
|
|
111
|
-
ORDER BY count DESC`
|
|
112
|
-
)
|
|
113
|
-
if (authorResult[0]) {
|
|
114
|
-
authors = authorResult[0].values.map((row: unknown[]) => ({
|
|
115
|
-
author: row[0] as string,
|
|
116
|
-
count: row[1] as number,
|
|
117
|
-
}))
|
|
118
|
-
}
|
|
119
|
-
} catch {
|
|
120
|
-
// Author column may not exist yet
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return {
|
|
124
|
-
data: {
|
|
125
|
-
configured: true,
|
|
126
|
-
...(stats as object),
|
|
127
|
-
authors,
|
|
128
|
-
source: 'team',
|
|
129
|
-
},
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
]
|
|
134
|
-
}
|