Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
version: 2
updates:
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'weekly'
day: 'friday'
time: '18:00'
timezone: 'Europe/Prague'
assignees:
- 'vreshch'
open-pull-requests-limit: 10
groups:
all-dependencies:
patterns:
- '*'
ignore:
- dependency-name: '*'
update-types: ['version-update:semver-major']

- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
day: 'friday'
time: '18:00'
timezone: 'Europe/Prague'
assignees:
- 'vreshch'
open-pull-requests-limit: 5
groups:
all-actions:
patterns:
- '*'
69 changes: 69 additions & 0 deletions .github/workflows/pr-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: PR Validation

on:
pull_request:
branches: [master]
types: [opened, synchronize, reopened]

concurrency:
group: pr-${{ github.event.pull_request.number }}
cancel-in-progress: true

permissions:
contents: read

jobs:
validate:
name: Validate
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Checkout mcp-memory
uses: actions/checkout@v6
with:
path: mcp-memory

# @agentage/memory-core is a local file: dependency until it publishes to npm,
# so build it as a sibling here (memory-core is a public repo, default token reads it).
- name: Checkout memory-core (engine dependency)
uses: actions/checkout@v6
with:
repository: agentage/memory-core
ref: master
path: memory-core

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'npm'
cache-dependency-path: mcp-memory/package-lock.json

- name: Build engine dependency
working-directory: memory-core
run: npm ci && npm run build

- name: Install dependencies
working-directory: mcp-memory
run: npm ci

- name: Type check
working-directory: mcp-memory
run: npm run type-check

- name: Lint
working-directory: mcp-memory
run: npm run lint

- name: Format check
working-directory: mcp-memory
run: npm run format:check

- name: Test with coverage
working-directory: mcp-memory
run: npm run test:coverage

- name: Build
working-directory: mcp-memory
run: npm run build
5 changes: 5 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules
dist
coverage
package-lock.json
*.snap
2 changes: 1 addition & 1 deletion .prettierrc.json → .prettierrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"singleQuote": true,
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"printWidth": 100,
"tabWidth": 2
Expand Down
27 changes: 0 additions & 27 deletions eslint.config.js

This file was deleted.

54 changes: 54 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import prettierPlugin from 'eslint-plugin-prettier';
import prettierConfig from 'eslint-config-prettier';

export default [
{
ignores: ['dist/**', 'coverage/**', 'node_modules/**'],
},
{
files: ['src/**/*.ts', 'test/**/*.ts'],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaVersion: 2024,
sourceType: 'module',
project: './tsconfig.json',
},
},
plugins: {
'@typescript-eslint': typescriptEslint,
prettier: prettierPlugin,
},
rules: {
...prettierConfig.rules,
'prettier/prettier': 'error',
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/consistent-type-imports': [
'error',
{ prefer: 'type-imports', fixStyle: 'inline-type-imports' },
],
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
],
'@typescript-eslint/naming-convention': [
'error',
{
selector: 'interface',
format: ['PascalCase'],
custom: { regex: '^[A-Z]', match: true },
},
{
selector: 'typeAlias',
format: ['PascalCase'],
},
],
'prefer-const': 'error',
'prefer-arrow-callback': 'error',
'arrow-body-style': ['error', 'as-needed'],
'no-var': 'error',
},
},
];
Loading
Loading