@gramatr/mcp 0.8.9 → 0.8.11

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 (73) hide show
  1. package/dist/bin/build-mcpb.d.ts +8 -2
  2. package/dist/bin/build-mcpb.d.ts.map +1 -1
  3. package/dist/bin/build-mcpb.js +7 -7
  4. package/dist/bin/build-mcpb.js.map +1 -1
  5. package/dist/bin/gramatr-mcp.d.ts.map +1 -1
  6. package/dist/bin/gramatr-mcp.js +2 -1
  7. package/dist/bin/gramatr-mcp.js.map +1 -1
  8. package/dist/bin/setup-config-io.d.ts +26 -0
  9. package/dist/bin/setup-config-io.d.ts.map +1 -0
  10. package/dist/bin/setup-config-io.js +131 -0
  11. package/dist/bin/setup-config-io.js.map +1 -0
  12. package/dist/bin/setup-legacy.d.ts +9 -0
  13. package/dist/bin/setup-legacy.d.ts.map +1 -0
  14. package/dist/bin/setup-legacy.js +289 -0
  15. package/dist/bin/setup-legacy.js.map +1 -0
  16. package/dist/bin/setup-platforms.d.ts +20 -0
  17. package/dist/bin/setup-platforms.d.ts.map +1 -0
  18. package/dist/bin/setup-platforms.js +180 -0
  19. package/dist/bin/setup-platforms.js.map +1 -0
  20. package/dist/bin/setup-shared.d.ts +26 -0
  21. package/dist/bin/setup-shared.d.ts.map +1 -0
  22. package/dist/bin/setup-shared.js +39 -0
  23. package/dist/bin/setup-shared.js.map +1 -0
  24. package/dist/bin/setup.d.ts +14 -68
  25. package/dist/bin/setup.d.ts.map +1 -1
  26. package/dist/bin/setup.js +33 -627
  27. package/dist/bin/setup.js.map +1 -1
  28. package/dist/hooks/generated/hook-timeouts.d.ts +13 -1
  29. package/dist/hooks/generated/hook-timeouts.d.ts.map +1 -1
  30. package/dist/hooks/generated/hook-timeouts.js +13 -1
  31. package/dist/hooks/generated/hook-timeouts.js.map +1 -1
  32. package/dist/hooks/generated/schema-constants.d.ts +23 -9
  33. package/dist/hooks/generated/schema-constants.d.ts.map +1 -1
  34. package/dist/hooks/generated/schema-constants.js +26 -9
  35. package/dist/hooks/generated/schema-constants.js.map +1 -1
  36. package/dist/hooks/input-validator.d.ts +5 -0
  37. package/dist/hooks/input-validator.d.ts.map +1 -1
  38. package/dist/hooks/input-validator.js +113 -1
  39. package/dist/hooks/input-validator.js.map +1 -1
  40. package/dist/hooks/lib/gramatr-hook-utils.d.ts.map +1 -1
  41. package/dist/hooks/lib/gramatr-hook-utils.js +2 -2
  42. package/dist/hooks/lib/gramatr-hook-utils.js.map +1 -1
  43. package/dist/hooks/lib/hook-state.d.ts.map +1 -1
  44. package/dist/hooks/lib/hook-state.js +29 -28
  45. package/dist/hooks/lib/hook-state.js.map +1 -1
  46. package/dist/hooks/lib/routing.js +1 -1
  47. package/dist/hooks/lib/routing.js.map +1 -1
  48. package/dist/hooks/lib/types.d.ts +0 -1
  49. package/dist/hooks/lib/types.d.ts.map +1 -1
  50. package/dist/hooks/user-prompt-submit.js +1 -1
  51. package/dist/hooks/user-prompt-submit.js.map +1 -1
  52. package/dist/proxy/remote-client.d.ts.map +1 -1
  53. package/dist/proxy/remote-client.js +2 -1
  54. package/dist/proxy/remote-client.js.map +1 -1
  55. package/dist/setup/examples/gramatr-opencode-plugin.js +5 -5
  56. package/dist/setup/examples/gramatr-opencode-plugin.js.map +1 -1
  57. package/dist/setup/generated/instruction-blocks.d.ts +27 -0
  58. package/dist/setup/generated/instruction-blocks.d.ts.map +1 -0
  59. package/dist/setup/generated/instruction-blocks.js +27 -0
  60. package/dist/setup/generated/instruction-blocks.js.map +1 -0
  61. package/dist/setup/generated/platform-hooks.d.ts +1 -1
  62. package/dist/setup/generated/platform-hooks.d.ts.map +1 -1
  63. package/dist/setup/generated/platform-hooks.js +37 -6
  64. package/dist/setup/generated/platform-hooks.js.map +1 -1
  65. package/dist/setup/instructions.d.ts.map +1 -1
  66. package/dist/setup/instructions.js +9 -46
  67. package/dist/setup/instructions.js.map +1 -1
  68. package/dist/setup/targets.d.ts +2 -2
  69. package/dist/setup/targets.d.ts.map +1 -1
  70. package/dist/setup/targets.js +5 -6
  71. package/dist/setup/targets.js.map +1 -1
  72. package/package.json +3 -2
  73. package/scripts/postinstall.mjs +54 -6
@@ -0,0 +1,289 @@
1
+ /**
2
+ * setup-legacy — Legacy migration: cleanup of pre-rebrand artifacts.
3
+ *
4
+ * Extracted from setup.ts for SRP: all legacy detection, sanitization,
5
+ * managed-block stripping, and clean-install logic.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, rmSync, readdirSync, statSync, lstatSync, readlinkSync, unlinkSync, } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ import { getClaudeDesktopConfigPath, getChatgptDesktopConfigPath, getCursorConfigPath, getGeminiHooksPath, getGeminiManifestPath, getVscodeConfigPath, getWindsurfConfigPath, } from '../setup/targets.js';
10
+ import { readJsonFile, escapeRegExp, getClaudeConfigPath, getClaudeMarkdownPath, getClaudeSettingsPath, getCodexAgentsPath, getCodexHooksPath, HOME, } from './setup-config-io.js';
11
+ const LEGACY_HOOK_BASENAMES = [
12
+ 'LoadContext.hook.ts',
13
+ 'SecurityValidator.hook.ts',
14
+ 'RatingCapture.hook.ts',
15
+ 'VoiceGate.hook.ts',
16
+ 'AutoWorkCreation.hook.ts',
17
+ 'WorkCompletionLearning.hook.ts',
18
+ 'RelationshipMemory.hook.ts',
19
+ 'SessionSummary.hook.ts',
20
+ 'UpdateCounts.hook.ts',
21
+ 'IntegrityCheck.hook.ts',
22
+ ];
23
+ const LEGACY_MCP_KEY_PATTERNS = [/^aios/i, /^pai$/i, /^pai[-_]/i, /^fabric/i];
24
+ const LEGACY_CLAUDE_ARTIFACT_PATTERNS = [
25
+ /^pai[-_]/i,
26
+ /^pai$/i,
27
+ /^fabric[-_]/i,
28
+ /^fabric$/i,
29
+ /^aios[-_]/i,
30
+ /^aios$/i,
31
+ /^extract[-_]?wisdom/i,
32
+ /^pattern[-_]/i,
33
+ /^official[-_]?pattern/i,
34
+ /^becreative$/i,
35
+ /^beexpert$/i,
36
+ ];
37
+ const LEGACY_MANAGED_BLOCK_MARKERS = [
38
+ { start: '<!-- AIOS-START -->', end: '<!-- AIOS-END -->' },
39
+ { start: '<!-- PAI-START -->', end: '<!-- PAI-END -->' },
40
+ { start: '<!-- FABRIC-START -->', end: '<!-- FABRIC-END -->' },
41
+ { start: '<!-- GMTR-START -->', end: '<!-- GMTR-END -->' },
42
+ ];
43
+ function matchesLegacyClaudeArtifact(name) {
44
+ const stem = name.replace(/\.md$/i, '');
45
+ return LEGACY_CLAUDE_ARTIFACT_PATTERNS.some((pattern) => pattern.test(stem));
46
+ }
47
+ function sanitizeLegacyMcpServers(raw) {
48
+ if (!raw.mcpServers || typeof raw.mcpServers !== 'object')
49
+ return raw;
50
+ const servers = raw.mcpServers;
51
+ const next = {};
52
+ for (const [key, value] of Object.entries(servers)) {
53
+ if (LEGACY_MCP_KEY_PATTERNS.some((pattern) => pattern.test(key)))
54
+ continue;
55
+ next[key] = value;
56
+ }
57
+ return { ...raw, mcpServers: next };
58
+ }
59
+ function stripManagedBlock(content, startMarker, endMarker) {
60
+ const pattern = new RegExp(`${escapeRegExp(startMarker)}[\\s\\S]*?${escapeRegExp(endMarker)}\\n?`, 'gm');
61
+ return content.replace(pattern, '').trimEnd() + '\n';
62
+ }
63
+ function isLegacyHookCommand(command) {
64
+ if (command.includes('/.claude/hooks/'))
65
+ return true;
66
+ if (command.includes('/aios-v2-client/'))
67
+ return true;
68
+ if (command.includes('/fabric/'))
69
+ return true;
70
+ if (command.includes('/pai/'))
71
+ return true;
72
+ return LEGACY_HOOK_BASENAMES.some((basename) => command.includes(`/${basename}`));
73
+ }
74
+ function sanitizeHookEventArray(value) {
75
+ if (!Array.isArray(value))
76
+ return value;
77
+ return value
78
+ .map((entry) => {
79
+ if (!entry || typeof entry !== 'object')
80
+ return entry;
81
+ const commands = entry.hooks;
82
+ if (!Array.isArray(commands))
83
+ return entry;
84
+ const filtered = commands.filter((cmd) => {
85
+ const command = typeof cmd?.command === 'string' ? cmd.command : '';
86
+ return !command || !isLegacyHookCommand(command);
87
+ });
88
+ if (filtered.length === 0)
89
+ return null;
90
+ return { ...entry, hooks: filtered };
91
+ })
92
+ .filter(Boolean);
93
+ }
94
+ function sanitizeHookFile(hookFile) {
95
+ const hooksRoot = hookFile.hooks;
96
+ if (!hooksRoot || typeof hooksRoot !== 'object')
97
+ return hookFile;
98
+ const nextHooks = { ...hooksRoot };
99
+ for (const [eventName, value] of Object.entries(nextHooks)) {
100
+ nextHooks[eventName] = sanitizeHookEventArray(value);
101
+ }
102
+ return { ...hookFile, hooks: nextHooks };
103
+ }
104
+ function removeDirectoryIfExists(path, dryRun) {
105
+ if (!existsSync(path))
106
+ return;
107
+ if (dryRun) {
108
+ process.stderr.write(`[gramatr-mcp] clean-install dry-run: would remove ${path}\n`);
109
+ return;
110
+ }
111
+ rmSync(path, { recursive: true, force: true });
112
+ process.stderr.write(`[gramatr-mcp] clean-install: removed ${path}\n`);
113
+ }
114
+ function removeFileIfExists(path, dryRun) {
115
+ if (!existsSync(path))
116
+ return;
117
+ if (dryRun) {
118
+ process.stderr.write(`[gramatr-mcp] clean-install dry-run: would remove ${path}\n`);
119
+ return;
120
+ }
121
+ rmSync(path, { force: true });
122
+ process.stderr.write(`[gramatr-mcp] clean-install: removed ${path}\n`);
123
+ }
124
+ export function cleanLegacyClaudeArtifacts(dryRun) {
125
+ process.stderr.write('[gramatr-mcp] clean-install: removing legacy pre-rebrand artifacts\n');
126
+ const legacyDirs = [
127
+ join(HOME, 'aios-v2-client'),
128
+ join(HOME, '.claude', 'hooks'),
129
+ ];
130
+ for (const dir of legacyDirs)
131
+ removeDirectoryIfExists(dir, dryRun);
132
+ const commandsDir = join(HOME, '.claude', 'commands');
133
+ if (existsSync(commandsDir)) {
134
+ try {
135
+ for (const entry of readdirSync(commandsDir)) {
136
+ if (!entry.endsWith('.md'))
137
+ continue;
138
+ if (!matchesLegacyClaudeArtifact(entry))
139
+ continue;
140
+ removeFileIfExists(join(commandsDir, entry), dryRun);
141
+ }
142
+ }
143
+ catch {
144
+ // non-critical
145
+ }
146
+ }
147
+ const skillsDir = join(HOME, '.claude', 'skills');
148
+ if (existsSync(skillsDir)) {
149
+ try {
150
+ for (const entry of readdirSync(skillsDir)) {
151
+ const path = join(skillsDir, entry);
152
+ if (!statSync(path).isDirectory())
153
+ continue;
154
+ if (!matchesLegacyClaudeArtifact(entry))
155
+ continue;
156
+ removeDirectoryIfExists(path, dryRun);
157
+ }
158
+ }
159
+ catch {
160
+ // non-critical
161
+ }
162
+ }
163
+ const clientHooksDir = join(HOME, '.gramatr', 'hooks');
164
+ if (existsSync(clientHooksDir)) {
165
+ for (const basename of LEGACY_HOOK_BASENAMES) {
166
+ removeFileIfExists(join(clientHooksDir, basename), dryRun);
167
+ }
168
+ try {
169
+ for (const entry of readdirSync(clientHooksDir)) {
170
+ if (!entry.endsWith('.sh'))
171
+ continue;
172
+ removeFileIfExists(join(clientHooksDir, entry), dryRun);
173
+ }
174
+ }
175
+ catch {
176
+ // non-critical
177
+ }
178
+ }
179
+ }
180
+ function sanitizeLegacyMcpServersInFile(path, dryRun) {
181
+ const current = readJsonFile(path, {});
182
+ const next = sanitizeLegacyMcpServers(current);
183
+ if (JSON.stringify(next) === JSON.stringify(current))
184
+ return;
185
+ if (dryRun) {
186
+ process.stderr.write(`[gramatr-mcp] clean-install dry-run: would sanitize legacy mcpServers in ${path}\n`);
187
+ return;
188
+ }
189
+ mkdirSync(dirname(path), { recursive: true });
190
+ writeFileSync(path, JSON.stringify(next, null, 2) + '\n', 'utf8');
191
+ process.stderr.write(`[gramatr-mcp] clean-install: sanitized legacy mcpServers in ${path}\n`);
192
+ }
193
+ function sanitizeHookFileAtPath(path, dryRun, label) {
194
+ const current = readJsonFile(path, {});
195
+ const next = sanitizeHookFile(current);
196
+ if (JSON.stringify(next) === JSON.stringify(current))
197
+ return;
198
+ if (dryRun) {
199
+ process.stderr.write(`[gramatr-mcp] clean-install dry-run: would sanitize legacy hooks in ${path}\n`);
200
+ return;
201
+ }
202
+ mkdirSync(dirname(path), { recursive: true });
203
+ writeFileSync(path, JSON.stringify(next, null, 2) + '\n', 'utf8');
204
+ process.stderr.write(`[gramatr-mcp] clean-install: sanitized legacy hooks (${label}) in ${path}\n`);
205
+ }
206
+ function stripLegacyManagedBlocks(path, dryRun) {
207
+ if (!existsSync(path))
208
+ return;
209
+ const current = readFileSync(path, 'utf8');
210
+ let next = current;
211
+ for (const marker of LEGACY_MANAGED_BLOCK_MARKERS) {
212
+ next = stripManagedBlock(next, marker.start, marker.end);
213
+ }
214
+ if (next === current)
215
+ return;
216
+ if (dryRun) {
217
+ process.stderr.write(`[gramatr-mcp] clean-install dry-run: would strip legacy managed blocks in ${path}\n`);
218
+ return;
219
+ }
220
+ writeFileSync(path, next, 'utf8');
221
+ process.stderr.write(`[gramatr-mcp] clean-install: stripped legacy managed blocks in ${path}\n`);
222
+ }
223
+ function cleanAllInstallTargets(dryRun) {
224
+ sanitizeLegacyMcpServersInFile(getClaudeConfigPath(), dryRun);
225
+ sanitizeLegacyMcpServersInFile(join(HOME, '.claude', 'mcp.json'), dryRun);
226
+ sanitizeLegacyMcpServersInFile(getClaudeDesktopConfigPath(HOME), dryRun);
227
+ sanitizeLegacyMcpServersInFile(getChatgptDesktopConfigPath(HOME), dryRun);
228
+ sanitizeLegacyMcpServersInFile(getCursorConfigPath(HOME), dryRun);
229
+ sanitizeLegacyMcpServersInFile(getWindsurfConfigPath(HOME), dryRun);
230
+ sanitizeLegacyMcpServersInFile(getVscodeConfigPath(HOME), dryRun);
231
+ sanitizeLegacyMcpServersInFile(getGeminiManifestPath(HOME), dryRun);
232
+ sanitizeHookFileAtPath(getClaudeSettingsPath(), dryRun, 'claude');
233
+ sanitizeHookFileAtPath(getCodexHooksPath(), dryRun, 'codex');
234
+ sanitizeHookFileAtPath(getGeminiHooksPath(HOME), dryRun, 'gemini');
235
+ stripLegacyManagedBlocks(getClaudeMarkdownPath(), dryRun);
236
+ stripLegacyManagedBlocks(getCodexAgentsPath(), dryRun);
237
+ }
238
+ function cleanLegacyHomeNodeShims(dryRun) {
239
+ const candidates = new Set();
240
+ candidates.add(join(HOME, '.local', 'bin', 'gramatr-mcp'));
241
+ candidates.add(join(HOME, '.local', 'bin', 'gramatr'));
242
+ candidates.add(join(HOME, 'bin', 'gramatr-mcp'));
243
+ candidates.add(join(HOME, 'bin', 'gramatr'));
244
+ candidates.add(join(HOME, 'bin', 'gramatr-mac'));
245
+ for (const shimPath of candidates) {
246
+ if (!existsSync(shimPath))
247
+ continue;
248
+ try {
249
+ let stale = false;
250
+ if (lstatSync(shimPath).isSymbolicLink()) {
251
+ const target = readlinkSync(shimPath);
252
+ if (target.includes('aios-v2-client')
253
+ || target.includes('/packages/client/bin/gramatr')
254
+ || target.includes('/fabric/')
255
+ || target.includes('/pai/')) {
256
+ stale = true;
257
+ }
258
+ }
259
+ else {
260
+ const body = readFileSync(shimPath, 'utf8');
261
+ if (body.includes('aios-v2-client')
262
+ || body.includes('/packages/client/bin/gramatr')
263
+ || body.includes('/fabric/')
264
+ || body.includes('/pai/')) {
265
+ stale = true;
266
+ }
267
+ }
268
+ if (!stale)
269
+ continue;
270
+ if (dryRun) {
271
+ process.stderr.write(`[gramatr-mcp] clean-install dry-run: would remove stale shim ${shimPath}\n`);
272
+ }
273
+ else {
274
+ unlinkSync(shimPath);
275
+ process.stderr.write(`[gramatr-mcp] clean-install: removed stale shim ${shimPath}\n`);
276
+ }
277
+ }
278
+ catch {
279
+ // non-critical
280
+ }
281
+ }
282
+ }
283
+ export function runCleanInstall(dryRun) {
284
+ process.stderr.write('[gramatr-mcp] clean-install: running global legacy cleanup across known install targets\n');
285
+ cleanAllInstallTargets(dryRun);
286
+ cleanLegacyClaudeArtifacts(dryRun);
287
+ cleanLegacyHomeNodeShims(dryRun);
288
+ }
289
+ //# sourceMappingURL=setup-legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-legacy.js","sourceRoot":"","sources":["../../src/bin/setup-legacy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * setup-platforms — Platform-specific setup functions.
3
+ *
4
+ * Extracted from setup.ts for SRP: each target's setup logic
5
+ * (Codex, Gemini, OpenCode, web connectors, generic MCP targets).
6
+ */
7
+ import { buildInstallPromptSuggestion } from '../setup/instructions.js';
8
+ export declare function ensureCodexMcpServerConfig(configToml: string): string;
9
+ export declare function emitInstallPromptSuggestion(target: Parameters<typeof buildInstallPromptSuggestion>[0]): void;
10
+ export declare function setupCodex(dryRun?: boolean, showPrompts?: boolean): void;
11
+ /**
12
+ * Generic MCP-only target setup — merges the gramatr MCP server entry into
13
+ * the target's JSON config file. Used by all platforms that support MCP via
14
+ * a JSON config (Claude Desktop, ChatGPT Desktop, Cursor, Windsurf, VS Code).
15
+ */
16
+ export declare function setupMcpTarget(targetName: string, configPath: string, dryRun: boolean): void;
17
+ export declare function setupGemini(dryRun?: boolean, showPrompts?: boolean): void;
18
+ export declare function setupOpenCode(dryRun?: boolean, showPrompts?: boolean): void;
19
+ export declare function setupWeb(target?: 'claude-web' | 'chatgpt-web' | 'gemini-web'): Promise<void>;
20
+ //# sourceMappingURL=setup-platforms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-platforms.d.ts","sourceRoot":"","sources":["../../src/bin/setup-platforms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,EAIL,4BAA4B,EAC7B,MAAM,0BAA0B,CAAC;AA0ClC,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmBrE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAM5G;AAED,wBAAgB,UAAU,CAAC,MAAM,UAAQ,EAAE,WAAW,UAAQ,GAAG,IAAI,CAuCpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAkB5F;AAED,wBAAgB,WAAW,CAAC,MAAM,UAAQ,EAAE,WAAW,UAAQ,GAAG,IAAI,CA2BrE;AAED,wBAAgB,aAAa,CAAC,MAAM,UAAQ,EAAE,WAAW,UAAQ,GAAG,IAAI,CAyBvE;AAED,wBAAsB,QAAQ,CAAC,MAAM,GAAE,YAAY,GAAG,aAAa,GAAG,YAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChH"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * setup-platforms — Platform-specific setup functions.
3
+ *
4
+ * Extracted from setup.ts for SRP: each target's setup logic
5
+ * (Codex, Gemini, OpenCode, web connectors, generic MCP targets).
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ import { getGramatrDirFromEnv, getGramatrUrlFromEnv } from '../config-runtime.js';
10
+ import { buildCodexHooksFile, ensureCodexHooksFeature, mergeManagedHooks, } from '../setup/integrations.js';
11
+ import { CODEX_BLOCK_END, CODEX_BLOCK_START, CODEX_GUIDANCE, buildInstallPromptSuggestion, } from '../setup/instructions.js';
12
+ import { buildGeminiExtensionManifest, buildGeminiHooksFile, buildLocalMcpServerEntry, buildOpenCodeMcpServerEntry, getGeminiExtensionDir, getGeminiHooksPath, getGeminiManifestPath, getOpenCodeConfigPath, mergeMcpServerConfig, } from '../setup/targets.js';
13
+ import { buildConnectorInstructions, buildPromptSuggestion, validateServerReachability, } from '../setup/web-connector.js';
14
+ import { deployPlatformBinary } from './setup-shared.js';
15
+ import { readJsonFile, readClaudeConfig, escapeRegExp, upsertManagedBlock, ensureLocalSettings, getCodexHooksPath, getCodexConfigPath, getCodexAgentsPath, HOME, } from './setup-config-io.js';
16
+ function toTomlString(value) {
17
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
18
+ }
19
+ function stripTomlSection(content, section) {
20
+ const pattern = new RegExp(`^\\[${escapeRegExp(section)}\\]\\n[\\s\\S]*?(?=^\\[[^\\n]+\\]\\n|\\s*$)`, 'm');
21
+ return content.replace(pattern, '').replace(/\n{3,}/g, '\n\n').trimEnd();
22
+ }
23
+ export function ensureCodexMcpServerConfig(configToml) {
24
+ const gramatrDir = getGramatrDirFromEnv() || join(HOME, '.gramatr');
25
+ const gramatrUrl = getGramatrUrlFromEnv() || 'https://api.gramatr.com/mcp';
26
+ const base = stripTomlSection(stripTomlSection(configToml.trimEnd(), 'mcp_servers.gramatr.env'), 'mcp_servers.gramatr');
27
+ const block = [
28
+ '[mcp_servers.gramatr]',
29
+ `command = ${toTomlString('npx')}`,
30
+ `args = [${toTomlString('-y')}, ${toTomlString('@gramatr/mcp')}]`,
31
+ '',
32
+ '[mcp_servers.gramatr.env]',
33
+ `GRAMATR_DIR = ${toTomlString(gramatrDir)}`,
34
+ `GRAMATR_URL = ${toTomlString(gramatrUrl)}`,
35
+ ].join('\n');
36
+ return `${base ? `${base}\n\n` : ''}${block}\n`;
37
+ }
38
+ export function emitInstallPromptSuggestion(target) {
39
+ const promptBlock = buildInstallPromptSuggestion(target);
40
+ process.stderr.write('\n━━━ Prompt Suggestion (copy into custom instructions) ━━━\n\n');
41
+ process.stdout.write(promptBlock + '\n');
42
+ process.stderr.write('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
43
+ process.stderr.write('[gramatr-mcp] Paste the prompt block above into your custom instructions / project knowledge.\n');
44
+ }
45
+ export function setupCodex(dryRun = false, showPrompts = false) {
46
+ deployPlatformBinary(dryRun);
47
+ const hooksPath = getCodexHooksPath();
48
+ const configPath = getCodexConfigPath();
49
+ const agentsPath = getCodexAgentsPath();
50
+ const hooksConfig = readClaudeConfig(hooksPath);
51
+ const managedHooks = buildCodexHooksFile(join(HOME, '.gramatr'));
52
+ const mergedHooks = mergeManagedHooks(hooksConfig, managedHooks);
53
+ const existingToml = existsSync(configPath) ? readFileSync(configPath, 'utf8') : '';
54
+ const updatedToml = ensureCodexMcpServerConfig(ensureCodexHooksFeature(existingToml));
55
+ const existingAgents = existsSync(agentsPath) ? readFileSync(agentsPath, 'utf8') : '';
56
+ const updatedAgents = upsertManagedBlock(existingAgents, CODEX_GUIDANCE, CODEX_BLOCK_START, CODEX_BLOCK_END);
57
+ if (dryRun) {
58
+ process.stderr.write('[gramatr-mcp] Dry run — would write to: ' + hooksPath + '\n');
59
+ process.stderr.write(JSON.stringify(mergedHooks, null, 2) + '\n');
60
+ process.stderr.write('[gramatr-mcp] Dry run — would write to: ' + configPath + '\n');
61
+ process.stderr.write(updatedToml);
62
+ process.stderr.write('\n[gramatr-mcp] Dry run — would write to: ' + agentsPath + '\n');
63
+ process.stderr.write(updatedAgents + '\n');
64
+ return;
65
+ }
66
+ mkdirSync(join(HOME, '.codex'), { recursive: true });
67
+ ensureLocalSettings();
68
+ writeFileSync(hooksPath, JSON.stringify(mergedHooks, null, 2) + '\n', 'utf8');
69
+ writeFileSync(configPath, updatedToml, 'utf8');
70
+ writeFileSync(agentsPath, updatedAgents, 'utf8');
71
+ process.stderr.write(`[gramatr-mcp] Configured Codex hooks in ${hooksPath}\n`);
72
+ process.stderr.write(`[gramatr-mcp] Configured Codex MCP + hooks in ${configPath}\n`);
73
+ process.stderr.write(`[gramatr-mcp] Configured Codex guidance in ${agentsPath}\n`);
74
+ process.stderr.write('[gramatr-mcp] Restart Codex or start a new session to pick up the change.\n');
75
+ if (showPrompts)
76
+ emitInstallPromptSuggestion('codex');
77
+ }
78
+ /**
79
+ * Generic MCP-only target setup — merges the gramatr MCP server entry into
80
+ * the target's JSON config file. Used by all platforms that support MCP via
81
+ * a JSON config (Claude Desktop, ChatGPT Desktop, Cursor, Windsurf, VS Code).
82
+ */
83
+ export function setupMcpTarget(targetName, configPath, dryRun) {
84
+ deployPlatformBinary(dryRun);
85
+ const current = readJsonFile(configPath, {});
86
+ const gramatrUrl = getGramatrUrlFromEnv() || 'https://api.gramatr.com/mcp';
87
+ const next = mergeMcpServerConfig(current, buildLocalMcpServerEntry(HOME, gramatrUrl));
88
+ if (dryRun) {
89
+ process.stderr.write(`[gramatr-mcp] Dry run — would write ${targetName} config to: ${configPath}\n`);
90
+ process.stderr.write(JSON.stringify(next, null, 2) + '\n');
91
+ return;
92
+ }
93
+ mkdirSync(dirname(configPath), { recursive: true });
94
+ ensureLocalSettings();
95
+ writeFileSync(configPath, JSON.stringify(next, null, 2) + '\n', 'utf8');
96
+ process.stderr.write(`[gramatr-mcp] Configured ${targetName} MCP server in ${configPath}\n`);
97
+ process.stderr.write(`[gramatr-mcp] Restart ${targetName} to pick up the change.\n`);
98
+ }
99
+ export function setupGemini(dryRun = false, showPrompts = false) {
100
+ deployPlatformBinary(dryRun);
101
+ const extensionDir = getGeminiExtensionDir(HOME);
102
+ const manifestPath = getGeminiManifestPath(HOME);
103
+ const hooksPath = getGeminiHooksPath(HOME);
104
+ const gramatrUrl = getGramatrUrlFromEnv() || 'https://api.gramatr.com/mcp';
105
+ const manifest = buildGeminiExtensionManifest(HOME, gramatrUrl);
106
+ const hooks = buildGeminiHooksFile(HOME);
107
+ if (dryRun) {
108
+ process.stderr.write('[gramatr-mcp] Dry run — would write Gemini manifest to: ' + manifestPath + '\n');
109
+ process.stderr.write(JSON.stringify(manifest, null, 2) + '\n');
110
+ process.stderr.write('[gramatr-mcp] Dry run — would write Gemini hooks to: ' + hooksPath + '\n');
111
+ process.stderr.write(JSON.stringify(hooks, null, 2) + '\n');
112
+ if (showPrompts)
113
+ emitInstallPromptSuggestion('gemini-cli');
114
+ return;
115
+ }
116
+ mkdirSync(join(extensionDir, 'hooks'), { recursive: true });
117
+ ensureLocalSettings();
118
+ writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf8');
119
+ writeFileSync(hooksPath, JSON.stringify(hooks, null, 2) + '\n', 'utf8');
120
+ process.stderr.write(`[gramatr-mcp] Configured Gemini extension manifest in ${manifestPath}\n`);
121
+ process.stderr.write(`[gramatr-mcp] Configured Gemini hooks in ${hooksPath}\n`);
122
+ process.stderr.write('[gramatr-mcp] Restart Gemini CLI to pick up the change.\n');
123
+ if (showPrompts)
124
+ emitInstallPromptSuggestion('gemini-cli');
125
+ }
126
+ export function setupOpenCode(dryRun = false, showPrompts = false) {
127
+ deployPlatformBinary(dryRun);
128
+ const configPath = getOpenCodeConfigPath(HOME);
129
+ const gramatrUrl = getGramatrUrlFromEnv() || 'https://api.gramatr.com/mcp';
130
+ const mcpEntry = buildOpenCodeMcpServerEntry(HOME, gramatrUrl);
131
+ // OpenCode stores its config as JSON with an mcp section (similar to Cursor/VS Code)
132
+ const current = readJsonFile(configPath, {});
133
+ const next = mergeMcpServerConfig(current, mcpEntry);
134
+ if (dryRun) {
135
+ process.stderr.write('[gramatr-mcp] Dry run — would write OpenCode config to: ' + configPath + '\n');
136
+ process.stderr.write(JSON.stringify(next, null, 2) + '\n');
137
+ if (showPrompts)
138
+ emitInstallPromptSuggestion('opencode');
139
+ return;
140
+ }
141
+ mkdirSync(dirname(configPath), { recursive: true });
142
+ ensureLocalSettings();
143
+ writeFileSync(configPath, JSON.stringify(next, null, 2) + '\n', 'utf8');
144
+ process.stderr.write(`[gramatr-mcp] Configured OpenCode MCP server in ${configPath}\n`);
145
+ process.stderr.write('[gramatr-mcp] Copy the plugin scaffold from packages/mcp/src/setup/examples/gramatr-opencode-plugin.ts\n');
146
+ process.stderr.write('[gramatr-mcp] Restart OpenCode to pick up the change.\n');
147
+ if (showPrompts)
148
+ emitInstallPromptSuggestion('opencode');
149
+ }
150
+ export async function setupWeb(target = 'claude-web') {
151
+ const gramatrUrl = getGramatrUrlFromEnv() || 'https://api.gramatr.com/mcp';
152
+ // Check reachability first
153
+ process.stderr.write(`[gramatr-mcp] Checking server reachability at ${gramatrUrl}...\n`);
154
+ const reachability = await validateServerReachability(gramatrUrl);
155
+ if (reachability.reachable) {
156
+ process.stderr.write(`[gramatr-mcp] Server is reachable (HTTP ${reachability.statusCode})\n\n`);
157
+ }
158
+ else {
159
+ process.stderr.write(`[gramatr-mcp] Warning: server unreachable — ${reachability.error}\n`);
160
+ process.stderr.write('[gramatr-mcp] Setup instructions generated anyway. Verify connectivity before use.\n\n');
161
+ }
162
+ // Build and display connector instructions
163
+ const instructions = buildConnectorInstructions({ serverUrl: gramatrUrl, target });
164
+ process.stderr.write('━━━ Connector Setup Instructions ━━━\n\n');
165
+ process.stderr.write(` Target: ${instructions.target}\n`);
166
+ process.stderr.write(` Server URL: ${instructions.serverUrl}\n`);
167
+ process.stderr.write(` Auth: ${instructions.authMethod}\n`);
168
+ process.stderr.write(` Server card: ${instructions.serverCardUrl}\n\n`);
169
+ for (let i = 0; i < instructions.steps.length; i++) {
170
+ process.stderr.write(` ${i + 1}. ${instructions.steps[i]}\n`);
171
+ }
172
+ // Build and display the prompt suggestion
173
+ const promptBlock = buildPromptSuggestion(target);
174
+ process.stderr.write('\n━━━ Prompt Suggestion (copy into custom instructions) ━━━\n\n');
175
+ // Write to stdout so it's easily pipeable/copyable
176
+ process.stdout.write(promptBlock + '\n');
177
+ process.stderr.write('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
178
+ process.stderr.write('[gramatr-mcp] Paste the prompt block above into your custom instructions / project knowledge.\n');
179
+ }
180
+ //# sourceMappingURL=setup-platforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-platforms.js","sourceRoot":"","sources":["../../src/bin/setup-platforms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * setup-shared — Small shared utilities used across setup modules.
3
+ *
4
+ * Contains binary resolution and deployment (both no-ops in npx mode).
5
+ */
6
+ /**
7
+ * Resolve the path to the gramatr binary.
8
+ * Prefers the compiled Bun binary at ~/.gramatr/bin/gramatr (self-contained,
9
+ * no Node version dependency). Falls back to npx for first-run / not-yet-installed.
10
+ */
11
+ export declare function resolveBinaryPath(): {
12
+ command: string;
13
+ args: string[];
14
+ };
15
+ /**
16
+ * Deploy the correct platform-specific pre-compiled binary to ~/.gramatr/bin/.
17
+ *
18
+ * Checks for platform-specific binaries (e.g. gramatr-linux-x64) in the package
19
+ * dist/ directory, then falls back to the generic 'gramatr' binary from
20
+ * build-binary.mjs. If neither exists, logs a warning and returns false so the
21
+ * caller can fall back to npx.
22
+ *
23
+ * Uses atomic copy (write to .new, then rename) to avoid partial-binary issues.
24
+ */
25
+ export declare function deployPlatformBinary(_dryRun?: boolean): boolean;
26
+ //# sourceMappingURL=setup-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-shared.d.ts","sourceRoot":"","sources":["../../src/bin/setup-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAQvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,UAAQ,GAAG,OAAO,CAK7D"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * setup-shared — Small shared utilities used across setup modules.
3
+ *
4
+ * Contains binary resolution and deployment (both no-ops in npx mode).
5
+ */
6
+ import { existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ // gramatr-allow: C1 — CLI entry point, reads HOME for config path
9
+ const HOME = process.env.HOME || process.env.USERPROFILE || '';
10
+ /**
11
+ * Resolve the path to the gramatr binary.
12
+ * Prefers the compiled Bun binary at ~/.gramatr/bin/gramatr (self-contained,
13
+ * no Node version dependency). Falls back to npx for first-run / not-yet-installed.
14
+ */
15
+ export function resolveBinaryPath() {
16
+ const bunBin = join(HOME, '.gramatr', 'bin', 'gramatr');
17
+ if (existsSync(bunBin)) {
18
+ return { command: bunBin, args: [] };
19
+ }
20
+ // Fallback to npx (first install, before binary is deployed)
21
+ return { command: 'npx', args: ['-y', '@gramatr/mcp'] };
22
+ }
23
+ /**
24
+ * Deploy the correct platform-specific pre-compiled binary to ~/.gramatr/bin/.
25
+ *
26
+ * Checks for platform-specific binaries (e.g. gramatr-linux-x64) in the package
27
+ * dist/ directory, then falls back to the generic 'gramatr' binary from
28
+ * build-binary.mjs. If neither exists, logs a warning and returns false so the
29
+ * caller can fall back to npx.
30
+ *
31
+ * Uses atomic copy (write to .new, then rename) to avoid partial-binary issues.
32
+ */
33
+ export function deployPlatformBinary(_dryRun = false) {
34
+ // No-op: MCP server and hooks now use npx @gramatr/mcp (no compiled binary).
35
+ // Compiled binaries are broken on macOS (Gatekeeper) and Windows (silent stdout).
36
+ // Kept as a function so callers don't need updating.
37
+ return true;
38
+ }
39
+ //# sourceMappingURL=setup-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-shared.js","sourceRoot":"","sources":["../../src/bin/setup-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,kEAAkE;AAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AAE/D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;IAED,6DAA6D;IAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAO,GAAG,KAAK;IAClD,6EAA6E;IAC7E,kFAAkF;IAClF,qDAAqD;IACrD,OAAO,IAAI,CAAC;AACd,CAAC"}