@gramatr/mcp 0.7.15 → 0.7.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/gramatr +0 -0
  2. package/dist/hooks/lib/client-runtime.d.ts +1 -1
  3. package/dist/hooks/lib/client-runtime.d.ts.map +1 -1
  4. package/dist/hooks/lib/client-runtime.js +9 -5
  5. package/dist/hooks/lib/client-runtime.js.map +1 -1
  6. package/dist/hooks/lib/intelligence.d.ts.map +1 -1
  7. package/dist/hooks/lib/intelligence.js +10 -8
  8. package/dist/hooks/lib/intelligence.js.map +1 -1
  9. package/dist/hooks/lib/packet-debug-log.d.ts +31 -0
  10. package/dist/hooks/lib/packet-debug-log.d.ts.map +1 -0
  11. package/dist/hooks/lib/packet-debug-log.js +50 -0
  12. package/dist/hooks/lib/packet-debug-log.js.map +1 -0
  13. package/dist/hooks/lib/routing.d.ts +1 -0
  14. package/dist/hooks/lib/routing.d.ts.map +1 -1
  15. package/dist/hooks/lib/routing.js +1 -0
  16. package/dist/hooks/lib/routing.js.map +1 -1
  17. package/dist/hooks/lib/types.d.ts +36 -0
  18. package/dist/hooks/lib/types.d.ts.map +1 -1
  19. package/dist/hooks/session-start.d.ts.map +1 -1
  20. package/dist/hooks/session-start.js +12 -3
  21. package/dist/hooks/session-start.js.map +1 -1
  22. package/dist/hooks/user-prompt-submit.d.ts.map +1 -1
  23. package/dist/hooks/user-prompt-submit.js +48 -14
  24. package/dist/hooks/user-prompt-submit.js.map +1 -1
  25. package/dist/proxy/local-client.d.ts +15 -36
  26. package/dist/proxy/local-client.d.ts.map +1 -1
  27. package/dist/proxy/local-client.js +18 -116
  28. package/dist/proxy/local-client.js.map +1 -1
  29. package/dist/setup/instructions.d.ts +2 -2
  30. package/dist/setup/instructions.d.ts.map +1 -1
  31. package/dist/setup/instructions.js +79 -55
  32. package/dist/setup/instructions.js.map +1 -1
  33. package/dist/setup/integrations.d.ts.map +1 -1
  34. package/dist/setup/integrations.js +31 -17
  35. package/dist/setup/integrations.js.map +1 -1
  36. package/dist/setup/web-connector.d.ts.map +1 -1
  37. package/dist/setup/web-connector.js +4 -3
  38. package/dist/setup/web-connector.js.map +1 -1
  39. package/package.json +1 -1
@@ -4,14 +4,15 @@ import { emitStatus, formatFailureWarning, formatIntelligence, mergeEnrichmentIn
4
4
  import { fetchEnrichment, persistClassificationResult, routePrompt, shouldSkipPromptRouting, } from './lib/routing.js';
5
5
  import { appendOpHistory, appendTurn, getSessionContext, hydrateSessionContextFromServer, isFilesystemAvailable, setLatestClassification, } from './lib/hook-state.js';
6
6
  import { resolveHookClientRuntime } from './lib/client-runtime.js';
7
+ import { appendPacketDebugLog } from './lib/packet-debug-log.js';
7
8
  let turnCounter = 0;
8
- const TIMEOUT_MS = getGramatrTimeoutFromEnv(30000);
9
+ const TIMEOUT_MS = getGramatrTimeoutFromEnv(60000);
9
10
  const ENABLED = isGramatrEnrichEnabledFromEnv();
10
11
  const PACKET_MODE = getGramatrPacketModeFromEnv();
11
12
  const PACKET2_WAIT_MS = getGramatrPacket2WaitMsFromEnv(20000);
12
- const HOOK_ROUTE_TIMEOUT_CAP_MS = 9000;
13
- const HOOK_PACKET2_TIMEOUT_CAP_MS = 2500;
14
- const HOOK_PACKET2_WAIT_CAP_MS = 4000;
13
+ const HOOK_ROUTE_TIMEOUT_CAP_MS = 60000;
14
+ const HOOK_PACKET2_TIMEOUT_CAP_MS = 15000;
15
+ const HOOK_PACKET2_WAIT_CAP_MS = 20000;
15
16
  const HOOK_PACKET2_POLL_MS = 500;
16
17
  function persistLastClassification(prompt, sessionId, route, downstreamModel, clientType, agentName) {
17
18
  try {
@@ -73,32 +74,63 @@ export async function runUserPromptSubmitHook(_args = []) {
73
74
  sessionContext = getSessionContext(sessionId);
74
75
  }
75
76
  const projectId = sessionContext?.project_id || (git ? deriveProjectId(git.remote, git.projectName) : null) || undefined;
76
- // Pass gramatr interaction_id as session_id so route_request can load
77
- // conversation history. Fall back to the Claude session_id only if no
78
- // interaction has been registered yet (e.g. server was down at SessionStart).
79
- const gramatrSessionId = sessionContext?.interaction_id || sessionId;
77
+ // gramatr interaction_id is the cross-agent session key — use it for
78
+ // both session_id (server history) and interaction_id (explicit resolution).
79
+ const gramatrInteractionId = sessionContext?.interaction_id || null;
80
+ const gramatrSessionId = gramatrInteractionId || sessionId;
80
81
  process.stderr.write('[gramatr] classifying...\n');
81
82
  const t0 = Date.now();
82
83
  const routed = await routePrompt({
83
84
  prompt,
84
85
  projectId,
85
86
  sessionId: gramatrSessionId,
87
+ interactionId: gramatrInteractionId || undefined,
86
88
  timeoutMs: Math.min(TIMEOUT_MS, HOOK_ROUTE_TIMEOUT_CAP_MS),
87
89
  });
88
90
  const result = routed.route;
89
91
  const elapsed = Date.now() - t0;
92
+ const isV2 = result?.schema === 'gmtr.intelligence.contract.v2';
90
93
  let lastFailure = null;
91
94
  if (!result && routed.error) {
92
95
  lastFailure = mapRoutingFailure(routed.error.reason, routed.error.detail);
93
96
  }
97
+ // Debug log — rolling 100-entry JSONL at ~/.gramatr/debug/packets.jsonl
98
+ appendPacketDebugLog({
99
+ ts: new Date().toISOString(),
100
+ project_id: projectId ?? null,
101
+ session_id: gramatrSessionId,
102
+ client_type: runtime.clientType,
103
+ agent_name: runtime.agentName,
104
+ downstream_model: downstreamModel,
105
+ status: !result && routed.error
106
+ ? (routed.error.reason === 'timeout' ? 'timeout' : 'error')
107
+ : result ? 'ok' : 'skipped',
108
+ elapsed_ms: elapsed,
109
+ packet: result ?? null,
110
+ error: routed.error ? { reason: routed.error.reason, detail: routed.error.detail } : null,
111
+ });
94
112
  let enrichment = null;
95
113
  const packet1 = result?.packet_1;
96
- const manifest = packet1?.manifest || result;
97
- const packetTokenSavings = packet1?.token_savings || result?.token_savings || {};
98
- if (result && manifest?.packet_2_status === 'required' && manifest?.enrichment_id) {
99
- enrichment = await fetchEnrichment(manifest.enrichment_id, {
114
+ // v2: manifest is a top-level field; v1: it's nested under packet_1
115
+ const manifest = isV2 ? result?.manifest : (packet1?.manifest || result);
116
+ // v2: token_savings lives under result.execution; v1: under packet_1 or result directly
117
+ const packetTokenSavings = packet1?.token_savings
118
+ || (isV2 ? result?.execution?.token_savings : result?.token_savings)
119
+ || {};
120
+ const packet2Required = Boolean(
121
+ // v2: enrichment.required is the canonical signal
122
+ result?.enrichment?.required === true
123
+ // v1 fallbacks
124
+ || result?.packet_2?.required === true
125
+ || manifest?.packet_2_status === 'required'
126
+ || manifest?.packet_2_required === true);
127
+ const enrichmentId = result?.enrichment?.enrichment_id
128
+ || result?.packet_2?.enrichment_id
129
+ || manifest?.enrichment_id;
130
+ if (result && packet2Required && enrichmentId) {
131
+ enrichment = await fetchEnrichment(enrichmentId, {
100
132
  mode: PACKET_MODE,
101
- timeoutMs: Math.min(5000, HOOK_PACKET2_TIMEOUT_CAP_MS),
133
+ timeoutMs: HOOK_PACKET2_TIMEOUT_CAP_MS,
102
134
  waitMs: Math.min(PACKET2_WAIT_MS, HOOK_PACKET2_WAIT_CAP_MS),
103
135
  pollMs: HOOK_PACKET2_POLL_MS,
104
136
  });
@@ -121,7 +153,9 @@ export async function runUserPromptSubmitHook(_args = []) {
121
153
  effort: cl.effort_level || null,
122
154
  intent: cl.intent_type || null,
123
155
  confidence: cl.confidence ?? null,
124
- memory_delivered: (packet1?.memory_context || result?.memory_context)?.results?.length || null,
156
+ memory_delivered: isV2
157
+ ? (result?.memory?.search_results?.length ?? null)
158
+ : ((packet1?.memory_context || result?.memory_context)?.results?.length ?? null),
125
159
  downstream_model: downstreamModel || null,
126
160
  server_version: es.server_version || null,
127
161
  stage_timing: es.stage_timing ? JSON.stringify(es.stage_timing) : null,
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"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"}
@@ -1,49 +1,28 @@
1
1
  /**
2
- * local-client.ts — Hook-side client for the local MCP hooks listener.
2
+ * local-client.ts — Hook-side client for gramatr tool calls.
3
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.
4
+ * Hooks call gramatr tools directly through the remote API via callRemoteTool.
5
+ * The compiled binary owns auth resolution — no port-based local HTTP server needed.
7
6
  *
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.
7
+ * Session context (project_id, interaction_id) is managed locally via SQLite
8
+ * in hook-state.ts. pushSessionContextToLocal / pullSessionContextFromLocal
9
+ * are retained as no-ops for call-site compatibility while the port IPC is removed.
19
10
  */
20
- /** True when the local hooks server port file exists and contains a valid port. */
11
+ /** Always false port-based local server is no longer used. */
21
12
  export declare function isLocalHooksServerAvailable(): boolean;
22
13
  /**
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.
14
+ * Call a gramatr tool via the remote API.
15
+ * Auth is resolved by the compiled binary's auth module.
28
16
  */
29
17
  export declare function callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
30
18
  /**
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.
19
+ * No-op session context is persisted to SQLite via setSessionContext in hook-state.ts.
20
+ * Retained for call-site compatibility.
39
21
  */
40
- export declare function pushSessionContextToLocal(ctx: unknown): Promise<boolean>;
22
+ export declare function pushSessionContextToLocal(_ctx: unknown): Promise<boolean>;
41
23
  /**
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.
24
+ * No-op callers fall through to remote REST hydration via hydrateSessionContextFromServer.
25
+ * Retained for call-site compatibility.
47
26
  */
48
- export declare function pullSessionContextFromLocal(sessionId: string): Promise<Record<string, unknown> | null>;
27
+ export declare function pullSessionContextFromLocal(_sessionId: string): Promise<Record<string, unknown> | null>;
49
28
  //# sourceMappingURL=local-client.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../../src/proxy/local-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,gEAAgE;AAChE,wBAAgB,2BAA2B,IAAI,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAEzC"}
@@ -1,135 +1,37 @@
1
1
  /**
2
- * local-client.ts — Hook-side client for the local MCP hooks listener.
2
+ * local-client.ts — Hook-side client for gramatr tool calls.
3
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.
4
+ * Hooks call gramatr tools directly through the remote API via callRemoteTool.
5
+ * The compiled binary owns auth resolution — no port-based local HTTP server needed.
7
6
  *
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.
7
+ * Session context (project_id, interaction_id) is managed locally via SQLite
8
+ * in hook-state.ts. pushSessionContextToLocal / pullSessionContextFromLocal
9
+ * are retained as no-ops for call-site compatibility while the port IPC is removed.
19
10
  */
20
- import { readFileSync } from 'node:fs';
21
- import { join } from 'node:path';
22
- import { getGramatrDirFromEnv, getHomeDir } from '../config-runtime.js';
23
11
  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. */
12
+ /** Always false port-based local server is no longer used. */
45
13
  export function isLocalHooksServerAvailable() {
46
- return getLocalPort() !== null;
14
+ return false;
47
15
  }
48
- // ── Tool call proxy ──
49
16
  /**
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.
17
+ * Call a gramatr tool via the remote API.
18
+ * Auth is resolved by the compiled binary's auth module.
55
19
  */
56
20
  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
21
  return callRemoteTool(name, args);
82
22
  }
83
- // ── Session context IPC ──
84
23
  /**
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.
24
+ * No-op session context is persisted to SQLite via setSessionContext in hook-state.ts.
25
+ * Retained for call-site compatibility.
93
26
  */
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
- }
27
+ export async function pushSessionContextToLocal(_ctx) {
28
+ return false;
111
29
  }
112
30
  /**
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.
31
+ * No-op callers fall through to remote REST hydration via hydrateSessionContextFromServer.
32
+ * Retained for call-site compatibility.
118
33
  */
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
- }
34
+ export async function pullSessionContextFromLocal(_sessionId) {
35
+ return null;
134
36
  }
135
37
  //# sourceMappingURL=local-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/proxy/local-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../../src/proxy/local-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,gEAAgE;AAChE,MAAM,UAAU,2BAA2B;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,IAA6B;IAE7B,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAa;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAAkB;IAElB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -3,7 +3,7 @@ export declare const CLAUDE_BLOCK_END = "<!-- GRAMATR-END -->";
3
3
  export declare const CODEX_BLOCK_START = "<!-- GRAMATR-CODEX-START -->";
4
4
  export declare const CODEX_BLOCK_END = "<!-- GRAMATR-CODEX-END -->";
5
5
  export type InstallPromptTarget = 'claude-code' | 'codex' | 'gemini-cli' | 'claude-desktop' | 'chatgpt-desktop' | 'cursor' | 'windsurf' | 'vscode';
6
- export declare const CLAUDE_CODE_GUIDANCE = "<!-- GRAMATR-START -->\n# gramatr\n\nYou have gramatr installed. Local hooks and the local MCP server inject\nintelligence as `[gramatr intelligence \u2014 ...]` into your context.\n\nFollow the injected JSON contract. Prefer `unified_packet` when present.\nIt is the canonical complete contract. Fall back to `packet_1` /`packet_2`\nonly when `unified_packet` is absent.\n\nUse gramatr tools and packet data instead of stale local markdown. Prefer\npacket memory/search results when present. Use `search_semantic` only for\nfollow-up expansion, not as a replacement for the injected packet.\n\nWhen the contract includes behavioral rules, directives, phase templates,\nISC/quality-gate data, or formatting constraints, treat those fields as\nexecution requirements rather than optional suggestions. Do not reconstruct\nthem from local prose when the structured fields are present.\n\nIf the server is unavailable, degrade cleanly and keep working, but do not\npretend intelligence was delivered.\n<!-- GRAMATR-END -->\n";
7
- export declare const CODEX_GUIDANCE = "<!-- GRAMATR-CODEX-START -->\n# gramatr codex guidance\n\n## Repo Expectations\n\n- Prefer gramatr memory and project handoff context over ad hoc local summaries.\n- Treat Codex hook augmentation as authoritative when a gramatr JSON intelligence block is present.\n- If gramatr augmentation is missing, query gramatr memory before relying on stale local notes.\n- Prefer TypeScript implementations over shell scripts for client integration code unless the platform requires shell.\n- Maintain test coverage for new hook and utility logic.\n\n## Codex Integration\n\n- Repo-local Codex hooks are configured in `.codex/hooks.json`.\n- `UserPromptSubmit` is responsible for prompt enrichment.\n- `SessionStart` is responsible for session restore and continuity.\n- Hook failures must degrade cleanly and never block the user session.\n- Prefer `unified_packet` as the canonical complete contract. When it is absent, treat `packet_1` as mandatory deterministic input and `packet_2` as mandatory when required.\n- If `packet_2.required === true`, call `gramatr_get_packet_two` with `enrichment_id` before deep execution.\n- Consume structured JSON fields as source of truth. Do not replace packet-provided behavioral rules, ISC gates, quality gates, or format constraints with local prose summaries.\n- `gramatr_route_request` is mandatory when hook injection is missing/stale for the current user prompt.\n- `search_semantic` remains available for follow-up memory expansion, not as a replacement for packet flow.\n<!-- GRAMATR-CODEX-END -->\n";
6
+ export declare const CLAUDE_CODE_GUIDANCE = "<!-- GRAMATR-START -->\n# gramatr\n\nYou have gramatr installed. Hooks inject a `gmtr.intelligence.contract.v2`\npacket into your context on every prompt.\n\n**Follow the packet.** It contains classification, behavioral directives,\nphase templates, capability audit, quality gates, memory/search results,\nagent suggestions, and enrichment (RE + ISC scaffold).\n\n**Mandatory fields:**\n- `directives.hard_gates` \u2014 non-negotiable behavioral constraints\n- `directives.behavioral_rules` \u2014 algorithm phases, code rules, safety rules\n- `process.phase_template` \u2014 effort-gated phase sequence\n- `process.quality_gate_config` \u2014 ISC verification rules\n- `enrichment.data.reasoning` \u2014 RE + ISC when present\n\n**Memory:** Use gramatr MCP tools (`search_semantic`, `create_entity`,\n`add_observation`), not local markdown files.\n\n**Sub-agent composition:** Before launching any sub-agent for non-trivial work,\ncall `gramatr_route_request` with the task prompt first. Use the returned\npacket to compose the brief: RE \u2192 task description, ISC scaffold \u2192 acceptance\ncriteria, orchestration.agents.composed \u2192 agent system prompt, hard_gates \u2192\nconstraints.\n\n**Effort-gated phases:**\n- instant: RESPOND only\n- fast: OBSERVE \u2192 RESPOND\n- standard: OBSERVE \u2192 PLAN \u2192 BUILD \u2192 VERIFY\n- extended+: OBSERVE \u2192 THINK \u2192 PLAN \u2192 BUILD \u2192 EXECUTE \u2192 VERIFY \u2192 LEARN\n\n**Identity:** Read from `~/.gramatr/settings.json` \u2014 `daidentity` for your\nname, `principal` for the user's name.\n\n**If the server is unavailable:** Degrade cleanly and keep working. Use the\n7-phase structure. Create ISC before work. Never combine phases.\n<!-- GRAMATR-END -->\n";
7
+ export declare const CODEX_GUIDANCE = "<!-- GRAMATR-CODEX-START -->\n# gramatr codex guidance\n\n## Repo Expectations\n\n- Prefer gramatr memory and project handoff context over ad hoc local summaries.\n- Treat Codex hook augmentation as authoritative when a gramatr intelligence block is present.\n- If gramatr augmentation is missing, query gramatr memory before relying on stale local notes.\n- Prefer TypeScript implementations over shell scripts for client integration code unless the platform requires shell.\n- Maintain test coverage for new hook and utility logic.\n\n## Codex Integration\n\n- Repo-local Codex hooks are configured in `.codex/hooks.json`.\n- `UserPromptSubmit` is responsible for prompt enrichment.\n- `SessionStart` is responsible for session restore and continuity.\n- Hook failures must degrade cleanly and never block the user session.\n- The contract is always `gmtr.intelligence.contract.v2`. There is no\n `unified_packet`, `packet_1`, or `packet_2` \u2014 the v2 packet is the only format.\n- Treat `directives.hard_gates` and `directives.behavioral_rules` as mandatory.\n- Follow `process.phase_template` for effort-gated phase sequencing.\n- Use `process.quality_gate_config` for ISC verification.\n- Consume `enrichment.data.reasoning` for RE and ISC when present.\n- `gramatr_route_request` is mandatory when hook injection is missing/stale.\n- `search_semantic` remains available for follow-up memory expansion.\n<!-- GRAMATR-CODEX-END -->\n";
8
8
  export declare function buildInstallPromptSuggestion(target: InstallPromptTarget): string;
9
9
  //# sourceMappingURL=instructions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/setup/instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AAChE,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAC3B,aAAa,GACb,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,GACjB,QAAQ,GACR,UAAU,GACV,QAAQ,CAAC;AAEb,eAAO,MAAM,oBAAoB,igCAsBhC,CAAC;AAEF,eAAO,MAAM,cAAc,wgDAuB1B,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAehF"}
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/setup/instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AAChE,eAAO,MAAM,eAAe,+BAA+B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAC3B,aAAa,GACb,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,GACjB,QAAQ,GACR,UAAU,GACV,QAAQ,CAAC;AAEb,eAAO,MAAM,oBAAoB,4sDAsChC,CAAC;AAEF,eAAO,MAAM,cAAc,s6CA0B1B,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAehF"}
@@ -5,24 +5,40 @@ export const CODEX_BLOCK_END = '<!-- GRAMATR-CODEX-END -->';
5
5
  export const CLAUDE_CODE_GUIDANCE = `${CLAUDE_BLOCK_START}
6
6
  # gramatr
7
7
 
8
- You have gramatr installed. Local hooks and the local MCP server inject
9
- intelligence as \`[gramatr intelligence ...]\` into your context.
10
-
11
- Follow the injected JSON contract. Prefer \`unified_packet\` when present.
12
- It is the canonical complete contract. Fall back to \`packet_1\` /\`packet_2\`
13
- only when \`unified_packet\` is absent.
14
-
15
- Use gramatr tools and packet data instead of stale local markdown. Prefer
16
- packet memory/search results when present. Use \`search_semantic\` only for
17
- follow-up expansion, not as a replacement for the injected packet.
18
-
19
- When the contract includes behavioral rules, directives, phase templates,
20
- ISC/quality-gate data, or formatting constraints, treat those fields as
21
- execution requirements rather than optional suggestions. Do not reconstruct
22
- them from local prose when the structured fields are present.
23
-
24
- If the server is unavailable, degrade cleanly and keep working, but do not
25
- pretend intelligence was delivered.
8
+ You have gramatr installed. Hooks inject a \`gmtr.intelligence.contract.v2\`
9
+ packet into your context on every prompt.
10
+
11
+ **Follow the packet.** It contains classification, behavioral directives,
12
+ phase templates, capability audit, quality gates, memory/search results,
13
+ agent suggestions, and enrichment (RE + ISC scaffold).
14
+
15
+ **Mandatory fields:**
16
+ - \`directives.hard_gates\` non-negotiable behavioral constraints
17
+ - \`directives.behavioral_rules\` algorithm phases, code rules, safety rules
18
+ - \`process.phase_template\` — effort-gated phase sequence
19
+ - \`process.quality_gate_config\` ISC verification rules
20
+ - \`enrichment.data.reasoning\` RE + ISC when present
21
+
22
+ **Memory:** Use gramatr MCP tools (\`search_semantic\`, \`create_entity\`,
23
+ \`add_observation\`), not local markdown files.
24
+
25
+ **Sub-agent composition:** Before launching any sub-agent for non-trivial work,
26
+ call \`gramatr_route_request\` with the task prompt first. Use the returned
27
+ packet to compose the brief: RE → task description, ISC scaffold → acceptance
28
+ criteria, orchestration.agents.composed → agent system prompt, hard_gates →
29
+ constraints.
30
+
31
+ **Effort-gated phases:**
32
+ - instant: RESPOND only
33
+ - fast: OBSERVE → RESPOND
34
+ - standard: OBSERVE → PLAN → BUILD → VERIFY
35
+ - extended+: OBSERVE → THINK → PLAN → BUILD → EXECUTE → VERIFY → LEARN
36
+
37
+ **Identity:** Read from \`~/.gramatr/settings.json\` — \`daidentity\` for your
38
+ name, \`principal\` for the user's name.
39
+
40
+ **If the server is unavailable:** Degrade cleanly and keep working. Use the
41
+ 7-phase structure. Create ISC before work. Never combine phases.
26
42
  ${CLAUDE_BLOCK_END}
27
43
  `;
28
44
  export const CODEX_GUIDANCE = `${CODEX_BLOCK_START}
@@ -31,7 +47,7 @@ export const CODEX_GUIDANCE = `${CODEX_BLOCK_START}
31
47
  ## Repo Expectations
32
48
 
33
49
  - Prefer gramatr memory and project handoff context over ad hoc local summaries.
34
- - Treat Codex hook augmentation as authoritative when a gramatr JSON intelligence block is present.
50
+ - Treat Codex hook augmentation as authoritative when a gramatr intelligence block is present.
35
51
  - If gramatr augmentation is missing, query gramatr memory before relying on stale local notes.
36
52
  - Prefer TypeScript implementations over shell scripts for client integration code unless the platform requires shell.
37
53
  - Maintain test coverage for new hook and utility logic.
@@ -42,11 +58,14 @@ export const CODEX_GUIDANCE = `${CODEX_BLOCK_START}
42
58
  - \`UserPromptSubmit\` is responsible for prompt enrichment.
43
59
  - \`SessionStart\` is responsible for session restore and continuity.
44
60
  - Hook failures must degrade cleanly and never block the user session.
45
- - Prefer \`unified_packet\` as the canonical complete contract. When it is absent, treat \`packet_1\` as mandatory deterministic input and \`packet_2\` as mandatory when required.
46
- - If \`packet_2.required === true\`, call \`gramatr_get_packet_two\` with \`enrichment_id\` before deep execution.
47
- - Consume structured JSON fields as source of truth. Do not replace packet-provided behavioral rules, ISC gates, quality gates, or format constraints with local prose summaries.
48
- - \`gramatr_route_request\` is mandatory when hook injection is missing/stale for the current user prompt.
49
- - \`search_semantic\` remains available for follow-up memory expansion, not as a replacement for packet flow.
61
+ - The contract is always \`gmtr.intelligence.contract.v2\`. There is no
62
+ \`unified_packet\`, \`packet_1\`, or \`packet_2\` the v2 packet is the only format.
63
+ - Treat \`directives.hard_gates\` and \`directives.behavioral_rules\` as mandatory.
64
+ - Follow \`process.phase_template\` for effort-gated phase sequencing.
65
+ - Use \`process.quality_gate_config\` for ISC verification.
66
+ - Consume \`enrichment.data.reasoning\` for RE and ISC when present.
67
+ - \`gramatr_route_request\` is mandatory when hook injection is missing/stale.
68
+ - \`search_semantic\` remains available for follow-up memory expansion.
50
69
  ${CODEX_BLOCK_END}
51
70
  `;
52
71
  export function buildInstallPromptSuggestion(target) {
@@ -73,28 +92,25 @@ function buildHookedPromptSuggestion(target) {
73
92
  : 'Codex';
74
93
  return `# gramatr (${platform})
75
94
 
76
- gramatr is installed locally. Hooks and the local MCP runtime usually inject
77
- the intelligence packet automatically at session start and prompt submit time.
95
+ gramatr is installed locally. Hooks inject a \`gmtr.intelligence.contract.v2\`
96
+ packet into your context at session start and on every user prompt.
78
97
 
79
- When a \`[gramatr intelligence]\` block is present, follow it as authoritative.
98
+ When a gramatr intelligence block is present, follow it as authoritative.
80
99
  When the packet is missing or clearly stale, call \`gramatr_route_request\`
81
100
  with the user's request before answering.
82
101
 
83
- Treat \`unified_packet\` as the canonical complete contract when present.
84
- Otherwise treat \`packet_1\` as the canonical fast contract envelope. All
85
- intelligence data should be consumed from JSON blocks (not prose). Read from
86
- \`unified_packet\` first, then \`packet_1.manifest\`,
87
- \`packet_1.classification\`, \`packet_1.search_results\` /
88
- \`packet_1.memory_context\`, and any packet-provided behavioral rules,
89
- quality gates, phase templates, or format constraints when present.
90
- Treat \`required_actions\` and \`contract_enforcement.hard_gates\` as mandatory.
102
+ The packet contains classification (effort, intent, confidence), behavioral
103
+ directives, phase templates, capability audit, quality gates, memory/search
104
+ results, agent suggestions, and enrichment (reverse engineering + ISC scaffold).
105
+
106
+ Treat \`directives.hard_gates\` and \`directives.behavioral_rules\` as mandatory.
107
+ Follow \`process.phase_template\` for effort-gated phase sequencing.
108
+ Use \`process.quality_gate_config\` for ISC verification.
109
+ Consume \`enrichment.data.reasoning\` for RE and ISC when present.
110
+
91
111
  If responses are wrapped with \`schema: "gmtr.tool.result.v1"\`, parse the
92
112
  \`data\` field as the canonical tool payload.
93
113
 
94
- If \`packet_1.manifest.packet_2_status === "required"\`, call
95
- \`gramatr_get_packet_two\` with \`packet_1.manifest.enrichment_id\` before
96
- proceeding. Packet 2 is mandatory whenever it is required.
97
-
98
114
  For continuity questions like "what were we doing?" or "what changed?",
99
115
  call \`gramatr_load_handoff\` first, then \`search_semantic\` for detail.
100
116
 
@@ -113,25 +129,33 @@ function buildHooklessLocalPromptSuggestion(target) {
113
129
 
114
130
  You have gramatr connected as an MCP server.
115
131
 
116
- Before responding to any user message, call \`gramatr_route_request\` with the
117
- user's request. This returns the current project context, memory, behavioral
118
- guidance, and effort classification needed for a grounded response.
132
+ **Before responding to any user message,** call \`gramatr_route_request\` with
133
+ the user's prompt. This returns a \`gmtr.intelligence.contract.v2\` packet.
134
+
135
+ **Follow the packet.** It contains classification, behavioral directives,
136
+ phase templates, capability audit, quality gates, memory/search results,
137
+ agent suggestions, and enrichment (RE + ISC scaffold).
138
+
139
+ **Mandatory fields:**
140
+ - \`directives.hard_gates\` — non-negotiable behavioral constraints
141
+ - \`directives.behavioral_rules\` — algorithm phases, code rules, safety rules
142
+ - \`process.phase_template\` — effort-gated phase sequence
143
+ - \`process.quality_gate_config\` — ISC verification rules
144
+ - \`enrichment.data.reasoning\` — RE + ISC when present
145
+
146
+ **Memory:** Use gramatr MCP tools (\`search_semantic\`, \`create_entity\`,
147
+ \`add_observation\`) as the source of truth — not local notes.
148
+
149
+ **Effort-gated phases:**
150
+ - instant: RESPOND only
151
+ - fast: OBSERVE → RESPOND
152
+ - standard: OBSERVE → PLAN → BUILD → VERIFY
153
+ - extended+: OBSERVE → THINK → PLAN → BUILD → EXECUTE → VERIFY → LEARN
119
154
 
120
- Use \`unified_packet\` as the canonical complete response when present.
121
- Otherwise use \`packet_1\` as the canonical response envelope. If
122
- \`packet_1.manifest.packet_2_status === "required"\`, call
123
- \`gramatr_get_packet_two\` with the returned \`enrichment_id\` and treat Packet 2
124
- as mandatory before full execution.
125
155
  If responses are wrapped with \`schema: "gmtr.tool.result.v1"\`, use
126
156
  \`data\` as the canonical payload.
127
- Consume packet-provided behavioral rules, ISC/quality-gate fields, and
128
- format constraints directly from the JSON contract when present.
129
- Treat \`required_actions\` and \`contract_enforcement.hard_gates\` as mandatory.
130
-
131
- For continuity questions like "what were we doing?" or "what changed?",
132
- call \`gramatr_load_handoff\` before answering, then \`search_semantic\`
133
- for additional detail.
134
157
 
135
- Use gramatr as the source of truth for memory and project state.`;
158
+ For continuity questions ("what were we doing?", "what changed?"),
159
+ call \`gramatr_load_handoff\` before answering, then \`search_semantic\`.`;
136
160
  }
137
161
  //# sourceMappingURL=instructions.js.map
@@ -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;;;;;;;;;;;;;;;;;;;;;EAqBvD,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAsBhD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA4BQ,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;;;;;;;;;;;;;;;;;;;;;;;iEAuBuB,CAAC;AAClE,CAAC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCvD,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;EAyBhD,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;;;;;;;;;;;;;;;;;;;;;;;;;uCAyBQ,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EA+BgC,CAAC;AAC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/setup/integrations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;CAClD;AAYD,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AAwEnD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAExE;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAEvE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,OAAO,EAAE,gBAAgB,GACxB,gBAAgB,CAQlB;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAalE;AAED,wBAAgB,yBAAyB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAIhF"}
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/setup/integrations.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;CAClD;AAYD,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AAwEnD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAExE;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAEvE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,OAAO,EAAE,gBAAgB,GACxB,gBAAgB,CAyBlB;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAalE;AAED,wBAAgB,yBAAyB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAIhF"}