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,392 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — Briefing GitHub Section Unit Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests for buildGitHubSection and its internal fetch helpers.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
8
|
-
import { buildGitHubSection } from '../../src/handlers/resources/core/briefing/github-section.js'
|
|
9
|
-
|
|
10
|
-
vi.mock('../../src/utils/logger.js', () => ({
|
|
11
|
-
logger: {
|
|
12
|
-
info: vi.fn(),
|
|
13
|
-
warning: vi.fn(),
|
|
14
|
-
error: vi.fn(),
|
|
15
|
-
debug: vi.fn(),
|
|
16
|
-
},
|
|
17
|
-
}))
|
|
18
|
-
|
|
19
|
-
// Mock shared.ts helpers
|
|
20
|
-
vi.mock('../../src/handlers/resources/shared.js', async (importOriginal) => {
|
|
21
|
-
const original = (await importOriginal()) as Record<string, unknown>
|
|
22
|
-
return {
|
|
23
|
-
...original,
|
|
24
|
-
resolveGitHubRepo: vi.fn().mockResolvedValue({
|
|
25
|
-
owner: 'neverinfamous',
|
|
26
|
-
repo: 'memory-journal-mcp',
|
|
27
|
-
branch: 'main',
|
|
28
|
-
}),
|
|
29
|
-
isResourceError: vi.fn().mockReturnValue(false),
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
// ============================================================================
|
|
34
|
-
// Shared mocks
|
|
35
|
-
// ============================================================================
|
|
36
|
-
|
|
37
|
-
function createMockGitHub(overrides: Partial<Record<string, unknown>> = {}) {
|
|
38
|
-
return {
|
|
39
|
-
getWorkflowRuns: vi.fn().mockResolvedValue([
|
|
40
|
-
{ name: 'CI', status: 'completed', conclusion: 'success' },
|
|
41
|
-
{ name: 'CodeQL', status: 'completed', conclusion: 'success' },
|
|
42
|
-
]),
|
|
43
|
-
getIssues: vi.fn().mockResolvedValue([
|
|
44
|
-
{ number: 1, title: 'Bug fix', state: 'open' },
|
|
45
|
-
{ number: 2, title: 'Feature request', state: 'open' },
|
|
46
|
-
]),
|
|
47
|
-
getPullRequests: vi
|
|
48
|
-
.fn()
|
|
49
|
-
.mockResolvedValue([{ number: 10, title: 'Add feature', state: 'OPEN' }]),
|
|
50
|
-
getMilestones: vi
|
|
51
|
-
.fn()
|
|
52
|
-
.mockResolvedValue([
|
|
53
|
-
{ title: 'v1.0', openIssues: 2, closedIssues: 8, dueOn: '2025-04-01T00:00:00Z' },
|
|
54
|
-
]),
|
|
55
|
-
getRepoStats: vi.fn().mockResolvedValue({
|
|
56
|
-
stars: 100,
|
|
57
|
-
forks: 25,
|
|
58
|
-
}),
|
|
59
|
-
getTrafficData: vi.fn().mockResolvedValue({
|
|
60
|
-
clones: { total: 500 },
|
|
61
|
-
views: { total: 2000 },
|
|
62
|
-
}),
|
|
63
|
-
getCopilotReviewSummary: vi.fn().mockResolvedValue({
|
|
64
|
-
state: 'approved',
|
|
65
|
-
commentCount: 3,
|
|
66
|
-
}),
|
|
67
|
-
...overrides,
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function defaultConfig(overrides: Partial<Record<string, unknown>> = {}) {
|
|
72
|
-
return {
|
|
73
|
-
entryCount: 5,
|
|
74
|
-
includeTeam: false,
|
|
75
|
-
issueCount: 5,
|
|
76
|
-
prCount: 5,
|
|
77
|
-
workflowCount: 3,
|
|
78
|
-
copilotReviews: false,
|
|
79
|
-
prStatusBreakdown: false,
|
|
80
|
-
workflowStatusBreakdown: false,
|
|
81
|
-
...overrides,
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// ============================================================================
|
|
86
|
-
// buildGitHubSection
|
|
87
|
-
// ============================================================================
|
|
88
|
-
|
|
89
|
-
describe('buildGitHubSection', () => {
|
|
90
|
-
beforeEach(() => {
|
|
91
|
-
vi.clearAllMocks()
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
it('should return null when github is null', async () => {
|
|
95
|
-
const result = await buildGitHubSection(null, defaultConfig() as never)
|
|
96
|
-
expect(result).toBeNull()
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
it('should return null when github is undefined', async () => {
|
|
100
|
-
const result = await buildGitHubSection(undefined, defaultConfig() as never)
|
|
101
|
-
expect(result).toBeNull()
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
it('should return full GitHub context on success', async () => {
|
|
105
|
-
const github = createMockGitHub()
|
|
106
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
107
|
-
|
|
108
|
-
expect(result).toBeDefined()
|
|
109
|
-
expect(result!.repo).toBe('neverinfamous/memory-journal-mcp')
|
|
110
|
-
expect(result!.branch).toBe('main')
|
|
111
|
-
expect(result!.ci).toBe('passing')
|
|
112
|
-
expect(result!.openIssues).toBe(2)
|
|
113
|
-
expect(result!.openPRs).toBe(1)
|
|
114
|
-
expect(result!.milestones).toHaveLength(1)
|
|
115
|
-
expect(result!.insights).toBeDefined()
|
|
116
|
-
expect(result!.insights!.stars).toBe(100)
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
it('should return null when resolveGitHubRepo returns error', async () => {
|
|
120
|
-
const { isResourceError } = await import('../../src/handlers/resources/shared.js')
|
|
121
|
-
vi.mocked(isResourceError).mockReturnValueOnce(true)
|
|
122
|
-
|
|
123
|
-
const github = createMockGitHub()
|
|
124
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
125
|
-
|
|
126
|
-
expect(result).toBeNull()
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
// ========================================================================
|
|
130
|
-
// CI Status
|
|
131
|
-
// ========================================================================
|
|
132
|
-
|
|
133
|
-
it('should report failing CI', async () => {
|
|
134
|
-
const github = createMockGitHub({
|
|
135
|
-
getWorkflowRuns: vi
|
|
136
|
-
.fn()
|
|
137
|
-
.mockResolvedValue([{ name: 'CI', status: 'completed', conclusion: 'failure' }]),
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
141
|
-
|
|
142
|
-
expect(result!.ci).toBe('failing')
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
it('should report pending CI for in-progress workflows', async () => {
|
|
146
|
-
const github = createMockGitHub({
|
|
147
|
-
getWorkflowRuns: vi
|
|
148
|
-
.fn()
|
|
149
|
-
.mockResolvedValue([{ name: 'CI', status: 'in_progress', conclusion: null }]),
|
|
150
|
-
})
|
|
151
|
-
|
|
152
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
153
|
-
|
|
154
|
-
expect(result!.ci).toBe('pending')
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
it('should report cancelled CI', async () => {
|
|
158
|
-
const github = createMockGitHub({
|
|
159
|
-
getWorkflowRuns: vi
|
|
160
|
-
.fn()
|
|
161
|
-
.mockResolvedValue([{ name: 'CI', status: 'completed', conclusion: 'cancelled' }]),
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
165
|
-
|
|
166
|
-
expect(result!.ci).toBe('cancelled')
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
it('should report unknown CI when no runs exist', async () => {
|
|
170
|
-
const github = createMockGitHub({
|
|
171
|
-
getWorkflowRuns: vi.fn().mockResolvedValue([]),
|
|
172
|
-
})
|
|
173
|
-
|
|
174
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
175
|
-
|
|
176
|
-
expect(result!.ci).toBe('unknown')
|
|
177
|
-
})
|
|
178
|
-
|
|
179
|
-
it('should handle CI fetch error gracefully', async () => {
|
|
180
|
-
const github = createMockGitHub({
|
|
181
|
-
getWorkflowRuns: vi.fn().mockRejectedValue(new Error('API error')),
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
185
|
-
|
|
186
|
-
expect(result!.ci).toBe('unknown')
|
|
187
|
-
})
|
|
188
|
-
|
|
189
|
-
// ========================================================================
|
|
190
|
-
// Workflow Summary
|
|
191
|
-
// ========================================================================
|
|
192
|
-
|
|
193
|
-
it('should include workflow summary with breakdown enabled', async () => {
|
|
194
|
-
const github = createMockGitHub({
|
|
195
|
-
getWorkflowRuns: vi.fn().mockResolvedValue([
|
|
196
|
-
{ name: 'CI', status: 'completed', conclusion: 'success' },
|
|
197
|
-
{ name: 'CodeQL', status: 'completed', conclusion: 'failure' },
|
|
198
|
-
{ name: 'Deploy', status: 'queued', conclusion: null },
|
|
199
|
-
]),
|
|
200
|
-
})
|
|
201
|
-
|
|
202
|
-
const config = defaultConfig({ workflowStatusBreakdown: true })
|
|
203
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
204
|
-
|
|
205
|
-
expect(result!.workflowSummary).toBeDefined()
|
|
206
|
-
expect(result!.workflowSummary!.passing).toBe(1)
|
|
207
|
-
expect(result!.workflowSummary!.failing).toBe(1)
|
|
208
|
-
expect(result!.workflowSummary!.pending).toBe(1)
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
it('should include per-workflow runs when workflowCount > 0', async () => {
|
|
212
|
-
const github = createMockGitHub({
|
|
213
|
-
getWorkflowRuns: vi.fn().mockResolvedValue([
|
|
214
|
-
{ name: 'CI', status: 'completed', conclusion: 'success' },
|
|
215
|
-
{ name: 'CodeQL', status: 'completed', conclusion: 'failure' },
|
|
216
|
-
]),
|
|
217
|
-
})
|
|
218
|
-
|
|
219
|
-
const config = defaultConfig({ workflowCount: 2 })
|
|
220
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
221
|
-
|
|
222
|
-
expect(result!.workflowSummary).toBeDefined()
|
|
223
|
-
expect(result!.workflowSummary!.runs).toHaveLength(2)
|
|
224
|
-
expect(result!.workflowSummary!.runs![0]!.name).toBe('CI')
|
|
225
|
-
expect(result!.workflowSummary!.runs![0]!.conclusion).toBe('success')
|
|
226
|
-
})
|
|
227
|
-
|
|
228
|
-
// ========================================================================
|
|
229
|
-
// Issues & PRs
|
|
230
|
-
// ========================================================================
|
|
231
|
-
|
|
232
|
-
it('should include issue list when issueCount > 0', async () => {
|
|
233
|
-
const github = createMockGitHub()
|
|
234
|
-
const config = defaultConfig({ issueCount: 2 })
|
|
235
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
236
|
-
|
|
237
|
-
expect(result!.openIssueList).toBeDefined()
|
|
238
|
-
expect(result!.openIssueList!).toHaveLength(2)
|
|
239
|
-
})
|
|
240
|
-
|
|
241
|
-
it('should handle issues fetch error gracefully', async () => {
|
|
242
|
-
const github = createMockGitHub({
|
|
243
|
-
getIssues: vi.fn().mockRejectedValue(new Error('API error')),
|
|
244
|
-
getPullRequests: vi.fn().mockRejectedValue(new Error('API error')),
|
|
245
|
-
})
|
|
246
|
-
|
|
247
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
248
|
-
|
|
249
|
-
expect(result!.openIssues).toBe(0)
|
|
250
|
-
expect(result!.openPRs).toBe(0)
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
it('should include PR status breakdown when enabled', async () => {
|
|
254
|
-
const github = createMockGitHub({
|
|
255
|
-
getPullRequests: vi.fn().mockResolvedValue([
|
|
256
|
-
{ number: 10, title: 'Feature A', state: 'OPEN' },
|
|
257
|
-
{ number: 11, title: 'Feature B', state: 'MERGED' },
|
|
258
|
-
{ number: 12, title: 'Feature C', state: 'CLOSED' },
|
|
259
|
-
]),
|
|
260
|
-
})
|
|
261
|
-
|
|
262
|
-
const config = defaultConfig({ prStatusBreakdown: true, prCount: 5 })
|
|
263
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
264
|
-
|
|
265
|
-
expect(result!.prStatusSummary).toBeDefined()
|
|
266
|
-
expect(result!.prStatusSummary!.open).toBeGreaterThanOrEqual(1)
|
|
267
|
-
expect(result!.prStatusSummary!.merged).toBe(1)
|
|
268
|
-
expect(result!.prStatusSummary!.closed).toBe(1)
|
|
269
|
-
})
|
|
270
|
-
|
|
271
|
-
// ========================================================================
|
|
272
|
-
// Milestones
|
|
273
|
-
// ========================================================================
|
|
274
|
-
|
|
275
|
-
it('should include milestones with progress', async () => {
|
|
276
|
-
const github = createMockGitHub()
|
|
277
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
278
|
-
|
|
279
|
-
expect(result!.milestones).toHaveLength(1)
|
|
280
|
-
expect(result!.milestones[0]!.title).toBe('v1.0')
|
|
281
|
-
expect(result!.milestones[0]!.progress).toContain('%')
|
|
282
|
-
})
|
|
283
|
-
|
|
284
|
-
it('should handle milestones fetch error gracefully', async () => {
|
|
285
|
-
const github = createMockGitHub({
|
|
286
|
-
getMilestones: vi.fn().mockRejectedValue(new Error('API error')),
|
|
287
|
-
})
|
|
288
|
-
|
|
289
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
290
|
-
|
|
291
|
-
expect(result!.milestones).toEqual([])
|
|
292
|
-
})
|
|
293
|
-
|
|
294
|
-
// ========================================================================
|
|
295
|
-
// Insights
|
|
296
|
-
// ========================================================================
|
|
297
|
-
|
|
298
|
-
it('should include repo insights with traffic data', async () => {
|
|
299
|
-
const github = createMockGitHub()
|
|
300
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
301
|
-
|
|
302
|
-
expect(result!.insights).toBeDefined()
|
|
303
|
-
expect(result!.insights!.stars).toBe(100)
|
|
304
|
-
expect(result!.insights!.forks).toBe(25)
|
|
305
|
-
expect(result!.insights!.clones14d).toBe(500)
|
|
306
|
-
expect(result!.insights!.views14d).toBe(2000)
|
|
307
|
-
})
|
|
308
|
-
|
|
309
|
-
it('should handle missing repo stats gracefully', async () => {
|
|
310
|
-
const github = createMockGitHub({
|
|
311
|
-
getRepoStats: vi.fn().mockResolvedValue(null),
|
|
312
|
-
})
|
|
313
|
-
|
|
314
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
315
|
-
|
|
316
|
-
expect(result!.insights).toBeUndefined()
|
|
317
|
-
})
|
|
318
|
-
|
|
319
|
-
it('should handle traffic data error gracefully', async () => {
|
|
320
|
-
const github = createMockGitHub({
|
|
321
|
-
getTrafficData: vi.fn().mockRejectedValue(new Error('403 Forbidden')),
|
|
322
|
-
})
|
|
323
|
-
|
|
324
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
325
|
-
|
|
326
|
-
// Should still have stars/forks even without traffic
|
|
327
|
-
expect(result!.insights).toBeDefined()
|
|
328
|
-
expect(result!.insights!.stars).toBe(100)
|
|
329
|
-
expect(result!.insights!.clones14d).toBeUndefined()
|
|
330
|
-
})
|
|
331
|
-
|
|
332
|
-
// ========================================================================
|
|
333
|
-
// Copilot Reviews
|
|
334
|
-
// ========================================================================
|
|
335
|
-
|
|
336
|
-
it('should include copilot review stats when enabled', async () => {
|
|
337
|
-
const github = createMockGitHub()
|
|
338
|
-
const config = defaultConfig({ copilotReviews: true })
|
|
339
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
340
|
-
|
|
341
|
-
expect(result!.copilotReviews).toBeDefined()
|
|
342
|
-
expect(result!.copilotReviews!.reviewed).toBeGreaterThan(0)
|
|
343
|
-
expect(result!.copilotReviews!.approved).toBeGreaterThan(0)
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
it('should omit copilot reviews when disabled', async () => {
|
|
347
|
-
const github = createMockGitHub()
|
|
348
|
-
const config = defaultConfig({ copilotReviews: false })
|
|
349
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
350
|
-
|
|
351
|
-
expect(result!.copilotReviews).toBeUndefined()
|
|
352
|
-
})
|
|
353
|
-
|
|
354
|
-
it('should return undefined copilotReviews when no PRs have copilot reviews', async () => {
|
|
355
|
-
const github = createMockGitHub({
|
|
356
|
-
getCopilotReviewSummary: vi.fn().mockResolvedValue({
|
|
357
|
-
state: 'none',
|
|
358
|
-
commentCount: 0,
|
|
359
|
-
}),
|
|
360
|
-
})
|
|
361
|
-
const config = defaultConfig({ copilotReviews: true })
|
|
362
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
363
|
-
|
|
364
|
-
expect(result!.copilotReviews).toBeUndefined()
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
it('should handle copilot reviews fetch error gracefully', async () => {
|
|
368
|
-
const github = createMockGitHub({
|
|
369
|
-
getCopilotReviewSummary: vi.fn().mockRejectedValue(new Error('Not found')),
|
|
370
|
-
})
|
|
371
|
-
const config = defaultConfig({ copilotReviews: true })
|
|
372
|
-
|
|
373
|
-
// The entire copilot section should be undefined since the Promise.all catches
|
|
374
|
-
const result = await buildGitHubSection(github as never, config as never)
|
|
375
|
-
// Even if individual reviews fail, the overall section should still return
|
|
376
|
-
expect(result).toBeDefined()
|
|
377
|
-
})
|
|
378
|
-
|
|
379
|
-
// ========================================================================
|
|
380
|
-
// Top-level error
|
|
381
|
-
// ========================================================================
|
|
382
|
-
|
|
383
|
-
it('should return null on top-level error', async () => {
|
|
384
|
-
const { resolveGitHubRepo } = await import('../../src/handlers/resources/shared.js')
|
|
385
|
-
vi.mocked(resolveGitHubRepo).mockRejectedValueOnce(new Error('Network error'))
|
|
386
|
-
|
|
387
|
-
const github = createMockGitHub()
|
|
388
|
-
const result = await buildGitHubSection(github as never, defaultConfig() as never)
|
|
389
|
-
|
|
390
|
-
expect(result).toBeNull()
|
|
391
|
-
})
|
|
392
|
-
})
|