memory-journal-mcp 6.2.1 → 7.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/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
- import { VERSION, createServer } from './chunk-N6EBIDN7.js';
2
- import { logger } from './chunk-BI4ZNSKA.js';
1
+ import { VERSION, createServer } from './chunk-SBNQ7MXZ.js';
2
+ import { DEFAULT_AUDIT_LOG_MAX_SIZE_BYTES } from './chunk-2BJHLTYP.js';
3
3
  import './chunk-OKOVZ5QE.js';
4
+ import { logger } from './chunk-ARLH46WS.js';
4
5
  import { Command } from 'commander';
5
6
  import * as fs from 'fs';
6
7
 
@@ -42,6 +43,16 @@ program.name("memory-journal-mcp").description("Project context management for A
42
43
  "--oauth-clock-tolerance <seconds>",
43
44
  "OAuth clock tolerance in seconds (default: 60)",
44
45
  "60"
46
+ ).option(
47
+ "--audit-log <path>",
48
+ 'Enable audit logging to the specified JSONL file path, or "stderr" for container mode (env: AUDIT_LOG_PATH)'
49
+ ).option("--audit-redact", "Redact tool arguments from audit entries (env: AUDIT_REDACT)").option(
50
+ "--audit-reads",
51
+ "Enable audit logging for read-scoped tool calls (default: off, env: AUDIT_READS)"
52
+ ).option(
53
+ "--audit-log-max-size <bytes>",
54
+ "Maximum audit log file size in bytes before rotation (default: 10485760 / 10MB, env: AUDIT_LOG_MAX_SIZE)",
55
+ String(DEFAULT_AUDIT_LOG_MAX_SIZE_BYTES)
45
56
  ).option(
46
57
  "--instruction-level <level>",
47
58
  "Briefing depth: essential, standard, full (env: INSTRUCTION_LEVEL)",
@@ -96,6 +107,17 @@ program.name("memory-journal-mcp").description("Project context management for A
96
107
  ...host ? { host } : {}
97
108
  });
98
109
  try {
110
+ const auditLogPath = options.auditLog ?? process.env["AUDIT_LOG_PATH"];
111
+ const auditConfig = auditLogPath ? {
112
+ enabled: true,
113
+ logPath: auditLogPath,
114
+ redact: options.auditRedact ?? process.env["AUDIT_REDACT"] === "true",
115
+ auditReads: options.auditReads ?? process.env["AUDIT_READS"] === "true",
116
+ maxSizeBytes: parseInt(
117
+ process.env["AUDIT_LOG_MAX_SIZE"] ?? options.auditLogMaxSize,
118
+ 10
119
+ )
120
+ } : void 0;
99
121
  await createServer({
100
122
  transport: options.transport,
101
123
  port: parseInt(options.port, 10),
@@ -122,6 +144,20 @@ program.name("memory-journal-mcp").description("Project context management for A
122
144
  oauthAudience: options.oauthAudience ?? process.env["OAUTH_AUDIENCE"],
123
145
  oauthJwksUri: options.oauthJwksUri ?? process.env["OAUTH_JWKS_URI"],
124
146
  oauthClockTolerance: parseInt(options.oauthClockTolerance, 10),
147
+ // Project Registry
148
+ projectRegistry: (() => {
149
+ const raw = process.env["PROJECT_REGISTRY"];
150
+ if (!raw) return void 0;
151
+ try {
152
+ return JSON.parse(raw);
153
+ } catch (e) {
154
+ const errName = e instanceof Error ? e.message : String(e);
155
+ throw new Error(
156
+ `Failed to parse PROJECT_REGISTRY environment variable. Must be valid JSON: ${errName}`,
157
+ { cause: e }
158
+ );
159
+ }
160
+ })(),
125
161
  // Briefing configuration
126
162
  briefingConfig: {
127
163
  entryCount: parseInt(
@@ -149,7 +185,8 @@ program.name("memory-journal-mcp").description("Project context management for A
149
185
  workflowSummary: options.workflowSummary ?? process.env["MEMORY_JOURNAL_WORKFLOW_SUMMARY"] ?? void 0,
150
186
  defaultProjectNumber: options.defaultProject ? parseInt(options.defaultProject, 10) : process.env["DEFAULT_PROJECT_NUMBER"] ? parseInt(process.env["DEFAULT_PROJECT_NUMBER"], 10) : void 0
151
187
  },
152
- instructionLevel: options.instructionLevel !== "standard" ? options.instructionLevel : process.env["INSTRUCTION_LEVEL"] ?? "standard"
188
+ instructionLevel: options.instructionLevel !== "standard" ? options.instructionLevel : process.env["INSTRUCTION_LEVEL"] ?? "standard",
189
+ auditConfig
153
190
  });
154
191
  } catch (error) {
155
192
  logger.error("Failed to start server", {
@@ -0,0 +1 @@
1
+ export { GitHubIntegration } from './chunk-ARLH46WS.js';
package/dist/index.d.ts CHANGED
@@ -266,6 +266,10 @@ interface ToolDefinition {
266
266
  /** Tool handler function */
267
267
  handler: (params: unknown) => unknown;
268
268
  }
269
+ interface ProjectRegistryEntry {
270
+ path: string;
271
+ project_number?: number;
272
+ }
269
273
  /**
270
274
  * Resource definition for MCP
271
275
  */
@@ -318,6 +322,8 @@ interface ServerConfig {
318
322
  toolFilter?: string;
319
323
  /** Default GitHub Project number for auto-assignment */
320
324
  defaultProjectNumber?: number;
325
+ /** Project registry mapping dynamic repo IDs to local paths and kanban boards */
326
+ projectRegistry?: Record<string, ProjectRegistryEntry>;
321
327
  /** Enable semantic search */
322
328
  enableSemanticSearch: boolean;
323
329
  /** Sentence transformer model name */
@@ -395,6 +401,10 @@ interface IDatabaseAdapter {
395
401
  prNumber?: number;
396
402
  prStatus?: string;
397
403
  workflowRunId?: number;
404
+ tags?: string[];
405
+ entryType?: EntryType;
406
+ startDate?: string;
407
+ endDate?: string;
398
408
  }): JournalEntry[];
399
409
  searchByDateRange(startDate: string, endDate: string, options?: {
400
410
  entryType?: EntryType;
@@ -587,6 +597,22 @@ interface BriefingConfig {
587
597
  workflowSummary?: string;
588
598
  /** Default GitHub Project number for Kanban resources and issue tools (env: DEFAULT_PROJECT_NUMBER) */
589
599
  defaultProjectNumber?: number;
600
+ /** Project registry mapping dynamic repo IDs to local paths and kanban boards */
601
+ projectRegistry?: Record<string, ProjectRegistryEntry>;
602
+ }
603
+
604
+ /** Audit log configuration */
605
+ interface AuditConfig {
606
+ /** Master switch — false means no interceptor is created */
607
+ enabled: boolean;
608
+ /** Absolute path to the JSONL output file, or "stderr" for container mode */
609
+ logPath: string;
610
+ /** When true, tool arguments are omitted from entries */
611
+ redact: boolean;
612
+ /** When true, read-scoped tools are also logged (default: false) */
613
+ auditReads: boolean;
614
+ /** Maximum log file size in bytes before rotation (default: 10MB). 0 = no rotation. */
615
+ maxSizeBytes: number;
590
616
  }
591
617
 
592
618
  /**
@@ -616,7 +642,9 @@ interface ServerOptions {
616
642
  oauthJwksUri?: string;
617
643
  oauthClockTolerance?: number;
618
644
  briefingConfig?: BriefingConfig;
645
+ projectRegistry?: Record<string, ProjectRegistryEntry>;
619
646
  instructionLevel?: 'essential' | 'standard' | 'full';
647
+ auditConfig?: AuditConfig;
620
648
  }
621
649
  /**
622
650
  * Create and start the MCP server
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
- export { META_GROUPS, TOOL_GROUPS, VERSION, calculateTokenSavings, createServer, filterTools, getAllToolNames, getFilterSummary, getToolFilterFromEnv, getToolGroup, isToolEnabled, parseToolFilter } from './chunk-N6EBIDN7.js';
2
- export { logger } from './chunk-BI4ZNSKA.js';
1
+ export { VERSION, createServer } from './chunk-SBNQ7MXZ.js';
2
+ export { META_GROUPS, TOOL_GROUPS, calculateTokenSavings, filterTools, getAllToolNames, getFilterSummary, getToolFilterFromEnv, getToolGroup, isToolEnabled, parseToolFilter } from './chunk-2BJHLTYP.js';
3
3
  import './chunk-OKOVZ5QE.js';
4
+ export { logger } from './chunk-ARLH46WS.js';
4
5
 
5
6
  // src/types/index.ts
6
7
  var DEFAULT_CONFIG = {
@@ -0,0 +1,3 @@
1
+ export { callTool, getGlobalAuditLogger, getTools, initializeAuditLogger } from './chunk-2BJHLTYP.js';
2
+ import './chunk-OKOVZ5QE.js';
3
+ import './chunk-ARLH46WS.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memory-journal-mcp",
3
- "version": "6.2.1",
3
+ "version": "7.0.0",
4
4
  "description": "Project context management for AI-assisted development - Persistent knowledge graphs and intelligent context recall across fragmented AI threads",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -23,7 +23,7 @@
23
23
  "check": "npm run lint && npm run typecheck",
24
24
  "test": "vitest run",
25
25
  "test:watch": "vitest",
26
- "test:coverage": "vitest run --coverage",
26
+ "test:coverage": "vitest run --coverage && npx tsx scripts/update-badges.ts",
27
27
  "bench": "vitest bench --run",
28
28
  "test:e2e": "playwright test",
29
29
  "generate:instructions": "node scripts/generate-server-instructions.ts"
@@ -58,7 +58,7 @@
58
58
  "node": ">=24.0.0"
59
59
  },
60
60
  "dependencies": {
61
- "@huggingface/transformers": "^3.8.1",
61
+ "@huggingface/transformers": "^4.0.1",
62
62
  "@modelcontextprotocol/sdk": "^1.27.1",
63
63
  "@octokit/graphql": "^9.0.3",
64
64
  "@octokit/rest": "^22.0.1",
@@ -66,24 +66,24 @@
66
66
  "commander": "^14.0.3",
67
67
  "express": "^5.2.1",
68
68
  "jose": "^6.2.1",
69
- "simple-git": "^3.33.0",
69
+ "simple-git": "^3.35.2",
70
70
  "sqlite-vec": "^0.1.7-alpha.2",
71
71
  "zod": "^4.3.6"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@eslint/js": "^10.0.1",
75
- "esbuild": "^0.25.0",
76
- "@playwright/test": "^1.58.2",
75
+ "esbuild": "^0.28.0",
76
+ "@playwright/test": "^1.59.1",
77
77
  "@types/better-sqlite3": "^7.6.13",
78
78
  "@types/express": "^5.0.6",
79
- "@types/node": "^25.4.0",
80
- "@vitest/coverage-v8": "^4.0.18",
81
- "eslint": "^10.0.2",
79
+ "@types/node": "^25.5.2",
80
+ "@vitest/coverage-v8": "^4.1.3",
81
+ "eslint": "^10.2.0",
82
82
  "globals": "^17.4.0",
83
83
  "tsup": "^8.5.1",
84
- "typescript": "^5.9.3",
84
+ "typescript": "^6.0.2",
85
85
  "typescript-eslint": "^8.57.0",
86
- "vitest": "^4.0.17"
86
+ "vitest": "^4.1.3"
87
87
  },
88
88
  "overrides": {
89
89
  "axios": "^1.13.6",
@@ -92,8 +92,9 @@
92
92
  "onnxruntime-web": "npm:empty-npm-package@1.0.0",
93
93
  "sharp": "npm:empty-npm-package@1.0.0",
94
94
  "zod": "$zod",
95
- "minimatch": "10.2.4",
96
- "tar": "7.5.11",
97
- "tmp": "^0.2.5"
95
+ "minimatch": "10.2.5",
96
+ "tar": "7.5.13",
97
+ "tmp": "^0.2.5",
98
+ "vite": "^8.0.5"
98
99
  }
99
100
  }
@@ -1,2 +0,0 @@
1
- export { callTool, getTools } from './chunk-BI4ZNSKA.js';
2
- import './chunk-OKOVZ5QE.js';