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,263 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp - Code Mode API Constants
|
|
3
|
-
*
|
|
4
|
-
* Static constant maps for the sandbox API:
|
|
5
|
-
* - METHOD_ALIASES: shorthand names within each group
|
|
6
|
-
* - GROUP_EXAMPLES: help() output per group
|
|
7
|
-
* - POSITIONAL_PARAM_MAP: positional → named arg mapping
|
|
8
|
-
* - GROUP_PREFIX_MAP: tool name prefix stripping rules
|
|
9
|
-
* - KEEP_PREFIX_GROUPS: groups that retain their prefix in method names
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// =============================================================================
|
|
13
|
-
// Method Aliases
|
|
14
|
-
// =============================================================================
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Aliases for common naming shortcuts within each group.
|
|
18
|
-
* Maps alias name → canonical method name.
|
|
19
|
-
*/
|
|
20
|
-
export const METHOD_ALIASES: Record<string, Record<string, string>> = {
|
|
21
|
-
core: {
|
|
22
|
-
create: 'createEntry',
|
|
23
|
-
get: 'getEntryById',
|
|
24
|
-
recent: 'getRecentEntries',
|
|
25
|
-
getRecent: 'getRecentEntries',
|
|
26
|
-
quick: 'createEntryMinimal',
|
|
27
|
-
tags: 'listTags',
|
|
28
|
-
},
|
|
29
|
-
search: {
|
|
30
|
-
find: 'searchEntries',
|
|
31
|
-
byDate: 'searchByDateRange',
|
|
32
|
-
similar: 'semanticSearch',
|
|
33
|
-
stats: 'getVectorStats',
|
|
34
|
-
},
|
|
35
|
-
analytics: {
|
|
36
|
-
stats: 'getStatistics',
|
|
37
|
-
insights: 'getCrossProjectInsights',
|
|
38
|
-
},
|
|
39
|
-
relationships: {
|
|
40
|
-
link: 'linkEntries',
|
|
41
|
-
graph: 'visualizeRelationships',
|
|
42
|
-
},
|
|
43
|
-
export: {
|
|
44
|
-
dump: 'exportEntries',
|
|
45
|
-
},
|
|
46
|
-
admin: {
|
|
47
|
-
edit: 'updateEntry',
|
|
48
|
-
remove: 'deleteEntry',
|
|
49
|
-
rebuild: 'rebuildVectorIndex',
|
|
50
|
-
addVector: 'addToVectorIndex',
|
|
51
|
-
mergeTags: 'mergeTags',
|
|
52
|
-
},
|
|
53
|
-
github: {
|
|
54
|
-
issues: 'getGithubIssues',
|
|
55
|
-
issue: 'getGithubIssue',
|
|
56
|
-
prs: 'getGithubPrs',
|
|
57
|
-
pr: 'getGithubPr',
|
|
58
|
-
context: 'getGithubContext',
|
|
59
|
-
kanban: 'getKanbanBoard',
|
|
60
|
-
moveKanban: 'moveKanbanItem',
|
|
61
|
-
milestones: 'getGithubMilestones',
|
|
62
|
-
milestone: 'getGithubMilestone',
|
|
63
|
-
createMilestone: 'createGithubMilestone',
|
|
64
|
-
updateMilestone: 'updateGithubMilestone',
|
|
65
|
-
deleteMilestone: 'deleteGithubMilestone',
|
|
66
|
-
repoInsights: 'getRepoInsights',
|
|
67
|
-
createIssue: 'createGithubIssueWithEntry',
|
|
68
|
-
closeIssue: 'closeGithubIssueWithEntry',
|
|
69
|
-
},
|
|
70
|
-
backup: {
|
|
71
|
-
save: 'backupJournal',
|
|
72
|
-
list: 'listBackups',
|
|
73
|
-
restore: 'restoreBackup',
|
|
74
|
-
cleanup: 'cleanupBackups',
|
|
75
|
-
},
|
|
76
|
-
team: {
|
|
77
|
-
create: 'teamCreateEntry',
|
|
78
|
-
recent: 'teamGetRecent',
|
|
79
|
-
find: 'teamSearch',
|
|
80
|
-
get: 'teamGetEntryById',
|
|
81
|
-
tags: 'teamListTags',
|
|
82
|
-
byDate: 'teamSearchByDateRange',
|
|
83
|
-
update: 'teamUpdateEntry',
|
|
84
|
-
remove: 'teamDeleteEntry',
|
|
85
|
-
mergeTags: 'teamMergeTags',
|
|
86
|
-
stats: 'teamGetStatistics',
|
|
87
|
-
link: 'teamLinkEntries',
|
|
88
|
-
graph: 'teamVisualizeRelationships',
|
|
89
|
-
export: 'teamExportEntries',
|
|
90
|
-
backup: 'teamBackup',
|
|
91
|
-
listBackups: 'teamListBackups',
|
|
92
|
-
semanticSearch: 'teamSemanticSearch',
|
|
93
|
-
vectorStats: 'teamGetVectorIndexStats',
|
|
94
|
-
rebuildIndex: 'teamRebuildVectorIndex',
|
|
95
|
-
addToIndex: 'teamAddToVectorIndex',
|
|
96
|
-
insights: 'teamGetCrossProjectInsights',
|
|
97
|
-
},
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// =============================================================================
|
|
101
|
-
// Group Examples (for help())
|
|
102
|
-
// =============================================================================
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Usage examples for each group's help() output
|
|
106
|
-
*/
|
|
107
|
-
export const GROUP_EXAMPLES: Record<string, string[]> = {
|
|
108
|
-
core: [
|
|
109
|
-
'mj.core.createEntry({ content: "Implemented Code Mode" })',
|
|
110
|
-
'mj.core.getEntryById({ entry_id: 1 })',
|
|
111
|
-
'mj.core.getRecentEntries({ limit: 10 })',
|
|
112
|
-
'mj.core.createEntryMinimal({ content: "Quick note" })',
|
|
113
|
-
'mj.core.listTags()',
|
|
114
|
-
],
|
|
115
|
-
search: [
|
|
116
|
-
'mj.search.searchEntries({ query: "performance" })',
|
|
117
|
-
'mj.search.searchByDateRange({ start_date: "2026-03-01", end_date: "2026-03-11" })',
|
|
118
|
-
'mj.search.semanticSearch({ query: "authentication patterns" })',
|
|
119
|
-
],
|
|
120
|
-
analytics: ['mj.analytics.getStatistics()', 'mj.analytics.getCrossProjectInsights()'],
|
|
121
|
-
relationships: [
|
|
122
|
-
'mj.relationships.linkEntries({ from_entry_id: 1, to_entry_id: 2, relationship_type: "implements" })',
|
|
123
|
-
'mj.relationships.visualizeRelationships({ entry_id: 1 })',
|
|
124
|
-
],
|
|
125
|
-
export: [
|
|
126
|
-
'mj.export.exportEntries({ format: "json" })',
|
|
127
|
-
'mj.export.exportEntries({ format: "markdown", limit: 50 })',
|
|
128
|
-
],
|
|
129
|
-
admin: [
|
|
130
|
-
'mj.admin.updateEntry({ entry_id: 1, content: "Updated content" })',
|
|
131
|
-
'mj.admin.deleteEntry({ entry_id: 1 })',
|
|
132
|
-
'mj.admin.mergeTags({ source_tag: "old", target_tag: "new" })',
|
|
133
|
-
'mj.admin.rebuildVectorIndex()',
|
|
134
|
-
'mj.admin.addToVectorIndex({ entry_id: 1 })',
|
|
135
|
-
],
|
|
136
|
-
github: [
|
|
137
|
-
'mj.github.getGithubIssues({ state: "open" })',
|
|
138
|
-
'mj.github.getGithubPrs({ state: "open" })',
|
|
139
|
-
'mj.github.getKanbanBoard({ project_number: 1 })',
|
|
140
|
-
'mj.github.getGithubMilestones()',
|
|
141
|
-
'mj.github.getRepoInsights()',
|
|
142
|
-
],
|
|
143
|
-
backup: [
|
|
144
|
-
'mj.backup.backupJournal()',
|
|
145
|
-
'mj.backup.listBackups()',
|
|
146
|
-
'mj.backup.restoreBackup({ filename: "backup-2026-03-11.db" })',
|
|
147
|
-
],
|
|
148
|
-
team: [
|
|
149
|
-
'mj.team.teamCreateEntry({ content: "Team update" })',
|
|
150
|
-
'mj.team.teamGetRecent({ limit: 5 })',
|
|
151
|
-
'mj.team.teamSearch({ query: "release" })',
|
|
152
|
-
'mj.team.teamGetEntryById({ entry_id: 1 })',
|
|
153
|
-
'mj.team.teamListTags()',
|
|
154
|
-
'mj.team.teamUpdateEntry({ entry_id: 1, content: "Updated" })',
|
|
155
|
-
'mj.team.teamGetStatistics()',
|
|
156
|
-
'mj.team.teamExportEntries({ format: "json" })',
|
|
157
|
-
'mj.team.teamBackup()',
|
|
158
|
-
'mj.team.teamSemanticSearch({ query: "deployment" })',
|
|
159
|
-
'mj.team.teamGetCrossProjectInsights()',
|
|
160
|
-
],
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// =============================================================================
|
|
164
|
-
// Positional Parameter Mapping
|
|
165
|
-
// =============================================================================
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Maps method names to their parameter names for positional argument support.
|
|
169
|
-
* Single string = first positional arg maps to this key.
|
|
170
|
-
* Array = multiple positional args map to these keys in order.
|
|
171
|
-
*
|
|
172
|
-
* Enables:
|
|
173
|
-
* - `mj.core.createEntry("My note")` → `{ content: "My note" }`
|
|
174
|
-
* - `mj.search.searchEntries("performance")` → `{ query: "performance" }`
|
|
175
|
-
*/
|
|
176
|
-
export const POSITIONAL_PARAM_MAP: Record<string, string | string[]> = {
|
|
177
|
-
// Core
|
|
178
|
-
createEntry: 'content',
|
|
179
|
-
getEntryById: 'entry_id',
|
|
180
|
-
getRecentEntries: 'limit',
|
|
181
|
-
createEntryMinimal: 'content',
|
|
182
|
-
testSimple: 'message',
|
|
183
|
-
|
|
184
|
-
// Search
|
|
185
|
-
searchEntries: 'query',
|
|
186
|
-
searchByDateRange: ['start_date', 'end_date'],
|
|
187
|
-
semanticSearch: 'query',
|
|
188
|
-
|
|
189
|
-
// Analytics (no positional — uses empty params)
|
|
190
|
-
|
|
191
|
-
// Relationships
|
|
192
|
-
linkEntries: ['from_entry_id', 'to_entry_id', 'relationship_type'],
|
|
193
|
-
visualizeRelationships: 'entry_id',
|
|
194
|
-
|
|
195
|
-
// Export
|
|
196
|
-
exportEntries: 'format',
|
|
197
|
-
|
|
198
|
-
// Admin
|
|
199
|
-
updateEntry: 'entry_id',
|
|
200
|
-
deleteEntry: 'entry_id',
|
|
201
|
-
addToVectorIndex: 'entry_id',
|
|
202
|
-
mergeTags: ['source_tag', 'target_tag'],
|
|
203
|
-
|
|
204
|
-
// GitHub
|
|
205
|
-
getGithubIssue: 'issue_number',
|
|
206
|
-
getGithubPr: 'pr_number',
|
|
207
|
-
getKanbanBoard: 'project_number',
|
|
208
|
-
moveKanbanItem: ['item_id', 'status'],
|
|
209
|
-
getGithubMilestone: 'milestone_number',
|
|
210
|
-
createGithubMilestone: 'title',
|
|
211
|
-
updateGithubMilestone: 'milestone_number',
|
|
212
|
-
deleteGithubMilestone: 'milestone_number',
|
|
213
|
-
createGithubIssueWithEntry: 'title',
|
|
214
|
-
closeGithubIssueWithEntry: 'issue_number',
|
|
215
|
-
|
|
216
|
-
// Backup
|
|
217
|
-
restoreBackup: 'filename',
|
|
218
|
-
cleanupBackups: 'keep_count',
|
|
219
|
-
|
|
220
|
-
// Team
|
|
221
|
-
teamCreateEntry: 'content',
|
|
222
|
-
teamGetRecent: 'limit',
|
|
223
|
-
teamSearch: 'query',
|
|
224
|
-
teamGetEntryById: 'entry_id',
|
|
225
|
-
teamSearchByDateRange: ['start_date', 'end_date'],
|
|
226
|
-
teamUpdateEntry: 'entry_id',
|
|
227
|
-
teamDeleteEntry: 'entry_id',
|
|
228
|
-
teamMergeTags: ['source_tag', 'target_tag'],
|
|
229
|
-
teamLinkEntries: ['from_entry_id', 'to_entry_id', 'relationship_type'],
|
|
230
|
-
teamVisualizeRelationships: 'entry_id',
|
|
231
|
-
teamExportEntries: 'format',
|
|
232
|
-
teamSemanticSearch: 'query',
|
|
233
|
-
teamAddToVectorIndex: 'entry_id',
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// =============================================================================
|
|
237
|
-
// Tool Name → Method Name Conversion
|
|
238
|
-
// =============================================================================
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Map group name to the prefix used in tool names.
|
|
242
|
-
* When a tool is in a group, its name typically starts with a group-related prefix.
|
|
243
|
-
* For memory-journal-mcp, tool names are flat (no server prefix like "sqlite_").
|
|
244
|
-
*/
|
|
245
|
-
export const GROUP_PREFIX_MAP: Record<string, string> = {
|
|
246
|
-
core: '',
|
|
247
|
-
search: '',
|
|
248
|
-
analytics: '',
|
|
249
|
-
relationships: '',
|
|
250
|
-
export: '',
|
|
251
|
-
admin: '',
|
|
252
|
-
github: '',
|
|
253
|
-
backup: '',
|
|
254
|
-
team: '',
|
|
255
|
-
codemode: 'mj_',
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Groups where the prefix should be kept in the method name.
|
|
260
|
-
* For memory-journal-mcp, github and team tools have meaningful prefixes
|
|
261
|
-
* (e.g., `get_github_issues`, `team_create_entry`).
|
|
262
|
-
*/
|
|
263
|
-
export const KEEP_PREFIX_GROUPS = new Set(['github', 'team'])
|
package/src/codemode/api.ts
DELETED
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp - Code Mode API
|
|
3
|
-
*
|
|
4
|
-
* Generates the `mj.*` API object that is injected into the sandbox.
|
|
5
|
-
* Each tool group becomes a namespace (e.g., `mj.core.createEntry()`).
|
|
6
|
-
*
|
|
7
|
-
* Architecture:
|
|
8
|
-
* - Reads tool definitions from the handler barrel
|
|
9
|
-
* - Groups tools by their `group` property
|
|
10
|
-
* - Converts tool names to camelCase method names
|
|
11
|
-
* - Creates proxy methods that normalize positional args and call handlers
|
|
12
|
-
* - Exposes `help()` at top level and per-group for discoverability
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import type { ToolDefinition } from '../types/index.js'
|
|
16
|
-
import type { ToolGroup } from '../types/filtering.js'
|
|
17
|
-
import {
|
|
18
|
-
METHOD_ALIASES,
|
|
19
|
-
GROUP_EXAMPLES,
|
|
20
|
-
POSITIONAL_PARAM_MAP,
|
|
21
|
-
GROUP_PREFIX_MAP,
|
|
22
|
-
KEEP_PREFIX_GROUPS,
|
|
23
|
-
} from './api-constants.js'
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Convert tool name to camelCase method name.
|
|
27
|
-
*
|
|
28
|
-
* Examples:
|
|
29
|
-
* create_entry (core) → createEntry
|
|
30
|
-
* search_entries (search) → searchEntries
|
|
31
|
-
* get_github_issues (github) → getGithubIssues
|
|
32
|
-
* team_create_entry (team) → teamCreateEntry
|
|
33
|
-
* backup_journal (backup) → backupJournal
|
|
34
|
-
*/
|
|
35
|
-
export function toolNameToMethodName(toolName: string, groupName: string): string {
|
|
36
|
-
let name = toolName
|
|
37
|
-
|
|
38
|
-
// For groups not in KEEP_PREFIX_GROUPS, strip the group prefix
|
|
39
|
-
if (!KEEP_PREFIX_GROUPS.has(groupName)) {
|
|
40
|
-
const groupPrefix = GROUP_PREFIX_MAP[groupName] ?? ''
|
|
41
|
-
if (groupPrefix && name.startsWith(groupPrefix)) {
|
|
42
|
-
name = name.substring(groupPrefix.length)
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Convert snake_case to camelCase
|
|
47
|
-
return name.replace(/_([a-z])/g, (_, letter: string) => letter.toUpperCase())
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// =============================================================================
|
|
51
|
-
// Parameter Normalization
|
|
52
|
-
// =============================================================================
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Normalize parameters to support positional arguments.
|
|
56
|
-
* Handles both single positional args and multiple positional args.
|
|
57
|
-
*/
|
|
58
|
-
function normalizeParams(methodName: string, args: unknown[]): unknown {
|
|
59
|
-
if (args.length === 0) return undefined
|
|
60
|
-
|
|
61
|
-
if (args.length === 1) {
|
|
62
|
-
const arg = args[0]
|
|
63
|
-
|
|
64
|
-
// Object arg — pass through
|
|
65
|
-
if (typeof arg === 'object' && arg !== null && !Array.isArray(arg)) {
|
|
66
|
-
return arg
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Primitive arg (string, number, boolean) — use positional mapping
|
|
70
|
-
if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {
|
|
71
|
-
const paramMapping = POSITIONAL_PARAM_MAP[methodName]
|
|
72
|
-
if (typeof paramMapping === 'string') {
|
|
73
|
-
return { [paramMapping]: arg }
|
|
74
|
-
}
|
|
75
|
-
if (Array.isArray(paramMapping) && paramMapping[0] !== undefined) {
|
|
76
|
-
return { [paramMapping[0]]: arg }
|
|
77
|
-
}
|
|
78
|
-
// Fallback: try common names (only for strings)
|
|
79
|
-
if (typeof arg === 'string') {
|
|
80
|
-
return { content: arg, query: arg }
|
|
81
|
-
}
|
|
82
|
-
return arg
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return arg
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Multi-arg: use positional parameter mapping
|
|
89
|
-
const paramMapping = POSITIONAL_PARAM_MAP[methodName]
|
|
90
|
-
if (paramMapping === undefined) {
|
|
91
|
-
return args[0]
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (typeof paramMapping === 'string') {
|
|
95
|
-
const result: Record<string, unknown> = { [paramMapping]: args[0] }
|
|
96
|
-
if (args.length > 1) {
|
|
97
|
-
const lastArg = args[args.length - 1]
|
|
98
|
-
if (typeof lastArg === 'object' && lastArg !== null && !Array.isArray(lastArg)) {
|
|
99
|
-
Object.assign(result, lastArg)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return result
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Array mapping — map positional args to named params
|
|
106
|
-
const result: Record<string, unknown> = {}
|
|
107
|
-
|
|
108
|
-
for (let i = 0; i < paramMapping.length && i < args.length; i++) {
|
|
109
|
-
const key = paramMapping[i]
|
|
110
|
-
if (key !== undefined) {
|
|
111
|
-
result[key] = args[i]
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Merge trailing options object
|
|
116
|
-
if (args.length > paramMapping.length) {
|
|
117
|
-
const lastArg = args[args.length - 1]
|
|
118
|
-
if (typeof lastArg === 'object' && lastArg !== null && !Array.isArray(lastArg)) {
|
|
119
|
-
Object.assign(result, lastArg)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return result
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// =============================================================================
|
|
127
|
-
// Group API Factory
|
|
128
|
-
// =============================================================================
|
|
129
|
-
|
|
130
|
-
/** Type alias for group API record */
|
|
131
|
-
type GroupApiRecord = Record<string, (...args: unknown[]) => Promise<unknown>>
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Create a group API from tool definitions.
|
|
135
|
-
* Each tool becomes a method on the group object.
|
|
136
|
-
*/
|
|
137
|
-
function createGroupApi(groupName: string, tools: ToolDefinition[]): GroupApiRecord {
|
|
138
|
-
const api: GroupApiRecord = {}
|
|
139
|
-
|
|
140
|
-
for (const tool of tools) {
|
|
141
|
-
const methodName = toolNameToMethodName(tool.name, groupName)
|
|
142
|
-
|
|
143
|
-
api[methodName] = (...args: unknown[]): Promise<unknown> => {
|
|
144
|
-
const normalizedParams = normalizeParams(methodName, args) ?? {}
|
|
145
|
-
return Promise.resolve(tool.handler(normalizedParams))
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Add method aliases
|
|
150
|
-
const aliases = METHOD_ALIASES[groupName]
|
|
151
|
-
if (aliases) {
|
|
152
|
-
for (const [aliasName, canonicalName] of Object.entries(aliases)) {
|
|
153
|
-
if (api[canonicalName] !== undefined) {
|
|
154
|
-
api[aliasName] = api[canonicalName]
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Add help() for discoverability
|
|
160
|
-
api['help'] = (): Promise<{
|
|
161
|
-
group: string
|
|
162
|
-
methods: string[]
|
|
163
|
-
examples: string[]
|
|
164
|
-
}> => {
|
|
165
|
-
const methods = Object.keys(api)
|
|
166
|
-
.filter((k) => k !== 'help')
|
|
167
|
-
.sort()
|
|
168
|
-
|
|
169
|
-
return Promise.resolve({
|
|
170
|
-
group: groupName,
|
|
171
|
-
methods,
|
|
172
|
-
examples: GROUP_EXAMPLES[groupName] ?? [],
|
|
173
|
-
})
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return api
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// =============================================================================
|
|
180
|
-
// JournalApi Class
|
|
181
|
-
// =============================================================================
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Main API class exposing all Memory Journal tool groups.
|
|
185
|
-
* This is the object injected as `mj` in the sandbox.
|
|
186
|
-
*/
|
|
187
|
-
export class JournalApi {
|
|
188
|
-
readonly core: GroupApiRecord
|
|
189
|
-
readonly search: GroupApiRecord
|
|
190
|
-
readonly analytics: GroupApiRecord
|
|
191
|
-
readonly relationships: GroupApiRecord
|
|
192
|
-
readonly export: GroupApiRecord
|
|
193
|
-
readonly admin: GroupApiRecord
|
|
194
|
-
readonly github: GroupApiRecord
|
|
195
|
-
readonly backup: GroupApiRecord
|
|
196
|
-
readonly team: GroupApiRecord
|
|
197
|
-
|
|
198
|
-
private readonly toolsByGroup: Map<string, ToolDefinition[]>
|
|
199
|
-
|
|
200
|
-
constructor(tools: ToolDefinition[]) {
|
|
201
|
-
// Group tools by their group property
|
|
202
|
-
this.toolsByGroup = new Map()
|
|
203
|
-
for (const tool of tools) {
|
|
204
|
-
// Skip codemode tools (no recursion)
|
|
205
|
-
if (tool.group === 'codemode') continue
|
|
206
|
-
|
|
207
|
-
const existing = this.toolsByGroup.get(tool.group) ?? []
|
|
208
|
-
existing.push(tool)
|
|
209
|
-
this.toolsByGroup.set(tool.group, existing)
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// Create group-specific APIs for all 9 groups
|
|
213
|
-
this.core = createGroupApi('core', this.toolsByGroup.get('core') ?? [])
|
|
214
|
-
this.search = createGroupApi('search', this.toolsByGroup.get('search') ?? [])
|
|
215
|
-
this.analytics = createGroupApi('analytics', this.toolsByGroup.get('analytics') ?? [])
|
|
216
|
-
this.relationships = createGroupApi(
|
|
217
|
-
'relationships',
|
|
218
|
-
this.toolsByGroup.get('relationships') ?? []
|
|
219
|
-
)
|
|
220
|
-
this.export = createGroupApi('export', this.toolsByGroup.get('export') ?? [])
|
|
221
|
-
this.admin = createGroupApi('admin', this.toolsByGroup.get('admin') ?? [])
|
|
222
|
-
this.github = createGroupApi('github', this.toolsByGroup.get('github') ?? [])
|
|
223
|
-
this.backup = createGroupApi('backup', this.toolsByGroup.get('backup') ?? [])
|
|
224
|
-
this.team = createGroupApi('team', this.toolsByGroup.get('team') ?? [])
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Get all available groups
|
|
229
|
-
*/
|
|
230
|
-
getGroups(): string[] {
|
|
231
|
-
return [...this.toolsByGroup.keys()].sort()
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Get method names for a group
|
|
236
|
-
*/
|
|
237
|
-
getGroupMethods(group: ToolGroup): string[] {
|
|
238
|
-
const groupApi = this[group as keyof JournalApi] as GroupApiRecord | undefined
|
|
239
|
-
if (!groupApi || typeof groupApi !== 'object') return []
|
|
240
|
-
return Object.keys(groupApi)
|
|
241
|
-
.filter((k) => k !== 'help')
|
|
242
|
-
.sort()
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Create the sandbox bindings object.
|
|
247
|
-
* This is the object injected as `mj` in the sandbox.
|
|
248
|
-
* Includes group namespaces + top-level aliases for common operations.
|
|
249
|
-
*/
|
|
250
|
-
createSandboxBindings(): Record<string, unknown> {
|
|
251
|
-
const bindings: Record<string, unknown> = {
|
|
252
|
-
// Group namespaces
|
|
253
|
-
core: this.core,
|
|
254
|
-
search: this.search,
|
|
255
|
-
analytics: this.analytics,
|
|
256
|
-
relationships: this.relationships,
|
|
257
|
-
export: this.export,
|
|
258
|
-
admin: this.admin,
|
|
259
|
-
github: this.github,
|
|
260
|
-
backup: this.backup,
|
|
261
|
-
team: this.team,
|
|
262
|
-
|
|
263
|
-
// Top-level convenience aliases
|
|
264
|
-
createEntry: this.core['createEntry'],
|
|
265
|
-
getRecentEntries: this.core['getRecentEntries'],
|
|
266
|
-
searchEntries: this.search['searchEntries'],
|
|
267
|
-
getStatistics: this.analytics['getStatistics'],
|
|
268
|
-
|
|
269
|
-
// Top-level help
|
|
270
|
-
help: (): Promise<{
|
|
271
|
-
groups: string[]
|
|
272
|
-
totalMethods: number
|
|
273
|
-
usage: string
|
|
274
|
-
}> => {
|
|
275
|
-
const groups = this.getGroups()
|
|
276
|
-
let totalMethods = 0
|
|
277
|
-
for (const group of groups) {
|
|
278
|
-
totalMethods += this.getGroupMethods(group as ToolGroup).length
|
|
279
|
-
}
|
|
280
|
-
return Promise.resolve({
|
|
281
|
-
groups,
|
|
282
|
-
totalMethods,
|
|
283
|
-
usage: 'Use mj.<group>.help() for group details. Example: mj.core.help()',
|
|
284
|
-
})
|
|
285
|
-
},
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return bindings
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// =============================================================================
|
|
293
|
-
// Factory Function
|
|
294
|
-
// =============================================================================
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Create a JournalApi instance from tool definitions.
|
|
298
|
-
* Convenience factory for use in tool handler setup.
|
|
299
|
-
*/
|
|
300
|
-
export function createJournalApi(tools: ToolDefinition[]): JournalApi {
|
|
301
|
-
return new JournalApi(tools)
|
|
302
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp — Code Mode Auto-Return Transform
|
|
3
|
-
*
|
|
4
|
-
* Transforms user code so the last expression statement is implicitly
|
|
5
|
-
* returned from the async IIFE wrapper. Mimics Node REPL / Chrome
|
|
6
|
-
* DevTools semantics where bare expressions surface their value.
|
|
7
|
-
*
|
|
8
|
-
* The transform is intentionally heuristic (string-based, not AST)
|
|
9
|
-
* because the code runs in a sandboxed `vm.Script` that already
|
|
10
|
-
* handles syntax errors. Edge-case misfires are safe — they either
|
|
11
|
-
* produce a benign `return` of the last expression or leave the code
|
|
12
|
-
* unchanged (returning `undefined`, the previous behavior).
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
// Statements that must NOT be prefixed with `return`
|
|
16
|
-
const NON_RETURNABLE =
|
|
17
|
-
/^\s*(return|throw|const |let |var |if\b|else\b|for\b|while\b|do\b|switch\b|try\b|catch\b|finally\b|class |function |\/\/|\/\*|\{|\})/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Transform user code so the last expression statement gets an
|
|
21
|
-
* implicit `return`, enabling the IIFE wrapper to propagate the value.
|
|
22
|
-
*
|
|
23
|
-
* Examples:
|
|
24
|
-
* `mj.help()` → `return mj.help()`
|
|
25
|
-
* `const r = await foo(); r` → `const r = await foo(); return r`
|
|
26
|
-
* `return 42` → `return 42` (no change)
|
|
27
|
-
* `for (const x of xs) { ... }` → unchanged (control flow)
|
|
28
|
-
*/
|
|
29
|
-
export function transformAutoReturn(code: string): string {
|
|
30
|
-
const trimmed = code.trimEnd()
|
|
31
|
-
if (!trimmed) return code
|
|
32
|
-
|
|
33
|
-
// Find the boundary of the last statement.
|
|
34
|
-
// Walk backwards from the end to find the last semicolon or newline
|
|
35
|
-
// that is NOT inside braces/brackets/parens.
|
|
36
|
-
let depth = 0
|
|
37
|
-
let splitIndex = -1
|
|
38
|
-
|
|
39
|
-
for (let i = trimmed.length - 1; i >= 0; i--) {
|
|
40
|
-
const ch = trimmed.charAt(i)
|
|
41
|
-
// Track nesting (walking backwards, so openers increase depth)
|
|
42
|
-
if (ch === '}' || ch === ']' || ch === ')') depth++
|
|
43
|
-
else if (ch === '{' || ch === '[' || ch === '(') depth--
|
|
44
|
-
|
|
45
|
-
if (depth === 0 && (ch === ';' || ch === '\n')) {
|
|
46
|
-
splitIndex = i
|
|
47
|
-
break
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Extract the last statement
|
|
52
|
-
const lastStmt = (splitIndex >= 0 ? trimmed.slice(splitIndex + 1) : trimmed).trim()
|
|
53
|
-
|
|
54
|
-
if (!lastStmt) return code
|
|
55
|
-
if (NON_RETURNABLE.test(lastStmt)) return code
|
|
56
|
-
|
|
57
|
-
// Insert `return` before the last statement
|
|
58
|
-
if (splitIndex >= 0) {
|
|
59
|
-
const before = trimmed.slice(0, splitIndex + 1)
|
|
60
|
-
return `${before}\nreturn ${lastStmt}`
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Single statement — just prepend return
|
|
64
|
-
return `return ${trimmed}`
|
|
65
|
-
}
|
package/src/codemode/index.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* memory-journal-mcp - Code Mode Module
|
|
3
|
-
*
|
|
4
|
-
* Exports for the sandboxed code execution environment.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// Types
|
|
8
|
-
export type {
|
|
9
|
-
SandboxOptions,
|
|
10
|
-
PoolOptions,
|
|
11
|
-
SandboxResult,
|
|
12
|
-
ExecutionMetrics,
|
|
13
|
-
SecurityConfig,
|
|
14
|
-
ValidationResult,
|
|
15
|
-
ExecutionRecord,
|
|
16
|
-
ExecuteCodeOptions,
|
|
17
|
-
ExecuteCodeResult,
|
|
18
|
-
GroupApi,
|
|
19
|
-
} from './types.js'
|
|
20
|
-
|
|
21
|
-
export { DEFAULT_SANDBOX_OPTIONS, DEFAULT_POOL_OPTIONS, DEFAULT_SECURITY_CONFIG } from './types.js'
|
|
22
|
-
|
|
23
|
-
// Sandbox (VM-based)
|
|
24
|
-
export { CodeModeSandbox, SandboxPool } from './sandbox.js'
|
|
25
|
-
|
|
26
|
-
// Worker Sandbox (worker_threads-based)
|
|
27
|
-
export { WorkerSandbox, WorkerSandboxPool } from './worker-sandbox.js'
|
|
28
|
-
|
|
29
|
-
// Sandbox Factory (mode selection)
|
|
30
|
-
export {
|
|
31
|
-
setDefaultSandboxMode,
|
|
32
|
-
getDefaultSandboxMode,
|
|
33
|
-
getAvailableSandboxModes,
|
|
34
|
-
createSandbox,
|
|
35
|
-
createSandboxPool,
|
|
36
|
-
getSandboxModeInfo,
|
|
37
|
-
type SandboxMode,
|
|
38
|
-
type ISandbox,
|
|
39
|
-
type ISandboxPool,
|
|
40
|
-
type SandboxModeInfo,
|
|
41
|
-
} from './sandbox-factory.js'
|
|
42
|
-
|
|
43
|
-
// Security
|
|
44
|
-
export { CodeModeSecurityManager } from './security.js'
|
|
45
|
-
|
|
46
|
-
// API
|
|
47
|
-
export { JournalApi, createJournalApi } from './api.js'
|