@gramatr/mcp 0.7.3 → 0.7.6
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/dist/bin/add-api-key.d.ts +14 -0
- package/dist/bin/add-api-key.d.ts.map +1 -1
- package/dist/bin/add-api-key.js +11 -12
- package/dist/bin/add-api-key.js.map +1 -1
- package/dist/bin/build-mcpb.d.ts +53 -0
- package/dist/bin/build-mcpb.d.ts.map +1 -1
- package/dist/bin/build-mcpb.js +109 -23
- package/dist/bin/build-mcpb.js.map +1 -1
- package/dist/bin/gramatr-mcp.d.ts +2 -1
- package/dist/bin/gramatr-mcp.d.ts.map +1 -1
- package/dist/bin/gramatr-mcp.js +32 -25
- package/dist/bin/gramatr-mcp.js.map +1 -1
- package/dist/bin/login.d.ts +30 -1
- package/dist/bin/login.d.ts.map +1 -1
- package/dist/bin/login.js +15 -16
- package/dist/bin/login.js.map +1 -1
- package/dist/bin/setup.d.ts +46 -0
- package/dist/bin/setup.d.ts.map +1 -1
- package/dist/bin/setup.js +35 -15
- package/dist/bin/setup.js.map +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/lib/feedback.d.ts +0 -2
- package/dist/hooks/lib/feedback.d.ts.map +1 -1
- package/dist/hooks/lib/feedback.js +18 -19
- package/dist/hooks/lib/feedback.js.map +1 -1
- package/dist/hooks/lib/formatting-compat.d.ts.map +1 -1
- package/dist/hooks/lib/formatting-compat.js +82 -55
- package/dist/hooks/lib/formatting-compat.js.map +1 -1
- package/dist/hooks/lib/gramatr-hook-utils.d.ts +0 -59
- package/dist/hooks/lib/gramatr-hook-utils.d.ts.map +1 -1
- package/dist/hooks/lib/gramatr-hook-utils.js +1 -212
- package/dist/hooks/lib/gramatr-hook-utils.js.map +1 -1
- package/dist/hooks/lib/hook-state.d.ts +159 -0
- package/dist/hooks/lib/hook-state.d.ts.map +1 -0
- package/dist/hooks/lib/hook-state.js +430 -0
- package/dist/hooks/lib/hook-state.js.map +1 -0
- package/dist/hooks/lib/intelligence.d.ts.map +1 -1
- package/dist/hooks/lib/intelligence.js +112 -88
- package/dist/hooks/lib/intelligence.js.map +1 -1
- package/dist/hooks/lib/routing.d.ts +2 -2
- package/dist/hooks/lib/routing.d.ts.map +1 -1
- package/dist/hooks/lib/routing.js +71 -25
- package/dist/hooks/lib/routing.js.map +1 -1
- package/dist/hooks/lib/session-end.d.ts +7 -0
- package/dist/hooks/lib/session-end.d.ts.map +1 -1
- package/dist/hooks/lib/session-end.js +33 -16
- package/dist/hooks/lib/session-end.js.map +1 -1
- package/dist/hooks/lib/session.d.ts +7 -34
- package/dist/hooks/lib/session.d.ts.map +1 -1
- package/dist/hooks/lib/session.js +43 -76
- package/dist/hooks/lib/session.js.map +1 -1
- package/dist/hooks/lib/types.d.ts +174 -36
- package/dist/hooks/lib/types.d.ts.map +1 -1
- package/dist/hooks/lib/types.js +1 -0
- package/dist/hooks/lib/types.js.map +1 -1
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +53 -39
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +87 -79
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/stop.d.ts.map +1 -1
- package/dist/hooks/stop.js +1 -10
- package/dist/hooks/stop.js.map +1 -1
- package/dist/hooks/user-prompt-submit.d.ts.map +1 -1
- package/dist/hooks/user-prompt-submit.js +57 -67
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/intelligence/packet2-fetcher.d.ts +3 -3
- package/dist/intelligence/packet2-fetcher.js +8 -8
- package/dist/intelligence/packet2-fetcher.js.map +1 -1
- package/dist/proxy/local-client.d.ts +49 -0
- package/dist/proxy/local-client.d.ts.map +1 -0
- package/dist/proxy/local-client.js +135 -0
- package/dist/proxy/local-client.js.map +1 -0
- package/dist/server/auth.d.ts +6 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +40 -32
- package/dist/server/auth.js.map +1 -1
- package/dist/server/hooks-listener.d.ts +32 -0
- package/dist/server/hooks-listener.d.ts.map +1 -0
- package/dist/server/hooks-listener.js +144 -0
- package/dist/server/hooks-listener.js.map +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +18 -3
- package/dist/server/server.js.map +1 -1
- package/dist/setup/instructions.d.ts +2 -0
- package/dist/setup/instructions.d.ts.map +1 -1
- package/dist/setup/instructions.js +59 -0
- package/dist/setup/instructions.js.map +1 -1
- package/dist/setup/integrations.js +3 -3
- package/dist/setup/integrations.js.map +1 -1
- package/dist/tools/local-tools.d.ts.map +1 -1
- package/dist/tools/local-tools.js +2 -1
- package/dist/tools/local-tools.js.map +1 -1
- package/package.json +5 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { setLatestClassification } from './hook-state.js';
|
|
2
|
+
import { callTool } from '../../proxy/local-client.js';
|
|
2
3
|
export const MIN_PROMPT_LENGTH = 10;
|
|
3
4
|
export const TRIVIAL_PATTERNS = /^(hi|hey|hello|yo|ok|yes|no|thanks|thank you|sure|yep|nope|k|bye|quit|exit)\b/i;
|
|
4
5
|
export function shouldSkipPromptRouting(prompt) {
|
|
@@ -6,23 +7,53 @@ export function shouldSkipPromptRouting(prompt) {
|
|
|
6
7
|
return trimmed.length < MIN_PROMPT_LENGTH || TRIVIAL_PATTERNS.test(trimmed);
|
|
7
8
|
}
|
|
8
9
|
export async function routePrompt(options) {
|
|
9
|
-
const
|
|
10
|
+
const timeoutMs = options.timeoutMs ?? 15000;
|
|
11
|
+
const args = {
|
|
10
12
|
prompt: options.prompt,
|
|
11
13
|
...(options.projectId ? { project_id: options.projectId } : {}),
|
|
12
14
|
...(options.sessionId ? { session_id: options.sessionId } : {}),
|
|
13
15
|
...(options.includeStatusline ? { include_statusline: true } : {}),
|
|
14
16
|
...(options.statuslineSize ? { statusline_size: options.statuslineSize } : {}),
|
|
15
|
-
}, options.timeoutMs ?? 15000);
|
|
16
|
-
return {
|
|
17
|
-
route: result.data,
|
|
18
|
-
error: result.error,
|
|
19
17
|
};
|
|
18
|
+
try {
|
|
19
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`timeout after ${timeoutMs}ms`)), timeoutMs));
|
|
20
|
+
const raw = await Promise.race([
|
|
21
|
+
callTool('gramatr_route_request', args),
|
|
22
|
+
timeoutPromise,
|
|
23
|
+
]);
|
|
24
|
+
const text = raw?.content?.[0]?.text;
|
|
25
|
+
if (!text) {
|
|
26
|
+
return { route: null, error: { reason: 'parse_error', detail: 'Empty response from proxy' } };
|
|
27
|
+
}
|
|
28
|
+
return { route: JSON.parse(text), error: null };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
32
|
+
if (detail.includes('timeout')) {
|
|
33
|
+
return { route: null, error: { reason: 'timeout', detail } };
|
|
34
|
+
}
|
|
35
|
+
if (detail.includes('401') || detail.toLowerCase().includes('unauthorized')) {
|
|
36
|
+
return { route: null, error: { reason: 'auth', detail } };
|
|
37
|
+
}
|
|
38
|
+
if (detail.includes('ECONNREFUSED') || detail.includes('fetch') || detail.includes('network')) {
|
|
39
|
+
return { route: null, error: { reason: 'network_error', detail } };
|
|
40
|
+
}
|
|
41
|
+
return { route: null, error: { reason: 'http_error', detail } };
|
|
42
|
+
}
|
|
20
43
|
}
|
|
21
|
-
export async function fetchEnrichment(enrichmentId, timeoutMs =
|
|
44
|
+
export async function fetchEnrichment(enrichmentId, timeoutMs = 5000) {
|
|
22
45
|
try {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
46
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`timeout after ${timeoutMs + 1000}ms`)), timeoutMs + 1000));
|
|
47
|
+
const raw = await Promise.race([
|
|
48
|
+
callTool('gramatr_get_enrichment', { enrichment_id: enrichmentId, timeout_ms: timeoutMs }),
|
|
49
|
+
timeoutPromise,
|
|
50
|
+
]);
|
|
51
|
+
const text = raw?.content?.[0]?.text;
|
|
52
|
+
if (!text)
|
|
53
|
+
return null;
|
|
54
|
+
const result = JSON.parse(text);
|
|
55
|
+
if (result.status === 'ready') {
|
|
56
|
+
return result;
|
|
26
57
|
}
|
|
27
58
|
return null;
|
|
28
59
|
}
|
|
@@ -48,7 +79,7 @@ export function describeRoutingFailure(error) {
|
|
|
48
79
|
return {
|
|
49
80
|
title: 'Routing request could not reach the gramatr MCP endpoint.',
|
|
50
81
|
detail: error.detail,
|
|
51
|
-
action:
|
|
82
|
+
action: 'Verify connectivity to the gramatr server (GRAMATR_URL env or ~/.gramatr.json).',
|
|
52
83
|
};
|
|
53
84
|
case 'http_error':
|
|
54
85
|
case 'mcp_error':
|
|
@@ -58,27 +89,42 @@ export function describeRoutingFailure(error) {
|
|
|
58
89
|
return {
|
|
59
90
|
title: 'Routing request failed before intelligence could be injected.',
|
|
60
91
|
detail: error.detail,
|
|
61
|
-
action:
|
|
92
|
+
action: 'Inspect the gramatr_route_request handler response. Check GRAMATR_URL and auth token.',
|
|
62
93
|
};
|
|
63
94
|
}
|
|
64
95
|
}
|
|
65
96
|
export function persistClassificationResult(options) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
const packet1 = options.route?.packet_1;
|
|
98
|
+
const classification = packet1?.classification || options.route?.classification;
|
|
99
|
+
const executionSummary = packet1?.execution_summary || options.route?.execution_summary;
|
|
100
|
+
const routingSignals = packet1?.routing_signals || options.route?.routing_signals;
|
|
101
|
+
const tokenSavings = packet1?.token_savings || options.route?.token_savings;
|
|
102
|
+
const memoryContext = packet1?.memory_context || options.route?.memory_context;
|
|
103
|
+
setLatestClassification({
|
|
104
|
+
session_id: options.sessionId,
|
|
105
|
+
classifier_model: executionSummary?.classifier_model || null,
|
|
106
|
+
classifier_time_ms: executionSummary?.classifier_time_ms || null,
|
|
107
|
+
tokens_saved: tokenSavings?.total_saved || tokenSavings?.tokens_saved || 0,
|
|
108
|
+
savings_ratio: tokenSavings?.savings_ratio || null,
|
|
109
|
+
effort: classification?.effort_level || null,
|
|
110
|
+
intent: classification?.intent_type || null,
|
|
111
|
+
confidence: classification?.confidence ?? null,
|
|
112
|
+
memory_delivered: memoryContext?.results?.length || null,
|
|
77
113
|
downstream_model: options.downstreamModel || null,
|
|
78
|
-
|
|
79
|
-
|
|
114
|
+
server_version: executionSummary?.server_version || null,
|
|
115
|
+
stage_timing: executionSummary?.stage_timing
|
|
116
|
+
? JSON.stringify(executionSummary.stage_timing)
|
|
117
|
+
: null,
|
|
118
|
+
recorded_at: Date.now(),
|
|
119
|
+
original_prompt: options.prompt,
|
|
80
120
|
pending_feedback: true,
|
|
81
121
|
feedback_submitted_at: null,
|
|
122
|
+
client_type: options.clientType,
|
|
123
|
+
agent_name: options.agentName,
|
|
124
|
+
memory_tier: classification?.memory_tier || null,
|
|
125
|
+
memory_scope: classification?.memory_scope
|
|
126
|
+
|| routingSignals?.memory_scope
|
|
127
|
+
|| null,
|
|
82
128
|
});
|
|
83
129
|
}
|
|
84
130
|
//# sourceMappingURL=routing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/hooks/lib/routing.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/hooks/lib/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,13 @@ export interface EndRemoteSessionOptions {
|
|
|
10
10
|
projectId: string;
|
|
11
11
|
summary: string;
|
|
12
12
|
toolCallCount: number;
|
|
13
|
+
reason?: string;
|
|
14
|
+
gitBranch?: string;
|
|
15
|
+
gitRemote?: string;
|
|
16
|
+
clientType?: string;
|
|
17
|
+
agentName?: string;
|
|
18
|
+
startedAt?: string;
|
|
19
|
+
commitLog?: string | null;
|
|
13
20
|
}
|
|
14
21
|
export interface SessionEndResult {
|
|
15
22
|
ok: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../../src/hooks/lib/session-end.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../../src/hooks/lib/session-end.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWtF;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAqB3B"}
|
|
@@ -1,21 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { callTool } from '../../proxy/local-client.js';
|
|
2
2
|
export async function flushTurns(options) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
try {
|
|
4
|
+
await callTool('gramatr_batch_save_turns', {
|
|
5
|
+
session_id: options.sessionId,
|
|
6
|
+
project_id: options.projectId,
|
|
7
|
+
turns: options.turns,
|
|
8
|
+
});
|
|
9
|
+
return { ok: true, hadError: false };
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return { ok: false, hadError: true };
|
|
13
|
+
}
|
|
9
14
|
}
|
|
10
15
|
export async function endRemoteSession(options) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
try {
|
|
17
|
+
await callTool('gramatr_session_end', {
|
|
18
|
+
entity_id: options.entityId,
|
|
19
|
+
session_id: options.sessionId,
|
|
20
|
+
interaction_id: options.interactionId,
|
|
21
|
+
project_id: options.projectId,
|
|
22
|
+
summary: options.summary,
|
|
23
|
+
tool_call_count: options.toolCallCount,
|
|
24
|
+
...(options.reason !== undefined && { reason: options.reason }),
|
|
25
|
+
...(options.gitBranch !== undefined && { git_branch: options.gitBranch }),
|
|
26
|
+
...(options.gitRemote !== undefined && { git_remote: options.gitRemote }),
|
|
27
|
+
...(options.clientType !== undefined && { client_type: options.clientType }),
|
|
28
|
+
...(options.agentName !== undefined && { agent_name: options.agentName }),
|
|
29
|
+
...(options.startedAt !== undefined && { started_at: options.startedAt }),
|
|
30
|
+
...(options.commitLog !== undefined && { commit_log: options.commitLog }),
|
|
31
|
+
});
|
|
32
|
+
return { ok: true, hadError: false };
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return { ok: false, hadError: true };
|
|
36
|
+
}
|
|
20
37
|
}
|
|
21
38
|
//# sourceMappingURL=session-end.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/hooks/lib/session-end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/hooks/lib/session-end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AA8BvD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,0BAA0B,EAAE;YACzC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgC;IAEhC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,qBAAqB,EAAE;YACpC,SAAS,EAAE,OAAO,CAAC,QAAQ;YAC3B,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,OAAO,CAAC,aAAa;YACtC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YACzE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YACzE,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5E,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YACzE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YACzE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;AACH,CAAC"}
|
|
@@ -8,32 +8,15 @@ export interface PreparedProjectSession {
|
|
|
8
8
|
hasRestoreContext: boolean;
|
|
9
9
|
created: boolean;
|
|
10
10
|
}
|
|
11
|
-
export interface CurrentProjectContextPayload {
|
|
12
|
-
type: 'git_project' | 'non_git';
|
|
13
|
-
session_id: string;
|
|
14
|
-
project_name: string;
|
|
15
|
-
working_directory: string;
|
|
16
|
-
session_start: string;
|
|
17
|
-
gramatr_config_path: string;
|
|
18
|
-
project_entity_id: string | null;
|
|
19
|
-
action_required: string;
|
|
20
|
-
project_id?: string;
|
|
21
|
-
git_root?: string;
|
|
22
|
-
git_branch?: string;
|
|
23
|
-
git_commit?: string;
|
|
24
|
-
git_remote?: string;
|
|
25
|
-
restore_needed?: boolean;
|
|
26
|
-
}
|
|
27
11
|
export declare function normalizeSessionStartResponse(response: SessionStartResponse | null | undefined): {
|
|
28
12
|
interactionId: string | null;
|
|
29
13
|
entityId: string | null;
|
|
30
14
|
resumed: boolean;
|
|
31
15
|
handoffContext: string | null;
|
|
16
|
+
recentSessions: import('./types.js').RemoteSessionRecord[];
|
|
32
17
|
};
|
|
33
18
|
export declare function prepareProjectSessionState(options: {
|
|
34
19
|
git: GitContext;
|
|
35
|
-
sessionId: string;
|
|
36
|
-
transcriptPath: string;
|
|
37
20
|
}): PreparedProjectSession;
|
|
38
21
|
export declare function startRemoteSession(options: {
|
|
39
22
|
clientType: string;
|
|
@@ -41,24 +24,14 @@ export declare function startRemoteSession(options: {
|
|
|
41
24
|
projectId: string;
|
|
42
25
|
projectName?: string;
|
|
43
26
|
gitRemote: string;
|
|
27
|
+
gitBranch?: string;
|
|
44
28
|
directory: string;
|
|
45
29
|
}): Promise<SessionStartResponse | null>;
|
|
46
30
|
export declare function loadProjectHandoff(projectId: string): Promise<HandoffResponse | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Persist the server-resolved project_id back to settings.json.
|
|
33
|
+
* The server may assign a stable UUID the first time a project is registered;
|
|
34
|
+
* storing it locally ensures all subsequent sessions use the same ID.
|
|
35
|
+
*/
|
|
47
36
|
export declare function persistSessionRegistration(rootDir: string, response: SessionStartResponse | null): GmtrConfig | null;
|
|
48
|
-
export declare function writeCurrentProjectContextFile(payload: CurrentProjectContextPayload): void;
|
|
49
|
-
export declare function buildGitProjectContextPayload(options: {
|
|
50
|
-
git: GitContext;
|
|
51
|
-
sessionId: string;
|
|
52
|
-
workingDirectory: string;
|
|
53
|
-
sessionStart: string;
|
|
54
|
-
projectId: string;
|
|
55
|
-
projectEntityId: string | null;
|
|
56
|
-
restoreNeeded: boolean;
|
|
57
|
-
}): CurrentProjectContextPayload;
|
|
58
|
-
export declare function buildNonGitProjectContextPayload(options: {
|
|
59
|
-
cwd: string;
|
|
60
|
-
sessionId: string;
|
|
61
|
-
sessionStart: string;
|
|
62
|
-
projectEntityId: string | null;
|
|
63
|
-
}): CurrentProjectContextPayload;
|
|
64
37
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/hooks/lib/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/hooks/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,UAAU,EAKhB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAChD;IACD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,OAAO,YAAY,EAAE,mBAAmB,EAAE,CAAC;CAC5D,CAQA;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,UAAU,CAAC;CACjB,GAAG,sBAAsB,CA2CzB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAgBvC;AAED,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAW3F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAcpH"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { getHomeDir } from '../../config-runtime.js';
|
|
1
|
+
import { createDefaultConfig, deriveProjectId, migrateConfig, now, readGmtrConfig, writeGmtrConfig, } from './gramatr-hook-utils.js';
|
|
2
|
+
import { callTool } from '../../proxy/local-client.js';
|
|
3
|
+
import { migrateProjectId } from './hook-state.js';
|
|
5
4
|
export function normalizeSessionStartResponse(response) {
|
|
6
5
|
return {
|
|
7
6
|
interactionId: response?.interaction_id || response?.interactionId || null,
|
|
8
7
|
entityId: response?.entity_id || response?.entityId || null,
|
|
9
8
|
resumed: response?.interaction_resumed === true || response?.interactionResumed === true,
|
|
10
9
|
handoffContext: response?.handoff_context || response?.handoffContext || null,
|
|
10
|
+
recentSessions: response?.recent_sessions ?? [],
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
export function prepareProjectSessionState(options) {
|
|
14
|
-
const { git
|
|
14
|
+
const { git } = options;
|
|
15
15
|
const timestamp = now();
|
|
16
16
|
let config = readGmtrConfig(git.root);
|
|
17
17
|
let created = false;
|
|
@@ -21,7 +21,6 @@ export function prepareProjectSessionState(options) {
|
|
|
21
21
|
const projectId = existingProjectId || deriveProjectId(git.remote, git.projectName);
|
|
22
22
|
if (config) {
|
|
23
23
|
config = migrateConfig(config, projectId);
|
|
24
|
-
config.last_session_id = sessionId;
|
|
25
24
|
config.project_id = projectId;
|
|
26
25
|
// Store reference metadata alongside the project_id so we can
|
|
27
26
|
// reconnect to the right project even if the UUID is opaque.
|
|
@@ -30,15 +29,6 @@ export function prepareProjectSessionState(options) {
|
|
|
30
29
|
local_path: git.root,
|
|
31
30
|
display_name: git.projectName,
|
|
32
31
|
};
|
|
33
|
-
config.current_session = {
|
|
34
|
-
...config.current_session,
|
|
35
|
-
session_id: sessionId,
|
|
36
|
-
transcript_path: transcriptPath,
|
|
37
|
-
last_updated: timestamp,
|
|
38
|
-
token_limit: 200000,
|
|
39
|
-
};
|
|
40
|
-
config.continuity_stats = config.continuity_stats || {};
|
|
41
|
-
config.continuity_stats.total_sessions = (config.continuity_stats.total_sessions || 0) + 1;
|
|
42
32
|
config.metadata = config.metadata || {};
|
|
43
33
|
config.metadata.updated = timestamp;
|
|
44
34
|
}
|
|
@@ -47,8 +37,6 @@ export function prepareProjectSessionState(options) {
|
|
|
47
37
|
projectId,
|
|
48
38
|
projectName: git.projectName,
|
|
49
39
|
gitRemote: git.remote,
|
|
50
|
-
sessionId,
|
|
51
|
-
transcriptPath,
|
|
52
40
|
});
|
|
53
41
|
created = true;
|
|
54
42
|
}
|
|
@@ -63,75 +51,54 @@ export function prepareProjectSessionState(options) {
|
|
|
63
51
|
};
|
|
64
52
|
}
|
|
65
53
|
export async function startRemoteSession(options) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
54
|
+
try {
|
|
55
|
+
const raw = await callTool('gramatr_session_start', {
|
|
56
|
+
client_type: options.clientType,
|
|
57
|
+
project_id: options.projectId,
|
|
58
|
+
...(options.projectName ? { project_name: options.projectName } : {}),
|
|
59
|
+
git_remote: options.gitRemote,
|
|
60
|
+
...(options.gitBranch ? { git_branch: options.gitBranch } : {}),
|
|
61
|
+
directory: options.directory,
|
|
62
|
+
...(options.sessionId ? { session_id: options.sessionId } : {}),
|
|
63
|
+
});
|
|
64
|
+
const text = raw?.content?.[0]?.text;
|
|
65
|
+
return text ? JSON.parse(text) : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
74
70
|
}
|
|
75
71
|
export async function loadProjectHandoff(projectId) {
|
|
76
|
-
|
|
72
|
+
try {
|
|
73
|
+
const raw = await callTool('gramatr_load_handoff', { project_id: projectId });
|
|
74
|
+
const text = raw?.content?.[0]?.text;
|
|
75
|
+
return text ? JSON.parse(text) : null;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
77
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Persist the server-resolved project_id back to settings.json.
|
|
83
|
+
* The server may assign a stable UUID the first time a project is registered;
|
|
84
|
+
* storing it locally ensures all subsequent sessions use the same ID.
|
|
85
|
+
*/
|
|
78
86
|
export function persistSessionRegistration(rootDir, response) {
|
|
79
|
-
const normalized = normalizeSessionStartResponse(response);
|
|
80
|
-
if (!normalized.interactionId && !normalized.entityId)
|
|
81
|
-
return readGmtrConfig(rootDir);
|
|
82
87
|
const config = readGmtrConfig(rootDir);
|
|
83
88
|
if (!config)
|
|
84
89
|
return null;
|
|
85
|
-
config.current_session = config.current_session || {};
|
|
86
|
-
if (normalized.interactionId)
|
|
87
|
-
config.current_session.interaction_id = normalized.interactionId;
|
|
88
|
-
if (normalized.entityId)
|
|
89
|
-
config.current_session.gramatr_entity_id = normalized.entityId;
|
|
90
|
-
// Persist server-resolved project_id (may be a UUID assigned by the server).
|
|
91
|
-
// This is the key migration point: once the server returns a UUID, we store
|
|
92
|
-
// it locally so all subsequent sessions use the stable ID.
|
|
93
90
|
if (response?.project_id && response.project_id !== config.project_id) {
|
|
91
|
+
const oldProjectId = config.project_id;
|
|
94
92
|
config.project_id = response.project_id;
|
|
93
|
+
writeGmtrConfig(rootDir, config);
|
|
94
|
+
// Backfill local session_log rows so count/lookup queries use the stable UUID
|
|
95
|
+
if (oldProjectId) {
|
|
96
|
+
try {
|
|
97
|
+
migrateProjectId(oldProjectId, response.project_id);
|
|
98
|
+
}
|
|
99
|
+
catch { /* non-critical */ }
|
|
100
|
+
}
|
|
95
101
|
}
|
|
96
|
-
writeGmtrConfig(rootDir, config);
|
|
97
102
|
return config;
|
|
98
103
|
}
|
|
99
|
-
export function writeCurrentProjectContextFile(payload) {
|
|
100
|
-
const home = getHomeDir();
|
|
101
|
-
const claudeDir = join(home, '.claude');
|
|
102
|
-
if (!existsSync(claudeDir))
|
|
103
|
-
mkdirSync(claudeDir, { recursive: true });
|
|
104
|
-
const contextFile = join(claudeDir, 'current-project-context.json');
|
|
105
|
-
writeFileSync(contextFile, JSON.stringify(payload, null, 2) + '\n');
|
|
106
|
-
}
|
|
107
|
-
export function buildGitProjectContextPayload(options) {
|
|
108
|
-
return {
|
|
109
|
-
type: 'git_project',
|
|
110
|
-
session_id: options.sessionId,
|
|
111
|
-
project_name: options.git.projectName,
|
|
112
|
-
project_id: options.projectId,
|
|
113
|
-
git_root: options.git.root,
|
|
114
|
-
git_branch: options.git.branch,
|
|
115
|
-
git_commit: options.git.commit,
|
|
116
|
-
git_remote: options.git.remote,
|
|
117
|
-
working_directory: options.workingDirectory,
|
|
118
|
-
session_start: options.sessionStart,
|
|
119
|
-
gramatr_config_path: join(options.git.root, '.gramatr', 'settings.json'),
|
|
120
|
-
project_entity_id: options.projectEntityId,
|
|
121
|
-
restore_needed: options.restoreNeeded,
|
|
122
|
-
action_required: 'check_or_create_project_entity',
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
export function buildNonGitProjectContextPayload(options) {
|
|
126
|
-
return {
|
|
127
|
-
type: 'non_git',
|
|
128
|
-
session_id: options.sessionId,
|
|
129
|
-
project_name: basename(options.cwd),
|
|
130
|
-
working_directory: options.cwd,
|
|
131
|
-
session_start: options.sessionStart,
|
|
132
|
-
gramatr_config_path: join(options.cwd, '.gramatr', 'settings.json'),
|
|
133
|
-
project_entity_id: options.projectEntityId,
|
|
134
|
-
action_required: 'gramatr_init_needed',
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
104
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/hooks/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/hooks/lib/session.ts"],"names":[],"mappings":"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"}
|