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,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Code Mode Tool Group - 1 tool
|
|
3
|
-
*
|
|
4
|
-
* Tools: mj_execute_code
|
|
5
|
-
*
|
|
6
|
-
* Sandboxed JavaScript execution enabling multi-step journal operations
|
|
7
|
-
* in a single tool call. Exposes all tool groups as `mj.*` API.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { z } from 'zod'
|
|
11
|
-
import type { ToolDefinition, ToolContext } from '../../types/index.js'
|
|
12
|
-
import { formatHandlerError } from '../../utils/error-helpers.js'
|
|
13
|
-
import { relaxedNumber } from './schemas.js'
|
|
14
|
-
import { createJournalApi } from '../../codemode/api.js'
|
|
15
|
-
import { CodeModeSecurityManager } from '../../codemode/security.js'
|
|
16
|
-
import { createSandboxPool, type ISandboxPool } from '../../codemode/sandbox-factory.js'
|
|
17
|
-
import { getCoreTools } from './core.js'
|
|
18
|
-
import { getSearchTools } from './search.js'
|
|
19
|
-
import { getAnalyticsTools } from './analytics.js'
|
|
20
|
-
import { getRelationshipTools } from './relationships.js'
|
|
21
|
-
import { getExportTools } from './export.js'
|
|
22
|
-
import { getAdminTools } from './admin.js'
|
|
23
|
-
import { getGitHubTools } from './github.js'
|
|
24
|
-
import { getBackupTools } from './backup.js'
|
|
25
|
-
import { getTeamTools } from './team/index.js'
|
|
26
|
-
|
|
27
|
-
// =============================================================================
|
|
28
|
-
// Input / Output Schemas
|
|
29
|
-
// =============================================================================
|
|
30
|
-
|
|
31
|
-
const ExecuteCodeSchema = z.object({
|
|
32
|
-
code: z.string().min(1),
|
|
33
|
-
timeout: z.number().max(30000).optional().default(30000),
|
|
34
|
-
readonly: z.boolean().optional().default(false),
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
/** Relaxed schema for MCP registration */
|
|
38
|
-
const ExecuteCodeSchemaMcp = z.object({
|
|
39
|
-
code: z.string().describe('JavaScript code to execute in the sandbox'),
|
|
40
|
-
timeout: relaxedNumber()
|
|
41
|
-
.optional()
|
|
42
|
-
.default(30000)
|
|
43
|
-
.describe('Execution timeout in ms (max 30000)'),
|
|
44
|
-
readonly: z.boolean().optional().default(false).describe('Restrict to read-only operations'),
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
// No outputSchema — Code Mode returns dynamic result types (z.unknown()) which
|
|
48
|
-
// produces a bare {} JSON Schema. Clients that process structuredContent crash
|
|
49
|
-
// when iterating properties of {}. Using the plain text JSON response path instead.
|
|
50
|
-
|
|
51
|
-
// =============================================================================
|
|
52
|
-
// Singleton State
|
|
53
|
-
// =============================================================================
|
|
54
|
-
|
|
55
|
-
let securityManager: CodeModeSecurityManager | null = null
|
|
56
|
-
let sandboxPool: ISandboxPool | null = null
|
|
57
|
-
|
|
58
|
-
function getSecurityManager(): CodeModeSecurityManager {
|
|
59
|
-
securityManager ??= new CodeModeSecurityManager()
|
|
60
|
-
return securityManager
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function getSandboxPool(): ISandboxPool {
|
|
64
|
-
sandboxPool ??= createSandboxPool()
|
|
65
|
-
return sandboxPool
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// =============================================================================
|
|
69
|
-
// Helper: Collect Non-CodeMode Tools (cached)
|
|
70
|
-
// =============================================================================
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Cached non-codemode tool list. Invalidates when context identity changes
|
|
74
|
-
* (same approach as toolMapCache in handlers/tools/index.ts).
|
|
75
|
-
*/
|
|
76
|
-
let cachedNonCodeModeTools: ToolDefinition[] | null = null
|
|
77
|
-
let cachedCodeModeContext: ToolContext | null = null
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Collect all tool definitions except codemode (prevents recursion).
|
|
81
|
-
* Results are cached by referential identity of the ToolContext.
|
|
82
|
-
*/
|
|
83
|
-
function collectNonCodeModeTools(context: ToolContext): ToolDefinition[] {
|
|
84
|
-
if (cachedNonCodeModeTools && cachedCodeModeContext === context) {
|
|
85
|
-
return cachedNonCodeModeTools
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
cachedNonCodeModeTools = [
|
|
89
|
-
...getCoreTools(context),
|
|
90
|
-
...getSearchTools(context),
|
|
91
|
-
...getAnalyticsTools(context),
|
|
92
|
-
...getRelationshipTools(context),
|
|
93
|
-
...getExportTools(context),
|
|
94
|
-
...getAdminTools(context),
|
|
95
|
-
...getGitHubTools(context),
|
|
96
|
-
...getBackupTools(context),
|
|
97
|
-
...getTeamTools(context),
|
|
98
|
-
]
|
|
99
|
-
cachedCodeModeContext = context
|
|
100
|
-
return cachedNonCodeModeTools
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// =============================================================================
|
|
104
|
-
// Tool Definitions
|
|
105
|
-
// =============================================================================
|
|
106
|
-
|
|
107
|
-
export function getCodeModeTools(context: ToolContext): ToolDefinition[] {
|
|
108
|
-
return [
|
|
109
|
-
{
|
|
110
|
-
name: 'mj_execute_code',
|
|
111
|
-
title: 'Execute Code (Code Mode)',
|
|
112
|
-
description:
|
|
113
|
-
'Execute JavaScript in a sandboxed environment with access to all journal tools via the `mj.*` API. ' +
|
|
114
|
-
'Enables multi-step workflows in a single call, reducing token usage by 70-90%. ' +
|
|
115
|
-
'API groups: mj.core.*, mj.search.*, mj.analytics.*, mj.relationships.*, ' +
|
|
116
|
-
'mj.export.*, mj.admin.*, mj.github.*, mj.backup.*, mj.team.*. ' +
|
|
117
|
-
'Use mj.help() for method listing. Returns the last expression value.',
|
|
118
|
-
group: 'codemode',
|
|
119
|
-
inputSchema: ExecuteCodeSchemaMcp,
|
|
120
|
-
annotations: {
|
|
121
|
-
readOnlyHint: false,
|
|
122
|
-
idempotentHint: false,
|
|
123
|
-
openWorldHint: false,
|
|
124
|
-
},
|
|
125
|
-
handler: (params: unknown) => {
|
|
126
|
-
try {
|
|
127
|
-
const {
|
|
128
|
-
code,
|
|
129
|
-
timeout,
|
|
130
|
-
readonly: readonlyMode,
|
|
131
|
-
} = ExecuteCodeSchema.parse(params)
|
|
132
|
-
|
|
133
|
-
// Security validation
|
|
134
|
-
const security = getSecurityManager()
|
|
135
|
-
const validation = security.validateCode(code)
|
|
136
|
-
if (!validation.valid) {
|
|
137
|
-
return {
|
|
138
|
-
success: false,
|
|
139
|
-
error: `Security validation failed: ${validation.errors.join('; ')}`,
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Rate limiting
|
|
144
|
-
if (!security.checkRateLimit('default')) {
|
|
145
|
-
return {
|
|
146
|
-
success: false,
|
|
147
|
-
error: 'Rate limit exceeded (60 executions per minute)',
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Build tool list (excluding codemode to prevent recursion)
|
|
152
|
-
const allTools = collectNonCodeModeTools(context)
|
|
153
|
-
|
|
154
|
-
// Filter out write operations if readonly mode
|
|
155
|
-
const tools = readonlyMode
|
|
156
|
-
? allTools.filter((t) => t.annotations.readOnlyHint === true)
|
|
157
|
-
: allTools
|
|
158
|
-
|
|
159
|
-
// Build the API bridge
|
|
160
|
-
const api = createJournalApi(tools)
|
|
161
|
-
const bindings = api.createSandboxBindings()
|
|
162
|
-
|
|
163
|
-
// Execute in sandbox (override timeout if specified)
|
|
164
|
-
const pool = getSandboxPool()
|
|
165
|
-
|
|
166
|
-
// For VM sandbox, the bindings are passed directly
|
|
167
|
-
// For Worker sandbox, the bindings need to be the group API records
|
|
168
|
-
return pool.execute(code, bindings, timeout).then((result) => {
|
|
169
|
-
// Validate result size
|
|
170
|
-
if (result.success && result.result !== undefined) {
|
|
171
|
-
const sizeCheck = security.validateResultSize(result.result)
|
|
172
|
-
if (!sizeCheck.valid) {
|
|
173
|
-
return {
|
|
174
|
-
success: false,
|
|
175
|
-
error: sizeCheck.errors.join('; '),
|
|
176
|
-
metrics: result.metrics,
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return result
|
|
181
|
-
})
|
|
182
|
-
} catch (err) {
|
|
183
|
-
return formatHandlerError(err)
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
]
|
|
188
|
-
}
|
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core Tool Group - 6 tools
|
|
3
|
-
*
|
|
4
|
-
* Tools: create_entry, get_entry_by_id, get_recent_entries,
|
|
5
|
-
* create_entry_minimal, test_simple, list_tags
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { z } from 'zod'
|
|
9
|
-
import type { ToolDefinition, ToolContext } from '../../types/index.js'
|
|
10
|
-
import { formatHandlerError } from '../../utils/error-helpers.js'
|
|
11
|
-
import { resolveAuthor } from '../../utils/security-utils.js'
|
|
12
|
-
import { autoIndexEntry } from '../../utils/vector-index-helpers.js'
|
|
13
|
-
import { resolveIssueUrl } from '../../utils/github-helpers.js'
|
|
14
|
-
import { ErrorFieldsMixin } from './error-fields-mixin.js'
|
|
15
|
-
import { logger } from '../../utils/logger.js'
|
|
16
|
-
import {
|
|
17
|
-
ENTRY_TYPES,
|
|
18
|
-
SIGNIFICANCE_TYPES,
|
|
19
|
-
MAX_CONTENT_LENGTH,
|
|
20
|
-
EntryOutputSchema,
|
|
21
|
-
EntriesListOutputSchema,
|
|
22
|
-
RelationshipOutputSchema,
|
|
23
|
-
ImportanceBreakdownSchema,
|
|
24
|
-
relaxedNumber,
|
|
25
|
-
TagOutputSchema,
|
|
26
|
-
} from './schemas.js'
|
|
27
|
-
|
|
28
|
-
// ============================================================================
|
|
29
|
-
// Input Schemas
|
|
30
|
-
// ============================================================================
|
|
31
|
-
|
|
32
|
-
/** Strict schema — used inside handler for structured Zod errors */
|
|
33
|
-
const CreateEntrySchema = z.object({
|
|
34
|
-
content: z.string().min(1).max(MAX_CONTENT_LENGTH),
|
|
35
|
-
entry_type: z.enum(ENTRY_TYPES).optional().default('personal_reflection'),
|
|
36
|
-
tags: z.array(z.string()).optional().default([]),
|
|
37
|
-
is_personal: z.boolean().optional().default(true),
|
|
38
|
-
significance_type: z.enum(SIGNIFICANCE_TYPES).optional(),
|
|
39
|
-
auto_context: z.boolean().optional().default(true),
|
|
40
|
-
project_number: z.number().optional(),
|
|
41
|
-
project_owner: z.string().optional(),
|
|
42
|
-
issue_number: z.number().optional(),
|
|
43
|
-
issue_url: z.string().optional(),
|
|
44
|
-
pr_number: z.number().optional(),
|
|
45
|
-
pr_url: z.string().optional(),
|
|
46
|
-
pr_status: z.enum(['draft', 'open', 'merged', 'closed']).optional(),
|
|
47
|
-
workflow_run_id: z.number().optional(),
|
|
48
|
-
workflow_name: z.string().optional(),
|
|
49
|
-
workflow_status: z.enum(['queued', 'in_progress', 'completed']).optional(),
|
|
50
|
-
share_with_team: z.boolean().optional().default(false),
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
/** Relaxed schema — passed to SDK inputSchema so Zod enum errors reach the handler */
|
|
54
|
-
const CreateEntrySchemaMcp = z.object({
|
|
55
|
-
content: z.string(),
|
|
56
|
-
entry_type: z.string().optional().default('personal_reflection'),
|
|
57
|
-
tags: z.array(z.string()).optional().default([]),
|
|
58
|
-
is_personal: z.boolean().optional().default(true),
|
|
59
|
-
significance_type: z.string().optional(),
|
|
60
|
-
auto_context: z.boolean().optional().default(true),
|
|
61
|
-
project_number: relaxedNumber().optional(),
|
|
62
|
-
project_owner: z.string().optional(),
|
|
63
|
-
issue_number: relaxedNumber().optional(),
|
|
64
|
-
issue_url: z.string().optional(),
|
|
65
|
-
pr_number: relaxedNumber().optional(),
|
|
66
|
-
pr_url: z.string().optional(),
|
|
67
|
-
pr_status: z.string().optional(),
|
|
68
|
-
workflow_run_id: relaxedNumber().optional(),
|
|
69
|
-
workflow_name: z.string().optional(),
|
|
70
|
-
workflow_status: z.string().optional(),
|
|
71
|
-
share_with_team: z.boolean().optional().default(false),
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
const GetEntryByIdSchema = z.object({
|
|
75
|
-
entry_id: z.number(),
|
|
76
|
-
include_relationships: z.boolean().optional().default(true),
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
/** Relaxed schema — passed to SDK inputSchema so type coercion errors reach the handler */
|
|
80
|
-
const GetEntryByIdSchemaMcp = z.object({
|
|
81
|
-
entry_id: relaxedNumber(),
|
|
82
|
-
include_relationships: z.boolean().optional().default(true),
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
const GetRecentEntriesSchema = z.object({
|
|
86
|
-
limit: z.number().max(500).optional().default(5),
|
|
87
|
-
is_personal: z.boolean().optional(),
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
/** Relaxed schema — passed to SDK inputSchema so Zod min/max errors reach the handler */
|
|
91
|
-
const GetRecentEntriesSchemaMcp = z.object({
|
|
92
|
-
limit: relaxedNumber().optional().default(5),
|
|
93
|
-
is_personal: z.boolean().optional(),
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
const CreateEntryMinimalSchema = z.object({
|
|
97
|
-
content: z.string().min(1).max(MAX_CONTENT_LENGTH),
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
/** Relaxed schema — passed to SDK inputSchema so Zod min/max errors reach the handler */
|
|
101
|
-
const CreateEntryMinimalSchemaMcp = z.object({
|
|
102
|
-
content: z.string(),
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
const TestSimpleSchema = z.object({
|
|
106
|
-
message: z.string().optional().default('Hello'),
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
// ============================================================================
|
|
110
|
-
// Output Schemas
|
|
111
|
-
// ============================================================================
|
|
112
|
-
|
|
113
|
-
const CreateEntryOutputSchema = z
|
|
114
|
-
.object({
|
|
115
|
-
success: z.boolean().optional(),
|
|
116
|
-
entry: EntryOutputSchema.optional(),
|
|
117
|
-
sharedWithTeam: z.boolean().optional(),
|
|
118
|
-
author: z.string().optional(),
|
|
119
|
-
error: z.string().optional(),
|
|
120
|
-
})
|
|
121
|
-
.extend(ErrorFieldsMixin.shape)
|
|
122
|
-
|
|
123
|
-
const EntryByIdOutputSchema = z
|
|
124
|
-
.object({
|
|
125
|
-
entry: EntryOutputSchema.optional(),
|
|
126
|
-
relationships: z.array(RelationshipOutputSchema).optional(),
|
|
127
|
-
importance: z.number().nullable().optional(),
|
|
128
|
-
importanceBreakdown: ImportanceBreakdownSchema.optional(),
|
|
129
|
-
error: z.string().optional(),
|
|
130
|
-
})
|
|
131
|
-
.extend(ErrorFieldsMixin.shape)
|
|
132
|
-
|
|
133
|
-
const TestSimpleOutputSchema = z
|
|
134
|
-
.object({
|
|
135
|
-
message: z.string(),
|
|
136
|
-
})
|
|
137
|
-
.extend(ErrorFieldsMixin.shape)
|
|
138
|
-
|
|
139
|
-
const TagsListOutputSchema = z
|
|
140
|
-
.object({
|
|
141
|
-
tags: z.array(TagOutputSchema).optional(),
|
|
142
|
-
count: z.number().optional(),
|
|
143
|
-
success: z.boolean().optional(),
|
|
144
|
-
error: z.string().optional(),
|
|
145
|
-
})
|
|
146
|
-
.extend(ErrorFieldsMixin.shape)
|
|
147
|
-
|
|
148
|
-
// ============================================================================
|
|
149
|
-
// Tool Definitions
|
|
150
|
-
// ============================================================================
|
|
151
|
-
|
|
152
|
-
export function getCoreTools(context: ToolContext): ToolDefinition[] {
|
|
153
|
-
const { db, teamDb, vectorManager, github } = context
|
|
154
|
-
return [
|
|
155
|
-
{
|
|
156
|
-
name: 'create_entry',
|
|
157
|
-
title: 'Create Journal Entry',
|
|
158
|
-
description:
|
|
159
|
-
'Create a new journal entry with context and tags (v2.1.0: GitHub Actions support)',
|
|
160
|
-
group: 'core',
|
|
161
|
-
inputSchema: CreateEntrySchemaMcp,
|
|
162
|
-
outputSchema: CreateEntryOutputSchema,
|
|
163
|
-
annotations: { readOnlyHint: false, idempotentHint: false, openWorldHint: false },
|
|
164
|
-
handler: (params: unknown) => {
|
|
165
|
-
try {
|
|
166
|
-
const input = CreateEntrySchema.parse(params)
|
|
167
|
-
|
|
168
|
-
// Auto-populate issueUrl if issue_number provided without issueUrl
|
|
169
|
-
const resolvedIssueUrl = resolveIssueUrl(
|
|
170
|
-
github,
|
|
171
|
-
input.issue_number,
|
|
172
|
-
input.issue_url
|
|
173
|
-
)
|
|
174
|
-
|
|
175
|
-
const entry = db.createEntry({
|
|
176
|
-
content: input.content,
|
|
177
|
-
entryType: input.entry_type,
|
|
178
|
-
tags: input.tags,
|
|
179
|
-
isPersonal: input.is_personal,
|
|
180
|
-
significanceType: input.significance_type ?? null,
|
|
181
|
-
projectNumber: input.project_number,
|
|
182
|
-
projectOwner: input.project_owner,
|
|
183
|
-
issueNumber: input.issue_number,
|
|
184
|
-
issueUrl: resolvedIssueUrl,
|
|
185
|
-
prNumber: input.pr_number,
|
|
186
|
-
prUrl: input.pr_url,
|
|
187
|
-
prStatus: input.pr_status,
|
|
188
|
-
workflowRunId: input.workflow_run_id,
|
|
189
|
-
workflowName: input.workflow_name,
|
|
190
|
-
workflowStatus: input.workflow_status,
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
// Auto-index to vector store for semantic search (fire-and-forget)
|
|
194
|
-
autoIndexEntry(vectorManager, entry.id, entry.content)
|
|
195
|
-
|
|
196
|
-
// Share with team if requested
|
|
197
|
-
let sharedWithTeam = false
|
|
198
|
-
let author: string | undefined
|
|
199
|
-
if (input.share_with_team && teamDb) {
|
|
200
|
-
try {
|
|
201
|
-
author = resolveAuthor()
|
|
202
|
-
const teamEntry = teamDb.createEntry({
|
|
203
|
-
content: input.content,
|
|
204
|
-
entryType: input.entry_type,
|
|
205
|
-
tags: input.tags,
|
|
206
|
-
isPersonal: false,
|
|
207
|
-
significanceType: input.significance_type ?? null,
|
|
208
|
-
autoContext: JSON.stringify({ author }),
|
|
209
|
-
projectNumber: input.project_number,
|
|
210
|
-
projectOwner: input.project_owner,
|
|
211
|
-
issueNumber: input.issue_number,
|
|
212
|
-
issueUrl: resolvedIssueUrl,
|
|
213
|
-
prNumber: input.pr_number,
|
|
214
|
-
prUrl: input.pr_url,
|
|
215
|
-
prStatus: input.pr_status,
|
|
216
|
-
workflowRunId: input.workflow_run_id,
|
|
217
|
-
workflowName: input.workflow_name,
|
|
218
|
-
workflowStatus: input.workflow_status,
|
|
219
|
-
})
|
|
220
|
-
teamDb.executeRawQuery(
|
|
221
|
-
'UPDATE memory_journal SET author = ? WHERE id = ?',
|
|
222
|
-
[author, teamEntry.id]
|
|
223
|
-
)
|
|
224
|
-
teamDb.flushSave()
|
|
225
|
-
sharedWithTeam = true
|
|
226
|
-
} catch (error) {
|
|
227
|
-
logger.debug('Failed to share entry with team DB', {
|
|
228
|
-
module: 'TOOL',
|
|
229
|
-
operation: 'create-entry',
|
|
230
|
-
error,
|
|
231
|
-
})
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
return {
|
|
236
|
-
success: true,
|
|
237
|
-
entry,
|
|
238
|
-
...(sharedWithTeam ? { sharedWithTeam: true, author } : {}),
|
|
239
|
-
}
|
|
240
|
-
} catch (err) {
|
|
241
|
-
return formatHandlerError(err)
|
|
242
|
-
}
|
|
243
|
-
},
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
name: 'get_entry_by_id',
|
|
247
|
-
title: 'Get Entry by ID',
|
|
248
|
-
description: 'Get a specific journal entry by ID with full details',
|
|
249
|
-
group: 'core',
|
|
250
|
-
inputSchema: GetEntryByIdSchemaMcp,
|
|
251
|
-
outputSchema: EntryByIdOutputSchema,
|
|
252
|
-
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
253
|
-
handler: (params: unknown) => {
|
|
254
|
-
try {
|
|
255
|
-
const { entry_id, include_relationships } = GetEntryByIdSchema.parse(params)
|
|
256
|
-
const entry = db.getEntryById(entry_id)
|
|
257
|
-
if (!entry) {
|
|
258
|
-
return {
|
|
259
|
-
success: false,
|
|
260
|
-
error: `Entry ${String(entry_id)} not found`,
|
|
261
|
-
code: 'RESOURCE_NOT_FOUND',
|
|
262
|
-
category: 'resource',
|
|
263
|
-
suggestion: 'Verify the entry ID and try again',
|
|
264
|
-
recoverable: true,
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
const { score: importance, breakdown: importanceBreakdown } =
|
|
268
|
-
db.calculateImportance(entry_id)
|
|
269
|
-
const result: Record<string, unknown> = {
|
|
270
|
-
entry,
|
|
271
|
-
importance,
|
|
272
|
-
importanceBreakdown,
|
|
273
|
-
}
|
|
274
|
-
if (include_relationships) {
|
|
275
|
-
result['relationships'] = db.getRelationships(entry_id)
|
|
276
|
-
}
|
|
277
|
-
return result
|
|
278
|
-
} catch (err) {
|
|
279
|
-
return formatHandlerError(err)
|
|
280
|
-
}
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
name: 'get_recent_entries',
|
|
285
|
-
title: 'Get Recent Entries',
|
|
286
|
-
description: 'Get recent journal entries',
|
|
287
|
-
group: 'core',
|
|
288
|
-
inputSchema: GetRecentEntriesSchemaMcp,
|
|
289
|
-
outputSchema: EntriesListOutputSchema,
|
|
290
|
-
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
291
|
-
handler: (params: unknown) => {
|
|
292
|
-
try {
|
|
293
|
-
const { limit, is_personal } = GetRecentEntriesSchema.parse(params)
|
|
294
|
-
const entries = db.getRecentEntries(limit, is_personal)
|
|
295
|
-
return { entries, count: entries.length }
|
|
296
|
-
} catch (err) {
|
|
297
|
-
return formatHandlerError(err)
|
|
298
|
-
}
|
|
299
|
-
},
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
name: 'create_entry_minimal',
|
|
303
|
-
title: 'Create Entry (Minimal)',
|
|
304
|
-
description: 'Minimal entry creation without context or tags',
|
|
305
|
-
group: 'core',
|
|
306
|
-
inputSchema: CreateEntryMinimalSchemaMcp,
|
|
307
|
-
outputSchema: CreateEntryOutputSchema,
|
|
308
|
-
annotations: { readOnlyHint: false, idempotentHint: false, openWorldHint: false },
|
|
309
|
-
handler: (params: unknown) => {
|
|
310
|
-
try {
|
|
311
|
-
const { content } = CreateEntryMinimalSchema.parse(params)
|
|
312
|
-
const entry = db.createEntry({ content })
|
|
313
|
-
|
|
314
|
-
// Auto-index to vector store for semantic search (fire-and-forget)
|
|
315
|
-
autoIndexEntry(vectorManager, entry.id, entry.content)
|
|
316
|
-
|
|
317
|
-
return { success: true, entry }
|
|
318
|
-
} catch (err) {
|
|
319
|
-
return formatHandlerError(err)
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
name: 'test_simple',
|
|
325
|
-
title: 'Test Simple',
|
|
326
|
-
description: 'Simple test tool that just returns a message',
|
|
327
|
-
group: 'core',
|
|
328
|
-
inputSchema: TestSimpleSchema,
|
|
329
|
-
outputSchema: TestSimpleOutputSchema,
|
|
330
|
-
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
331
|
-
handler: (params: unknown) => {
|
|
332
|
-
try {
|
|
333
|
-
const { message } = TestSimpleSchema.parse(params)
|
|
334
|
-
return { message: `Test response: ${message}` }
|
|
335
|
-
} catch (err) {
|
|
336
|
-
return formatHandlerError(err)
|
|
337
|
-
}
|
|
338
|
-
},
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
name: 'list_tags',
|
|
342
|
-
title: 'List Tags',
|
|
343
|
-
description: 'List all available tags',
|
|
344
|
-
group: 'core',
|
|
345
|
-
inputSchema: z.object({}).strict(),
|
|
346
|
-
outputSchema: TagsListOutputSchema,
|
|
347
|
-
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
348
|
-
handler: (_params: unknown) => {
|
|
349
|
-
try {
|
|
350
|
-
const rawTags = db.listTags()
|
|
351
|
-
const tags = rawTags.map((t) => ({ name: t.name, count: t.usageCount }))
|
|
352
|
-
return { tags, count: tags.length }
|
|
353
|
-
} catch (err) {
|
|
354
|
-
return formatHandlerError(err)
|
|
355
|
-
}
|
|
356
|
-
},
|
|
357
|
-
},
|
|
358
|
-
]
|
|
359
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Re-export stub — ErrorFieldsMixin has moved to its canonical location.
|
|
3
|
-
*
|
|
4
|
-
* SSoT: src/utils/errors/error-response-fields.ts
|
|
5
|
-
*
|
|
6
|
-
* This file exists for backward compatibility. New code should import
|
|
7
|
-
* directly from '../../utils/errors/error-response-fields.js'.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
export { ErrorFieldsMixin } from '../../utils/errors/error-response-fields.js'
|