@gramatr/mcp 0.7.5 → 0.7.10
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/gramatr-mcp.d.ts +5 -0
- package/dist/bin/gramatr-mcp.d.ts.map +1 -1
- package/dist/bin/gramatr-mcp.js +125 -2
- package/dist/bin/gramatr-mcp.js.map +1 -1
- package/dist/bin/setup.d.ts +16 -1
- package/dist/bin/setup.d.ts.map +1 -1
- package/dist/bin/setup.js +585 -2
- package/dist/bin/setup.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 -38
- package/dist/hooks/lib/session.d.ts.map +1 -1
- package/dist/hooks/lib/session.js +43 -87
- 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/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +53 -45
- 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 -77
- 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 -68
- 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/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 +16 -1
- package/dist/server/server.js.map +1 -1
- package/dist/setup/instructions.js +13 -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/setup/web-connector.d.ts.map +1 -1
- package/dist/setup/web-connector.js +4 -0
- package/dist/setup/web-connector.js.map +1 -1
- package/package.json +5 -2
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Packet 2 Auto-Fetcher — automatically fetches enrichment when route_request
|
|
3
|
-
* returns packet_2_status: "
|
|
3
|
+
* returns packet_2_status: "required".
|
|
4
4
|
*
|
|
5
5
|
* Flow:
|
|
6
6
|
* 1. Agent calls gramatr_route_request
|
|
7
7
|
* 2. Server returns Packet 1 immediately with enrichment_id
|
|
8
|
-
* 3. This module detects
|
|
8
|
+
* 3. This module detects required status, calls gramatr_get_enrichment
|
|
9
9
|
* 4. Merges Packet 2 into the response before returning to agent
|
|
10
10
|
*
|
|
11
11
|
* The agent never has to manually call gramatr_get_enrichment — it just works.
|
|
@@ -14,14 +14,14 @@ import { callRemoteTool } from '../proxy/remote-client.js';
|
|
|
14
14
|
const MAX_RETRIES = 3;
|
|
15
15
|
const RETRY_DELAY_MS = 500;
|
|
16
16
|
/**
|
|
17
|
-
* Check if a tool result is a route_request response with
|
|
17
|
+
* Check if a tool result is a route_request response with required Packet 2.
|
|
18
18
|
*/
|
|
19
19
|
export function hasPendingPacket2(result) {
|
|
20
20
|
if (!result.content?.[0]?.text)
|
|
21
21
|
return { pending: false };
|
|
22
22
|
try {
|
|
23
23
|
const data = JSON.parse(result.content[0].text);
|
|
24
|
-
if (data.packet_2_status === '
|
|
24
|
+
if (data.packet_2_status === 'required' && data.enrichment_id) {
|
|
25
25
|
return { pending: true, enrichmentId: data.enrichment_id };
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -59,9 +59,9 @@ export async function fetchAndMergePacket2(result, enrichmentId) {
|
|
|
59
59
|
await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY_MS));
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
// Enrichment not ready after retries — return original Packet 1 as-is
|
|
63
|
-
//
|
|
64
|
-
process.stderr.write(`[gramatr-mcp] Packet 2
|
|
62
|
+
// Enrichment not ready after retries — return original Packet 1 as-is and
|
|
63
|
+
// leave the required status intact so the caller can keep polling.
|
|
64
|
+
process.stderr.write(`[gramatr-mcp] Packet 2 still required after ${MAX_RETRIES} retries; returning Packet 1 and preserving required status\n`);
|
|
65
65
|
return result;
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
@@ -73,7 +73,7 @@ function mergePackets(packet1, packet2) {
|
|
|
73
73
|
const p1Data = JSON.parse(packet1.content[0].text);
|
|
74
74
|
const p2Data = JSON.parse(packet2.content[0].text);
|
|
75
75
|
// Merge Packet 2 into Packet 1
|
|
76
|
-
p1Data.packet_2 = p2Data;
|
|
76
|
+
p1Data.packet_2 = p2Data.packet_2 || p2Data;
|
|
77
77
|
p1Data.packet_2_status = 'merged';
|
|
78
78
|
return {
|
|
79
79
|
content: [{ type: 'text', text: JSON.stringify(p1Data) }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet2-fetcher.js","sourceRoot":"","sources":["../../src/intelligence/packet2-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa3D,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAwB,CAAC;QACvE,IAAI,IAAI,CAAC,eAAe,KAAK,
|
|
1
|
+
{"version":3,"file":"packet2-fetcher.js","sourceRoot":"","sources":["../../src/intelligence/packet2-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* local-client.ts — Hook-side client for the local MCP hooks listener.
|
|
3
|
+
*
|
|
4
|
+
* Phase IV: Hook subprocesses call this module instead of remote-client.ts.
|
|
5
|
+
* Routes all tool calls and session-context reads/writes through the local
|
|
6
|
+
* MCP server when it is running, falling back to direct remote calls otherwise.
|
|
7
|
+
*
|
|
8
|
+
* Priority:
|
|
9
|
+
* 1. Local hooks server (localhost:PORT from ~/.gramatr/.hooks-port)
|
|
10
|
+
* → auth already loaded in server process, no token resolution needed
|
|
11
|
+
* → data shape validated before any remote call
|
|
12
|
+
* 2. Direct remote (callRemoteTool from remote-client.ts)
|
|
13
|
+
* → hooks resolve their own auth token as before
|
|
14
|
+
*
|
|
15
|
+
* The local server's port file is read once per hook process lifetime and
|
|
16
|
+
* cached. Stale port files (server crashed without cleanup) are caught by a
|
|
17
|
+
* connection error on first use, which clears the cache and falls through to
|
|
18
|
+
* direct remote.
|
|
19
|
+
*/
|
|
20
|
+
/** True when the local hooks server port file exists and contains a valid port. */
|
|
21
|
+
export declare function isLocalHooksServerAvailable(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Call a gramatr tool, routing through the local hooks server when available.
|
|
24
|
+
*
|
|
25
|
+
* The local server injects auth and enforces data shapes before forwarding to
|
|
26
|
+
* the remote API. If the local server is unavailable or returns an error,
|
|
27
|
+
* falls back to a direct remote call via callRemoteTool.
|
|
28
|
+
*/
|
|
29
|
+
export declare function callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
30
|
+
/**
|
|
31
|
+
* Push session context to the local server's in-memory store.
|
|
32
|
+
*
|
|
33
|
+
* Called by the session-start hook after setSessionContext() so later hook
|
|
34
|
+
* processes (user-prompt-submit, session-end) can read the context without
|
|
35
|
+
* hitting the SQLite file or the remote REST API.
|
|
36
|
+
*
|
|
37
|
+
* Returns true if the write was acknowledged. A false return is non-fatal —
|
|
38
|
+
* later hooks fall back to SQLite → remote REST.
|
|
39
|
+
*/
|
|
40
|
+
export declare function pushSessionContextToLocal(ctx: unknown): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Pull session context from the local server's in-memory store.
|
|
43
|
+
*
|
|
44
|
+
* Returns the stored context for the given session_id, or the most recently
|
|
45
|
+
* written context as a fallback. Returns null if the local server is
|
|
46
|
+
* unavailable or has no context for this session.
|
|
47
|
+
*/
|
|
48
|
+
export declare function pullSessionContextFromLocal(sessionId: string): Promise<Record<string, unknown> | null>;
|
|
49
|
+
//# sourceMappingURL=local-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/proxy/local-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA6BH,mFAAmF;AACnF,wBAAgB,2BAA2B,IAAI,OAAO,CAErD;AAID;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAID;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAe9E;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAezC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* local-client.ts — Hook-side client for the local MCP hooks listener.
|
|
3
|
+
*
|
|
4
|
+
* Phase IV: Hook subprocesses call this module instead of remote-client.ts.
|
|
5
|
+
* Routes all tool calls and session-context reads/writes through the local
|
|
6
|
+
* MCP server when it is running, falling back to direct remote calls otherwise.
|
|
7
|
+
*
|
|
8
|
+
* Priority:
|
|
9
|
+
* 1. Local hooks server (localhost:PORT from ~/.gramatr/.hooks-port)
|
|
10
|
+
* → auth already loaded in server process, no token resolution needed
|
|
11
|
+
* → data shape validated before any remote call
|
|
12
|
+
* 2. Direct remote (callRemoteTool from remote-client.ts)
|
|
13
|
+
* → hooks resolve their own auth token as before
|
|
14
|
+
*
|
|
15
|
+
* The local server's port file is read once per hook process lifetime and
|
|
16
|
+
* cached. Stale port files (server crashed without cleanup) are caught by a
|
|
17
|
+
* connection error on first use, which clears the cache and falls through to
|
|
18
|
+
* direct remote.
|
|
19
|
+
*/
|
|
20
|
+
import { readFileSync } from 'node:fs';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { getGramatrDirFromEnv, getHomeDir } from '../config-runtime.js';
|
|
23
|
+
import { callRemoteTool } from './remote-client.js';
|
|
24
|
+
// ── Port discovery ──
|
|
25
|
+
function getPortFilePath() {
|
|
26
|
+
const dir = getGramatrDirFromEnv() || join(getHomeDir(), '.gramatr');
|
|
27
|
+
return join(dir, '.hooks-port');
|
|
28
|
+
}
|
|
29
|
+
// undefined = not yet read; null = not available; number = available
|
|
30
|
+
let _cachedPort = undefined;
|
|
31
|
+
function getLocalPort() {
|
|
32
|
+
if (_cachedPort !== undefined)
|
|
33
|
+
return _cachedPort;
|
|
34
|
+
try {
|
|
35
|
+
const raw = readFileSync(getPortFilePath(), 'utf8').trim();
|
|
36
|
+
const port = parseInt(raw, 10);
|
|
37
|
+
_cachedPort = Number.isFinite(port) && port > 0 ? port : null;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
_cachedPort = null;
|
|
41
|
+
}
|
|
42
|
+
return _cachedPort;
|
|
43
|
+
}
|
|
44
|
+
/** True when the local hooks server port file exists and contains a valid port. */
|
|
45
|
+
export function isLocalHooksServerAvailable() {
|
|
46
|
+
return getLocalPort() !== null;
|
|
47
|
+
}
|
|
48
|
+
// ── Tool call proxy ──
|
|
49
|
+
/**
|
|
50
|
+
* Call a gramatr tool, routing through the local hooks server when available.
|
|
51
|
+
*
|
|
52
|
+
* The local server injects auth and enforces data shapes before forwarding to
|
|
53
|
+
* the remote API. If the local server is unavailable or returns an error,
|
|
54
|
+
* falls back to a direct remote call via callRemoteTool.
|
|
55
|
+
*/
|
|
56
|
+
export async function callTool(name, args) {
|
|
57
|
+
const port = getLocalPort();
|
|
58
|
+
if (port !== null) {
|
|
59
|
+
try {
|
|
60
|
+
const res = await fetch(`http://127.0.0.1:${port}/hooks/tool`, {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: { 'Content-Type': 'application/json' },
|
|
63
|
+
body: JSON.stringify({ name, args }),
|
|
64
|
+
signal: AbortSignal.timeout(30000),
|
|
65
|
+
});
|
|
66
|
+
// gramatr-allow: B1 — HTTP transport sentinel, caught immediately in the enclosing try/catch
|
|
67
|
+
if (!res.ok)
|
|
68
|
+
throw new Error(`HTTP ${res.status}`);
|
|
69
|
+
const data = await res.json();
|
|
70
|
+
// gramatr-allow: B1 — error string forwarded from local server, caught immediately in the enclosing try/catch
|
|
71
|
+
if (data.error)
|
|
72
|
+
throw new Error(data.error);
|
|
73
|
+
return data.result;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Local server failed (stale port file, crash, etc.) — invalidate cache
|
|
77
|
+
// and fall through to direct remote.
|
|
78
|
+
_cachedPort = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return callRemoteTool(name, args);
|
|
82
|
+
}
|
|
83
|
+
// ── Session context IPC ──
|
|
84
|
+
/**
|
|
85
|
+
* Push session context to the local server's in-memory store.
|
|
86
|
+
*
|
|
87
|
+
* Called by the session-start hook after setSessionContext() so later hook
|
|
88
|
+
* processes (user-prompt-submit, session-end) can read the context without
|
|
89
|
+
* hitting the SQLite file or the remote REST API.
|
|
90
|
+
*
|
|
91
|
+
* Returns true if the write was acknowledged. A false return is non-fatal —
|
|
92
|
+
* later hooks fall back to SQLite → remote REST.
|
|
93
|
+
*/
|
|
94
|
+
export async function pushSessionContextToLocal(ctx) {
|
|
95
|
+
const port = getLocalPort();
|
|
96
|
+
if (port === null)
|
|
97
|
+
return false;
|
|
98
|
+
try {
|
|
99
|
+
const res = await fetch(`http://127.0.0.1:${port}/hooks/session`, {
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: { 'Content-Type': 'application/json' },
|
|
102
|
+
body: JSON.stringify(ctx),
|
|
103
|
+
signal: AbortSignal.timeout(3000),
|
|
104
|
+
});
|
|
105
|
+
return res.ok;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
_cachedPort = null; // Invalidate on connection failure
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Pull session context from the local server's in-memory store.
|
|
114
|
+
*
|
|
115
|
+
* Returns the stored context for the given session_id, or the most recently
|
|
116
|
+
* written context as a fallback. Returns null if the local server is
|
|
117
|
+
* unavailable or has no context for this session.
|
|
118
|
+
*/
|
|
119
|
+
export async function pullSessionContextFromLocal(sessionId) {
|
|
120
|
+
const port = getLocalPort();
|
|
121
|
+
if (port === null)
|
|
122
|
+
return null;
|
|
123
|
+
try {
|
|
124
|
+
const res = await fetch(`http://127.0.0.1:${port}/hooks/session?session_id=${encodeURIComponent(sessionId)}`, { signal: AbortSignal.timeout(3000) });
|
|
125
|
+
if (!res.ok)
|
|
126
|
+
return null;
|
|
127
|
+
const data = await res.json();
|
|
128
|
+
return data.ctx;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
_cachedPort = null;
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=local-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/proxy/local-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hooks-listener.ts — Local HTTP IPC server for hook subprocesses.
|
|
3
|
+
*
|
|
4
|
+
* Phase IV: The local MCP proxy server opens a lightweight HTTP listener on a
|
|
5
|
+
* random localhost port at startup and writes the port to ~/.gramatr/.hooks-port.
|
|
6
|
+
* Hook subprocesses (session-start, user-prompt-submit, session-end) discover
|
|
7
|
+
* this port and route calls through the local server instead of calling the
|
|
8
|
+
* remote server directly.
|
|
9
|
+
*
|
|
10
|
+
* Benefits:
|
|
11
|
+
* - Auth managed in one place: the local server has the token; hooks never
|
|
12
|
+
* need to resolve or refresh it themselves.
|
|
13
|
+
* - Single enforcement point for data shapes and schema validation before
|
|
14
|
+
* any call reaches the remote API.
|
|
15
|
+
* - Cross-hook session context via in-process memory (no SQLite file needed).
|
|
16
|
+
* - Faster: localhost vs. internet round-trip for session context reads.
|
|
17
|
+
*
|
|
18
|
+
* Fallback: if the port file is absent (local server not running), hooks fall
|
|
19
|
+
* back to direct remote calls with their own auth resolution.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Start the hooks IPC listener on a random localhost port.
|
|
23
|
+
* Writes the port to ~/.gramatr/.hooks-port so hook subprocesses can find it.
|
|
24
|
+
* Returns the assigned port number.
|
|
25
|
+
*/
|
|
26
|
+
export declare function startHooksListener(): Promise<number>;
|
|
27
|
+
/**
|
|
28
|
+
* Stop the hooks listener and remove the port file.
|
|
29
|
+
* Called on server shutdown so stale hooks know to fall back to direct remote.
|
|
30
|
+
*/
|
|
31
|
+
export declare function stopHooksListener(): void;
|
|
32
|
+
//# sourceMappingURL=hooks-listener.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-listener.d.ts","sourceRoot":"","sources":["../../src/server/hooks-listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA2FH;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CA4B1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hooks-listener.ts — Local HTTP IPC server for hook subprocesses.
|
|
3
|
+
*
|
|
4
|
+
* Phase IV: The local MCP proxy server opens a lightweight HTTP listener on a
|
|
5
|
+
* random localhost port at startup and writes the port to ~/.gramatr/.hooks-port.
|
|
6
|
+
* Hook subprocesses (session-start, user-prompt-submit, session-end) discover
|
|
7
|
+
* this port and route calls through the local server instead of calling the
|
|
8
|
+
* remote server directly.
|
|
9
|
+
*
|
|
10
|
+
* Benefits:
|
|
11
|
+
* - Auth managed in one place: the local server has the token; hooks never
|
|
12
|
+
* need to resolve or refresh it themselves.
|
|
13
|
+
* - Single enforcement point for data shapes and schema validation before
|
|
14
|
+
* any call reaches the remote API.
|
|
15
|
+
* - Cross-hook session context via in-process memory (no SQLite file needed).
|
|
16
|
+
* - Faster: localhost vs. internet round-trip for session context reads.
|
|
17
|
+
*
|
|
18
|
+
* Fallback: if the port file is absent (local server not running), hooks fall
|
|
19
|
+
* back to direct remote calls with their own auth resolution.
|
|
20
|
+
*/
|
|
21
|
+
import { createServer } from 'node:http';
|
|
22
|
+
import { existsSync, mkdirSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
23
|
+
import { join } from 'node:path';
|
|
24
|
+
import { getGramatrDirFromEnv, getHomeDir } from '../config-runtime.js';
|
|
25
|
+
import { callRemoteTool } from '../proxy/remote-client.js';
|
|
26
|
+
// ── In-memory session context store ──
|
|
27
|
+
// Keys: session_id (string) + '__latest__' sentinel for the most recent write.
|
|
28
|
+
// Hooks that don't know the session_id (e.g. a status query) fall back to __latest__.
|
|
29
|
+
const sessionStore = new Map();
|
|
30
|
+
// ── Port file path ──
|
|
31
|
+
function getPortFilePath() {
|
|
32
|
+
const dir = getGramatrDirFromEnv() || join(getHomeDir(), '.gramatr');
|
|
33
|
+
return join(dir, '.hooks-port');
|
|
34
|
+
}
|
|
35
|
+
// ── Request helpers ──
|
|
36
|
+
async function readBody(req) {
|
|
37
|
+
return new Promise((resolve) => {
|
|
38
|
+
const chunks = [];
|
|
39
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
40
|
+
req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
|
41
|
+
req.on('error', () => resolve(''));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function json(res, status, body) {
|
|
45
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
46
|
+
res.end(JSON.stringify(body));
|
|
47
|
+
}
|
|
48
|
+
// ── Route handlers ──
|
|
49
|
+
async function handleRequest(req, res) {
|
|
50
|
+
const url = new URL(req.url || '/', 'http://localhost');
|
|
51
|
+
const method = (req.method || 'GET').toUpperCase();
|
|
52
|
+
// ── POST /hooks/tool — proxy a gramatr tool call with server-managed auth ──
|
|
53
|
+
if (url.pathname === '/hooks/tool' && method === 'POST') {
|
|
54
|
+
const raw = await readBody(req);
|
|
55
|
+
try {
|
|
56
|
+
const { name, args } = JSON.parse(raw);
|
|
57
|
+
if (!name || typeof name !== 'string') {
|
|
58
|
+
json(res, 400, { error: 'name is required' });
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const result = await callRemoteTool(name, args ?? {});
|
|
62
|
+
json(res, 200, { result });
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
json(res, 502, { error: err instanceof Error ? err.message : String(err) });
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// ── GET /hooks/session?session_id=xxx — retrieve session context ──
|
|
70
|
+
if (url.pathname === '/hooks/session' && method === 'GET') {
|
|
71
|
+
const sessionId = url.searchParams.get('session_id');
|
|
72
|
+
const ctx = (sessionId ? sessionStore.get(sessionId) : null)
|
|
73
|
+
?? sessionStore.get('__latest__')
|
|
74
|
+
?? null;
|
|
75
|
+
json(res, 200, { ctx });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// ── POST /hooks/session — store session context ──
|
|
79
|
+
if (url.pathname === '/hooks/session' && method === 'POST') {
|
|
80
|
+
const raw = await readBody(req);
|
|
81
|
+
try {
|
|
82
|
+
const ctx = JSON.parse(raw);
|
|
83
|
+
const sessionId = ctx?.session_id;
|
|
84
|
+
if (sessionId)
|
|
85
|
+
sessionStore.set(sessionId, ctx);
|
|
86
|
+
sessionStore.set('__latest__', ctx);
|
|
87
|
+
json(res, 200, { ok: true });
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
json(res, 400, { error: 'Invalid JSON' });
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
json(res, 404, { error: 'Not found' });
|
|
95
|
+
}
|
|
96
|
+
// ── Lifecycle ──
|
|
97
|
+
let _server = null;
|
|
98
|
+
/**
|
|
99
|
+
* Start the hooks IPC listener on a random localhost port.
|
|
100
|
+
* Writes the port to ~/.gramatr/.hooks-port so hook subprocesses can find it.
|
|
101
|
+
* Returns the assigned port number.
|
|
102
|
+
*/
|
|
103
|
+
export async function startHooksListener() {
|
|
104
|
+
// Ensure the directory exists for the port file
|
|
105
|
+
const dir = getGramatrDirFromEnv() || join(getHomeDir(), '.gramatr');
|
|
106
|
+
try {
|
|
107
|
+
if (!existsSync(dir))
|
|
108
|
+
mkdirSync(dir, { recursive: true });
|
|
109
|
+
}
|
|
110
|
+
catch { /* non-critical — port file write will fail gracefully below */ }
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
_server = createServer((req, res) => {
|
|
113
|
+
handleRequest(req, res).catch((err) => {
|
|
114
|
+
json(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
_server.listen(0, '127.0.0.1', () => {
|
|
118
|
+
const addr = _server.address();
|
|
119
|
+
const port = typeof addr === 'object' && addr !== null ? addr.port : 0;
|
|
120
|
+
try {
|
|
121
|
+
// mode 0o600: readable only by the current user
|
|
122
|
+
writeFileSync(getPortFilePath(), String(port), { mode: 0o600 });
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Non-critical — hooks will fall back to SQLite + direct remote
|
|
126
|
+
}
|
|
127
|
+
resolve(port);
|
|
128
|
+
});
|
|
129
|
+
_server.once('error', reject);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Stop the hooks listener and remove the port file.
|
|
134
|
+
* Called on server shutdown so stale hooks know to fall back to direct remote.
|
|
135
|
+
*/
|
|
136
|
+
export function stopHooksListener() {
|
|
137
|
+
_server?.close();
|
|
138
|
+
_server = null;
|
|
139
|
+
try {
|
|
140
|
+
unlinkSync(getPortFilePath());
|
|
141
|
+
}
|
|
142
|
+
catch { /* best-effort cleanup */ }
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=hooks-listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-listener.js","sourceRoot":"","sources":["../../src/server/hooks-listener.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAyBnE;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAuDrC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuEjD"}
|
package/dist/server/server.js
CHANGED
|
@@ -25,6 +25,7 @@ import { loadRemoteResources, getResources } from '../proxy/resource-registry.js
|
|
|
25
25
|
import { proxyToolCall } from '../proxy/tool-proxy.js';
|
|
26
26
|
import { fetchRemotePrompt, fetchRemoteResource } from '../proxy/remote-client.js';
|
|
27
27
|
import { getToken } from './auth.js';
|
|
28
|
+
import { startHooksListener, stopHooksListener } from './hooks-listener.js';
|
|
28
29
|
import { getLocalToolDefinitions } from '../tools/local-tools.js';
|
|
29
30
|
import { replayQueue } from '../queue/replay.js';
|
|
30
31
|
import { queueSize } from '../queue/offline-queue.js';
|
|
@@ -124,10 +125,24 @@ export async function startServer() {
|
|
|
124
125
|
process.stderr.write(`[gramatr-mcp] Found ${pending} queued call(s), replaying...\n`);
|
|
125
126
|
void replayQueue();
|
|
126
127
|
}
|
|
127
|
-
// Create and start the server
|
|
128
|
+
// Create and start the MCP stdio server
|
|
128
129
|
const server = createServer();
|
|
129
130
|
const transport = new StdioServerTransport();
|
|
130
131
|
await server.connect(transport);
|
|
131
132
|
process.stderr.write(`[gramatr-mcp] Server started (stdio transport)\n`);
|
|
133
|
+
// Start hooks IPC listener so hook subprocesses can route through this
|
|
134
|
+
// process for auth, schema enforcement, and session context storage.
|
|
135
|
+
try {
|
|
136
|
+
const hooksPort = await startHooksListener();
|
|
137
|
+
process.stderr.write(`[gramatr-mcp] Hooks listener on port ${hooksPort}\n`);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
141
|
+
process.stderr.write(`[gramatr-mcp] Warning: hooks listener failed to start (${msg})\n`);
|
|
142
|
+
}
|
|
143
|
+
// Clean up port file on exit so stale hooks fall back to direct remote.
|
|
144
|
+
process.on('exit', () => stopHooksListener());
|
|
145
|
+
process.on('SIGTERM', () => { stopHooksListener(); process.exit(0); });
|
|
146
|
+
process.on('SIGINT', () => { stopHooksListener(); process.exit(0); });
|
|
132
147
|
}
|
|
133
148
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,14 @@ When a \`[gramatr intelligence]\` block is present, follow it as authoritative.
|
|
|
69
69
|
When the packet is missing or clearly stale, call \`gramatr_route_request\`
|
|
70
70
|
with the user's request before answering.
|
|
71
71
|
|
|
72
|
+
Treat \`packet_1\` as the canonical fast contract envelope. Read from
|
|
73
|
+
\`packet_1.manifest\`, \`packet_1.classification\`, and
|
|
74
|
+
\`packet_1.search_results\` / \`packet_1.memory_context\` when present.
|
|
75
|
+
|
|
76
|
+
If \`packet_1.manifest.packet_2_status === "required"\`, call
|
|
77
|
+
\`gramatr_get_enrichment\` with \`packet_1.manifest.enrichment_id\` before
|
|
78
|
+
proceeding. Packet 2 is mandatory whenever it is required.
|
|
79
|
+
|
|
72
80
|
For continuity questions like "what were we doing?" or "what changed?",
|
|
73
81
|
call \`gramatr_load_handoff\` first, then \`search_semantic\` for detail.
|
|
74
82
|
|
|
@@ -91,6 +99,11 @@ Before responding to any user message, call \`gramatr_route_request\` with the
|
|
|
91
99
|
user's request. This returns the current project context, memory, behavioral
|
|
92
100
|
guidance, and effort classification needed for a grounded response.
|
|
93
101
|
|
|
102
|
+
Use \`packet_1\` as the canonical response envelope. If
|
|
103
|
+
\`packet_1.manifest.packet_2_status === "required"\`, call
|
|
104
|
+
\`gramatr_get_enrichment\` with the returned \`enrichment_id\` and treat Packet 2
|
|
105
|
+
as mandatory before full execution.
|
|
106
|
+
|
|
94
107
|
For continuity questions like "what were we doing?" or "what changed?",
|
|
95
108
|
call \`gramatr_load_handoff\` before answering, then \`search_semantic\`
|
|
96
109
|
for additional detail.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/setup/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAY5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,kBAAkB;;;;;;;;;;;;;;;EAevD,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,iBAAiB;;;;;;;;;;;;;;;;;EAiBhD,eAAe;CAChB,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,MAA2B;IACtE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,OAAO,CAAC;QACb,KAAK,YAAY;YACf,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,gBAAgB,CAAC;QACtB,KAAK,iBAAiB,CAAC;QACvB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,kCAAkC,CAAC,MAAM,CAAC,CAAC;QACpD;YACE,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,MAA8C;IACjF,MAAM,QAAQ,GAAG,MAAM,KAAK,aAAa;QACvC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,MAAM,KAAK,YAAY;YACvB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,cAAc,QAAQ
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/setup/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAY5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,kBAAkB;;;;;;;;;;;;;;;EAevD,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,iBAAiB;;;;;;;;;;;;;;;;;EAiBhD,eAAe;CAChB,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,MAA2B;IACtE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC;QACnB,KAAK,OAAO,CAAC;QACb,KAAK,YAAY;YACf,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,gBAAgB,CAAC;QACtB,KAAK,iBAAiB,CAAC;QACvB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,kCAAkC,CAAC,MAAM,CAAC,CAAC;QACpD;YACE,OAAO,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,MAA8C;IACjF,MAAM,QAAQ,GAAG,MAAM,KAAK,aAAa;QACvC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,MAAM,KAAK,YAAY;YACvB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,cAAc,QAAQ;;;;;;;;;;;;;;;;;;;;;uCAqBQ,CAAC;AACxC,CAAC;AAED,SAAS,kCAAkC,CACzC,MAA+E;IAE/E,MAAM,WAAW,GAAkC;QACjD,gBAAgB,EAAE,gBAAgB;QAClC,iBAAiB,EAAE,iBAAiB;QACpC,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,SAAS;KAClB,CAAC;IAEF,OAAO,cAAc,WAAW,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;iEAiBuB,CAAC;AAClE,CAAC"}
|
|
@@ -9,9 +9,9 @@ const CLAUDE_HOOKS = [
|
|
|
9
9
|
{ event: 'PostToolUse', matcher: 'mcp__.*gramatr.*__', mcpHookName: 'tool-tracker' },
|
|
10
10
|
{ event: 'UserPromptSubmit', mcpHookName: 'rating-capture' },
|
|
11
11
|
{ event: 'UserPromptSubmit', mcpHookName: 'user-prompt-submit' },
|
|
12
|
-
{ event: 'SessionStart', mcpHookName: 'session-start' },
|
|
13
|
-
{ event: 'SessionEnd', mcpHookName: 'session-end' },
|
|
14
|
-
{ event: 'Stop', mcpHookName: 'stop' },
|
|
12
|
+
{ event: 'SessionStart', mcpHookName: 'session-start', statusMessage: 'Loading grāmatr session context' },
|
|
13
|
+
{ event: 'SessionEnd', mcpHookName: 'session-end', statusMessage: 'Saving grāmatr session' },
|
|
14
|
+
{ event: 'Stop', mcpHookName: 'stop', statusMessage: 'Submitting grāmatr classification feedback' },
|
|
15
15
|
];
|
|
16
16
|
const CODEX_HOOKS = [
|
|
17
17
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/setup/integrations.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAEnE,MAAM,SAAS,GAAG,SAAS,CAAC;AAE5B,MAAM,YAAY,GAAe;IAC/B,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACxE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACxE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACzE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACxE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACtF,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE;IACpF,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,gBAAgB,EAAE;IAC5D,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAChE,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE;
|
|
1
|
+
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/setup/integrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-connector.d.ts","sourceRoot":"","sources":["../../src/setup/web-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,MAAM,WAAW,4BAA4B;IAC3C,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iDAAiD;IACjD,MAAM,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;CACtD;AAED,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,UAAU,EAAE,UAAU,CAAC;IACvB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CAgBvB;AAgDD,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,MAAqB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"web-connector.d.ts","sourceRoot":"","sources":["../../src/setup/web-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,MAAM,WAAW,4BAA4B;IAC3C,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iDAAiD;IACjD,MAAM,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;CACtD;AAED,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,UAAU,EAAE,UAAU,CAAC;IACvB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CAgBvB;AAgDD,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,MAAqB,GAAG,MAAM,CA+B3E;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAGR;AAMD,wBAAsB,0BAA0B,CAC9C,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAuB7B"}
|
|
@@ -86,6 +86,10 @@ the user's prompt. This returns essential context:
|
|
|
86
86
|
- Effort level classification
|
|
87
87
|
- Matched capabilities and phase templates
|
|
88
88
|
|
|
89
|
+
Treat packet_1 as the canonical response envelope. If
|
|
90
|
+
packet_1.manifest.packet_2_status is "required", call gramatr_get_enrichment
|
|
91
|
+
with packet_1.manifest.enrichment_id before proceeding.
|
|
92
|
+
|
|
89
93
|
Without calling gramatr_route_request, your response will be generic and miss
|
|
90
94
|
critical context. With it, you deliver targeted, personalized answers.
|
|
91
95
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-connector.js","sourceRoot":"","sources":["../../src/setup/web-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AACzD,MAAM,uBAAuB,GAAG,KAAK,CAAC;AA2CtC,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,UAAU,0BAA0B,CACxC,UAAwC,EAAE;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC;IAC9C,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAEhF,OAAO;QACL,SAAS;QACT,UAAU;QACV,MAAM;QACN,KAAK;QACL,aAAa,EAAE,kBAAkB,CAAC,SAAS,CAAC;QAC5C,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAc,EACd,SAAiB,EACjB,UAAsB,EACtB,aAAqB;IAErB,MAAM,SAAS,GAAG,UAAU,KAAK,OAAO;QACtC,CAAC,CAAC,CAAC,gDAAgD,CAAC;QACpD,CAAC,CAAC;YACA,iEAAiE;YACjE,yEAAyE;SAC1E,CAAC;IAEJ,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa;YAChB,OAAO;gBACL,oCAAoC;gBACpC,GAAG,SAAS;gBACZ,4DAA4D;gBAC5D,yBAAyB,SAAS,EAAE;gBACpC,qBAAqB,aAAa,EAAE;aACrC,CAAC;QACJ,KAAK,YAAY;YACf,OAAO;gBACL,oCAAoC;gBACpC,GAAG,SAAS;gBACZ,gEAAgE;gBAChE,yBAAyB,SAAS,EAAE;gBACpC,qBAAqB,aAAa,EAAE;aACrC,CAAC;QACJ,KAAK,YAAY,CAAC;QAClB;YACE,OAAO;gBACL,oCAAoC;gBACpC,GAAG,SAAS;gBACZ,oDAAoD;gBACpD,yBAAyB,SAAS,EAAE;gBACpC,qBAAqB,aAAa,EAAE;aACrC,CAAC;IACN,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,UAAU,qBAAqB,CAAC,SAAiB,YAAY;IACjE,MAAM,YAAY,GAAG,MAAM,KAAK,aAAa;QAC3C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,KAAK,YAAY;YACvB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CAAC;IAEf,OAAO,cAAc,YAAY
|
|
1
|
+
{"version":3,"file":"web-connector.js","sourceRoot":"","sources":["../../src/setup/web-connector.ts"],"names":[],"mappings":"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"}
|