gitmem-mcp 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/CLAUDE.md.template +65 -0
- package/LICENSE +21 -0
- package/README.md +221 -0
- package/bin/gitmem.js +383 -0
- package/dist/commands/check.d.ts +33 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +492 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/constants/closing-questions.d.ts +40 -0
- package/dist/constants/closing-questions.d.ts.map +1 -0
- package/dist/constants/closing-questions.js +107 -0
- package/dist/constants/closing-questions.js.map +1 -0
- package/dist/diagnostics/anonymizer.d.ts +55 -0
- package/dist/diagnostics/anonymizer.d.ts.map +1 -0
- package/dist/diagnostics/anonymizer.js +191 -0
- package/dist/diagnostics/anonymizer.js.map +1 -0
- package/dist/diagnostics/channels.d.ts +132 -0
- package/dist/diagnostics/channels.d.ts.map +1 -0
- package/dist/diagnostics/channels.js +150 -0
- package/dist/diagnostics/channels.js.map +1 -0
- package/dist/diagnostics/collector.d.ts +183 -0
- package/dist/diagnostics/collector.d.ts.map +1 -0
- package/dist/diagnostics/collector.js +227 -0
- package/dist/diagnostics/collector.js.map +1 -0
- package/dist/diagnostics/index.d.ts +28 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +31 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/absorb-observations.d.ts +63 -0
- package/dist/schemas/absorb-observations.d.ts.map +1 -0
- package/dist/schemas/absorb-observations.js +25 -0
- package/dist/schemas/absorb-observations.js.map +1 -0
- package/dist/schemas/active-sessions.d.ts +71 -0
- package/dist/schemas/active-sessions.d.ts.map +1 -0
- package/dist/schemas/active-sessions.js +19 -0
- package/dist/schemas/active-sessions.js.map +1 -0
- package/dist/schemas/analyze.d.ts +38 -0
- package/dist/schemas/analyze.d.ts.map +1 -0
- package/dist/schemas/analyze.js +30 -0
- package/dist/schemas/analyze.js.map +1 -0
- package/dist/schemas/common.d.ts +55 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +65 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/create-decision.d.ts +48 -0
- package/dist/schemas/create-decision.d.ts.map +1 -0
- package/dist/schemas/create-decision.js +31 -0
- package/dist/schemas/create-decision.js.map +1 -0
- package/dist/schemas/create-learning.d.ts +107 -0
- package/dist/schemas/create-learning.d.ts.map +1 -0
- package/dist/schemas/create-learning.js +64 -0
- package/dist/schemas/create-learning.js.map +1 -0
- package/dist/schemas/get-transcript.d.ts +24 -0
- package/dist/schemas/get-transcript.d.ts.map +1 -0
- package/dist/schemas/get-transcript.js +22 -0
- package/dist/schemas/get-transcript.js.map +1 -0
- package/dist/schemas/index.d.ts +23 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +23 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/log.d.ts +36 -0
- package/dist/schemas/log.d.ts.map +1 -0
- package/dist/schemas/log.js +27 -0
- package/dist/schemas/log.js.map +1 -0
- package/dist/schemas/prepare-context.d.ts +41 -0
- package/dist/schemas/prepare-context.d.ts.map +1 -0
- package/dist/schemas/prepare-context.js +31 -0
- package/dist/schemas/prepare-context.js.map +1 -0
- package/dist/schemas/recall.d.ts +41 -0
- package/dist/schemas/recall.d.ts.map +1 -0
- package/dist/schemas/recall.js +47 -0
- package/dist/schemas/recall.js.map +1 -0
- package/dist/schemas/record-scar-usage-batch.d.ts +82 -0
- package/dist/schemas/record-scar-usage-batch.d.ts.map +1 -0
- package/dist/schemas/record-scar-usage-batch.js +25 -0
- package/dist/schemas/record-scar-usage-batch.js.map +1 -0
- package/dist/schemas/record-scar-usage.d.ts +51 -0
- package/dist/schemas/record-scar-usage.d.ts.map +1 -0
- package/dist/schemas/record-scar-usage.js +32 -0
- package/dist/schemas/record-scar-usage.js.map +1 -0
- package/dist/schemas/save-transcript.d.ts +38 -0
- package/dist/schemas/save-transcript.d.ts.map +1 -0
- package/dist/schemas/save-transcript.js +30 -0
- package/dist/schemas/save-transcript.js.map +1 -0
- package/dist/schemas/search.d.ts +36 -0
- package/dist/schemas/search.d.ts.map +1 -0
- package/dist/schemas/search.js +27 -0
- package/dist/schemas/search.js.map +1 -0
- package/dist/schemas/session-close.d.ts +371 -0
- package/dist/schemas/session-close.d.ts.map +1 -0
- package/dist/schemas/session-close.js +95 -0
- package/dist/schemas/session-close.js.map +1 -0
- package/dist/schemas/session-start.d.ts +46 -0
- package/dist/schemas/session-start.d.ts.map +1 -0
- package/dist/schemas/session-start.js +33 -0
- package/dist/schemas/session-start.js.map +1 -0
- package/dist/schemas/thread.d.ts +72 -0
- package/dist/schemas/thread.d.ts.map +1 -0
- package/dist/schemas/thread.js +39 -0
- package/dist/schemas/thread.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +313 -0
- package/dist/server.js.map +1 -0
- package/dist/services/active-sessions.d.ts +66 -0
- package/dist/services/active-sessions.d.ts.map +1 -0
- package/dist/services/active-sessions.js +311 -0
- package/dist/services/active-sessions.js.map +1 -0
- package/dist/services/agent-detection.d.ts +25 -0
- package/dist/services/agent-detection.d.ts.map +1 -0
- package/dist/services/agent-detection.js +93 -0
- package/dist/services/agent-detection.js.map +1 -0
- package/dist/services/analytics.d.ts +201 -0
- package/dist/services/analytics.d.ts.map +1 -0
- package/dist/services/analytics.js +483 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/cache.d.ts +148 -0
- package/dist/services/cache.d.ts.map +1 -0
- package/dist/services/cache.js +384 -0
- package/dist/services/cache.js.map +1 -0
- package/dist/services/cache.test.d.ts +8 -0
- package/dist/services/cache.test.d.ts.map +1 -0
- package/dist/services/cache.test.js +267 -0
- package/dist/services/cache.test.js.map +1 -0
- package/dist/services/compliance-validator.d.ts +30 -0
- package/dist/services/compliance-validator.d.ts.map +1 -0
- package/dist/services/compliance-validator.js +257 -0
- package/dist/services/compliance-validator.js.map +1 -0
- package/dist/services/config.d.ts +48 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +128 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/embedding.d.ts +58 -0
- package/dist/services/embedding.d.ts.map +1 -0
- package/dist/services/embedding.js +243 -0
- package/dist/services/embedding.js.map +1 -0
- package/dist/services/gitmem-dir.d.ts +38 -0
- package/dist/services/gitmem-dir.d.ts.map +1 -0
- package/dist/services/gitmem-dir.js +84 -0
- package/dist/services/gitmem-dir.js.map +1 -0
- package/dist/services/local-file-storage.d.ts +56 -0
- package/dist/services/local-file-storage.d.ts.map +1 -0
- package/dist/services/local-file-storage.js +213 -0
- package/dist/services/local-file-storage.js.map +1 -0
- package/dist/services/local-vector-search.d.ts +137 -0
- package/dist/services/local-vector-search.d.ts.map +1 -0
- package/dist/services/local-vector-search.js +311 -0
- package/dist/services/local-vector-search.js.map +1 -0
- package/dist/services/metrics.d.ts +104 -0
- package/dist/services/metrics.d.ts.map +1 -0
- package/dist/services/metrics.js +264 -0
- package/dist/services/metrics.js.map +1 -0
- package/dist/services/session-state.d.ts +113 -0
- package/dist/services/session-state.d.ts.map +1 -0
- package/dist/services/session-state.js +203 -0
- package/dist/services/session-state.js.map +1 -0
- package/dist/services/startup.d.ts +112 -0
- package/dist/services/startup.d.ts.map +1 -0
- package/dist/services/startup.js +436 -0
- package/dist/services/startup.js.map +1 -0
- package/dist/services/storage.d.ts +43 -0
- package/dist/services/storage.d.ts.map +1 -0
- package/dist/services/storage.js +92 -0
- package/dist/services/storage.js.map +1 -0
- package/dist/services/supabase-client.d.ts +163 -0
- package/dist/services/supabase-client.d.ts.map +1 -0
- package/dist/services/supabase-client.js +510 -0
- package/dist/services/supabase-client.js.map +1 -0
- package/dist/services/thread-dedup.d.ts +44 -0
- package/dist/services/thread-dedup.d.ts.map +1 -0
- package/dist/services/thread-dedup.js +113 -0
- package/dist/services/thread-dedup.js.map +1 -0
- package/dist/services/thread-manager.d.ts +77 -0
- package/dist/services/thread-manager.d.ts.map +1 -0
- package/dist/services/thread-manager.js +250 -0
- package/dist/services/thread-manager.js.map +1 -0
- package/dist/services/thread-suggestions.d.ts +66 -0
- package/dist/services/thread-suggestions.d.ts.map +1 -0
- package/dist/services/thread-suggestions.js +243 -0
- package/dist/services/thread-suggestions.js.map +1 -0
- package/dist/services/thread-supabase.d.ts +111 -0
- package/dist/services/thread-supabase.d.ts.map +1 -0
- package/dist/services/thread-supabase.js +459 -0
- package/dist/services/thread-supabase.js.map +1 -0
- package/dist/services/thread-vitality.d.ts +65 -0
- package/dist/services/thread-vitality.d.ts.map +1 -0
- package/dist/services/thread-vitality.js +143 -0
- package/dist/services/thread-vitality.js.map +1 -0
- package/dist/services/tier.d.ts +52 -0
- package/dist/services/tier.d.ts.map +1 -0
- package/dist/services/tier.js +109 -0
- package/dist/services/tier.js.map +1 -0
- package/dist/services/timezone.d.ts +37 -0
- package/dist/services/timezone.d.ts.map +1 -0
- package/dist/services/timezone.js +147 -0
- package/dist/services/timezone.js.map +1 -0
- package/dist/services/transcript-chunker.d.ts +18 -0
- package/dist/services/transcript-chunker.d.ts.map +1 -0
- package/dist/services/transcript-chunker.js +237 -0
- package/dist/services/transcript-chunker.js.map +1 -0
- package/dist/services/triple-writer.d.ts +128 -0
- package/dist/services/triple-writer.d.ts.map +1 -0
- package/dist/services/triple-writer.js +338 -0
- package/dist/services/triple-writer.js.map +1 -0
- package/dist/services/variant-assignment.d.ts +92 -0
- package/dist/services/variant-assignment.d.ts.map +1 -0
- package/dist/services/variant-assignment.js +196 -0
- package/dist/services/variant-assignment.js.map +1 -0
- package/dist/tools/absorb-observations.d.ts +16 -0
- package/dist/tools/absorb-observations.d.ts.map +1 -0
- package/dist/tools/absorb-observations.js +82 -0
- package/dist/tools/absorb-observations.js.map +1 -0
- package/dist/tools/analyze.d.ts +55 -0
- package/dist/tools/analyze.d.ts.map +1 -0
- package/dist/tools/analyze.js +139 -0
- package/dist/tools/analyze.js.map +1 -0
- package/dist/tools/cleanup-threads.d.ts +47 -0
- package/dist/tools/cleanup-threads.d.ts.map +1 -0
- package/dist/tools/cleanup-threads.js +127 -0
- package/dist/tools/cleanup-threads.js.map +1 -0
- package/dist/tools/confirm-scars.d.ts +23 -0
- package/dist/tools/confirm-scars.d.ts.map +1 -0
- package/dist/tools/confirm-scars.js +209 -0
- package/dist/tools/confirm-scars.js.map +1 -0
- package/dist/tools/create-decision.d.ts +15 -0
- package/dist/tools/create-decision.d.ts.map +1 -0
- package/dist/tools/create-decision.js +138 -0
- package/dist/tools/create-decision.js.map +1 -0
- package/dist/tools/create-learning.d.ts +15 -0
- package/dist/tools/create-learning.d.ts.map +1 -0
- package/dist/tools/create-learning.js +226 -0
- package/dist/tools/create-learning.js.map +1 -0
- package/dist/tools/create-thread.d.ts +42 -0
- package/dist/tools/create-thread.d.ts.map +1 -0
- package/dist/tools/create-thread.js +180 -0
- package/dist/tools/create-thread.js.map +1 -0
- package/dist/tools/definitions.d.ts +5013 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +2017 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/dismiss-suggestion.d.ts +20 -0
- package/dist/tools/dismiss-suggestion.d.ts.map +1 -0
- package/dist/tools/dismiss-suggestion.js +40 -0
- package/dist/tools/dismiss-suggestion.js.map +1 -0
- package/dist/tools/get-transcript.d.ts +24 -0
- package/dist/tools/get-transcript.d.ts.map +1 -0
- package/dist/tools/get-transcript.js +52 -0
- package/dist/tools/get-transcript.js.map +1 -0
- package/dist/tools/graph-traverse.d.ts +83 -0
- package/dist/tools/graph-traverse.d.ts.map +1 -0
- package/dist/tools/graph-traverse.js +394 -0
- package/dist/tools/graph-traverse.js.map +1 -0
- package/dist/tools/list-threads.d.ts +15 -0
- package/dist/tools/list-threads.d.ts.map +1 -0
- package/dist/tools/list-threads.js +114 -0
- package/dist/tools/list-threads.js.map +1 -0
- package/dist/tools/log.d.ts +43 -0
- package/dist/tools/log.d.ts.map +1 -0
- package/dist/tools/log.js +157 -0
- package/dist/tools/log.js.map +1 -0
- package/dist/tools/prepare-context.d.ts +36 -0
- package/dist/tools/prepare-context.d.ts.map +1 -0
- package/dist/tools/prepare-context.js +353 -0
- package/dist/tools/prepare-context.js.map +1 -0
- package/dist/tools/promote-suggestion.d.ts +25 -0
- package/dist/tools/promote-suggestion.d.ts.map +1 -0
- package/dist/tools/promote-suggestion.js +60 -0
- package/dist/tools/promote-suggestion.js.map +1 -0
- package/dist/tools/recall.d.ts +77 -0
- package/dist/tools/recall.d.ts.map +1 -0
- package/dist/tools/recall.js +423 -0
- package/dist/tools/recall.js.map +1 -0
- package/dist/tools/recall.test.d.ts +5 -0
- package/dist/tools/recall.test.d.ts.map +1 -0
- package/dist/tools/recall.test.js +155 -0
- package/dist/tools/recall.test.js.map +1 -0
- package/dist/tools/record-scar-usage-batch.d.ts +10 -0
- package/dist/tools/record-scar-usage-batch.d.ts.map +1 -0
- package/dist/tools/record-scar-usage-batch.js +153 -0
- package/dist/tools/record-scar-usage-batch.js.map +1 -0
- package/dist/tools/record-scar-usage.d.ts +14 -0
- package/dist/tools/record-scar-usage.d.ts.map +1 -0
- package/dist/tools/record-scar-usage.js +94 -0
- package/dist/tools/record-scar-usage.js.map +1 -0
- package/dist/tools/resolve-thread.d.ts +16 -0
- package/dist/tools/resolve-thread.d.ts.map +1 -0
- package/dist/tools/resolve-thread.js +102 -0
- package/dist/tools/resolve-thread.js.map +1 -0
- package/dist/tools/save-transcript.d.ts +29 -0
- package/dist/tools/save-transcript.d.ts.map +1 -0
- package/dist/tools/save-transcript.js +97 -0
- package/dist/tools/save-transcript.js.map +1 -0
- package/dist/tools/search.d.ts +46 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +186 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/session-close.d.ts +14 -0
- package/dist/tools/session-close.d.ts.map +1 -0
- package/dist/tools/session-close.js +881 -0
- package/dist/tools/session-close.js.map +1 -0
- package/dist/tools/session-start.d.ts +38 -0
- package/dist/tools/session-start.d.ts.map +1 -0
- package/dist/tools/session-start.js +1104 -0
- package/dist/tools/session-start.js.map +1 -0
- package/dist/types/index.d.ts +456 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +76 -0
- package/schema/setup.sql +193 -0
- package/schema/starter-scars.json +206 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitMem Diagnostics Collector
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to diagnostics_channel events and collects metrics
|
|
5
|
+
* during diagnostic pass. Anonymizes data as it's collected.
|
|
6
|
+
*
|
|
7
|
+
* Issue: OD-584
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Collected metrics for a diagnostic run
|
|
11
|
+
*/
|
|
12
|
+
export interface DiagnosticMetrics {
|
|
13
|
+
startTime: number;
|
|
14
|
+
endTime?: number;
|
|
15
|
+
durationMs?: number;
|
|
16
|
+
toolCalls: {
|
|
17
|
+
tool: string;
|
|
18
|
+
durationMs: number;
|
|
19
|
+
success: boolean;
|
|
20
|
+
error?: string;
|
|
21
|
+
}[];
|
|
22
|
+
cache: {
|
|
23
|
+
hits: number;
|
|
24
|
+
misses: number;
|
|
25
|
+
hitRate: number;
|
|
26
|
+
hitsByType: Record<string, number>;
|
|
27
|
+
missesByType: Record<string, number>;
|
|
28
|
+
};
|
|
29
|
+
dbQueries: {
|
|
30
|
+
operation: string;
|
|
31
|
+
table?: string;
|
|
32
|
+
durationMs: number;
|
|
33
|
+
success: boolean;
|
|
34
|
+
rowCount?: number;
|
|
35
|
+
}[];
|
|
36
|
+
embeddings: {
|
|
37
|
+
provider: string;
|
|
38
|
+
durationMs: number;
|
|
39
|
+
success: boolean;
|
|
40
|
+
inputLength: number;
|
|
41
|
+
}[];
|
|
42
|
+
errors: {
|
|
43
|
+
message: string;
|
|
44
|
+
context: string;
|
|
45
|
+
severity: string;
|
|
46
|
+
}[];
|
|
47
|
+
totals: {
|
|
48
|
+
toolCallCount: number;
|
|
49
|
+
dbQueryCount: number;
|
|
50
|
+
embeddingCallCount: number;
|
|
51
|
+
errorCount: number;
|
|
52
|
+
totalToolDurationMs: number;
|
|
53
|
+
totalDbDurationMs: number;
|
|
54
|
+
totalEmbeddingDurationMs: number;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Full diagnostic report
|
|
59
|
+
*/
|
|
60
|
+
export interface DiagnosticReport {
|
|
61
|
+
version: string;
|
|
62
|
+
generatedAt: string;
|
|
63
|
+
mode: "quick" | "full";
|
|
64
|
+
environment: {
|
|
65
|
+
platform: string;
|
|
66
|
+
nodeVersion: string;
|
|
67
|
+
arch: string;
|
|
68
|
+
tier: string;
|
|
69
|
+
};
|
|
70
|
+
configuration: {
|
|
71
|
+
supabaseConfigured: boolean;
|
|
72
|
+
supabaseUrl: string;
|
|
73
|
+
embeddingProvider: string;
|
|
74
|
+
embeddingConfigured: boolean;
|
|
75
|
+
cacheEnabled: boolean;
|
|
76
|
+
cachePath: string;
|
|
77
|
+
};
|
|
78
|
+
health: {
|
|
79
|
+
supabase: HealthCheckResult;
|
|
80
|
+
embedding: HealthCheckResult;
|
|
81
|
+
cache: HealthCheckResult;
|
|
82
|
+
recall: HealthCheckResult;
|
|
83
|
+
write: HealthCheckResult;
|
|
84
|
+
};
|
|
85
|
+
metrics: DiagnosticMetrics;
|
|
86
|
+
benchmarks?: {
|
|
87
|
+
coldStart?: BenchmarkResult;
|
|
88
|
+
recall?: BenchmarkResult;
|
|
89
|
+
cachePopulate?: BenchmarkResult;
|
|
90
|
+
cacheHit?: BenchmarkResult;
|
|
91
|
+
};
|
|
92
|
+
dataVolume?: {
|
|
93
|
+
learningsCount: number;
|
|
94
|
+
sessionsCount: number;
|
|
95
|
+
decisionsCount: number;
|
|
96
|
+
localCacheFiles: number;
|
|
97
|
+
localCacheBytes: number;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Health check result
|
|
102
|
+
*/
|
|
103
|
+
export interface HealthCheckResult {
|
|
104
|
+
status: "pass" | "fail" | "skip";
|
|
105
|
+
message: string;
|
|
106
|
+
durationMs?: number;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Benchmark result
|
|
110
|
+
*/
|
|
111
|
+
export interface BenchmarkResult {
|
|
112
|
+
iterations: number;
|
|
113
|
+
meanMs: number;
|
|
114
|
+
minMs: number;
|
|
115
|
+
maxMs: number;
|
|
116
|
+
p50Ms: number;
|
|
117
|
+
p95Ms: number;
|
|
118
|
+
p99Ms: number;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Diagnostics collector
|
|
122
|
+
*/
|
|
123
|
+
export declare class DiagnosticsCollector {
|
|
124
|
+
private metrics;
|
|
125
|
+
private subscriptions;
|
|
126
|
+
private isCollecting;
|
|
127
|
+
constructor();
|
|
128
|
+
/**
|
|
129
|
+
* Create empty metrics object
|
|
130
|
+
*/
|
|
131
|
+
private createEmptyMetrics;
|
|
132
|
+
/**
|
|
133
|
+
* Start collecting metrics
|
|
134
|
+
*/
|
|
135
|
+
start(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Stop collecting and return metrics
|
|
138
|
+
*/
|
|
139
|
+
stop(): DiagnosticMetrics;
|
|
140
|
+
/**
|
|
141
|
+
* Get current metrics (without stopping)
|
|
142
|
+
*/
|
|
143
|
+
getMetrics(): DiagnosticMetrics;
|
|
144
|
+
/**
|
|
145
|
+
* Subscribe to a channel
|
|
146
|
+
*/
|
|
147
|
+
private subscribeToChannel;
|
|
148
|
+
/**
|
|
149
|
+
* Handle tool call event
|
|
150
|
+
*/
|
|
151
|
+
private handleToolCall;
|
|
152
|
+
/**
|
|
153
|
+
* Handle cache hit event
|
|
154
|
+
*/
|
|
155
|
+
private handleCacheHit;
|
|
156
|
+
/**
|
|
157
|
+
* Handle cache miss event
|
|
158
|
+
*/
|
|
159
|
+
private handleCacheMiss;
|
|
160
|
+
/**
|
|
161
|
+
* Handle database query event
|
|
162
|
+
*/
|
|
163
|
+
private handleDbQuery;
|
|
164
|
+
/**
|
|
165
|
+
* Handle embedding call event
|
|
166
|
+
*/
|
|
167
|
+
private handleEmbeddingCall;
|
|
168
|
+
/**
|
|
169
|
+
* Handle error event
|
|
170
|
+
*/
|
|
171
|
+
private handleError;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Calculate percentile from sorted array
|
|
175
|
+
*/
|
|
176
|
+
export declare function percentile(sortedValues: number[], p: number): number;
|
|
177
|
+
/**
|
|
178
|
+
* Run benchmark with multiple iterations
|
|
179
|
+
*/
|
|
180
|
+
export declare function runBenchmark(name: string, fn: () => Promise<void>, iterations?: number): Promise<BenchmarkResult>;
|
|
181
|
+
export declare function getCollector(): DiagnosticsCollector;
|
|
182
|
+
export declare function resetCollector(): void;
|
|
183
|
+
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitMem Diagnostics Collector
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to diagnostics_channel events and collects metrics
|
|
5
|
+
* during diagnostic pass. Anonymizes data as it's collected.
|
|
6
|
+
*
|
|
7
|
+
* Issue: OD-584
|
|
8
|
+
*/
|
|
9
|
+
import { subscribe, unsubscribe } from "diagnostics_channel";
|
|
10
|
+
import { CHANNEL_NAMES, } from "./channels.js";
|
|
11
|
+
import { anonymizeError, } from "./anonymizer.js";
|
|
12
|
+
/**
|
|
13
|
+
* Diagnostics collector
|
|
14
|
+
*/
|
|
15
|
+
export class DiagnosticsCollector {
|
|
16
|
+
metrics;
|
|
17
|
+
subscriptions = [];
|
|
18
|
+
isCollecting = false;
|
|
19
|
+
constructor() {
|
|
20
|
+
this.metrics = this.createEmptyMetrics();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create empty metrics object
|
|
24
|
+
*/
|
|
25
|
+
createEmptyMetrics() {
|
|
26
|
+
return {
|
|
27
|
+
startTime: 0,
|
|
28
|
+
toolCalls: [],
|
|
29
|
+
cache: {
|
|
30
|
+
hits: 0,
|
|
31
|
+
misses: 0,
|
|
32
|
+
hitRate: 0,
|
|
33
|
+
hitsByType: {},
|
|
34
|
+
missesByType: {},
|
|
35
|
+
},
|
|
36
|
+
dbQueries: [],
|
|
37
|
+
embeddings: [],
|
|
38
|
+
errors: [],
|
|
39
|
+
totals: {
|
|
40
|
+
toolCallCount: 0,
|
|
41
|
+
dbQueryCount: 0,
|
|
42
|
+
embeddingCallCount: 0,
|
|
43
|
+
errorCount: 0,
|
|
44
|
+
totalToolDurationMs: 0,
|
|
45
|
+
totalDbDurationMs: 0,
|
|
46
|
+
totalEmbeddingDurationMs: 0,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Start collecting metrics
|
|
52
|
+
*/
|
|
53
|
+
start() {
|
|
54
|
+
if (this.isCollecting)
|
|
55
|
+
return;
|
|
56
|
+
this.metrics = this.createEmptyMetrics();
|
|
57
|
+
this.metrics.startTime = Date.now();
|
|
58
|
+
this.isCollecting = true;
|
|
59
|
+
// Subscribe to all channels
|
|
60
|
+
this.subscribeToChannel(CHANNEL_NAMES.TOOL_CALL, this.handleToolCall.bind(this));
|
|
61
|
+
this.subscribeToChannel(CHANNEL_NAMES.CACHE_HIT, this.handleCacheHit.bind(this));
|
|
62
|
+
this.subscribeToChannel(CHANNEL_NAMES.CACHE_MISS, this.handleCacheMiss.bind(this));
|
|
63
|
+
this.subscribeToChannel(CHANNEL_NAMES.DB_QUERY, this.handleDbQuery.bind(this));
|
|
64
|
+
this.subscribeToChannel(CHANNEL_NAMES.EMBEDDING_CALL, this.handleEmbeddingCall.bind(this));
|
|
65
|
+
this.subscribeToChannel(CHANNEL_NAMES.ERROR, this.handleError.bind(this));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Stop collecting and return metrics
|
|
69
|
+
*/
|
|
70
|
+
stop() {
|
|
71
|
+
if (!this.isCollecting)
|
|
72
|
+
return this.metrics;
|
|
73
|
+
this.metrics.endTime = Date.now();
|
|
74
|
+
this.metrics.durationMs = this.metrics.endTime - this.metrics.startTime;
|
|
75
|
+
this.isCollecting = false;
|
|
76
|
+
// Unsubscribe from all channels
|
|
77
|
+
for (const sub of this.subscriptions) {
|
|
78
|
+
unsubscribe(sub.channel, sub.handler);
|
|
79
|
+
}
|
|
80
|
+
this.subscriptions = [];
|
|
81
|
+
// Calculate cache hit rate
|
|
82
|
+
const totalCacheOps = this.metrics.cache.hits + this.metrics.cache.misses;
|
|
83
|
+
if (totalCacheOps > 0) {
|
|
84
|
+
this.metrics.cache.hitRate = this.metrics.cache.hits / totalCacheOps;
|
|
85
|
+
}
|
|
86
|
+
return this.metrics;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get current metrics (without stopping)
|
|
90
|
+
*/
|
|
91
|
+
getMetrics() {
|
|
92
|
+
return { ...this.metrics };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Subscribe to a channel
|
|
96
|
+
*/
|
|
97
|
+
subscribeToChannel(channelName, handler) {
|
|
98
|
+
subscribe(channelName, handler);
|
|
99
|
+
this.subscriptions.push({ channel: channelName, handler });
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Handle tool call event
|
|
103
|
+
*/
|
|
104
|
+
handleToolCall(message) {
|
|
105
|
+
const event = message;
|
|
106
|
+
// Only record completed calls (with duration)
|
|
107
|
+
if (event.durationMs !== undefined) {
|
|
108
|
+
this.metrics.toolCalls.push({
|
|
109
|
+
tool: event.tool,
|
|
110
|
+
durationMs: event.durationMs,
|
|
111
|
+
success: event.success ?? true,
|
|
112
|
+
error: event.error ? anonymizeError(event.error) : undefined,
|
|
113
|
+
});
|
|
114
|
+
this.metrics.totals.toolCallCount++;
|
|
115
|
+
this.metrics.totals.totalToolDurationMs += event.durationMs;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Handle cache hit event
|
|
120
|
+
*/
|
|
121
|
+
handleCacheHit(message) {
|
|
122
|
+
const event = message;
|
|
123
|
+
this.metrics.cache.hits++;
|
|
124
|
+
this.metrics.cache.hitsByType[event.type] = (this.metrics.cache.hitsByType[event.type] || 0) + 1;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Handle cache miss event
|
|
128
|
+
*/
|
|
129
|
+
handleCacheMiss(message) {
|
|
130
|
+
const event = message;
|
|
131
|
+
this.metrics.cache.misses++;
|
|
132
|
+
this.metrics.cache.missesByType[event.type] = (this.metrics.cache.missesByType[event.type] || 0) + 1;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Handle database query event
|
|
136
|
+
*/
|
|
137
|
+
handleDbQuery(message) {
|
|
138
|
+
const event = message;
|
|
139
|
+
// Only record completed queries (with duration)
|
|
140
|
+
if (event.durationMs !== undefined) {
|
|
141
|
+
this.metrics.dbQueries.push({
|
|
142
|
+
operation: event.operation,
|
|
143
|
+
table: event.table,
|
|
144
|
+
durationMs: event.durationMs,
|
|
145
|
+
success: event.success ?? true,
|
|
146
|
+
rowCount: event.rowCount,
|
|
147
|
+
});
|
|
148
|
+
this.metrics.totals.dbQueryCount++;
|
|
149
|
+
this.metrics.totals.totalDbDurationMs += event.durationMs;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Handle embedding call event
|
|
154
|
+
*/
|
|
155
|
+
handleEmbeddingCall(message) {
|
|
156
|
+
const event = message;
|
|
157
|
+
// Only record completed calls (with duration)
|
|
158
|
+
if (event.durationMs !== undefined) {
|
|
159
|
+
this.metrics.embeddings.push({
|
|
160
|
+
provider: event.provider,
|
|
161
|
+
durationMs: event.durationMs,
|
|
162
|
+
success: event.success ?? true,
|
|
163
|
+
inputLength: event.inputLength,
|
|
164
|
+
});
|
|
165
|
+
this.metrics.totals.embeddingCallCount++;
|
|
166
|
+
this.metrics.totals.totalEmbeddingDurationMs += event.durationMs;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Handle error event
|
|
171
|
+
*/
|
|
172
|
+
handleError(message) {
|
|
173
|
+
const event = message;
|
|
174
|
+
this.metrics.errors.push({
|
|
175
|
+
message: anonymizeError(event.error),
|
|
176
|
+
context: event.context,
|
|
177
|
+
severity: event.severity,
|
|
178
|
+
});
|
|
179
|
+
this.metrics.totals.errorCount++;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Calculate percentile from sorted array
|
|
184
|
+
*/
|
|
185
|
+
export function percentile(sortedValues, p) {
|
|
186
|
+
if (sortedValues.length === 0)
|
|
187
|
+
return 0;
|
|
188
|
+
const index = Math.ceil((p / 100) * sortedValues.length) - 1;
|
|
189
|
+
return sortedValues[Math.max(0, Math.min(index, sortedValues.length - 1))];
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Run benchmark with multiple iterations
|
|
193
|
+
*/
|
|
194
|
+
export async function runBenchmark(name, fn, iterations = 5) {
|
|
195
|
+
const times = [];
|
|
196
|
+
for (let i = 0; i < iterations; i++) {
|
|
197
|
+
const start = performance.now();
|
|
198
|
+
await fn();
|
|
199
|
+
const end = performance.now();
|
|
200
|
+
times.push(end - start);
|
|
201
|
+
}
|
|
202
|
+
times.sort((a, b) => a - b);
|
|
203
|
+
return {
|
|
204
|
+
iterations,
|
|
205
|
+
meanMs: times.reduce((a, b) => a + b, 0) / times.length,
|
|
206
|
+
minMs: times[0],
|
|
207
|
+
maxMs: times[times.length - 1],
|
|
208
|
+
p50Ms: percentile(times, 50),
|
|
209
|
+
p95Ms: percentile(times, 95),
|
|
210
|
+
p99Ms: percentile(times, 99),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// Singleton collector for global use
|
|
214
|
+
let globalCollector = null;
|
|
215
|
+
export function getCollector() {
|
|
216
|
+
if (!globalCollector) {
|
|
217
|
+
globalCollector = new DiagnosticsCollector();
|
|
218
|
+
}
|
|
219
|
+
return globalCollector;
|
|
220
|
+
}
|
|
221
|
+
export function resetCollector() {
|
|
222
|
+
if (globalCollector) {
|
|
223
|
+
globalCollector.stop();
|
|
224
|
+
}
|
|
225
|
+
globalCollector = null;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/diagnostics/collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitMem Diagnostics Module
|
|
3
|
+
*
|
|
4
|
+
* Zero-overhead instrumentation using Node.js diagnostics_channel.
|
|
5
|
+
* When no subscriber is attached, publish() calls are essentially no-ops.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { diagnostics } from './diagnostics';
|
|
9
|
+
*
|
|
10
|
+
* // In tool handler:
|
|
11
|
+
* const event = diagnostics.publishToolCallStart('recall');
|
|
12
|
+
* // ... do work ...
|
|
13
|
+
* diagnostics.publishToolCallEnd(event, true);
|
|
14
|
+
*
|
|
15
|
+
* For diagnostic collection:
|
|
16
|
+
* import { getCollector } from './diagnostics';
|
|
17
|
+
*
|
|
18
|
+
* const collector = getCollector();
|
|
19
|
+
* collector.start();
|
|
20
|
+
* // ... run operations ...
|
|
21
|
+
* const metrics = collector.stop();
|
|
22
|
+
*
|
|
23
|
+
* Issue: OD-584
|
|
24
|
+
*/
|
|
25
|
+
export { diagnostics, CHANNEL_NAMES, channel, type ToolCallEvent, type CacheEvent, type DbQueryEvent, type EmbeddingCallEvent, type ErrorEvent, } from "./channels.js";
|
|
26
|
+
export { DiagnosticsCollector, getCollector, resetCollector, runBenchmark, percentile, type DiagnosticMetrics, type DiagnosticReport, type HealthCheckResult, type BenchmarkResult, } from "./collector.js";
|
|
27
|
+
export { anonymizeSupabaseUrl, anonymizePath, anonymizeError, anonymizeString, anonymizeCacheKey, anonymizeToolParams, isApiKeyConfigured, getSafeEnvironmentInfo, } from "./anonymizer.js";
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/diagnostics/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EACL,WAAW,EACX,aAAa,EACb,OAAO,EACP,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitMem Diagnostics Module
|
|
3
|
+
*
|
|
4
|
+
* Zero-overhead instrumentation using Node.js diagnostics_channel.
|
|
5
|
+
* When no subscriber is attached, publish() calls are essentially no-ops.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { diagnostics } from './diagnostics';
|
|
9
|
+
*
|
|
10
|
+
* // In tool handler:
|
|
11
|
+
* const event = diagnostics.publishToolCallStart('recall');
|
|
12
|
+
* // ... do work ...
|
|
13
|
+
* diagnostics.publishToolCallEnd(event, true);
|
|
14
|
+
*
|
|
15
|
+
* For diagnostic collection:
|
|
16
|
+
* import { getCollector } from './diagnostics';
|
|
17
|
+
*
|
|
18
|
+
* const collector = getCollector();
|
|
19
|
+
* collector.start();
|
|
20
|
+
* // ... run operations ...
|
|
21
|
+
* const metrics = collector.stop();
|
|
22
|
+
*
|
|
23
|
+
* Issue: OD-584
|
|
24
|
+
*/
|
|
25
|
+
// Channel definitions and publisher
|
|
26
|
+
export { diagnostics, CHANNEL_NAMES, channel, } from "./channels.js";
|
|
27
|
+
// Collector for diagnostic runs
|
|
28
|
+
export { DiagnosticsCollector, getCollector, resetCollector, runBenchmark, percentile, } from "./collector.js";
|
|
29
|
+
// Anonymization utilities
|
|
30
|
+
export { anonymizeSupabaseUrl, anonymizePath, anonymizeError, anonymizeString, anonymizeCacheKey, anonymizeToolParams, isApiKeyConfigured, getSafeEnvironmentInfo, } from "./anonymizer.js";
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/diagnostics/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,oCAAoC;AACpC,OAAO,EACL,WAAW,EACX,aAAa,EACb,OAAO,GAMR,MAAM,eAAe,CAAC;AAEvB,gCAAgC;AAChC,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,GAKX,MAAM,gBAAgB,CAAC;AAExB,0BAA0B;AAC1B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* GitMem MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Run with: npx @nteg/gitmem-mcp
|
|
6
|
+
* Or: node dist/index.js
|
|
7
|
+
*
|
|
8
|
+
* Environment variables:
|
|
9
|
+
* - SUPABASE_URL: Supabase project URL
|
|
10
|
+
* - SUPABASE_SERVICE_ROLE_KEY or SUPABASE_KEY: Supabase auth key
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* GitMem MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Run with: npx @nteg/gitmem-mcp
|
|
6
|
+
* Or: node dist/index.js
|
|
7
|
+
*
|
|
8
|
+
* Environment variables:
|
|
9
|
+
* - SUPABASE_URL: Supabase project URL
|
|
10
|
+
* - SUPABASE_SERVICE_ROLE_KEY or SUPABASE_KEY: Supabase auth key
|
|
11
|
+
*/
|
|
12
|
+
import { runServer } from "./server.js";
|
|
13
|
+
// Run the server
|
|
14
|
+
runServer().catch((error) => {
|
|
15
|
+
console.error("Fatal error:", error);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,iBAAiB;AACjB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schema for absorb_observations tool parameters (GitMem v2 Phase 2)
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
export declare const ObservationSeveritySchema: z.ZodEnum<["info", "warning", "scar_candidate"]>;
|
|
6
|
+
export declare const ObservationSchema: z.ZodObject<{
|
|
7
|
+
source: z.ZodString;
|
|
8
|
+
text: z.ZodString;
|
|
9
|
+
severity: z.ZodEnum<["info", "warning", "scar_candidate"]>;
|
|
10
|
+
context: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
severity: "info" | "warning" | "scar_candidate";
|
|
13
|
+
text: string;
|
|
14
|
+
source: string;
|
|
15
|
+
context?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
severity: "info" | "warning" | "scar_candidate";
|
|
18
|
+
text: string;
|
|
19
|
+
source: string;
|
|
20
|
+
context?: string | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const AbsorbObservationsParamsSchema: z.ZodObject<{
|
|
23
|
+
task_id: z.ZodOptional<z.ZodString>;
|
|
24
|
+
observations: z.ZodArray<z.ZodObject<{
|
|
25
|
+
source: z.ZodString;
|
|
26
|
+
text: z.ZodString;
|
|
27
|
+
severity: z.ZodEnum<["info", "warning", "scar_candidate"]>;
|
|
28
|
+
context: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, "strip", z.ZodTypeAny, {
|
|
30
|
+
severity: "info" | "warning" | "scar_candidate";
|
|
31
|
+
text: string;
|
|
32
|
+
source: string;
|
|
33
|
+
context?: string | undefined;
|
|
34
|
+
}, {
|
|
35
|
+
severity: "info" | "warning" | "scar_candidate";
|
|
36
|
+
text: string;
|
|
37
|
+
source: string;
|
|
38
|
+
context?: string | undefined;
|
|
39
|
+
}>, "many">;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
observations: {
|
|
42
|
+
severity: "info" | "warning" | "scar_candidate";
|
|
43
|
+
text: string;
|
|
44
|
+
source: string;
|
|
45
|
+
context?: string | undefined;
|
|
46
|
+
}[];
|
|
47
|
+
task_id?: string | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
observations: {
|
|
50
|
+
severity: "info" | "warning" | "scar_candidate";
|
|
51
|
+
text: string;
|
|
52
|
+
source: string;
|
|
53
|
+
context?: string | undefined;
|
|
54
|
+
}[];
|
|
55
|
+
task_id?: string | undefined;
|
|
56
|
+
}>;
|
|
57
|
+
export type AbsorbObservationsParams = z.infer<typeof AbsorbObservationsParamsSchema>;
|
|
58
|
+
export declare function validateAbsorbObservationsParams(params: unknown): {
|
|
59
|
+
success: boolean;
|
|
60
|
+
data?: AbsorbObservationsParams;
|
|
61
|
+
error?: string;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=absorb-observations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"absorb-observations.d.ts","sourceRoot":"","sources":["../../src/schemas/absorb-observations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,yBAAyB,kDAAgD,CAAC;AAEvF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,wBAAwB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAOA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schema for absorb_observations tool parameters (GitMem v2 Phase 2)
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
export const ObservationSeveritySchema = z.enum(["info", "warning", "scar_candidate"]);
|
|
6
|
+
export const ObservationSchema = z.object({
|
|
7
|
+
source: z.string().min(1, "source is required — who made this observation?"),
|
|
8
|
+
text: z.string().min(1, "text is required — what was observed?"),
|
|
9
|
+
severity: ObservationSeveritySchema,
|
|
10
|
+
context: z.string().optional(),
|
|
11
|
+
});
|
|
12
|
+
export const AbsorbObservationsParamsSchema = z.object({
|
|
13
|
+
task_id: z.string().optional(),
|
|
14
|
+
observations: z.array(ObservationSchema)
|
|
15
|
+
.min(1, "at least one observation is required"),
|
|
16
|
+
});
|
|
17
|
+
export function validateAbsorbObservationsParams(params) {
|
|
18
|
+
const result = AbsorbObservationsParamsSchema.safeParse(params);
|
|
19
|
+
if (result.success) {
|
|
20
|
+
return { success: true, data: result.data };
|
|
21
|
+
}
|
|
22
|
+
const errors = result.error.errors.map((e) => `${e.path.join(".")}: ${e.message}`);
|
|
23
|
+
return { success: false, error: errors.join("; ") };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=absorb-observations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"absorb-observations.js","sourceRoot":"","sources":["../../src/schemas/absorb-observations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iDAAiD,CAAC;IAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uCAAuC,CAAC;IAChE,QAAQ,EAAE,yBAAyB;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACrC,GAAG,CAAC,CAAC,EAAE,sCAAsC,CAAC;CAClD,CAAC,CAAC;AAIH,MAAM,UAAU,gCAAgC,CAAC,MAAe;IAK9D,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,CAAC"}
|