@aligndottech/cli 0.7.1 → 0.8.1
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/README.md +23 -7
- package/dist/commands/check.d.ts +17 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +118 -30
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +16 -0
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.js +1 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/lib/agent-rules.d.ts +4 -0
- package/dist/lib/agent-rules.d.ts.map +1 -1
- package/dist/lib/agent-rules.js +264 -1
- package/dist/lib/agent-rules.js.map +1 -1
- package/dist/lib/decision-links.d.ts +31 -0
- package/dist/lib/decision-links.d.ts.map +1 -0
- package/dist/lib/decision-links.js +56 -0
- package/dist/lib/decision-links.js.map +1 -0
- package/dist/lib/gateway-client.d.ts +9 -2
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +5 -1
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/hook-payload.d.ts +1 -0
- package/dist/lib/hook-payload.d.ts.map +1 -1
- package/dist/lib/hook-payload.js +107 -5
- package/dist/lib/hook-payload.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts +17 -0
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +41 -4
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/mcp-setup.d.ts +2 -1
- package/dist/lib/mcp-setup.d.ts.map +1 -1
- package/dist/lib/mcp-setup.js +23 -2
- package/dist/lib/mcp-setup.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/hook-payload.js
CHANGED
|
@@ -1,7 +1,109 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
1
|
+
const asRecord = (v) => v !== null && typeof v === 'object' && !Array.isArray(v) ? v : null;
|
|
2
|
+
// pi's edit tool takes edits[{oldText,newText}] (and still accepts a legacy top-level
|
|
3
|
+
// oldText/newText pair - see prepareEditArguments in pi's core/tools/edit.ts). Rename
|
|
4
|
+
// into the canonical shape proposedChangeText() reads.
|
|
5
|
+
function fromPiInput(input) {
|
|
6
|
+
const out = {};
|
|
7
|
+
if (typeof input['path'] === 'string')
|
|
8
|
+
out.file_path = input['path'];
|
|
9
|
+
if (typeof input['content'] === 'string')
|
|
10
|
+
out.content = input['content'];
|
|
11
|
+
if (Array.isArray(input['edits'])) {
|
|
12
|
+
out.edits = input['edits'].map((e) => ({
|
|
13
|
+
old_string: typeof e?.['oldText'] === 'string' ? e['oldText'] : undefined,
|
|
14
|
+
new_string: typeof e?.['newText'] === 'string' ? e['newText'] : undefined,
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
else if (typeof input['oldText'] === 'string' || typeof input['newText'] === 'string') {
|
|
18
|
+
if (typeof input['oldText'] === 'string')
|
|
19
|
+
out.old_string = input['oldText'];
|
|
20
|
+
if (typeof input['newText'] === 'string')
|
|
21
|
+
out.new_string = input['newText'];
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
// OpenCode passes each tool's own parameter names straight through to the plugin.
|
|
26
|
+
// Taken from packages/opencode/src/tool/*.ts:
|
|
27
|
+
// edit {filePath, oldString, newString, replaceAll?}
|
|
28
|
+
// write {content, filePath}
|
|
29
|
+
// apply_patch {patchText} - one blob describing the whole change
|
|
30
|
+
function fromOpenCodeArgs(args) {
|
|
31
|
+
const out = {};
|
|
32
|
+
if (typeof args['filePath'] === 'string')
|
|
33
|
+
out.file_path = args['filePath'];
|
|
34
|
+
if (typeof args['content'] === 'string')
|
|
35
|
+
out.content = args['content'];
|
|
36
|
+
// The patch text IS the proposed change, so it maps to `content` - the first field
|
|
37
|
+
// proposedChangeText() reads.
|
|
38
|
+
if (typeof args['patchText'] === 'string')
|
|
39
|
+
out.content = args['patchText'];
|
|
40
|
+
if (typeof args['oldString'] === 'string')
|
|
41
|
+
out.old_string = args['oldString'];
|
|
42
|
+
if (typeof args['newString'] === 'string')
|
|
43
|
+
out.new_string = args['newString'];
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
// Normalize whichever host's hook payload arrived on stdin into the canonical
|
|
47
|
+
// HookPayload, so runAdvisory never learns which agent it is serving. Every field name
|
|
48
|
+
// below comes from that host's published schema:
|
|
49
|
+
// Claude Code {hook_event_name, tool_name, tool_input} - already canonical
|
|
50
|
+
// pi {type:'tool_call'|'tool_result', toolName, input} - extension events
|
|
51
|
+
// Gemini CLI {tool_name, tool_input, tool_response?} - AfterTool is the
|
|
52
|
+
// one carrying tool_response, which is what derives the event
|
|
53
|
+
// Cursor {hook_event_name:'afterFileEdit', file_path, edits} - fields sit at the
|
|
54
|
+
// TOP level rather than under tool_input
|
|
55
|
+
// Returns null when nothing tool-shaped is present, so callers fall back rather than
|
|
56
|
+
// checking an empty change.
|
|
57
|
+
export function normalizeHookPayload(raw) {
|
|
58
|
+
const p = asRecord(raw);
|
|
59
|
+
if (!p)
|
|
60
|
+
return null;
|
|
61
|
+
// pi: the event type is explicit on the payload.
|
|
62
|
+
if (p['type'] === 'tool_call' || p['type'] === 'tool_result') {
|
|
63
|
+
const input = asRecord(p['input']) ?? {};
|
|
64
|
+
return {
|
|
65
|
+
hook_event_name: p['type'] === 'tool_call' ? 'PreToolUse' : 'PostToolUse',
|
|
66
|
+
tool_name: typeof p['toolName'] === 'string' ? p['toolName'] : undefined,
|
|
67
|
+
tool_input: fromPiInput(input),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// OpenCode: the plugin hook name is the event.
|
|
71
|
+
if (p['type'] === 'tool.execute.before' || p['type'] === 'tool.execute.after') {
|
|
72
|
+
return {
|
|
73
|
+
hook_event_name: p['type'] === 'tool.execute.before' ? 'PreToolUse' : 'PostToolUse',
|
|
74
|
+
tool_name: typeof p['tool'] === 'string' ? p['tool'] : undefined,
|
|
75
|
+
tool_input: fromOpenCodeArgs(asRecord(p['args']) ?? {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Cursor: afterFileEdit is observational and flat. (There is no beforeFileEdit.)
|
|
79
|
+
if (p['hook_event_name'] === 'afterFileEdit') {
|
|
80
|
+
const tool_input = {};
|
|
81
|
+
if (typeof p['file_path'] === 'string')
|
|
82
|
+
tool_input.file_path = p['file_path'];
|
|
83
|
+
if (Array.isArray(p['edits']))
|
|
84
|
+
tool_input.edits = p['edits'];
|
|
85
|
+
return { hook_event_name: 'PostToolUse', tool_name: 'Edit', tool_input };
|
|
86
|
+
}
|
|
87
|
+
// Claude Code / Gemini CLI: both already speak tool_name + tool_input.
|
|
88
|
+
if (p['tool_name'] !== undefined || p['tool_input'] !== undefined) {
|
|
89
|
+
const event = typeof p['hook_event_name'] === 'string'
|
|
90
|
+
? p['hook_event_name']
|
|
91
|
+
: p['tool_response'] !== undefined
|
|
92
|
+
? 'PostToolUse'
|
|
93
|
+
: 'PreToolUse';
|
|
94
|
+
return {
|
|
95
|
+
hook_event_name: event,
|
|
96
|
+
tool_name: typeof p['tool_name'] === 'string' ? p['tool_name'] : undefined,
|
|
97
|
+
tool_input: (asRecord(p['tool_input']) ?? {}),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
// Read and parse the JSON payload the host agent pipes to a hook command on stdin,
|
|
103
|
+
// normalizing whichever shape it sent (see normalizeHookPayload). Returns null when
|
|
104
|
+
// there is no usable payload - a TTY (manual `align check --advisory` run), empty
|
|
105
|
+
// stdin, invalid JSON, or nothing tool-shaped - so callers fall back to their
|
|
106
|
+
// non-hook behaviour.
|
|
5
107
|
export async function readHookPayload(stream = process.stdin) {
|
|
6
108
|
if (stream.isTTY)
|
|
7
109
|
return null;
|
|
@@ -9,7 +111,7 @@ export async function readHookPayload(stream = process.stdin) {
|
|
|
9
111
|
if (!raw.trim())
|
|
10
112
|
return null;
|
|
11
113
|
try {
|
|
12
|
-
return JSON.parse(raw);
|
|
114
|
+
return normalizeHookPayload(JSON.parse(raw));
|
|
13
115
|
}
|
|
14
116
|
catch {
|
|
15
117
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-payload.js","sourceRoot":"","sources":["../../src/lib/hook-payload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hook-payload.js","sourceRoot":"","sources":["../../src/lib/hook-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import type { AlignmentResult, SearchResults } from './gateway-client.js';
|
|
2
2
|
export declare const CONFLICT_THRESHOLD = 0.65;
|
|
3
|
+
/**
|
|
4
|
+
* Relevance floor for align_ask / align_search.
|
|
5
|
+
*
|
|
6
|
+
* Was an inline 0.1, the only unnamed threshold in this file and less than a quarter of
|
|
7
|
+
* its neighbours. It let align_ask answer "what happens when the brain service is down"
|
|
8
|
+
* with two unrelated decisions at 0.18 and 0.14 - noise the agent had to recognise by
|
|
9
|
+
* reading the decimals itself, and an audience cannot.
|
|
10
|
+
*
|
|
11
|
+
* 0.25 matches the gateway's own /decisions/smart-search floor, so the same question gets
|
|
12
|
+
* the same relevance bar in local and cloud mode. Lower than the 0.45 used for relatedness
|
|
13
|
+
* on purpose: search is a human asking a natural-language question, where a looser match is
|
|
14
|
+
* still worth showing, while relatedness is machinery acting on its own.
|
|
15
|
+
*
|
|
16
|
+
* An honest empty result is the point. "The graph has nothing on this" is a better answer
|
|
17
|
+
* than two wrong decisions, because the caller can act on it.
|
|
18
|
+
*/
|
|
19
|
+
export declare const SEARCH_THRESHOLD = 0.25;
|
|
3
20
|
export declare const RELATES_THRESHOLD = 0.45;
|
|
4
21
|
export declare const DRIFT_THRESHOLD = 0.5;
|
|
5
22
|
export declare function createLocalGatewayClient(dbPath: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE1E,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAGtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM;IAsDnD,2FAA2F;;;;;;;2BAS9D,MAAM;;;;;;;;uBAKV,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;;;;;;;;;;;2BAwB/E,MAAM,mBAAe,OAAO,CAAC,aAAa,CAAC;yBAgC7C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;2BA0FlD,MAAM,WAAW,MAAM,gBAAgB,MAAM;;;;;;;;;;;0BAQ9C,MAAM;;;;;;;EAYrC;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
import { createLocalDb } from './local-db.js';
|
|
2
2
|
import { cosineSimilarity, getEmbedding } from './local-embeddings.js';
|
|
3
3
|
import { classifyRelationship } from './local-relationship-classifier.js';
|
|
4
|
+
import { citationFor, repositoryOf } from './decision-links.js';
|
|
4
5
|
export const CONFLICT_THRESHOLD = 0.65;
|
|
6
|
+
/**
|
|
7
|
+
* Relevance floor for align_ask / align_search.
|
|
8
|
+
*
|
|
9
|
+
* Was an inline 0.1, the only unnamed threshold in this file and less than a quarter of
|
|
10
|
+
* its neighbours. It let align_ask answer "what happens when the brain service is down"
|
|
11
|
+
* with two unrelated decisions at 0.18 and 0.14 - noise the agent had to recognise by
|
|
12
|
+
* reading the decimals itself, and an audience cannot.
|
|
13
|
+
*
|
|
14
|
+
* 0.25 matches the gateway's own /decisions/smart-search floor, so the same question gets
|
|
15
|
+
* the same relevance bar in local and cloud mode. Lower than the 0.45 used for relatedness
|
|
16
|
+
* on purpose: search is a human asking a natural-language question, where a looser match is
|
|
17
|
+
* still worth showing, while relatedness is machinery acting on its own.
|
|
18
|
+
*
|
|
19
|
+
* An honest empty result is the point. "The graph has nothing on this" is a better answer
|
|
20
|
+
* than two wrong decisions, because the caller can act on it.
|
|
21
|
+
*/
|
|
22
|
+
export const SEARCH_THRESHOLD = 0.25;
|
|
5
23
|
// Embeddings flag a decision as a related CANDIDATE at/above this score; the
|
|
6
24
|
// relationship type is then assigned lazily by the LLM classifier.
|
|
7
25
|
export const RELATES_THRESHOLD = 0.45;
|
|
@@ -86,13 +104,32 @@ export function createLocalGatewayClient(dbPath) {
|
|
|
86
104
|
},
|
|
87
105
|
async searchDecisions(query, limit = 10) {
|
|
88
106
|
const embedding = await getEmbedding(query);
|
|
89
|
-
const similar = await findSimilar(embedding, limit,
|
|
107
|
+
const similar = await findSimilar(embedding, limit, SEARCH_THRESHOLD);
|
|
90
108
|
const results = similar
|
|
91
109
|
.map(s => {
|
|
92
110
|
const row = db.getDecisionById(s.decisionId);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
111
|
+
if (!row)
|
|
112
|
+
return null;
|
|
113
|
+
// source_url and platform were read from SQLite here and then discarded, so
|
|
114
|
+
// nothing downstream could say which repository a decision came from. The
|
|
115
|
+
// hosted connector has derived both since #1441; this is that parity.
|
|
116
|
+
const repository = repositoryOf(row.sourceUrl);
|
|
117
|
+
const cite = citationFor(row.sourceUrl);
|
|
118
|
+
return {
|
|
119
|
+
id: row.id,
|
|
120
|
+
title: row.title,
|
|
121
|
+
summary: row.summary,
|
|
122
|
+
status: 'active',
|
|
123
|
+
similarity: s.score,
|
|
124
|
+
created_at: row.createdAt,
|
|
125
|
+
platform: row.platform,
|
|
126
|
+
...(row.sourceUrl ? { source_url: row.sourceUrl } : {}),
|
|
127
|
+
...(repository ? { repository } : {}),
|
|
128
|
+
...(cite ? { cite } : {}),
|
|
129
|
+
// No decision_url: a local-embedded decision lives only in this machine's
|
|
130
|
+
// SQLite file, so any Align URL built for it would 404 wherever it pointed.
|
|
131
|
+
// Absent beats fabricated - a wrong link looks clickable.
|
|
132
|
+
};
|
|
96
133
|
})
|
|
97
134
|
.filter((d) => d !== null);
|
|
98
135
|
return { results, count: results.length, strategy: 'semantic' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/mcp-setup.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export type McpFormat = 'mcpServers' | 'vscode' | 'zed' | 'codex';
|
|
1
|
+
export type McpFormat = 'mcpServers' | 'vscode' | 'zed' | 'codex' | 'pi';
|
|
2
2
|
export interface EditorTarget {
|
|
3
3
|
name: string;
|
|
4
4
|
configPath: string;
|
|
5
5
|
format: McpFormat;
|
|
6
6
|
}
|
|
7
|
+
export declare function alignServerEntry(format: McpFormat, env?: string): Record<string, unknown>;
|
|
7
8
|
export declare function detectEditors(): EditorTarget[];
|
|
8
9
|
export declare function writeMcpConfig(target: EditorTarget, env?: string): void;
|
|
9
10
|
//# sourceMappingURL=mcp-setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;CACnB;AAUD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzF;AAmBD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CA4E9C;AA8ED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAMvE"}
|
package/dist/lib/mcp-setup.js
CHANGED
|
@@ -5,14 +5,22 @@ function alignArgs(env) {
|
|
|
5
5
|
return env ? ['mcp', '--env', env] : ['mcp'];
|
|
6
6
|
}
|
|
7
7
|
// The per-format entry shape for the `align` server. VS Code requires `type`;
|
|
8
|
-
// Zed silently drops entries without `source: "custom"`.
|
|
9
|
-
|
|
8
|
+
// Zed silently drops entries without `source: "custom"`. Exported so the shared
|
|
9
|
+
// project-local .mcp.json (agent-rules.ts) builds the entry from here rather than
|
|
10
|
+
// keeping a second copy that can drift from this one.
|
|
11
|
+
export function alignServerEntry(format, env) {
|
|
10
12
|
const args = alignArgs(env);
|
|
11
13
|
switch (format) {
|
|
12
14
|
case 'vscode':
|
|
13
15
|
return { type: 'stdio', command: 'align', args };
|
|
14
16
|
case 'zed':
|
|
15
17
|
return { source: 'custom', command: 'align', args };
|
|
18
|
+
case 'pi':
|
|
19
|
+
// pi's MCP adapter is lazy by default: every server hides behind one proxy tool
|
|
20
|
+
// the agent has to search before it can call anything. That directly undercuts
|
|
21
|
+
// ALIGN_MCP_INSTRUCTIONS' "call align_check_alignment BEFORE writing code", so
|
|
22
|
+
// ask for the tools to be registered directly.
|
|
23
|
+
return { command: 'align', args, directTools: true };
|
|
16
24
|
default:
|
|
17
25
|
return { command: 'align', args };
|
|
18
26
|
}
|
|
@@ -84,6 +92,19 @@ export function detectEditors() {
|
|
|
84
92
|
if (existsSync(path.join(home, '.codex'))) {
|
|
85
93
|
found.push({ name: 'Codex', configPath: path.join(home, '.codex', 'config.toml'), format: 'codex' });
|
|
86
94
|
}
|
|
95
|
+
// pi (pi.dev) - MCP comes from the `pi-mcp-adapter` package, which reads the Pi agent
|
|
96
|
+
// dir (~/.pi/agent by default, relocatable via $PI_CODING_AGENT_DIR). Write the Pi-owned
|
|
97
|
+
// override rather than a shared file: it is where adapter-only settings like directTools
|
|
98
|
+
// belong, and it never rewrites another host's config.
|
|
99
|
+
const piAgentDir = process.env['PI_CODING_AGENT_DIR'];
|
|
100
|
+
const piRoot = piAgentDir ?? path.join(home, '.pi');
|
|
101
|
+
if (existsSync(piRoot)) {
|
|
102
|
+
found.push({
|
|
103
|
+
name: 'pi',
|
|
104
|
+
configPath: path.join(piAgentDir ?? path.join(home, '.pi', 'agent'), 'mcp.json'),
|
|
105
|
+
format: 'pi',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
87
108
|
// Gemini CLI (~/.gemini/settings.json, `mcpServers`)
|
|
88
109
|
if (existsSync(path.join(home, '.gemini'))) {
|
|
89
110
|
found.push({ name: 'Gemini CLI', configPath: path.join(home, '.gemini', 'settings.json'), format: 'mcpServers' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/lib/mcp-setup.ts"],"names":[],"mappings":"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"}
|