memory-journal-mcp 4.4.2 → 5.0.0
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/.github/workflows/codeql.yml +1 -6
- package/.github/workflows/docker-publish.yml +15 -49
- package/.github/workflows/lint-and-test.yml +1 -1
- package/.github/workflows/secrets-scanning.yml +4 -3
- package/.github/workflows/security-update.yml +3 -3
- package/CHANGELOG.md +213 -0
- package/CONTRIBUTING.md +132 -97
- package/DOCKER_README.md +184 -235
- package/Dockerfile +27 -24
- package/README.md +218 -190
- package/SECURITY.md +27 -35
- package/dist/cli.js +16 -1
- package/dist/cli.js.map +1 -1
- package/dist/constants/ServerInstructions.d.ts +5 -1
- package/dist/constants/ServerInstructions.d.ts.map +1 -1
- package/dist/constants/ServerInstructions.js +133 -73
- package/dist/constants/ServerInstructions.js.map +1 -1
- package/dist/constants/icons.d.ts +2 -2
- package/dist/constants/icons.d.ts.map +1 -1
- package/dist/constants/icons.js +7 -6
- package/dist/constants/icons.js.map +1 -1
- package/dist/database/SqliteAdapter.d.ts +37 -24
- package/dist/database/SqliteAdapter.d.ts.map +1 -1
- package/dist/database/SqliteAdapter.js +319 -157
- package/dist/database/SqliteAdapter.js.map +1 -1
- package/dist/database/schema.d.ts +45 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +92 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/filtering/ToolFilter.d.ts +1 -1
- package/dist/filtering/ToolFilter.d.ts.map +1 -1
- package/dist/filtering/ToolFilter.js +13 -2
- package/dist/filtering/ToolFilter.js.map +1 -1
- package/dist/github/GitHubIntegration.d.ts.map +1 -1
- package/dist/github/GitHubIntegration.js +1 -3
- package/dist/github/GitHubIntegration.js.map +1 -1
- package/dist/handlers/prompts/github.d.ts +12 -0
- package/dist/handlers/prompts/github.d.ts.map +1 -0
- package/dist/handlers/prompts/github.js +178 -0
- package/dist/handlers/prompts/github.js.map +1 -0
- package/dist/handlers/prompts/index.d.ts +23 -2
- package/dist/handlers/prompts/index.d.ts.map +1 -1
- package/dist/handlers/prompts/index.js +7 -432
- package/dist/handlers/prompts/index.js.map +1 -1
- package/dist/handlers/prompts/workflow.d.ts +12 -0
- package/dist/handlers/prompts/workflow.d.ts.map +1 -0
- package/dist/handlers/prompts/workflow.js +277 -0
- package/dist/handlers/prompts/workflow.js.map +1 -0
- package/dist/handlers/resources/core.d.ts +11 -0
- package/dist/handlers/resources/core.d.ts.map +1 -0
- package/dist/handlers/resources/core.js +433 -0
- package/dist/handlers/resources/core.js.map +1 -0
- package/dist/handlers/resources/github.d.ts +11 -0
- package/dist/handlers/resources/github.d.ts.map +1 -0
- package/dist/handlers/resources/github.js +314 -0
- package/dist/handlers/resources/github.js.map +1 -0
- package/dist/handlers/resources/graph.d.ts +11 -0
- package/dist/handlers/resources/graph.d.ts.map +1 -0
- package/dist/handlers/resources/graph.js +204 -0
- package/dist/handlers/resources/graph.js.map +1 -0
- package/dist/handlers/resources/index.d.ts +5 -20
- package/dist/handlers/resources/index.d.ts.map +1 -1
- package/dist/handlers/resources/index.js +16 -1278
- package/dist/handlers/resources/index.js.map +1 -1
- package/dist/handlers/resources/shared.d.ts +60 -0
- package/dist/handlers/resources/shared.d.ts.map +1 -0
- package/dist/handlers/resources/shared.js +49 -0
- package/dist/handlers/resources/shared.js.map +1 -0
- package/dist/handlers/resources/team.d.ts +13 -0
- package/dist/handlers/resources/team.d.ts.map +1 -0
- package/dist/handlers/resources/team.js +119 -0
- package/dist/handlers/resources/team.js.map +1 -0
- package/dist/handlers/resources/templates.d.ts +13 -0
- package/dist/handlers/resources/templates.d.ts.map +1 -0
- package/dist/handlers/resources/templates.js +310 -0
- package/dist/handlers/resources/templates.js.map +1 -0
- package/dist/handlers/tools/admin.d.ts +8 -0
- package/dist/handlers/tools/admin.d.ts.map +1 -0
- package/dist/handlers/tools/admin.js +270 -0
- package/dist/handlers/tools/admin.js.map +1 -0
- package/dist/handlers/tools/analytics.d.ts +8 -0
- package/dist/handlers/tools/analytics.d.ts.map +1 -0
- package/dist/handlers/tools/analytics.js +256 -0
- package/dist/handlers/tools/analytics.js.map +1 -0
- package/dist/handlers/tools/backup.d.ts +8 -0
- package/dist/handlers/tools/backup.d.ts.map +1 -0
- package/dist/handlers/tools/backup.js +224 -0
- package/dist/handlers/tools/backup.js.map +1 -0
- package/dist/handlers/tools/core.d.ts +9 -0
- package/dist/handlers/tools/core.d.ts.map +1 -0
- package/dist/handlers/tools/core.js +326 -0
- package/dist/handlers/tools/core.js.map +1 -0
- package/dist/handlers/tools/export.d.ts +8 -0
- package/dist/handlers/tools/export.d.ts.map +1 -0
- package/dist/handlers/tools/export.js +89 -0
- package/dist/handlers/tools/export.js.map +1 -0
- package/dist/handlers/tools/github/helpers.d.ts +34 -0
- package/dist/handlers/tools/github/helpers.d.ts.map +1 -0
- package/dist/handlers/tools/github/helpers.js +52 -0
- package/dist/handlers/tools/github/helpers.js.map +1 -0
- package/dist/handlers/tools/github/insights-tools.d.ts +8 -0
- package/dist/handlers/tools/github/insights-tools.d.ts.map +1 -0
- package/dist/handlers/tools/github/insights-tools.js +104 -0
- package/dist/handlers/tools/github/insights-tools.js.map +1 -0
- package/dist/handlers/tools/github/issue-tools.d.ts +8 -0
- package/dist/handlers/tools/github/issue-tools.d.ts.map +1 -0
- package/dist/handlers/tools/github/issue-tools.js +359 -0
- package/dist/handlers/tools/github/issue-tools.js.map +1 -0
- package/dist/handlers/tools/github/kanban-tools.d.ts +8 -0
- package/dist/handlers/tools/github/kanban-tools.d.ts.map +1 -0
- package/dist/handlers/tools/github/kanban-tools.js +108 -0
- package/dist/handlers/tools/github/kanban-tools.js.map +1 -0
- package/dist/handlers/tools/github/milestone-tools.d.ts +9 -0
- package/dist/handlers/tools/github/milestone-tools.d.ts.map +1 -0
- package/dist/handlers/tools/github/milestone-tools.js +302 -0
- package/dist/handlers/tools/github/milestone-tools.js.map +1 -0
- package/dist/handlers/tools/github/mutation-tools.d.ts +12 -0
- package/dist/handlers/tools/github/mutation-tools.d.ts.map +1 -0
- package/dist/handlers/tools/github/mutation-tools.js +15 -0
- package/dist/handlers/tools/github/mutation-tools.js.map +1 -0
- package/dist/handlers/tools/github/read-tools.d.ts +8 -0
- package/dist/handlers/tools/github/read-tools.d.ts.map +1 -0
- package/dist/handlers/tools/github/read-tools.js +260 -0
- package/dist/handlers/tools/github/read-tools.js.map +1 -0
- package/dist/handlers/tools/github/schemas.d.ts +467 -0
- package/dist/handlers/tools/github/schemas.d.ts.map +1 -0
- package/dist/handlers/tools/github/schemas.js +335 -0
- package/dist/handlers/tools/github/schemas.js.map +1 -0
- package/dist/handlers/tools/github.d.ts +14 -0
- package/dist/handlers/tools/github.d.ts.map +1 -0
- package/dist/handlers/tools/github.js +28 -0
- package/dist/handlers/tools/github.js.map +1 -0
- package/dist/handlers/tools/index.d.ts +15 -20
- package/dist/handlers/tools/index.d.ts.map +1 -1
- package/dist/handlers/tools/index.js +117 -2909
- package/dist/handlers/tools/index.js.map +1 -1
- package/dist/handlers/tools/relationships.d.ts +8 -0
- package/dist/handlers/tools/relationships.d.ts.map +1 -0
- package/dist/handlers/tools/relationships.js +308 -0
- package/dist/handlers/tools/relationships.js.map +1 -0
- package/dist/handlers/tools/schemas.d.ts +108 -0
- package/dist/handlers/tools/schemas.d.ts.map +1 -0
- package/dist/handlers/tools/schemas.js +122 -0
- package/dist/handlers/tools/schemas.js.map +1 -0
- package/dist/handlers/tools/search.d.ts +8 -0
- package/dist/handlers/tools/search.d.ts.map +1 -0
- package/dist/handlers/tools/search.js +282 -0
- package/dist/handlers/tools/search.js.map +1 -0
- package/dist/handlers/tools/team.d.ts +11 -0
- package/dist/handlers/tools/team.d.ts.map +1 -0
- package/dist/handlers/tools/team.js +239 -0
- package/dist/handlers/tools/team.js.map +1 -0
- package/dist/server/McpServer.d.ts +4 -0
- package/dist/server/McpServer.d.ts.map +1 -1
- package/dist/server/McpServer.js +48 -297
- package/dist/server/McpServer.js.map +1 -1
- package/dist/server/Scheduler.d.ts +91 -0
- package/dist/server/Scheduler.d.ts.map +1 -0
- package/dist/server/Scheduler.js +201 -0
- package/dist/server/Scheduler.js.map +1 -0
- package/dist/transports/http.d.ts +66 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +519 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/types/entities.d.ts +101 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/entities.js +5 -0
- package/dist/types/entities.js.map +1 -0
- package/dist/types/filtering.d.ts +34 -0
- package/dist/types/filtering.d.ts.map +1 -0
- package/dist/types/filtering.js +5 -0
- package/dist/types/filtering.js.map +1 -0
- package/dist/types/github.d.ts +166 -0
- package/dist/types/github.d.ts.map +1 -0
- package/dist/types/github.js +5 -0
- package/dist/types/github.js.map +1 -0
- package/dist/types/index.d.ts +35 -292
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/error-helpers.d.ts +37 -0
- package/dist/utils/error-helpers.d.ts.map +1 -0
- package/dist/utils/error-helpers.js +47 -0
- package/dist/utils/error-helpers.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/security-utils.d.ts +0 -21
- package/dist/utils/security-utils.d.ts.map +1 -1
- package/dist/utils/security-utils.js +0 -47
- package/dist/utils/security-utils.js.map +1 -1
- package/dist/vector/VectorSearchManager.d.ts.map +1 -1
- package/dist/vector/VectorSearchManager.js +9 -32
- package/dist/vector/VectorSearchManager.js.map +1 -1
- package/docker-compose.yml +11 -2
- package/hooks/README.md +107 -0
- package/hooks/cursor/hooks.json +10 -0
- package/hooks/cursor/memory-journal.mdc +22 -0
- package/hooks/cursor/session-end.sh +19 -0
- package/hooks/kilo-code/session-end-mode.json +11 -0
- package/hooks/kiro/session-end.md +13 -0
- package/mcp-config-example.json +1 -0
- package/package.json +11 -9
- package/playwright.config.ts +29 -0
- package/releases/v4.5.0.md +116 -0
- package/releases/v5.0.0.md +105 -0
- package/scripts/generate-server-instructions.ts +176 -0
- package/scripts/server-instructions-function-body.ts +77 -0
- package/server.json +3 -3
- package/src/cli.ts +45 -1
- package/src/constants/ServerInstructions.ts +133 -73
- package/src/constants/icons.ts +8 -7
- package/src/constants/server-instructions.md +268 -0
- package/src/database/SqliteAdapter.ts +358 -192
- package/src/database/schema.ts +125 -0
- package/src/filtering/ToolFilter.ts +13 -2
- package/src/github/GitHubIntegration.ts +1 -3
- package/src/handlers/prompts/github.ts +209 -0
- package/src/handlers/prompts/index.ts +10 -499
- package/src/handlers/prompts/workflow.ts +314 -0
- package/src/handlers/resources/core.ts +528 -0
- package/src/handlers/resources/github.ts +358 -0
- package/src/handlers/resources/graph.ts +254 -0
- package/src/handlers/resources/index.ts +23 -1570
- package/src/handlers/resources/shared.ts +103 -0
- package/src/handlers/resources/team.ts +133 -0
- package/src/handlers/resources/templates.ts +374 -0
- package/src/handlers/tools/admin.ts +285 -0
- package/src/handlers/tools/analytics.ts +301 -0
- package/src/handlers/tools/backup.ts +242 -0
- package/src/handlers/tools/core.ts +350 -0
- package/src/handlers/tools/export.ts +115 -0
- package/src/handlers/tools/github/helpers.ts +86 -0
- package/src/handlers/tools/github/insights-tools.ts +119 -0
- package/src/handlers/tools/github/issue-tools.ts +439 -0
- package/src/handlers/tools/github/kanban-tools.ts +134 -0
- package/src/handlers/tools/github/milestone-tools.ts +392 -0
- package/src/handlers/tools/github/mutation-tools.ts +17 -0
- package/src/handlers/tools/github/read-tools.ts +328 -0
- package/src/handlers/tools/github/schemas.ts +369 -0
- package/src/handlers/tools/github.ts +36 -0
- package/src/handlers/tools/index.ts +144 -3325
- package/src/handlers/tools/relationships.ts +358 -0
- package/src/handlers/tools/schemas.ts +132 -0
- package/src/handlers/tools/search.ts +343 -0
- package/src/handlers/tools/team.ts +273 -0
- package/src/server/McpServer.ts +63 -358
- package/src/server/Scheduler.ts +278 -0
- package/src/transports/http.ts +635 -0
- package/src/types/entities.ts +145 -0
- package/src/types/filtering.ts +54 -0
- package/src/types/github.ts +180 -0
- package/src/types/index.ts +67 -375
- package/src/utils/error-helpers.ts +52 -0
- package/src/utils/logger.ts +6 -3
- package/src/utils/security-utils.ts +0 -52
- package/src/vector/VectorSearchManager.ts +9 -33
- package/tests/constants/icons.test.ts +1 -2
- package/tests/constants/server-instructions.test.ts +30 -4
- package/tests/database/sqlite-adapter.test.ts +91 -7
- package/tests/e2e/auth.spec.ts +154 -0
- package/tests/e2e/health.spec.ts +63 -0
- package/tests/e2e/protocols.spec.ts +134 -0
- package/tests/e2e/resources.spec.ts +103 -0
- package/tests/e2e/scheduler.spec.ts +79 -0
- package/tests/e2e/security.spec.ts +91 -0
- package/tests/e2e/sessions.spec.ts +95 -0
- package/tests/e2e/stateless.spec.ts +121 -0
- package/tests/e2e/tools.spec.ts +111 -0
- package/tests/filtering/tool-filter.test.ts +46 -0
- package/tests/handlers/error-path-coverage.test.ts +324 -0
- package/tests/handlers/github-resource-handlers.test.ts +453 -0
- package/tests/handlers/github-tool-handlers.test.ts +899 -0
- package/tests/handlers/prompt-handler-coverage.test.ts +106 -0
- package/tests/handlers/prompt-handlers.test.ts +40 -0
- package/tests/handlers/resource-handler-coverage.test.ts +181 -0
- package/tests/handlers/resource-handlers.test.ts +33 -9
- package/tests/handlers/search-tool-handlers.test.ts +272 -0
- package/tests/handlers/targeted-gap-closure.test.ts +387 -0
- package/tests/handlers/team-resource-handlers.test.ts +156 -0
- package/tests/handlers/team-tool-handlers.test.ts +301 -0
- package/tests/handlers/tool-handler-coverage.test.ts +469 -0
- package/tests/handlers/tool-handlers.test.ts +2 -2
- package/tests/security/sql-injection.test.ts +3 -54
- package/tests/server/mcp-server.test.ts +503 -8
- package/tests/server/scheduler.test.ts +400 -0
- package/tests/transports/http-transport.test.ts +620 -0
- package/tests/vector/vector-search-manager.test.ts +60 -0
- package/vitest.config.ts +4 -1
- package/.memory-journal-team.db +0 -0
- package/.vscode/settings.json +0 -84
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Journal MCP Server - Database Schema
|
|
3
|
+
*
|
|
4
|
+
* SQL DDL for initialization and input types for the database adapter.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { EntryType, SignificanceType } from '../types/index.js'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* SQL schema for database initialization.
|
|
11
|
+
* Creates all tables and indexes if they don't already exist.
|
|
12
|
+
*/
|
|
13
|
+
export const SCHEMA_SQL = `
|
|
14
|
+
-- Main journal entries table
|
|
15
|
+
CREATE TABLE IF NOT EXISTS memory_journal (
|
|
16
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
17
|
+
entry_type TEXT NOT NULL,
|
|
18
|
+
content TEXT NOT NULL,
|
|
19
|
+
timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
+
is_personal INTEGER DEFAULT 1,
|
|
21
|
+
significance_type TEXT,
|
|
22
|
+
auto_context TEXT,
|
|
23
|
+
deleted_at TEXT,
|
|
24
|
+
-- GitHub integration fields
|
|
25
|
+
project_number INTEGER,
|
|
26
|
+
project_owner TEXT,
|
|
27
|
+
issue_number INTEGER,
|
|
28
|
+
issue_url TEXT,
|
|
29
|
+
pr_number INTEGER,
|
|
30
|
+
pr_url TEXT,
|
|
31
|
+
pr_status TEXT,
|
|
32
|
+
workflow_run_id INTEGER,
|
|
33
|
+
workflow_name TEXT,
|
|
34
|
+
workflow_status TEXT
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
-- Tags table
|
|
38
|
+
CREATE TABLE IF NOT EXISTS tags (
|
|
39
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
40
|
+
name TEXT UNIQUE NOT NULL,
|
|
41
|
+
usage_count INTEGER DEFAULT 0
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
-- Junction table for entry-tag relationships
|
|
45
|
+
CREATE TABLE IF NOT EXISTS entry_tags (
|
|
46
|
+
entry_id INTEGER NOT NULL,
|
|
47
|
+
tag_id INTEGER NOT NULL,
|
|
48
|
+
PRIMARY KEY (entry_id, tag_id),
|
|
49
|
+
FOREIGN KEY (entry_id) REFERENCES memory_journal(id) ON DELETE CASCADE,
|
|
50
|
+
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
-- Relationships between entries
|
|
54
|
+
CREATE TABLE IF NOT EXISTS relationships (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
from_entry_id INTEGER NOT NULL,
|
|
57
|
+
to_entry_id INTEGER NOT NULL,
|
|
58
|
+
relationship_type TEXT NOT NULL,
|
|
59
|
+
description TEXT,
|
|
60
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
61
|
+
FOREIGN KEY (from_entry_id) REFERENCES memory_journal(id) ON DELETE CASCADE,
|
|
62
|
+
FOREIGN KEY (to_entry_id) REFERENCES memory_journal(id) ON DELETE CASCADE
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
-- Embeddings for vector search (stored as JSON for sql.js compatibility)
|
|
66
|
+
CREATE TABLE IF NOT EXISTS embeddings (
|
|
67
|
+
entry_id INTEGER PRIMARY KEY,
|
|
68
|
+
embedding TEXT NOT NULL,
|
|
69
|
+
model_name TEXT NOT NULL,
|
|
70
|
+
FOREIGN KEY (entry_id) REFERENCES memory_journal(id) ON DELETE CASCADE
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- Indexes for performance
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_timestamp ON memory_journal(timestamp);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_type ON memory_journal(entry_type);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_personal ON memory_journal(is_personal);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_deleted ON memory_journal(deleted_at);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_project ON memory_journal(project_number);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_issue ON memory_journal(issue_number);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_memory_journal_pr ON memory_journal(pr_number);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name);
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_entry_tags_entry ON entry_tags(entry_id);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_entry_tags_tag ON entry_tags(tag_id);
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_from ON relationships(from_entry_id);
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_relationships_to ON relationships(to_entry_id);
|
|
86
|
+
`
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Input for creating a new entry
|
|
90
|
+
*/
|
|
91
|
+
export interface CreateEntryInput {
|
|
92
|
+
content: string
|
|
93
|
+
entryType?: EntryType
|
|
94
|
+
tags?: string[]
|
|
95
|
+
isPersonal?: boolean
|
|
96
|
+
significanceType?: SignificanceType
|
|
97
|
+
autoContext?: string
|
|
98
|
+
projectNumber?: number
|
|
99
|
+
projectOwner?: string
|
|
100
|
+
issueNumber?: number
|
|
101
|
+
issueUrl?: string
|
|
102
|
+
prNumber?: number
|
|
103
|
+
prUrl?: string
|
|
104
|
+
prStatus?: 'draft' | 'open' | 'merged' | 'closed'
|
|
105
|
+
workflowRunId?: number
|
|
106
|
+
workflowName?: string
|
|
107
|
+
workflowStatus?: 'queued' | 'in_progress' | 'completed'
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* SQL migration to add the author column for team databases.
|
|
112
|
+
* Applied after SCHEMA_SQL when initializing a team database.
|
|
113
|
+
*/
|
|
114
|
+
export const TEAM_SCHEMA_SQL = `
|
|
115
|
+
-- Author column for team entries (identifies who shared the entry)
|
|
116
|
+
ALTER TABLE memory_journal ADD COLUMN author TEXT;
|
|
117
|
+
`
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Input for creating a team entry (extends standard entry with author)
|
|
121
|
+
*/
|
|
122
|
+
export interface CreateTeamEntryInput extends CreateEntryInput {
|
|
123
|
+
/** Author name (auto-detected from git config or TEAM_AUTHOR env) */
|
|
124
|
+
author?: string
|
|
125
|
+
}
|
|
@@ -13,7 +13,7 @@ export type { ToolFilterConfig } from '../types/index.js'
|
|
|
13
13
|
/**
|
|
14
14
|
* Tool group definitions mapping group names to tool names
|
|
15
15
|
*
|
|
16
|
-
* All
|
|
16
|
+
* All 42 tools are categorized here for filtering support.
|
|
17
17
|
*/
|
|
18
18
|
export const TOOL_GROUPS: Record<ToolGroup, string[]> = {
|
|
19
19
|
core: [
|
|
@@ -53,6 +53,7 @@ export const TOOL_GROUPS: Record<ToolGroup, string[]> = {
|
|
|
53
53
|
'get_repo_insights',
|
|
54
54
|
],
|
|
55
55
|
backup: ['backup_journal', 'list_backups', 'restore_backup', 'cleanup_backups'],
|
|
56
|
+
team: ['team_create_entry', 'team_get_recent', 'team_search'],
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
/**
|
|
@@ -61,7 +62,17 @@ export const TOOL_GROUPS: Record<ToolGroup, string[]> = {
|
|
|
61
62
|
export const META_GROUPS: Record<MetaGroup, ToolGroup[]> = {
|
|
62
63
|
starter: ['core', 'search'],
|
|
63
64
|
essential: ['core'],
|
|
64
|
-
full: [
|
|
65
|
+
full: [
|
|
66
|
+
'core',
|
|
67
|
+
'search',
|
|
68
|
+
'analytics',
|
|
69
|
+
'relationships',
|
|
70
|
+
'export',
|
|
71
|
+
'admin',
|
|
72
|
+
'github',
|
|
73
|
+
'backup',
|
|
74
|
+
'team',
|
|
75
|
+
],
|
|
65
76
|
readonly: ['core', 'search', 'analytics', 'relationships', 'export'],
|
|
66
77
|
}
|
|
67
78
|
|
|
@@ -1124,12 +1124,10 @@ export class GitHubIntegration {
|
|
|
1124
1124
|
if (cached) return cached
|
|
1125
1125
|
|
|
1126
1126
|
try {
|
|
1127
|
-
// GitHub REST API uses 'open' | 'closed' | 'all' for milestone state
|
|
1128
|
-
const apiState = state === 'all' ? undefined : state
|
|
1129
1127
|
const response = await this.octokit.issues.listMilestones({
|
|
1130
1128
|
owner,
|
|
1131
1129
|
repo,
|
|
1132
|
-
state
|
|
1130
|
+
state,
|
|
1133
1131
|
per_page: limit,
|
|
1134
1132
|
sort: 'due_on',
|
|
1135
1133
|
direction: 'asc',
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Journal MCP Server - GitHub Prompt Definitions
|
|
3
|
+
*
|
|
4
|
+
* Prompts: project-status-summary, pr-summary, code-review-prep,
|
|
5
|
+
* pr-retrospective, actions-failure-digest, project-milestone-tracker
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SqliteAdapter } from '../../database/SqliteAdapter.js'
|
|
9
|
+
import { ICON_PROMPT } from '../../constants/icons.js'
|
|
10
|
+
import { execQuery, type InternalPromptDef } from './index.js'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Get GitHub prompt definitions
|
|
14
|
+
*/
|
|
15
|
+
export function getGitHubPromptDefinitions(): InternalPromptDef[] {
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
name: 'project-status-summary',
|
|
19
|
+
description: 'GitHub Project status reports',
|
|
20
|
+
icons: [ICON_PROMPT],
|
|
21
|
+
arguments: [
|
|
22
|
+
{ name: 'project_number', description: 'GitHub Project number', required: true },
|
|
23
|
+
],
|
|
24
|
+
handler: (args: Record<string, string>, db: SqliteAdapter) => {
|
|
25
|
+
const projectNumber = parseInt(args['project_number'] ?? '0', 10)
|
|
26
|
+
const entries = execQuery(
|
|
27
|
+
db,
|
|
28
|
+
`
|
|
29
|
+
SELECT * FROM memory_journal
|
|
30
|
+
WHERE project_number = ?
|
|
31
|
+
AND deleted_at IS NULL
|
|
32
|
+
ORDER BY timestamp DESC
|
|
33
|
+
LIMIT 20
|
|
34
|
+
`,
|
|
35
|
+
[projectNumber]
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
messages: [
|
|
40
|
+
{
|
|
41
|
+
role: 'user',
|
|
42
|
+
content: {
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: `Generate a status summary for Project #${String(projectNumber)}:\n\nEntries: ${JSON.stringify(entries, null, 2)}\n\nProvide: overview, recent activity, blockers, next steps.`,
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'pr-summary',
|
|
53
|
+
description: 'Pull request journal activity summary',
|
|
54
|
+
icons: [ICON_PROMPT],
|
|
55
|
+
arguments: [{ name: 'pr_number', description: 'Pull request number', required: true }],
|
|
56
|
+
handler: (args: Record<string, string>, db: SqliteAdapter) => {
|
|
57
|
+
const prNumber = parseInt(args['pr_number'] ?? '0', 10)
|
|
58
|
+
const entries = execQuery(
|
|
59
|
+
db,
|
|
60
|
+
`
|
|
61
|
+
SELECT * FROM memory_journal
|
|
62
|
+
WHERE pr_number = ?
|
|
63
|
+
AND deleted_at IS NULL
|
|
64
|
+
ORDER BY timestamp ASC
|
|
65
|
+
`,
|
|
66
|
+
[prNumber]
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
messages: [
|
|
71
|
+
{
|
|
72
|
+
role: 'user',
|
|
73
|
+
content: {
|
|
74
|
+
type: 'text',
|
|
75
|
+
text: `Summarize PR #${String(prNumber)} activity:\n\nJournal entries: ${JSON.stringify(entries, null, 2)}\n\nProvide: summary of changes, decisions made, testing done.`,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'code-review-prep',
|
|
84
|
+
description: 'Comprehensive PR review preparation',
|
|
85
|
+
icons: [ICON_PROMPT],
|
|
86
|
+
arguments: [{ name: 'pr_number', description: 'Pull request number', required: true }],
|
|
87
|
+
handler: (args: Record<string, string>, db: SqliteAdapter) => {
|
|
88
|
+
const prNumber = parseInt(args['pr_number'] ?? '0', 10)
|
|
89
|
+
const entries = execQuery(
|
|
90
|
+
db,
|
|
91
|
+
`
|
|
92
|
+
SELECT * FROM memory_journal
|
|
93
|
+
WHERE pr_number = ?
|
|
94
|
+
AND deleted_at IS NULL
|
|
95
|
+
ORDER BY timestamp ASC
|
|
96
|
+
`,
|
|
97
|
+
[prNumber]
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
messages: [
|
|
102
|
+
{
|
|
103
|
+
role: 'user',
|
|
104
|
+
content: {
|
|
105
|
+
type: 'text',
|
|
106
|
+
text: `Prepare for code review of PR #${String(prNumber)}:\n\nContext entries: ${JSON.stringify(entries, null, 2)}\n\nProvide: review checklist, areas of concern, testing recommendations.`,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'pr-retrospective',
|
|
115
|
+
description: 'Completed PR analysis with learnings',
|
|
116
|
+
icons: [ICON_PROMPT],
|
|
117
|
+
arguments: [{ name: 'pr_number', description: 'Pull request number', required: true }],
|
|
118
|
+
handler: (args: Record<string, string>, db: SqliteAdapter) => {
|
|
119
|
+
const prNumber = parseInt(args['pr_number'] ?? '0', 10)
|
|
120
|
+
const entries = execQuery(
|
|
121
|
+
db,
|
|
122
|
+
`
|
|
123
|
+
SELECT * FROM memory_journal
|
|
124
|
+
WHERE pr_number = ?
|
|
125
|
+
AND deleted_at IS NULL
|
|
126
|
+
ORDER BY timestamp ASC
|
|
127
|
+
`,
|
|
128
|
+
[prNumber]
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
messages: [
|
|
133
|
+
{
|
|
134
|
+
role: 'user',
|
|
135
|
+
content: {
|
|
136
|
+
type: 'text',
|
|
137
|
+
text: `Retrospective for PR #${String(prNumber)}:\n\nJournal entries: ${JSON.stringify(entries, null, 2)}\n\nProvide: what went well, challenges, lessons learned.`,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'actions-failure-digest',
|
|
146
|
+
description: 'CI/CD failure analysis with root cause identification',
|
|
147
|
+
icons: [ICON_PROMPT],
|
|
148
|
+
arguments: [],
|
|
149
|
+
handler: (_args: Record<string, string>, db: SqliteAdapter) => {
|
|
150
|
+
const entries = execQuery(
|
|
151
|
+
db,
|
|
152
|
+
`
|
|
153
|
+
SELECT * FROM memory_journal
|
|
154
|
+
WHERE workflow_run_id IS NOT NULL
|
|
155
|
+
AND deleted_at IS NULL
|
|
156
|
+
ORDER BY timestamp DESC
|
|
157
|
+
LIMIT 20
|
|
158
|
+
`
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
return {
|
|
162
|
+
messages: [
|
|
163
|
+
{
|
|
164
|
+
role: 'user',
|
|
165
|
+
content: {
|
|
166
|
+
type: 'text',
|
|
167
|
+
text: `Analyze CI/CD failures from these workflow entries:\n\n${JSON.stringify(entries, null, 2)}\n\nProvide: failure patterns, root causes, remediation steps.`,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'project-milestone-tracker',
|
|
176
|
+
description: 'Milestone progress tracking',
|
|
177
|
+
icons: [ICON_PROMPT],
|
|
178
|
+
arguments: [
|
|
179
|
+
{ name: 'project_number', description: 'GitHub Project number', required: true },
|
|
180
|
+
],
|
|
181
|
+
handler: (args: Record<string, string>, db: SqliteAdapter) => {
|
|
182
|
+
const projectNumber = parseInt(args['project_number'] ?? '0', 10)
|
|
183
|
+
const entries = execQuery(
|
|
184
|
+
db,
|
|
185
|
+
`
|
|
186
|
+
SELECT * FROM memory_journal
|
|
187
|
+
WHERE project_number = ?
|
|
188
|
+
AND significance_type IS NOT NULL
|
|
189
|
+
AND deleted_at IS NULL
|
|
190
|
+
ORDER BY timestamp DESC
|
|
191
|
+
`,
|
|
192
|
+
[projectNumber]
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
messages: [
|
|
197
|
+
{
|
|
198
|
+
role: 'user',
|
|
199
|
+
content: {
|
|
200
|
+
type: 'text',
|
|
201
|
+
text: `Track milestones for Project #${String(projectNumber)}:\n\nMilestone entries: ${JSON.stringify(entries, null, 2)}\n\nProvide: progress summary, upcoming milestones, timeline.`,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
]
|
|
209
|
+
}
|