memory-journal-mcp 7.0.1 → 7.2.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/README.md +75 -66
- package/dist/{chunk-6J4RPJ4I.js → chunk-GR4T3SRW.js} +146 -105
- package/dist/{chunk-ARLH46WS.js → chunk-IWKLHSPU.js} +89 -3
- package/dist/{chunk-2BJHLTYP.js → chunk-ORV7ZZOE.js} +1086 -86
- package/dist/cli.js +30 -4
- package/dist/github-integration-2TFMXHIJ.js +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +3 -3
- package/dist/{tools-FFFGXIKN.js → tools-CXR2FEB2.js} +2 -2
- package/package.json +2 -2
- package/skills/README.md +77 -0
- package/skills/autonomous-dev/SKILL.md +56 -0
- package/skills/bin/sync.js +50 -0
- package/skills/bun/SKILL.md +156 -0
- package/skills/github-commander/SKILL.md +1 -1
- package/skills/github-commander/workflows/code-quality-audit.md +7 -5
- package/skills/github-commander/workflows/issue-triage.md +13 -4
- package/skills/github-commander/workflows/milestone-sprint.md +9 -1
- package/skills/github-commander/workflows/perf-audit.md +2 -0
- package/skills/github-commander/workflows/pr-review.md +9 -3
- package/skills/github-commander/workflows/roadmap-kickoff.md +79 -0
- package/skills/github-commander/workflows/security-audit.md +3 -3
- package/skills/github-commander/workflows/update-deps.md +2 -2
- package/skills/gitlab/SKILL.md +115 -0
- package/skills/gitlab/package-lock.json +392 -0
- package/skills/gitlab/package.json +14 -0
- package/skills/gitlab/scripts/gitlab-client.ts +125 -0
- package/skills/gitlab/scripts/gitlab-helper.ts +80 -0
- package/skills/golang/SKILL.md +54 -0
- package/skills/mysql/SKILL.md +30 -0
- package/skills/package.json +48 -0
- package/skills/playwright-standard/SKILL.md +58 -0
- package/skills/playwright-standard/examples/fixtures.ts +66 -0
- package/skills/playwright-standard/examples/type-stubs.d.ts +10 -0
- package/skills/playwright-standard/references/advanced-scenarios.md +59 -0
- package/skills/playwright-standard/references/infrastructure.md +43 -0
- package/skills/postgres/SKILL.md +33 -0
- package/skills/react-best-practices/AGENTS.md +2883 -0
- package/skills/react-best-practices/README.md +127 -0
- package/skills/react-best-practices/SKILL.md +138 -0
- package/skills/react-best-practices/metadata.json +17 -0
- package/skills/react-best-practices/rules/_sections.md +46 -0
- package/skills/react-best-practices/rules/_template.md +28 -0
- package/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/react-best-practices/rules/async-api-routes.md +35 -0
- package/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/react-best-practices/rules/async-dependencies.md +48 -0
- package/skills/react-best-practices/rules/async-parallel.md +24 -0
- package/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills/react-best-practices/rules/bundle-conditional.md +37 -0
- package/skills/react-best-practices/rules/bundle-defer-third-party.md +48 -0
- package/skills/react-best-practices/rules/bundle-dynamic-imports.md +34 -0
- package/skills/react-best-practices/rules/bundle-preload.md +44 -0
- package/skills/react-best-practices/rules/client-event-listeners.md +78 -0
- package/skills/react-best-practices/rules/client-localstorage-schema.md +74 -0
- package/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/react-best-practices/rules/js-batch-dom-css.md +110 -0
- package/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/react-best-practices/rules/js-cache-storage.md +68 -0
- package/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/react-best-practices/rules/js-length-check-first.md +50 -0
- package/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/react-best-practices/rules/rendering-activity.md +24 -0
- package/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +38 -0
- package/skills/react-best-practices/rules/rendering-conditional-render.md +32 -0
- package/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/react-best-practices/rules/rendering-hoist-jsx.md +36 -0
- package/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +72 -0
- package/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +26 -0
- package/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/react-best-practices/rules/rerender-functional-setstate.md +77 -0
- package/skills/react-best-practices/rules/rerender-lazy-state-init.md +56 -0
- package/skills/react-best-practices/rules/rerender-memo-with-default-value.md +36 -0
- package/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/skills/rust/SKILL.md +86 -0
- package/skills/shadcn-ui/SKILL.md +72 -0
- package/skills/skill-builder/SKILL.md +457 -0
- package/skills/skill-builder/checklist.md +65 -0
- package/skills/sqlite/SKILL.md +38 -0
- package/skills/typescript/SKILL.md +453 -0
- package/skills/typescript/assets/eslint-template.js +102 -0
- package/skills/typescript/assets/tsconfig-template.json +45 -0
- package/skills/typescript/references/enterprise-patterns.md +531 -0
- package/skills/typescript/references/generics.md +493 -0
- package/skills/typescript/references/nestjs-integration.md +579 -0
- package/skills/typescript/references/react-integration.md +616 -0
- package/skills/typescript/references/toolchain.md +547 -0
- package/skills/typescript/references/type-system.md +481 -0
- package/skills/vitest-standard/SKILL.md +82 -0
- package/skills/vitest-standard/examples/service-mock.ts +60 -0
- package/skills/vitest-standard/examples/tdd-calculator.ts +41 -0
- package/skills/vitest-standard/examples/type-stubs.d.ts +18 -0
- package/skills/vitest-standard/references/async-and-errors.md +58 -0
- package/skills/vitest-standard/references/coverage-and-config.md +53 -0
- package/skills/vitest-standard/references/mocking.md +61 -0
- package/skills/vitest-standard/references/tdd-patterns.md +60 -0
- package/dist/github-integration-PDRLXKGM.js +0 -1
- package/skills/github-commander/workflows/full-audit.md +0 -134
|
@@ -222,6 +222,13 @@ function assertNoPathTraversal(filename) {
|
|
|
222
222
|
throw new PathTraversalError(filename);
|
|
223
223
|
}
|
|
224
224
|
}
|
|
225
|
+
function assertSafeDirectoryPath(dirPath) {
|
|
226
|
+
const normalized = dirPath.replace(/\\/g, "/");
|
|
227
|
+
const segments = normalized.split("/");
|
|
228
|
+
if (segments.some((s) => s === "..")) {
|
|
229
|
+
throw new PathTraversalError(dirPath);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
225
232
|
var TOKEN_PATTERNS = [
|
|
226
233
|
// GitHub personal access tokens (classic and fine-grained)
|
|
227
234
|
/ghp_[A-Za-z0-9_]{36,}/g,
|
|
@@ -489,6 +496,40 @@ var IssuesManager = class {
|
|
|
489
496
|
return null;
|
|
490
497
|
}
|
|
491
498
|
}
|
|
499
|
+
async getIssueComments(owner, repo, issueNumber, limit = 30) {
|
|
500
|
+
const _limit = Math.min(limit, 100);
|
|
501
|
+
if (_limit <= 0) return [];
|
|
502
|
+
if (!this.client.octokit) {
|
|
503
|
+
return [];
|
|
504
|
+
}
|
|
505
|
+
const cacheKey = `issue-comments:${owner}:${repo}:${String(issueNumber)}:${String(_limit)}`;
|
|
506
|
+
const cached = this.client.getCached(cacheKey);
|
|
507
|
+
if (cached) return cached;
|
|
508
|
+
try {
|
|
509
|
+
const response = await this.client.octokit.issues.listComments({
|
|
510
|
+
owner,
|
|
511
|
+
repo,
|
|
512
|
+
issue_number: issueNumber,
|
|
513
|
+
per_page: _limit,
|
|
514
|
+
sort: "created",
|
|
515
|
+
direction: "asc"
|
|
516
|
+
});
|
|
517
|
+
const comments = response.data.slice(0, _limit).map((comment) => ({
|
|
518
|
+
author: comment.user?.login ?? "unknown",
|
|
519
|
+
body: comment.body ?? "",
|
|
520
|
+
createdAt: comment.created_at
|
|
521
|
+
}));
|
|
522
|
+
this.client.setCache(cacheKey, comments);
|
|
523
|
+
return comments;
|
|
524
|
+
} catch (error) {
|
|
525
|
+
logger.error("Failed to get issue comments", {
|
|
526
|
+
module: "GitHub",
|
|
527
|
+
entityId: issueNumber,
|
|
528
|
+
error: error instanceof Error ? error.message : String(error)
|
|
529
|
+
});
|
|
530
|
+
return [];
|
|
531
|
+
}
|
|
532
|
+
}
|
|
492
533
|
async createIssue(owner, repo, title, body, labels, assignees, milestone) {
|
|
493
534
|
if (!this.client.octokit) {
|
|
494
535
|
logger.error("Cannot create issue: GitHub API not available", { module: "GitHub" });
|
|
@@ -1027,7 +1068,9 @@ var ProjectsManager = class {
|
|
|
1027
1068
|
});
|
|
1028
1069
|
return { success: false, error: errorMessage };
|
|
1029
1070
|
} finally {
|
|
1030
|
-
this.client.invalidateCache
|
|
1071
|
+
if (typeof this.client.invalidateCache === "function") {
|
|
1072
|
+
this.client.invalidateCache("kanban:");
|
|
1073
|
+
}
|
|
1031
1074
|
}
|
|
1032
1075
|
}
|
|
1033
1076
|
async addProjectItem(projectId, contentId) {
|
|
@@ -1063,7 +1106,44 @@ var ProjectsManager = class {
|
|
|
1063
1106
|
});
|
|
1064
1107
|
return { success: false, error: errorMessage };
|
|
1065
1108
|
} finally {
|
|
1066
|
-
this.client.invalidateCache
|
|
1109
|
+
if (typeof this.client.invalidateCache === "function") {
|
|
1110
|
+
this.client.invalidateCache("kanban:");
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
async deleteProjectItem(projectId, itemId) {
|
|
1115
|
+
if (!this.client.graphqlWithAuth) {
|
|
1116
|
+
return { success: false, error: "GraphQL not available - no token" };
|
|
1117
|
+
}
|
|
1118
|
+
try {
|
|
1119
|
+
const mutation = `
|
|
1120
|
+
mutation($projectId: ID!, $itemId: ID!) {
|
|
1121
|
+
deleteProjectV2Item(input: { projectId: $projectId, itemId: $itemId }) {
|
|
1122
|
+
deletedItemId
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
`;
|
|
1126
|
+
await this.client.graphqlWithAuth(mutation, {
|
|
1127
|
+
projectId,
|
|
1128
|
+
itemId
|
|
1129
|
+
});
|
|
1130
|
+
logger.info("Deleted project item", {
|
|
1131
|
+
module: "GitHub",
|
|
1132
|
+
context: { projectId, itemId }
|
|
1133
|
+
});
|
|
1134
|
+
return { success: true };
|
|
1135
|
+
} catch (error) {
|
|
1136
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
1137
|
+
logger.error("Failed to delete item from project", {
|
|
1138
|
+
module: "GitHub",
|
|
1139
|
+
context: { projectId, itemId },
|
|
1140
|
+
error: errorMessage
|
|
1141
|
+
});
|
|
1142
|
+
return { success: false, error: errorMessage };
|
|
1143
|
+
} finally {
|
|
1144
|
+
if (typeof this.client.invalidateCache === "function") {
|
|
1145
|
+
this.client.invalidateCache("kanban:");
|
|
1146
|
+
}
|
|
1067
1147
|
}
|
|
1068
1148
|
}
|
|
1069
1149
|
};
|
|
@@ -1533,6 +1613,9 @@ var GitHubIntegration = class {
|
|
|
1533
1613
|
async getIssue(owner, repo, issueNumber) {
|
|
1534
1614
|
return this.issuesManager.getIssue(owner, repo, issueNumber);
|
|
1535
1615
|
}
|
|
1616
|
+
async getIssueComments(owner, repo, issueNumber, limit = 30) {
|
|
1617
|
+
return this.issuesManager.getIssueComments(owner, repo, issueNumber, limit);
|
|
1618
|
+
}
|
|
1536
1619
|
async createIssue(owner, repo, title, body, labels, assignees, milestone) {
|
|
1537
1620
|
return this.issuesManager.createIssue(
|
|
1538
1621
|
owner,
|
|
@@ -1627,6 +1710,9 @@ var GitHubIntegration = class {
|
|
|
1627
1710
|
async addProjectItem(projectId, contentId) {
|
|
1628
1711
|
return this.projectsManager.addProjectItem(projectId, contentId);
|
|
1629
1712
|
}
|
|
1713
|
+
async deleteProjectItem(projectId, itemId) {
|
|
1714
|
+
return this.projectsManager.deleteProjectItem(projectId, itemId);
|
|
1715
|
+
}
|
|
1630
1716
|
async getMilestones(owner, repo, state = "open", limit = 20) {
|
|
1631
1717
|
return this.milestonesManager.getMilestones(owner, repo, state, limit);
|
|
1632
1718
|
}
|
|
@@ -1656,4 +1742,4 @@ var GitHubIntegration = class {
|
|
|
1656
1742
|
}
|
|
1657
1743
|
};
|
|
1658
1744
|
|
|
1659
|
-
export { ConfigurationError, ConnectionError, GitHubIntegration, MemoryJournalMcpError, QueryError, ResourceNotFoundError, ValidationError, assertNoPathTraversal, logger, matchSuggestion, resolveAuthor, validateDateFormatPattern };
|
|
1745
|
+
export { ConfigurationError, ConnectionError, GitHubIntegration, MemoryJournalMcpError, QueryError, ResourceNotFoundError, ValidationError, assertNoPathTraversal, assertSafeDirectoryPath, logger, matchSuggestion, resolveAuthor, validateDateFormatPattern };
|