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,495 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — Workflow Prompts, Team Resources, Graph Resources Branch Coverage
|
|
3
|
-
*
|
|
4
|
-
* Targets uncovered branches in:
|
|
5
|
-
* - workflow.ts (64.7%): ?? fallbacks, content truncation, empty entry lists
|
|
6
|
-
* - team.ts (66.66%): enrichWithAuthor, no-teamDb guards, author query catch
|
|
7
|
-
* - graph.ts (70.58%): empty relationships, unknown relationship types, actions fallbacks
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
11
|
-
|
|
12
|
-
vi.mock('../../src/utils/logger.js', () => ({
|
|
13
|
-
logger: { info: vi.fn(), warning: vi.fn(), error: vi.fn(), debug: vi.fn() },
|
|
14
|
-
}))
|
|
15
|
-
|
|
16
|
-
import { getWorkflowPromptDefinitions } from '../../src/handlers/prompts/workflow.js'
|
|
17
|
-
import { getTeamResourceDefinitions } from '../../src/handlers/resources/team.js'
|
|
18
|
-
import { getGraphResourceDefinitions } from '../../src/handlers/resources/graph.js'
|
|
19
|
-
|
|
20
|
-
// ============================================================================
|
|
21
|
-
// Helpers
|
|
22
|
-
// ============================================================================
|
|
23
|
-
|
|
24
|
-
function createMockDb(overrides: Record<string, unknown> = {}) {
|
|
25
|
-
return {
|
|
26
|
-
searchEntries: vi.fn().mockReturnValue([]),
|
|
27
|
-
searchByDateRange: vi.fn().mockReturnValue([]),
|
|
28
|
-
getRecentEntries: vi.fn().mockReturnValue([]),
|
|
29
|
-
getStatistics: vi.fn().mockReturnValue({ totalEntries: 0 }),
|
|
30
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
31
|
-
...overrides,
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function createMockContext(overrides: Record<string, unknown> = {}) {
|
|
36
|
-
return {
|
|
37
|
-
db: createMockDb(),
|
|
38
|
-
teamDb: null as ReturnType<typeof createMockDb> | null,
|
|
39
|
-
github: null,
|
|
40
|
-
...overrides,
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// Workflow Prompts Branch Coverage
|
|
46
|
-
// ============================================================================
|
|
47
|
-
|
|
48
|
-
describe('Workflow prompts — branch coverage', () => {
|
|
49
|
-
let prompts: ReturnType<typeof getWorkflowPromptDefinitions>
|
|
50
|
-
|
|
51
|
-
beforeEach(() => {
|
|
52
|
-
vi.clearAllMocks()
|
|
53
|
-
prompts = getWorkflowPromptDefinitions()
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
it('find-related: should handle empty query fallback', () => {
|
|
57
|
-
const findRelated = prompts.find((p) => p.name === 'find-related')!
|
|
58
|
-
const db = createMockDb()
|
|
59
|
-
const result = findRelated.handler({}, db as never)
|
|
60
|
-
expect(result.messages[0]!.content.text).toContain('Find entries related to: ""')
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
it('prepare-standup: should format entries', () => {
|
|
64
|
-
const standup = prompts.find((p) => p.name === 'prepare-standup')!
|
|
65
|
-
const db = createMockDb({
|
|
66
|
-
searchByDateRange: vi
|
|
67
|
-
.fn()
|
|
68
|
-
.mockReturnValue([
|
|
69
|
-
{ timestamp: '2025-01-01', entryType: 'note', content: 'Did things' },
|
|
70
|
-
]),
|
|
71
|
-
})
|
|
72
|
-
const result = standup.handler({}, db as never)
|
|
73
|
-
expect(result.messages[0]!.content.text).toContain('Did things')
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
it('prepare-retro: should use default days when not provided', () => {
|
|
77
|
-
const retro = prompts.find((p) => p.name === 'prepare-retro')!
|
|
78
|
-
const db = createMockDb()
|
|
79
|
-
retro.handler({}, db as never)
|
|
80
|
-
expect(db.searchByDateRange).toHaveBeenCalledTimes(1)
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('prepare-retro: should use custom days', () => {
|
|
84
|
-
const retro = prompts.find((p) => p.name === 'prepare-retro')!
|
|
85
|
-
const db = createMockDb({
|
|
86
|
-
searchByDateRange: vi
|
|
87
|
-
.fn()
|
|
88
|
-
.mockReturnValue([
|
|
89
|
-
{ timestamp: '2025-01-01', entryType: 'note', content: 'x'.repeat(250) },
|
|
90
|
-
]),
|
|
91
|
-
})
|
|
92
|
-
const result = retro.handler({ days: '7' }, db as never)
|
|
93
|
-
expect(result.messages[0]!.content.text).toContain('last 7 days')
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
it('weekly-digest: should format entries with content truncation', () => {
|
|
97
|
-
const digest = prompts.find((p) => p.name === 'weekly-digest')!
|
|
98
|
-
const db = createMockDb({
|
|
99
|
-
searchByDateRange: vi
|
|
100
|
-
.fn()
|
|
101
|
-
.mockReturnValue([
|
|
102
|
-
{ timestamp: '2025-01-01', entryType: 'note', content: 'x'.repeat(200) },
|
|
103
|
-
]),
|
|
104
|
-
})
|
|
105
|
-
const result = digest.handler({}, db as never)
|
|
106
|
-
expect(result.messages[0]!.content.text).toContain('weekly digest')
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
it('analyze-period: should use provided dates', () => {
|
|
110
|
-
const analyze = prompts.find((p) => p.name === 'analyze-period')!
|
|
111
|
-
const db = createMockDb()
|
|
112
|
-
const result = analyze.handler(
|
|
113
|
-
{ start_date: '2025-01-01', end_date: '2025-01-31' },
|
|
114
|
-
db as never
|
|
115
|
-
)
|
|
116
|
-
expect(result.messages[0]!.content.text).toContain('2025-01-01 to 2025-01-31')
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
it('analyze-period: should handle missing date args', () => {
|
|
120
|
-
const analyze = prompts.find((p) => p.name === 'analyze-period')!
|
|
121
|
-
const db = createMockDb()
|
|
122
|
-
const result = analyze.handler({}, db as never)
|
|
123
|
-
expect(result.messages[0]!.content.text).toContain('Analyze the period')
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
it('goal-tracker: should format significant entries', () => {
|
|
127
|
-
const goalTracker = prompts.find((p) => p.name === 'goal-tracker')!
|
|
128
|
-
const db = createMockDb({
|
|
129
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
130
|
-
})
|
|
131
|
-
const result = goalTracker.handler({}, db as never)
|
|
132
|
-
expect(result.messages[0]!.content.text).toContain('goals')
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
it('get-context-bundle: should truncate content over 60 chars', () => {
|
|
136
|
-
const contextBundle = prompts.find((p) => p.name === 'get-context-bundle')!
|
|
137
|
-
const db = createMockDb({
|
|
138
|
-
getRecentEntries: vi.fn().mockReturnValue([
|
|
139
|
-
{ id: 1, entryType: 'note', timestamp: '2025-01-01', content: 'x'.repeat(70) },
|
|
140
|
-
{ id: 2, entryType: 'note', timestamp: '2025-01-02', content: 'short' },
|
|
141
|
-
]),
|
|
142
|
-
})
|
|
143
|
-
const result = contextBundle.handler({}, db as never)
|
|
144
|
-
expect(result.messages[0]!.content.text).toContain('...')
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
it('get-recent-entries: should use default limit', () => {
|
|
148
|
-
const recent = prompts.find((p) => p.name === 'get-recent-entries')!
|
|
149
|
-
const db = createMockDb({
|
|
150
|
-
getRecentEntries: vi.fn().mockReturnValue([
|
|
151
|
-
{
|
|
152
|
-
id: 1,
|
|
153
|
-
entryType: 'note',
|
|
154
|
-
timestamp: '2025-01-01',
|
|
155
|
-
content: 'test',
|
|
156
|
-
tags: ['a'],
|
|
157
|
-
},
|
|
158
|
-
]),
|
|
159
|
-
})
|
|
160
|
-
const result = recent.handler({}, db as never)
|
|
161
|
-
expect(db.getRecentEntries).toHaveBeenCalledWith(10)
|
|
162
|
-
expect(result.messages[0]!.content.text).toContain('a')
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
it('get-recent-entries: should use custom limit and handle empty tags', () => {
|
|
166
|
-
const recent = prompts.find((p) => p.name === 'get-recent-entries')!
|
|
167
|
-
const db = createMockDb({
|
|
168
|
-
getRecentEntries: vi.fn().mockReturnValue([
|
|
169
|
-
{
|
|
170
|
-
id: 1,
|
|
171
|
-
entryType: 'note',
|
|
172
|
-
timestamp: '2025-01-01',
|
|
173
|
-
content: 'test',
|
|
174
|
-
tags: [],
|
|
175
|
-
},
|
|
176
|
-
]),
|
|
177
|
-
})
|
|
178
|
-
const result = recent.handler({ limit: '5' }, db as never)
|
|
179
|
-
expect(db.getRecentEntries).toHaveBeenCalledWith(5)
|
|
180
|
-
expect(result.messages[0]!.content.text).toContain('none')
|
|
181
|
-
})
|
|
182
|
-
|
|
183
|
-
it('confirm-briefing: should handle no entries', () => {
|
|
184
|
-
const confirm = prompts.find((p) => p.name === 'confirm-briefing')!
|
|
185
|
-
const db = createMockDb()
|
|
186
|
-
const result = confirm.handler({}, db as never)
|
|
187
|
-
expect(result.messages[0]!.content.text).toContain('No entries yet')
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
it('confirm-briefing: should format entries when present', () => {
|
|
191
|
-
const confirm = prompts.find((p) => p.name === 'confirm-briefing')!
|
|
192
|
-
const db = createMockDb({
|
|
193
|
-
getRecentEntries: vi
|
|
194
|
-
.fn()
|
|
195
|
-
.mockReturnValue([
|
|
196
|
-
{ id: 1, entryType: 'note', timestamp: '2025-01-01', content: 'x'.repeat(50) },
|
|
197
|
-
]),
|
|
198
|
-
getStatistics: vi.fn().mockReturnValue({ totalEntries: 42 }),
|
|
199
|
-
})
|
|
200
|
-
const result = confirm.handler({}, db as never)
|
|
201
|
-
expect(result.messages[0]!.content.text).toContain('42 total entries')
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
it('session-summary: should handle no entries', () => {
|
|
205
|
-
const summary = prompts.find((p) => p.name === 'session-summary')!
|
|
206
|
-
const db = createMockDb()
|
|
207
|
-
const result = summary.handler({}, db as never)
|
|
208
|
-
expect(result.messages[0]!.content.text).toContain('No entries yet')
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
it('session-summary: should truncate long content', () => {
|
|
212
|
-
const summary = prompts.find((p) => p.name === 'session-summary')!
|
|
213
|
-
const db = createMockDb({
|
|
214
|
-
getRecentEntries: vi.fn().mockReturnValue([
|
|
215
|
-
{ id: 1, entryType: 'note', content: 'x'.repeat(90) },
|
|
216
|
-
{ id: 2, entryType: 'note', content: 'short' },
|
|
217
|
-
]),
|
|
218
|
-
})
|
|
219
|
-
const result = summary.handler({}, db as never)
|
|
220
|
-
expect(result.messages[0]!.content.text).toContain('...')
|
|
221
|
-
// The short entry should NOT have '...'
|
|
222
|
-
expect(result.messages[0]!.content.text).toContain('short')
|
|
223
|
-
})
|
|
224
|
-
})
|
|
225
|
-
|
|
226
|
-
// ============================================================================
|
|
227
|
-
// Team Resources Branch Coverage
|
|
228
|
-
// ============================================================================
|
|
229
|
-
|
|
230
|
-
describe('Team resources — branch coverage', () => {
|
|
231
|
-
let resources: ReturnType<typeof getTeamResourceDefinitions>
|
|
232
|
-
|
|
233
|
-
beforeEach(() => {
|
|
234
|
-
vi.clearAllMocks()
|
|
235
|
-
resources = getTeamResourceDefinitions()
|
|
236
|
-
})
|
|
237
|
-
|
|
238
|
-
describe('memory://team/recent', () => {
|
|
239
|
-
it('should return error when teamDb not configured', () => {
|
|
240
|
-
const resource = resources.find((r) => r.uri === 'memory://team/recent')!
|
|
241
|
-
const context = createMockContext()
|
|
242
|
-
const result = resource.handler('memory://team/recent', context as never) as Record<
|
|
243
|
-
string,
|
|
244
|
-
unknown
|
|
245
|
-
>
|
|
246
|
-
expect((result.data as Record<string, unknown>).error).toContain(
|
|
247
|
-
'Team database not configured'
|
|
248
|
-
)
|
|
249
|
-
})
|
|
250
|
-
|
|
251
|
-
it('should enrich entries with author from teamDb', () => {
|
|
252
|
-
const teamDb = createMockDb({
|
|
253
|
-
getRecentEntries: vi
|
|
254
|
-
.fn()
|
|
255
|
-
.mockReturnValue([
|
|
256
|
-
{ id: 1, entryType: 'note', timestamp: '2025-01-01', content: 'test' },
|
|
257
|
-
]),
|
|
258
|
-
executeRawQuery: vi.fn().mockReturnValue([{ values: [['alice']] }]),
|
|
259
|
-
})
|
|
260
|
-
const context = createMockContext({ teamDb })
|
|
261
|
-
const resource = resources.find((r) => r.uri === 'memory://team/recent')!
|
|
262
|
-
const result = resource.handler('memory://team/recent', context as never) as Record<
|
|
263
|
-
string,
|
|
264
|
-
unknown
|
|
265
|
-
>
|
|
266
|
-
const data = result.data as Record<string, unknown>
|
|
267
|
-
const entries = data.entries as { author: string }[]
|
|
268
|
-
expect(entries[0]!.author).toBe('alice')
|
|
269
|
-
})
|
|
270
|
-
|
|
271
|
-
it('should handle empty entries with fallback timestamp', () => {
|
|
272
|
-
const teamDb = createMockDb({
|
|
273
|
-
getRecentEntries: vi.fn().mockReturnValue([]),
|
|
274
|
-
})
|
|
275
|
-
const context = createMockContext({ teamDb })
|
|
276
|
-
const resource = resources.find((r) => r.uri === 'memory://team/recent')!
|
|
277
|
-
const result = resource.handler('memory://team/recent', context as never) as Record<
|
|
278
|
-
string,
|
|
279
|
-
unknown
|
|
280
|
-
>
|
|
281
|
-
const data = result.data as Record<string, unknown>
|
|
282
|
-
expect(data.count).toBe(0)
|
|
283
|
-
})
|
|
284
|
-
})
|
|
285
|
-
|
|
286
|
-
describe('memory://team/statistics', () => {
|
|
287
|
-
it('should return error when teamDb not configured', () => {
|
|
288
|
-
const resource = resources.find((r) => r.uri === 'memory://team/statistics')!
|
|
289
|
-
const context = createMockContext()
|
|
290
|
-
const result = resource.handler('memory://team/statistics', context as never) as Record<
|
|
291
|
-
string,
|
|
292
|
-
unknown
|
|
293
|
-
>
|
|
294
|
-
expect((result.data as Record<string, unknown>).configured).toBe(false)
|
|
295
|
-
})
|
|
296
|
-
|
|
297
|
-
it('should return stats with author breakdown', () => {
|
|
298
|
-
const teamDb = createMockDb({
|
|
299
|
-
getStatistics: vi.fn().mockReturnValue({ totalEntries: 10 }),
|
|
300
|
-
executeRawQuery: vi.fn().mockReturnValue([
|
|
301
|
-
{
|
|
302
|
-
values: [
|
|
303
|
-
['alice', 5],
|
|
304
|
-
['bob', 3],
|
|
305
|
-
],
|
|
306
|
-
},
|
|
307
|
-
]),
|
|
308
|
-
})
|
|
309
|
-
const context = createMockContext({ teamDb })
|
|
310
|
-
const resource = resources.find((r) => r.uri === 'memory://team/statistics')!
|
|
311
|
-
const result = resource.handler('memory://team/statistics', context as never) as Record<
|
|
312
|
-
string,
|
|
313
|
-
unknown
|
|
314
|
-
>
|
|
315
|
-
const data = result.data as Record<string, unknown>
|
|
316
|
-
expect(data.configured).toBe(true)
|
|
317
|
-
expect((data.authors as { author: string }[])[0]!.author).toBe('alice')
|
|
318
|
-
})
|
|
319
|
-
|
|
320
|
-
it('should handle author query failure gracefully', () => {
|
|
321
|
-
const teamDb = createMockDb({
|
|
322
|
-
getStatistics: vi.fn().mockReturnValue({ totalEntries: 10 }),
|
|
323
|
-
executeRawQuery: vi.fn().mockImplementation(() => {
|
|
324
|
-
throw new Error('fail')
|
|
325
|
-
}),
|
|
326
|
-
})
|
|
327
|
-
const context = createMockContext({ teamDb })
|
|
328
|
-
const resource = resources.find((r) => r.uri === 'memory://team/statistics')!
|
|
329
|
-
const result = resource.handler('memory://team/statistics', context as never) as Record<
|
|
330
|
-
string,
|
|
331
|
-
unknown
|
|
332
|
-
>
|
|
333
|
-
const data = result.data as Record<string, unknown>
|
|
334
|
-
expect(data.configured).toBe(true)
|
|
335
|
-
expect(data.authors).toEqual([])
|
|
336
|
-
})
|
|
337
|
-
|
|
338
|
-
it('should handle empty author result', () => {
|
|
339
|
-
const teamDb = createMockDb({
|
|
340
|
-
getStatistics: vi.fn().mockReturnValue({ totalEntries: 10 }),
|
|
341
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
342
|
-
})
|
|
343
|
-
const context = createMockContext({ teamDb })
|
|
344
|
-
const resource = resources.find((r) => r.uri === 'memory://team/statistics')!
|
|
345
|
-
const result = resource.handler('memory://team/statistics', context as never) as Record<
|
|
346
|
-
string,
|
|
347
|
-
unknown
|
|
348
|
-
>
|
|
349
|
-
const data = result.data as Record<string, unknown>
|
|
350
|
-
expect(data.authors).toEqual([])
|
|
351
|
-
})
|
|
352
|
-
})
|
|
353
|
-
})
|
|
354
|
-
|
|
355
|
-
// ============================================================================
|
|
356
|
-
// Graph Resources Branch Coverage
|
|
357
|
-
// ============================================================================
|
|
358
|
-
|
|
359
|
-
describe('Graph resources — branch coverage', () => {
|
|
360
|
-
let resources: ReturnType<typeof getGraphResourceDefinitions>
|
|
361
|
-
|
|
362
|
-
beforeEach(() => {
|
|
363
|
-
vi.clearAllMocks()
|
|
364
|
-
resources = getGraphResourceDefinitions()
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
describe('memory://graph/recent', () => {
|
|
368
|
-
it('should return no-data message when no relationships', () => {
|
|
369
|
-
const resource = resources.find((r) => r.uri === 'memory://graph/recent')!
|
|
370
|
-
const context = createMockContext({
|
|
371
|
-
db: createMockDb({
|
|
372
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
373
|
-
}),
|
|
374
|
-
})
|
|
375
|
-
const result = resource.handler('memory://graph/recent', context as never) as string
|
|
376
|
-
expect(result).toContain('No relationships found')
|
|
377
|
-
})
|
|
378
|
-
|
|
379
|
-
it('should handle unknown relationship type with default arrow', () => {
|
|
380
|
-
const resource = resources.find((r) => r.uri === 'memory://graph/recent')!
|
|
381
|
-
const context = createMockContext({
|
|
382
|
-
db: createMockDb({
|
|
383
|
-
executeRawQuery: vi.fn().mockReturnValue([
|
|
384
|
-
{
|
|
385
|
-
columns: [
|
|
386
|
-
'from_entry_id',
|
|
387
|
-
'to_entry_id',
|
|
388
|
-
'relationship_type',
|
|
389
|
-
'from_content',
|
|
390
|
-
'to_content',
|
|
391
|
-
],
|
|
392
|
-
values: [
|
|
393
|
-
[1, 2, 'unknown_type', 'Entry one content', 'Entry two content'],
|
|
394
|
-
],
|
|
395
|
-
},
|
|
396
|
-
]),
|
|
397
|
-
}),
|
|
398
|
-
})
|
|
399
|
-
const result = resource.handler('memory://graph/recent', context as never) as string
|
|
400
|
-
expect(result).toContain('-->')
|
|
401
|
-
expect(result).toContain('unknown_type')
|
|
402
|
-
})
|
|
403
|
-
})
|
|
404
|
-
|
|
405
|
-
describe('memory://graph/actions', () => {
|
|
406
|
-
it('should return no-github message when github integration not available', async () => {
|
|
407
|
-
const resource = resources.find((r) => r.uri === 'memory://graph/actions')!
|
|
408
|
-
const context = createMockContext()
|
|
409
|
-
const result = (await resource.handler(
|
|
410
|
-
'memory://graph/actions',
|
|
411
|
-
context as never
|
|
412
|
-
)) as string
|
|
413
|
-
expect(result).toContain('GitHub integration not available')
|
|
414
|
-
})
|
|
415
|
-
|
|
416
|
-
it('should return no-repo message when repo info missing', async () => {
|
|
417
|
-
const resource = resources.find((r) => r.uri === 'memory://graph/actions')!
|
|
418
|
-
const context = createMockContext({
|
|
419
|
-
github: {
|
|
420
|
-
getRepoInfo: vi.fn().mockResolvedValue({ owner: null, repo: null }),
|
|
421
|
-
},
|
|
422
|
-
})
|
|
423
|
-
const result = (await resource.handler(
|
|
424
|
-
'memory://graph/actions',
|
|
425
|
-
context as never
|
|
426
|
-
)) as string
|
|
427
|
-
expect(result).toContain('Repository not detected')
|
|
428
|
-
})
|
|
429
|
-
|
|
430
|
-
it('should return no-runs message when no workflow runs', async () => {
|
|
431
|
-
const resource = resources.find((r) => r.uri === 'memory://graph/actions')!
|
|
432
|
-
const context = createMockContext({
|
|
433
|
-
github: {
|
|
434
|
-
getRepoInfo: vi.fn().mockResolvedValue({ owner: 'o', repo: 'r' }),
|
|
435
|
-
getWorkflowRuns: vi.fn().mockResolvedValue([]),
|
|
436
|
-
},
|
|
437
|
-
})
|
|
438
|
-
const result = (await resource.handler(
|
|
439
|
-
'memory://graph/actions',
|
|
440
|
-
context as never
|
|
441
|
-
)) as string
|
|
442
|
-
expect(result).toContain('No GitHub Actions workflow runs')
|
|
443
|
-
})
|
|
444
|
-
})
|
|
445
|
-
|
|
446
|
-
describe('memory://actions/recent', () => {
|
|
447
|
-
it('should fallback to database when no github', async () => {
|
|
448
|
-
const resource = resources.find((r) => r.uri === 'memory://actions/recent')!
|
|
449
|
-
const context = createMockContext({
|
|
450
|
-
db: createMockDb({
|
|
451
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
452
|
-
}),
|
|
453
|
-
})
|
|
454
|
-
const result = (await resource.handler(
|
|
455
|
-
'memory://actions/recent',
|
|
456
|
-
context as never
|
|
457
|
-
)) as Record<string, unknown>
|
|
458
|
-
expect(result.source).toBe('database')
|
|
459
|
-
})
|
|
460
|
-
|
|
461
|
-
it('should fallback to database when github throws', async () => {
|
|
462
|
-
const resource = resources.find((r) => r.uri === 'memory://actions/recent')!
|
|
463
|
-
const context = createMockContext({
|
|
464
|
-
github: {
|
|
465
|
-
getRepoInfo: vi.fn().mockRejectedValue(new Error('fail')),
|
|
466
|
-
},
|
|
467
|
-
db: createMockDb({
|
|
468
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
469
|
-
}),
|
|
470
|
-
})
|
|
471
|
-
const result = (await resource.handler(
|
|
472
|
-
'memory://actions/recent',
|
|
473
|
-
context as never
|
|
474
|
-
)) as Record<string, unknown>
|
|
475
|
-
expect(result.source).toBe('database')
|
|
476
|
-
})
|
|
477
|
-
|
|
478
|
-
it('should fallback when repo info has no owner', async () => {
|
|
479
|
-
const resource = resources.find((r) => r.uri === 'memory://actions/recent')!
|
|
480
|
-
const context = createMockContext({
|
|
481
|
-
github: {
|
|
482
|
-
getRepoInfo: vi.fn().mockResolvedValue({ owner: null, repo: null }),
|
|
483
|
-
},
|
|
484
|
-
db: createMockDb({
|
|
485
|
-
executeRawQuery: vi.fn().mockReturnValue([]),
|
|
486
|
-
}),
|
|
487
|
-
})
|
|
488
|
-
const result = (await resource.handler(
|
|
489
|
-
'memory://actions/recent',
|
|
490
|
-
context as never
|
|
491
|
-
)) as Record<string, unknown>
|
|
492
|
-
expect(result.source).toBe('database')
|
|
493
|
-
})
|
|
494
|
-
})
|
|
495
|
-
})
|