contextgit 0.1.4 → 0.1.5

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.
Files changed (29) hide show
  1. package/bin/contextgit-mcp.js +7 -0
  2. package/package.json +6 -9
  3. package/node_modules/@contextgit/mcp/dist/auto-snapshot.d.ts +0 -30
  4. package/node_modules/@contextgit/mcp/dist/auto-snapshot.d.ts.map +0 -1
  5. package/node_modules/@contextgit/mcp/dist/auto-snapshot.js +0 -68
  6. package/node_modules/@contextgit/mcp/dist/auto-snapshot.js.map +0 -1
  7. package/node_modules/@contextgit/mcp/dist/config.d.ts +0 -17
  8. package/node_modules/@contextgit/mcp/dist/config.d.ts.map +0 -1
  9. package/node_modules/@contextgit/mcp/dist/config.js +0 -48
  10. package/node_modules/@contextgit/mcp/dist/config.js.map +0 -1
  11. package/node_modules/@contextgit/mcp/dist/git-sync.d.ts +0 -15
  12. package/node_modules/@contextgit/mcp/dist/git-sync.d.ts.map +0 -1
  13. package/node_modules/@contextgit/mcp/dist/git-sync.js +0 -87
  14. package/node_modules/@contextgit/mcp/dist/git-sync.js.map +0 -1
  15. package/node_modules/@contextgit/mcp/dist/index.d.ts +0 -3
  16. package/node_modules/@contextgit/mcp/dist/index.d.ts.map +0 -1
  17. package/node_modules/@contextgit/mcp/dist/index.js +0 -17
  18. package/node_modules/@contextgit/mcp/dist/index.js.map +0 -1
  19. package/node_modules/@contextgit/mcp/dist/server.d.ts +0 -3
  20. package/node_modules/@contextgit/mcp/dist/server.d.ts.map +0 -1
  21. package/node_modules/@contextgit/mcp/dist/server.js +0 -377
  22. package/node_modules/@contextgit/mcp/dist/server.js.map +0 -1
  23. package/node_modules/@contextgit/mcp/package.json +0 -31
  24. package/node_modules/@contextgit/mcp/src/auto-snapshot.ts +0 -83
  25. package/node_modules/@contextgit/mcp/src/config.ts +0 -53
  26. package/node_modules/@contextgit/mcp/src/git-sync.ts +0 -94
  27. package/node_modules/@contextgit/mcp/src/index.ts +0 -19
  28. package/node_modules/@contextgit/mcp/src/server.ts +0 -568
  29. package/node_modules/@contextgit/mcp/tsconfig.json +0 -9
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env node
2
- // index.ts — entry point for the ContextGit MCP server process.
3
- // Started by the MCP host (Claude Desktop / Claude Code) via stdio.
4
-
5
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
6
- import { createServer } from './server.js'
7
-
8
- async function main(): Promise<void> {
9
- const server = await createServer()
10
- const transport = new StdioServerTransport()
11
- await server.connect(transport)
12
- // Server is now listening on stdin/stdout — process stays alive until the
13
- // host closes the connection.
14
- }
15
-
16
- main().catch(err => {
17
- console.error('[contextgit-mcp] Fatal error:', err)
18
- process.exit(1)
19
- })
@@ -1,568 +0,0 @@
1
- // server.ts — ContextGit MCP Server
2
- //
3
- // Exposes tools to Claude and other MCP clients:
4
- // project_memory_load — return a formatted project snapshot
5
- // project_memory_save — persist a context commit
6
- // context_search — full-text search over past commits
7
- // project_memory_branch — create a context branch
8
- // project_task_claim — claim a task
9
- // project_task_unclaim — release a claimed task
10
- // project_memory_merge — merge a context branch
11
- //
12
- // Transport: stdio (launched by the MCP host, e.g. Claude Desktop / Claude Code)
13
- //
14
- // Initialization (per server process):
15
- // 1. Load .contextgit/config.json (search from CWD upward)
16
- // 2. Open LocalStore for projectId
17
- // 3. Detect current git branch via simple-git
18
- // 4. Resolve (or create) the context branch for that git branch
19
- // 5. Build ContextEngine, call engine.init()
20
-
21
- import os from 'os'
22
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
23
- import { z } from 'zod'
24
- import { simpleGit } from 'simple-git'
25
- import { ContextEngine, EmbeddingService, SnapshotFormatter } from '@contextgit/core'
26
- import { LocalStore, RemoteStore, SupabaseStore, resolveDbPath } from '@contextgit/store'
27
- import { loadConfig } from './config.js'
28
- import { captureGitMetadata } from './git-sync.js'
29
- import { AutoSnapshotManager } from './auto-snapshot.js'
30
- import type { ContextStore } from '@contextgit/store'
31
- import type { ContextGitConfig } from '@contextgit/core'
32
-
33
- // ─── Helpers ──────────────────────────────────────────────────────────────────
34
-
35
- async function detectGitBranch(): Promise<string> {
36
- try {
37
- const git = simpleGit(process.cwd())
38
- const result = await git.revparse(['--abbrev-ref', 'HEAD'])
39
- return result.trim()
40
- } catch {
41
- return 'main'
42
- }
43
- }
44
-
45
- /**
46
- * Resolve the ContextGit branch that tracks `gitBranch`.
47
- * Creates one if it doesn't exist yet.
48
- */
49
- async function resolveContextBranch(
50
- store: ContextStore,
51
- projectId: string,
52
- gitBranch: string,
53
- ): Promise<string> {
54
- const existing = await store.getBranchByGitName(projectId, gitBranch)
55
- if (existing) return existing.id
56
-
57
- const created = await store.createBranch({
58
- projectId,
59
- name: `Context: ${gitBranch}`,
60
- gitBranch,
61
- })
62
- return created.id
63
- }
64
-
65
- // ─── Server bootstrap ─────────────────────────────────────────────────────────
66
-
67
- interface ServerContext {
68
- engine: ContextEngine
69
- store: ContextStore
70
- claimsStore: ContextStore // Supabase when configured, LocalStore otherwise
71
- projectId: string
72
- branchId: string
73
- config: ContextGitConfig
74
- agentId: string
75
- }
76
-
77
- async function bootstrap(): Promise<ServerContext> {
78
- const config = loadConfig()
79
- const { projectId, configDir } = config
80
-
81
- const store: ContextStore =
82
- config.store && config.store !== 'local'
83
- ? new RemoteStore(config.store)
84
- : new LocalStore(projectId, resolveDbPath(projectId, configDir))
85
-
86
- // Ensure the project row exists before creating branches (FK constraint)
87
- const existing = await store.getProject(projectId)
88
- if (!existing) {
89
- await store.createProject({ id: projectId, name: config.project })
90
- }
91
-
92
- const gitBranch = await detectGitBranch()
93
- const branchId = await resolveContextBranch(store, projectId, gitBranch)
94
-
95
- const hostname = os.hostname()
96
- const agentId = process.env['CONTEXTGIT_AGENT_ID'] ?? `${hostname}-mcp-claude-code-interactive`
97
-
98
- const engine = new ContextEngine(
99
- store,
100
- agentId,
101
- config.agentRole ?? 'solo',
102
- 'claude-code',
103
- config.workflowType ?? 'interactive',
104
- { embeddingService: new EmbeddingService() },
105
- )
106
- await engine.init(projectId, branchId)
107
-
108
- let claimsStore: ContextStore = store // default: same as primary store
109
-
110
- if (config.supabaseUrl) {
111
- // Env var is preferred; fall back to config file for VS Code extension
112
- // env injection bug (https://github.com/anthropics/claude-code/issues/28090)
113
- const key = process.env['SUPABASE_SERVICE_KEY'] ?? config.supabaseServiceKey
114
- if (key) {
115
- claimsStore = new SupabaseStore(config.supabaseUrl, key)
116
- }
117
- }
118
-
119
- return { engine, store, claimsStore, projectId, branchId, config, agentId }
120
- }
121
-
122
- // ─── Tool definitions ─────────────────────────────────────────────────────────
123
-
124
- export async function createServer(): Promise<McpServer> {
125
- const ctx = await bootstrap()
126
- const autoSnapshot = new AutoSnapshotManager(ctx.engine, {
127
- interval: ctx.config.snapshotInterval ?? 10,
128
- })
129
-
130
- const server = new McpServer({
131
- name: 'contextgit',
132
- version: '0.0.1',
133
- })
134
-
135
- // ── project_memory_load (was: context_get) ──────────────────────────────────
136
-
137
- const handleProjectMemoryLoad = async ({
138
- format,
139
- agent_role,
140
- since,
141
- }: {
142
- scope?: 'global' | 'branch'
143
- format?: 'agents-md' | 'json' | 'text'
144
- agent_role?: 'orchestrator' | 'dev' | 'test' | 'review' | 'background' | 'ci' | 'solo'
145
- since?: number
146
- }) => {
147
- await autoSnapshot.onToolCall('context_get')
148
- try {
149
- if (since !== undefined) {
150
- const delta = await ctx.store.getContextDelta(ctx.projectId, ctx.branchId, since)
151
- return {
152
- content: [{ type: 'text' as const, text: JSON.stringify(delta, null, 2) }],
153
- }
154
- }
155
- const snapshot = await ctx.store.getSessionSnapshot(
156
- ctx.projectId,
157
- ctx.branchId,
158
- agent_role ? { agentRole: agent_role } : undefined,
159
- )
160
-
161
- // If claimsStore is different (Supabase configured), replace claims with live data
162
- if (ctx.claimsStore !== ctx.store) {
163
- snapshot.activeClaims = await ctx.claimsStore.listActiveClaims(ctx.projectId)
164
- }
165
-
166
- const text = new SnapshotFormatter().format(snapshot, format ?? 'agents-md')
167
- return {
168
- content: [{ type: 'text' as const, text }],
169
- }
170
- } catch (err) {
171
- const message = err instanceof Error ? err.message : String(err)
172
- return {
173
- content: [{ type: 'text' as const, text: `Error retrieving snapshot: ${message}` }],
174
- isError: true,
175
- }
176
- }
177
- }
178
-
179
- const projectMemoryLoadSchema = {
180
- scope: z.enum(['global', 'branch']).default('global').describe(
181
- "'global' returns the full project summary + branch state. 'branch' scopes to the current branch.",
182
- ),
183
- format: z.enum(['agents-md', 'json', 'text']).default('agents-md').describe(
184
- 'Output format. agents-md is optimized for agent consumption.',
185
- ),
186
- agent_role: z.enum(['orchestrator', 'dev', 'test', 'review', 'background', 'ci', 'solo']).optional().describe(
187
- 'Filter recentCommits to this agent role only. Omit to return commits from all roles.',
188
- ),
189
- since: z.number().optional().describe(
190
- 'Unix timestamp ms. When provided, returns only commits and thread changes after this time. Use for orchestrator polling loops.',
191
- ),
192
- }
193
-
194
- server.tool(
195
- 'project_memory_load',
196
- `Load persistent project memory and context.
197
-
198
- IMPORTANT: Call this tool at the START of every session — before reading files, before asking questions, before doing any work. This tool returns the project's current state including: what was built, what was decided, active tasks, claimed work, recent decisions, and open questions.
199
-
200
- Skipping this call means you will duplicate work that was already done, re-explore approaches that already failed, and contradict decisions that were already made.
201
-
202
- If you are a subagent working on a specific task, call this tool first to understand the full project context before starting your assigned work.`,
203
- projectMemoryLoadSchema,
204
- handleProjectMemoryLoad,
205
- )
206
-
207
- // Backward-compat alias — remove in 0.0.6
208
- server.tool(
209
- 'context_get',
210
- 'DEPRECATED: Use project_memory_load instead. Retrieve the current project snapshot.',
211
- projectMemoryLoadSchema,
212
- async (params) => {
213
- console.warn('[contextgit] context_get is deprecated. Use project_memory_load.')
214
- return handleProjectMemoryLoad(params)
215
- },
216
- )
217
-
218
- // ── project_memory_save (was: context_commit) ───────────────────────────────
219
-
220
- const handleProjectMemorySave = async ({
221
- message,
222
- content,
223
- open_threads,
224
- close_thread_ids,
225
- }: {
226
- message: string
227
- content: string
228
- open_threads?: string[]
229
- close_thread_ids?: string[]
230
- }) => {
231
- await autoSnapshot.onToolCall('context_commit')
232
- try {
233
- const threads: { open?: string[]; close?: Array<{ id: string; note: string }> } = {}
234
- if (open_threads?.length) threads.open = open_threads
235
- if (close_thread_ids?.length) {
236
- threads.close = close_thread_ids.map(id => ({ id, note: 'Closed via context_commit' }))
237
- }
238
-
239
- const git = await captureGitMetadata(process.cwd())
240
- const commit = await ctx.engine.commit({
241
- message,
242
- content,
243
- gitCommitSha: git?.sha,
244
- ...(Object.keys(threads).length > 0 ? { threads } : {}),
245
- })
246
-
247
- return {
248
- content: [
249
- {
250
- type: 'text' as const,
251
- text: `Commit recorded.\nID: ${commit.id}\nMessage: ${commit.message}`,
252
- },
253
- ],
254
- }
255
- } catch (err) {
256
- const message = err instanceof Error ? err.message : String(err)
257
- return {
258
- content: [{ type: 'text' as const, text: `Error recording commit: ${message}` }],
259
- isError: true,
260
- }
261
- }
262
- }
263
-
264
- const projectMemorySaveSchema = {
265
- message: z.string().min(1).describe('Short summary of what was accomplished (1–2 sentences).'),
266
- content: z.string().min(1).describe('Detailed description of the work done, decisions made, and current state.'),
267
- open_threads: z.array(z.string()).optional().describe(
268
- 'New open questions or blockers to track (each max 200 chars).',
269
- ),
270
- close_thread_ids: z.array(z.string()).optional().describe(
271
- 'IDs of threads to close.',
272
- ),
273
- }
274
-
275
- server.tool(
276
- 'project_memory_save',
277
- `Save project memory after completing work.
278
-
279
- IMPORTANT: Call this tool BEFORE ending your session or moving to the next task. This saves what you did, what you decided, and what questions remain — so the next session (or the next agent) can pick up where you left off.
280
-
281
- If you skip this call, the next session starts blind. Your work will be invisible to future agents. They will re-do what you already did.
282
-
283
- Call after: completing a feature, making an architectural decision, resolving a bug, closing a thread, or finishing any meaningful unit of work. Small decisions compound — save them.`,
284
- projectMemorySaveSchema,
285
- handleProjectMemorySave,
286
- )
287
-
288
- // Backward-compat alias — remove in 0.0.6
289
- server.tool(
290
- 'context_commit',
291
- 'DEPRECATED: Use project_memory_save instead. Persist a context commit recording significant work.',
292
- projectMemorySaveSchema,
293
- async (params) => {
294
- console.warn('[contextgit] context_commit is deprecated. Use project_memory_save.')
295
- return handleProjectMemorySave(params)
296
- },
297
- )
298
-
299
- // ── context_search (unchanged) ──────────────────────────────────────────────
300
- server.tool(
301
- 'context_search',
302
- 'Search past context commits. Uses semantic + full-text search and merges results.',
303
- {
304
- query: z.string().min(1).describe('Search query — natural language or keywords.'),
305
- limit: z.number().int().min(1).max(20).default(5).describe('Maximum results to return.'),
306
- },
307
- async ({ query, limit }) => {
308
- await autoSnapshot.onToolCall('context_search')
309
- try {
310
- const [semantic, fts] = await Promise.all([
311
- ctx.engine.semanticSearch(query, ctx.projectId, limit),
312
- ctx.store.fullTextSearch(query, ctx.projectId),
313
- ])
314
- const seen = new Set<string>()
315
- const merged = [...semantic, ...fts].filter(r => {
316
- if (seen.has(r.commit.id)) return false
317
- seen.add(r.commit.id)
318
- return true
319
- })
320
- const trimmed = merged.slice(0, limit)
321
-
322
- if (trimmed.length === 0) {
323
- return {
324
- content: [{ type: 'text', text: 'No results found.' }],
325
- }
326
- }
327
-
328
- const formatted = trimmed
329
- .map(
330
- (r, i) =>
331
- `[${i + 1}] ${r.commit.message}\n` +
332
- ` ID: ${r.commit.id} Score: ${r.score.toFixed(3)}\n` +
333
- ` ${r.commit.content.slice(0, 200)}${r.commit.content.length > 200 ? '…' : ''}`,
334
- )
335
- .join('\n\n')
336
-
337
- return {
338
- content: [{ type: 'text', text: formatted }],
339
- }
340
- } catch (err) {
341
- const message = err instanceof Error ? err.message : String(err)
342
- return {
343
- content: [{ type: 'text', text: `Error searching commits: ${message}` }],
344
- isError: true,
345
- }
346
- }
347
- },
348
- )
349
-
350
- // ── project_memory_branch (was: context_branch) ─────────────────────────────
351
-
352
- const handleProjectMemoryBranch = async ({
353
- git_branch,
354
- name,
355
- }: {
356
- git_branch: string
357
- name?: string
358
- }) => {
359
- await autoSnapshot.onToolCall('context_branch')
360
- try {
361
- const branch = await ctx.engine.branch(git_branch, name)
362
- return {
363
- content: [
364
- {
365
- type: 'text' as const,
366
- text: `Branch created.\nID: ${branch.id}\nName: ${branch.name}`,
367
- },
368
- ],
369
- }
370
- } catch (err) {
371
- const message = err instanceof Error ? err.message : String(err)
372
- return {
373
- content: [{ type: 'text' as const, text: `Error creating branch: ${message}` }],
374
- isError: true,
375
- }
376
- }
377
- }
378
-
379
- const projectMemoryBranchSchema = {
380
- git_branch: z.string().min(1).describe('The git branch name to track.'),
381
- name: z.string().optional().describe('Optional display name for the context branch.'),
382
- }
383
-
384
- server.tool(
385
- 'project_memory_branch',
386
- `Create an isolated context branch before risky or experimental work.
387
-
388
- Call before: trying an approach you're not sure will work, refactoring across many files, or exploring an architectural alternative. If the exploration fails, the main context is untouched.
389
-
390
- The cost of not branching is re-explaining to the next session why you abandoned an approach you spent an hour on.`,
391
- projectMemoryBranchSchema,
392
- handleProjectMemoryBranch,
393
- )
394
-
395
- // Backward-compat alias — remove in 0.0.6
396
- server.tool(
397
- 'context_branch',
398
- 'DEPRECATED: Use project_memory_branch instead. Create a new context branch tracking a git branch.',
399
- projectMemoryBranchSchema,
400
- async (params) => {
401
- console.warn('[contextgit] context_branch is deprecated. Use project_memory_branch.')
402
- return handleProjectMemoryBranch(params)
403
- },
404
- )
405
-
406
- // ── project_task_claim (was: context_claim) ─────────────────────────────────
407
-
408
- const handleProjectTaskClaim = async ({
409
- task,
410
- ttl_hours,
411
- status,
412
- for_agent_id,
413
- thread_id,
414
- }: {
415
- task: string
416
- ttl_hours?: number
417
- status?: 'proposed' | 'active'
418
- for_agent_id?: string
419
- thread_id?: string
420
- }) => {
421
- await autoSnapshot.onToolCall('context_claim')
422
- try {
423
- const claim = await ctx.claimsStore.claimTask(ctx.projectId, ctx.branchId, {
424
- task,
425
- agentId: for_agent_id ?? ctx.agentId,
426
- role: ctx.config.agentRole ?? 'solo',
427
- status: status ?? 'proposed',
428
- ttl: Math.round((ttl_hours ?? 2) * 3_600_000),
429
- threadId: thread_id,
430
- })
431
- return {
432
- content: [
433
- {
434
- type: 'text' as const,
435
- text: `Claim recorded.\nID: ${claim.id}\nTask: ${claim.task}\nStatus: ${claim.status}\nTTL: ${ttl_hours ?? 2}h`,
436
- },
437
- ],
438
- }
439
- } catch (err) {
440
- const message = err instanceof Error ? err.message : String(err)
441
- return {
442
- content: [{ type: 'text' as const, text: `Error creating claim: ${message}` }],
443
- isError: true,
444
- }
445
- }
446
- }
447
-
448
- const projectTaskClaimSchema = {
449
- task: z.string().min(1).describe('Short description of the task being claimed (e.g. "build auth module").'),
450
- ttl_hours: z.number().positive().default(2).describe('Time-to-live in hours before the claim auto-expires. Default: 2.'),
451
- status: z.enum(['proposed', 'active']).default('proposed').describe("'proposed' for plan-mode claims; 'active' once approved and work begins."),
452
- for_agent_id: z.string().optional().describe('Claim on behalf of this agent ID (pre-claiming by orchestrator).'),
453
- thread_id: z.string().optional().describe('Direct thread ID link for this claim.'),
454
- }
455
-
456
- server.tool(
457
- 'project_task_claim',
458
- `Claim a task to prevent other agents from working on it simultaneously.
459
-
460
- Call before starting work on any task visible in the project memory. Other agents will see your claim and skip this task. Claims auto-expire after 2 hours.
461
-
462
- If you skip claiming, another agent may start the same task, producing duplicate and conflicting work.`,
463
- projectTaskClaimSchema,
464
- handleProjectTaskClaim,
465
- )
466
-
467
- // Backward-compat alias — remove in 0.0.6
468
- server.tool(
469
- 'context_claim',
470
- 'DEPRECATED: Use project_task_claim instead. Claim a task to prevent other agents from picking it up simultaneously.',
471
- projectTaskClaimSchema,
472
- async (params) => {
473
- console.warn('[contextgit] context_claim is deprecated. Use project_task_claim.')
474
- return handleProjectTaskClaim(params)
475
- },
476
- )
477
-
478
- // ── project_task_unclaim (was: context_unclaim) ──────────────────────────────
479
-
480
- const handleProjectTaskUnclaim = async ({ claim_id }: { claim_id: string }) => {
481
- await autoSnapshot.onToolCall('context_unclaim')
482
- try {
483
- await ctx.claimsStore.unclaimTask(claim_id)
484
- return {
485
- content: [{ type: 'text' as const, text: `Claim released.\nID: ${claim_id}` }],
486
- }
487
- } catch (err) {
488
- const message = err instanceof Error ? err.message : String(err)
489
- return {
490
- content: [{ type: 'text' as const, text: `Error releasing claim: ${message}` }],
491
- isError: true,
492
- }
493
- }
494
- }
495
-
496
- const projectTaskUnclaimSchema = {
497
- claim_id: z.string().min(1).describe('ID of the claim to release.'),
498
- }
499
-
500
- server.tool(
501
- 'project_task_unclaim',
502
- `Release a previously claimed task so other agents can work on it.
503
-
504
- Call when: abandoning a task you claimed (won't be completing it), or when re-assigning work. If you claimed a task and won't complete it, release it — otherwise it blocks other agents until the 2-hour TTL expires.`,
505
- projectTaskUnclaimSchema,
506
- handleProjectTaskUnclaim,
507
- )
508
-
509
- // Backward-compat alias — remove in 0.0.6
510
- server.tool(
511
- 'context_unclaim',
512
- 'DEPRECATED: Use project_task_unclaim instead. Release a previously claimed task.',
513
- projectTaskUnclaimSchema,
514
- async (params) => {
515
- console.warn('[contextgit] context_unclaim is deprecated. Use project_task_unclaim.')
516
- return handleProjectTaskUnclaim(params)
517
- },
518
- )
519
-
520
- // ── project_memory_merge (was: context_merge) ───────────────────────────────
521
-
522
- const handleProjectMemoryMerge = async ({ source_branch_id }: { source_branch_id: string }) => {
523
- await autoSnapshot.onToolCall('context_merge')
524
- try {
525
- const commit = await ctx.engine.merge(source_branch_id)
526
- return {
527
- content: [
528
- {
529
- type: 'text' as const,
530
- text: `Merge commit recorded.\nID: ${commit.id}`,
531
- },
532
- ],
533
- }
534
- } catch (err) {
535
- const message = err instanceof Error ? err.message : String(err)
536
- return {
537
- content: [{ type: 'text' as const, text: `Error merging branch: ${message}` }],
538
- isError: true,
539
- }
540
- }
541
- }
542
-
543
- const projectMemoryMergeSchema = {
544
- source_branch_id: z.string().min(1).describe('ID of the context branch to merge in.'),
545
- }
546
-
547
- server.tool(
548
- 'project_memory_merge',
549
- `Merge a context branch back into the parent branch after successful exploration.
550
-
551
- Call after a context branch experiment succeeds and you want to preserve the findings in the main project memory.`,
552
- projectMemoryMergeSchema,
553
- handleProjectMemoryMerge,
554
- )
555
-
556
- // Backward-compat alias — remove in 0.0.6
557
- server.tool(
558
- 'context_merge',
559
- 'DEPRECATED: Use project_memory_merge instead. Merge a source context branch into the current branch.',
560
- projectMemoryMergeSchema,
561
- async (params) => {
562
- console.warn('[contextgit] context_merge is deprecated. Use project_memory_merge.')
563
- return handleProjectMemoryMerge(params)
564
- },
565
- )
566
-
567
- return server
568
- }
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "rootDir": "./src",
5
- "outDir": "./dist"
6
- },
7
- "include": ["src/**/*"],
8
- "exclude": ["node_modules", "dist"]
9
- }