@posthog/wizard 2.17.0 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-mcp-server-to-clients-D4PK6ulR.js → add-mcp-server-to-clients-CjnvTVj0.js} +72 -13
- package/dist/add-mcp-server-to-clients-CjnvTVj0.js.map +1 -0
- package/dist/{agent-interface-7t5DBo2A.js → agent-interface-CQU6x4Hj.js} +112 -54
- package/dist/agent-interface-CQU6x4Hj.js.map +1 -0
- package/dist/{agent-runner-CTkKLVhp.js → agent-runner-Cj7saDkL.js} +17 -11
- package/dist/{agent-runner-CTkKLVhp.js.map → agent-runner-Cj7saDkL.js.map} +1 -1
- package/dist/{analytics-DN_Gy87F.js → analytics-Df-Xb81i.js} +26 -4
- package/dist/analytics-Df-Xb81i.js.map +1 -0
- package/dist/{api-serd0SMY.js → api-Dw6_orDE.js} +3 -3
- package/dist/{api-serd0SMY.js.map → api-Dw6_orDE.js.map} +1 -1
- package/dist/bin.js +236 -79
- package/dist/bin.js.map +1 -1
- package/dist/{ci-install-BbJ7c3WK.js → ci-install-BKAvFfK6.js} +4 -4
- package/dist/{ci-install-BbJ7c3WK.js.map → ci-install-BKAvFfK6.js.map} +1 -1
- package/dist/{debug-BI-Js0PB.js → debug-Cp_wNn8i.js} +1 -1
- package/dist/{debug-Bx7nvCWW.js → debug-DnMO6O8O.js} +36 -21
- package/dist/debug-DnMO6O8O.js.map +1 -0
- package/dist/{defaults-CPH6eWhN.js → defaults-BNWIWzjc.js} +34 -8
- package/dist/defaults-BNWIWzjc.js.map +1 -0
- package/dist/{env-api-key-B3gE9Un0.js → env-api-key-MlzJYAvt.js} +1 -1
- package/dist/{env-api-key-B3gE9Un0.js.map → env-api-key-MlzJYAvt.js.map} +1 -1
- package/dist/{environment-CiZVSSYt.js → environment-Ls0H9ljT.js} +3 -3
- package/dist/{environment-CiZVSSYt.js.map → environment-Ls0H9ljT.js.map} +1 -1
- package/dist/{file-utils-Dy9JncCo.js → file-utils-VAXoyXVA.js} +1 -1
- package/dist/{file-utils-Dy9JncCo.js.map → file-utils-VAXoyXVA.js.map} +1 -1
- package/dist/{interactive-BwIzklw0.js → interactive-D15byhpc.js} +2 -2
- package/dist/{interactive-BwIzklw0.js.map → interactive-D15byhpc.js.map} +1 -1
- package/dist/{mcp-prompt-streaming-8U9Qs9EV.js → mcp-prompt-streaming-DQOTQfW1.js} +4 -4
- package/dist/{mcp-prompt-streaming-8U9Qs9EV.js.map → mcp-prompt-streaming-DQOTQfW1.js.map} +1 -1
- package/dist/{non-interactive-DTaZnVq_.js → non-interactive-DcFLJtl_.js} +2 -2
- package/dist/{non-interactive-DTaZnVq_.js.map → non-interactive-DcFLJtl_.js.map} +1 -1
- package/dist/{package-manager-CKQLR20D.js → package-manager-DUPgLGpQ.js} +2 -2
- package/dist/{package-manager-CKQLR20D.js.map → package-manager-DUPgLGpQ.js.map} +1 -1
- package/dist/{playground-CR81Mwe3.js → playground-BZ0hGjbL.js} +12 -4
- package/dist/playground-BZ0hGjbL.js.map +1 -0
- package/dist/{posthog-BrLFkaji.js → posthog-Cr37rnla.js} +1 -1
- package/dist/{posthog-BrLFkaji.js.map → posthog-Cr37rnla.js.map} +1 -1
- package/dist/{posthog-integration-Bv7987YJ.js → posthog-integration-C8qhJnI3.js} +282 -13
- package/dist/posthog-integration-C8qhJnI3.js.map +1 -0
- package/dist/{provisioning-C96Kw-9D.js → provisioning-C-2ExcqY.js} +3 -3
- package/dist/{provisioning-C96Kw-9D.js.map → provisioning-C-2ExcqY.js.map} +1 -1
- package/dist/{registry-B9k73FKR.js → registry-hBUgaWFx.js} +4 -4
- package/dist/{registry-B9k73FKR.js.map → registry-hBUgaWFx.js.map} +1 -1
- package/dist/{setup-utils-Bpfsap9L.js → setup-utils-DetnhXo0.js} +65 -44
- package/dist/setup-utils-DetnhXo0.js.map +1 -0
- package/dist/{slides-DRbBgsdd.js → slides-mT2s9wM_.js} +180 -71
- package/dist/slides-mT2s9wM_.js.map +1 -0
- package/dist/{start-tui-BZ7rEf3e.js → start-tui-BfXoErKg.js} +16 -16
- package/dist/start-tui-BfXoErKg.js.map +1 -0
- package/dist/{steps-DDx35170.js → steps-SoDXSUxe.js} +6 -6
- package/dist/{steps-DDx35170.js.map → steps-SoDXSUxe.js.map} +1 -1
- package/dist/{task-stream-BI8rJg9H.js → task-stream-CZRj6auI.js} +2 -2
- package/dist/{task-stream-BI8rJg9H.js.map → task-stream-CZRj6auI.js.map} +1 -1
- package/dist/{telemetry-ByYtIfW0.js → telemetry-CPcMFxcO.js} +2 -2
- package/dist/{telemetry-ByYtIfW0.js.map → telemetry-CPcMFxcO.js.map} +1 -1
- package/dist/{urls-CTCJIxbR.js → urls-BO7doNJG.js} +2 -2
- package/dist/{urls-CTCJIxbR.js.map → urls-BO7doNJG.js.map} +1 -1
- package/dist/{wizard-abort-CY0ibdq1.js → wizard-abort-CDXufkqJ.js} +5 -3
- package/dist/wizard-abort-CDXufkqJ.js.map +1 -0
- package/dist/{wizard-abort-QdRxGQp_.js → wizard-abort-CtMY57ZE.js} +1 -1
- package/package.json +1 -1
- package/dist/TextBlock-D0Ep3zC9.js +0 -275
- package/dist/TextBlock-D0Ep3zC9.js.map +0 -1
- package/dist/add-mcp-server-to-clients-D4PK6ulR.js.map +0 -1
- package/dist/agent-interface-7t5DBo2A.js.map +0 -1
- package/dist/analytics-DN_Gy87F.js.map +0 -1
- package/dist/debug-Bx7nvCWW.js.map +0 -1
- package/dist/defaults-CPH6eWhN.js.map +0 -1
- package/dist/playground-CR81Mwe3.js.map +0 -1
- package/dist/posthog-integration-Bv7987YJ.js.map +0 -1
- package/dist/setup-utils-Bpfsap9L.js.map +0 -1
- package/dist/skill-CPqcV8zp.js +0 -29
- package/dist/skill-CPqcV8zp.js.map +0 -1
- package/dist/slides-DRbBgsdd.js.map +0 -1
- package/dist/start-tui-BZ7rEf3e.js.map +0 -1
- package/dist/wizard-abort-CY0ibdq1.js.map +0 -1
package/dist/{add-mcp-server-to-clients-D4PK6ulR.js → add-mcp-server-to-clients-CjnvTVj0.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-B_-DWIq7.js";
|
|
2
|
-
import { X as runtimeEnv, p as getUI, r as debug } from "./debug-
|
|
3
|
-
import { t as analytics } from "./analytics-
|
|
4
|
-
import { t as withProgress } from "./telemetry-
|
|
5
|
-
import {
|
|
2
|
+
import { X as runtimeEnv, p as getUI, r as debug } from "./debug-DnMO6O8O.js";
|
|
3
|
+
import { t as analytics } from "./analytics-Df-Xb81i.js";
|
|
4
|
+
import { t as withProgress } from "./telemetry-CPcMFxcO.js";
|
|
5
|
+
import { a as getNativeHTTPServerConfig, i as getDefaultServerConfig, r as buildMCPUrl, t as ALL_FEATURE_VALUES } from "./defaults-BNWIWzjc.js";
|
|
6
6
|
import { execSync, spawnSync } from "node:child_process";
|
|
7
7
|
import * as fs$1 from "node:fs";
|
|
8
8
|
import * as os from "node:os";
|
|
@@ -155,14 +155,43 @@ var ClaudeCodeMCPClient = class extends DefaultMCPClient {
|
|
|
155
155
|
return Promise.resolve(false);
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
isServerInstalled() {
|
|
159
|
-
|
|
158
|
+
isServerInstalled(local) {
|
|
159
|
+
const binary = this.findClaudeBinary();
|
|
160
|
+
if (!binary) return Promise.resolve(false);
|
|
161
|
+
const serverName = local ? "posthog-local" : "posthog";
|
|
162
|
+
try {
|
|
163
|
+
const output = execSync$1(`${binary} mcp list`, { stdio: "pipe" }).toString().toLowerCase();
|
|
164
|
+
return Promise.resolve(output.includes(serverName));
|
|
165
|
+
} catch {
|
|
166
|
+
return Promise.resolve(false);
|
|
167
|
+
}
|
|
160
168
|
}
|
|
161
169
|
getConfigPath() {
|
|
162
170
|
throw new Error("Not implemented");
|
|
163
171
|
}
|
|
164
|
-
|
|
165
|
-
|
|
172
|
+
addServer(apiKey, selectedFeatures, local) {
|
|
173
|
+
const binary = this.findClaudeBinary();
|
|
174
|
+
if (!binary) return Promise.resolve({ success: false });
|
|
175
|
+
const args = [
|
|
176
|
+
"mcp",
|
|
177
|
+
"add",
|
|
178
|
+
"--transport",
|
|
179
|
+
"http",
|
|
180
|
+
"--scope",
|
|
181
|
+
"user",
|
|
182
|
+
local ? "posthog-local" : "posthog",
|
|
183
|
+
buildMCPUrl(selectedFeatures, local)
|
|
184
|
+
];
|
|
185
|
+
if (apiKey) args.push("--header", `Authorization: Bearer ${apiKey}`);
|
|
186
|
+
try {
|
|
187
|
+
execSync$1(`${binary} ${args.map((a) => JSON.stringify(a)).join(" ")}`, { stdio: "pipe" });
|
|
188
|
+
return Promise.resolve({ success: true });
|
|
189
|
+
} catch (error) {
|
|
190
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
191
|
+
if (msg.includes("already exists")) return Promise.resolve({ success: true });
|
|
192
|
+
analytics.captureException(/* @__PURE__ */ new Error(`Claude Code MCP add failed: ${msg}`));
|
|
193
|
+
return Promise.resolve({ success: false });
|
|
194
|
+
}
|
|
166
195
|
}
|
|
167
196
|
removeServer(local) {
|
|
168
197
|
const claudeBinary = this.findClaudeBinary();
|
|
@@ -334,11 +363,41 @@ var CodexMCPClient = class extends DefaultMCPClient {
|
|
|
334
363
|
getConfigPath() {
|
|
335
364
|
throw new Error("Not implemented");
|
|
336
365
|
}
|
|
337
|
-
isServerInstalled() {
|
|
338
|
-
|
|
366
|
+
isServerInstalled(local) {
|
|
367
|
+
const binary = this.findCodexBinary();
|
|
368
|
+
if (!binary) return Promise.resolve(false);
|
|
369
|
+
const serverName = local ? "posthog-local" : "posthog";
|
|
370
|
+
const result = spawnSync(binary, ["mcp", "list"], { encoding: "utf-8" });
|
|
371
|
+
if (result.status !== 0) return Promise.resolve(false);
|
|
372
|
+
return Promise.resolve((result.stdout ?? "").toLowerCase().includes(serverName));
|
|
339
373
|
}
|
|
340
|
-
|
|
341
|
-
|
|
374
|
+
addServer(apiKey, selectedFeatures, local) {
|
|
375
|
+
const binary = this.findCodexBinary();
|
|
376
|
+
if (!binary) return Promise.resolve({ success: false });
|
|
377
|
+
const args = [
|
|
378
|
+
"mcp",
|
|
379
|
+
"add",
|
|
380
|
+
local ? "posthog-local" : "posthog",
|
|
381
|
+
"--url",
|
|
382
|
+
buildMCPUrl(selectedFeatures, local)
|
|
383
|
+
];
|
|
384
|
+
const env = { ...process.env };
|
|
385
|
+
if (apiKey) {
|
|
386
|
+
const tokenVar = "POSTHOG_AUTH_HEADER";
|
|
387
|
+
env[tokenVar] = `Bearer ${apiKey}`;
|
|
388
|
+
args.push("--bearer-token-env-var", tokenVar);
|
|
389
|
+
}
|
|
390
|
+
const result = spawnSync(binary, args, {
|
|
391
|
+
encoding: "utf-8",
|
|
392
|
+
env
|
|
393
|
+
});
|
|
394
|
+
if (result.status !== 0) {
|
|
395
|
+
const stderr = result.stderr ?? "";
|
|
396
|
+
if (stderr.toLowerCase().includes("already")) return Promise.resolve({ success: true });
|
|
397
|
+
analytics.captureException(/* @__PURE__ */ new Error(`Codex MCP add failed: ${stderr}`));
|
|
398
|
+
return Promise.resolve({ success: false });
|
|
399
|
+
}
|
|
400
|
+
return Promise.resolve({ success: true });
|
|
342
401
|
}
|
|
343
402
|
removeServer() {
|
|
344
403
|
const binary = this.findCodexBinary();
|
|
@@ -498,4 +557,4 @@ const removeMCPServer = async (clients, local) => {
|
|
|
498
557
|
//#endregion
|
|
499
558
|
export { getSupportedClients as a, removeMCPServer as c, getInstalledClients as i, removeMCPServerFromClientsStep as l, addMCPServerToClientsStep as n, getSupportedPluginClients as o, add_mcp_server_to_clients_exports as r, installPlugins as s, addMCPServer as t, isPluginCapable as u };
|
|
500
559
|
|
|
501
|
-
//# sourceMappingURL=add-mcp-server-to-clients-
|
|
560
|
+
//# sourceMappingURL=add-mcp-server-to-clients-CjnvTVj0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-mcp-server-to-clients-CjnvTVj0.js","names":["fs","path","path","os","path","os","fs","execSync","z","os","path","z","os","path","path","fs"],"sources":["../src/steps/add-mcp-server-to-clients/MCPClient.ts","../src/steps/add-mcp-server-to-clients/clients/cursor.ts","../src/steps/add-mcp-server-to-clients/clients/claude-code.ts","../src/steps/add-mcp-server-to-clients/clients/claude-web.ts","../src/steps/add-mcp-server-to-clients/clients/visual-studio-code.ts","../src/steps/add-mcp-server-to-clients/clients/zed.ts","../src/steps/add-mcp-server-to-clients/clients/codex.ts","../src/steps/add-mcp-server-to-clients/plugin-client.ts","../src/steps/add-mcp-server-to-clients/index.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as jsonc from 'jsonc-parser';\nimport { getDefaultServerConfig } from './defaults';\n\nexport type MCPServerConfig = Record<string, unknown>;\n\nexport abstract class MCPClient {\n name: string;\n abstract getConfigPath(): Promise<string>;\n abstract getServerPropertyName(): string;\n abstract isServerInstalled(local?: boolean): Promise<boolean>;\n abstract addServer(\n apiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }>;\n abstract removeServer(local?: boolean): Promise<{ success: boolean }>;\n abstract isClientSupported(): Promise<boolean>;\n}\n\nexport abstract class DefaultMCPClient extends MCPClient {\n name = 'Default';\n\n constructor() {\n super();\n }\n\n getServerPropertyName(): string {\n return 'mcpServers';\n }\n\n getServerConfig(\n apiKey: string | undefined,\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return getDefaultServerConfig(apiKey, selectedFeatures, local);\n }\n\n async isServerInstalled(local?: boolean): Promise<boolean> {\n try {\n const configPath = await this.getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return false;\n }\n\n const configContent = await fs.promises.readFile(configPath, 'utf8');\n const config = jsonc.parse(configContent) as Record<string, any>;\n const serverPropertyName = this.getServerPropertyName();\n const serverName = local ? 'posthog-local' : 'posthog';\n\n return (\n serverPropertyName in config && serverName in config[serverPropertyName]\n );\n } catch {\n return false;\n }\n }\n\n async addServer(\n apiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n try {\n const configPath = await this.getConfigPath();\n const configDir = path.dirname(configPath);\n\n await fs.promises.mkdir(configDir, { recursive: true });\n\n const serverPropertyName = this.getServerPropertyName();\n let configContent = '';\n let existingConfig = {};\n\n if (fs.existsSync(configPath)) {\n configContent = await fs.promises.readFile(configPath, 'utf8');\n existingConfig = jsonc.parse(configContent) || {};\n }\n\n const newServerConfig = this.getServerConfig(\n apiKey,\n selectedFeatures,\n local,\n );\n const typedConfig = existingConfig as Record<string, any>;\n if (!typedConfig[serverPropertyName]) {\n typedConfig[serverPropertyName] = {};\n }\n const serverName = local ? 'posthog-local' : 'posthog';\n typedConfig[serverPropertyName][serverName] = newServerConfig;\n\n const edits = jsonc.modify(\n configContent,\n [serverPropertyName, serverName],\n newServerConfig,\n {\n formattingOptions: {\n tabSize: 2,\n insertSpaces: true,\n },\n },\n );\n\n const modifiedContent = jsonc.applyEdits(configContent, edits);\n\n await fs.promises.writeFile(configPath, modifiedContent, 'utf8');\n\n return { success: true };\n } catch {\n return { success: false };\n }\n }\n\n async removeServer(local?: boolean): Promise<{ success: boolean }> {\n try {\n const configPath = await this.getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return { success: false };\n }\n\n const configContent = await fs.promises.readFile(configPath, 'utf8');\n const config = jsonc.parse(configContent) as Record<string, any>;\n const serverPropertyName = this.getServerPropertyName();\n\n const serverName = local ? 'posthog-local' : 'posthog';\n\n if (\n serverPropertyName in config &&\n serverName in config[serverPropertyName]\n ) {\n const edits = jsonc.modify(\n configContent,\n [serverPropertyName, serverName],\n undefined,\n {\n formattingOptions: {\n tabSize: 2,\n insertSpaces: true,\n },\n },\n );\n\n const modifiedContent = jsonc.applyEdits(configContent, edits);\n\n await fs.promises.writeFile(configPath, modifiedContent, 'utf8');\n\n return { success: true };\n }\n } catch {\n //\n }\n\n return { success: false };\n }\n}\n","import {\n DefaultMCPClient,\n MCPServerConfig,\n} from '@steps/add-mcp-server-to-clients/MCPClient';\nimport * as path from 'path';\nimport * as os from 'os';\nimport {\n DefaultMCPClientConfig,\n getNativeHTTPServerConfig,\n} from '@steps/add-mcp-server-to-clients/defaults';\nimport { z } from 'zod';\n\nexport const CursorMCPConfig = DefaultMCPClientConfig;\n\nexport type CursorMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class CursorMCPClient extends DefaultMCPClient {\n name = 'Cursor';\n\n constructor() {\n super();\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' || process.platform === 'win32',\n );\n }\n\n async getConfigPath(): Promise<string> {\n return Promise.resolve(path.join(os.homedir(), '.cursor', 'mcp.json'));\n }\n\n getServerConfig(\n apiKey: string | undefined,\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return getNativeHTTPServerConfig(apiKey, selectedFeatures, local);\n }\n}\n","import { DefaultMCPClient } from '@steps/add-mcp-server-to-clients/MCPClient';\nimport {\n DefaultMCPClientConfig,\n buildMCPUrl,\n} from '@steps/add-mcp-server-to-clients/defaults';\nimport {\n PluginCapable,\n PluginInstallResult,\n} from '@steps/add-mcp-server-to-clients/plugin-client';\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\nimport { analytics } from '@utils/analytics';\nimport { debug } from '@utils/debug';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nexport const ClaudeCodeMCPConfig = DefaultMCPClientConfig;\n\nexport type ClaudeCodeMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class ClaudeCodeMCPClient\n extends DefaultMCPClient\n implements PluginCapable\n{\n name = 'Claude Code';\n private claudeBinaryPath: string | null = null;\n\n constructor() {\n super();\n }\n\n private findClaudeBinary(): string | null {\n if (this.claudeBinaryPath) {\n return this.claudeBinaryPath;\n }\n\n // Common installation paths for Claude Code CLI\n const possiblePaths = [\n path.join(os.homedir(), '.claude', 'local', 'claude'),\n '/usr/local/bin/claude',\n '/opt/homebrew/bin/claude',\n ];\n\n for (const claudePath of possiblePaths) {\n if (fs.existsSync(claudePath)) {\n debug(` Found claude binary at: ${claudePath}`);\n this.claudeBinaryPath = claudePath;\n return claudePath;\n }\n }\n\n // Try PATH as fallback\n try {\n execSync('command -v claude', { stdio: 'pipe' });\n debug(' Found claude in PATH');\n this.claudeBinaryPath = 'claude';\n return 'claude';\n } catch {\n // Not in PATH\n }\n\n return null;\n }\n\n isClientSupported(): Promise<boolean> {\n try {\n debug(' Checking for Claude Code...');\n const claudeBinary = this.findClaudeBinary();\n\n if (!claudeBinary) {\n debug(' Claude Code not found. Installation paths checked:');\n debug(` - ${path.join(os.homedir(), '.claude', 'local', 'claude')}`);\n debug(` - /usr/local/bin/claude`);\n debug(` - /opt/homebrew/bin/claude`);\n debug(` - PATH`);\n return Promise.resolve(false);\n }\n\n const output = execSync(`${claudeBinary} --version`, { stdio: 'pipe' });\n const version = output.toString().trim();\n debug(` Claude Code detected: ${version}`);\n return Promise.resolve(true);\n } catch (error) {\n debug(\n ` Claude Code check failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n return Promise.resolve(false);\n }\n }\n\n isServerInstalled(local?: boolean): Promise<boolean> {\n const binary = this.findClaudeBinary();\n if (!binary) return Promise.resolve(false);\n const serverName = local ? 'posthog-local' : 'posthog';\n try {\n const output = execSync(`${binary} mcp list`, { stdio: 'pipe' })\n .toString()\n .toLowerCase();\n return Promise.resolve(output.includes(serverName));\n } catch {\n return Promise.resolve(false);\n }\n }\n\n getConfigPath(): Promise<string> {\n throw new Error('Not implemented');\n }\n\n addServer(\n apiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n const binary = this.findClaudeBinary();\n if (!binary) return Promise.resolve({ success: false });\n\n const serverName = local ? 'posthog-local' : 'posthog';\n const url = buildMCPUrl(selectedFeatures, local);\n const args = [\n 'mcp',\n 'add',\n '--transport',\n 'http',\n '--scope',\n 'user',\n serverName,\n url,\n ];\n if (apiKey) {\n args.push('--header', `Authorization: Bearer ${apiKey}`);\n }\n\n try {\n execSync(`${binary} ${args.map((a) => JSON.stringify(a)).join(' ')}`, {\n stdio: 'pipe',\n });\n return Promise.resolve({ success: true });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n if (msg.includes('already exists')) {\n return Promise.resolve({ success: true });\n }\n analytics.captureException(\n new Error(`Claude Code MCP add failed: ${msg}`),\n );\n return Promise.resolve({ success: false });\n }\n }\n\n removeServer(local?: boolean): Promise<{ success: boolean }> {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve({ success: false });\n }\n\n const serverName = local ? 'posthog-local' : 'posthog';\n const command = `${claudeBinary} mcp remove --scope user ${serverName}`;\n\n try {\n execSync(command);\n } catch (error) {\n analytics.captureException(\n new Error(\n `Failed to remove server from Claude Code: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n\n supportsPlugin(): boolean {\n return this.findClaudeBinary() !== null;\n }\n\n isPluginInstalled(): Promise<boolean> {\n const binary = this.findClaudeBinary();\n if (!binary) return Promise.resolve(false);\n try {\n const output = execSync(`${binary} plugin list`, {\n stdio: 'pipe',\n }).toString();\n return Promise.resolve(output.toLowerCase().includes('posthog'));\n } catch {\n return Promise.resolve(false);\n }\n }\n\n installPlugin(): Promise<PluginInstallResult> {\n const binary = this.findClaudeBinary();\n if (!binary) return Promise.resolve({ success: false });\n try {\n execSync(`${binary} plugin install posthog`, { stdio: 'pipe' });\n return Promise.resolve({ success: true });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n if (msg.includes('already installed') || msg.includes('already exists')) {\n return Promise.resolve({ success: true, alreadyInstalled: true });\n }\n analytics.captureException(\n new Error(`Claude Code plugin install failed: ${msg}`),\n );\n return Promise.resolve({ success: false });\n }\n }\n}\n","import opn from 'opn';\nimport { MCPClient } from '@steps/add-mcp-server-to-clients/MCPClient';\nimport { BrowserFinishable } from '@steps/add-mcp-server-to-clients/browser-client';\n\n/**\n * Claude Desktop / Claude.ai (web). PostHog ships here as a hosted connector,\n * not a local config — so instead of writing files we open the connector\n * directory page and let the user sign in and click \"Connect\".\n */\nexport class ClaudeWebMCPClient extends MCPClient implements BrowserFinishable {\n name = 'Claude Desktop/Web';\n connectorUrl = 'https://claude.ai/directory/connectors/posthog';\n finishInstruction = 'Sign in and click \"Connect\" to finish.';\n\n isClientSupported(): Promise<boolean> {\n // Browser-based — available on every platform.\n return Promise.resolve(true);\n }\n\n isServerInstalled(): Promise<boolean> {\n // The connector lives in the user's Claude account; nothing local to\n // inspect. Returning false also keeps it out of `mcp remove`.\n return Promise.resolve(false);\n }\n\n addServer(): Promise<{ success: boolean }> {\n void opn(this.connectorUrl, { wait: false }).catch(() => {\n // opn throws in environments without a browser (e.g. CI) — swallow it;\n // the URL is still surfaced to the user on the Done screen.\n });\n return Promise.resolve({ success: true });\n }\n\n removeServer(): Promise<{ success: boolean }> {\n return Promise.resolve({ success: false });\n }\n\n getConfigPath(): Promise<string> {\n throw new Error('Not implemented');\n }\n\n getServerPropertyName(): string {\n throw new Error('Not implemented');\n }\n}\n\nexport default ClaudeWebMCPClient;\n","import z from 'zod';\nimport * as path from 'path';\nimport * as os from 'os';\nimport {\n DefaultMCPClient,\n MCPServerConfig,\n} from '@steps/add-mcp-server-to-clients/MCPClient';\nimport { getNativeHTTPServerConfig } from '@steps/add-mcp-server-to-clients/defaults';\nimport { runtimeEnv } from '@env';\n\nexport const VisualStudioCodeMCPConfig = z\n .object({\n servers: z.record(\n z.string(),\n z.union([\n z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n z.object({\n type: z.enum(['http', 'sse']),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ]),\n ),\n })\n .passthrough();\n\nexport type VisualStudioCodeMCPConfig = z.infer<\n typeof VisualStudioCodeMCPConfig\n>;\n\nexport class VisualStudioCodeClient extends DefaultMCPClient {\n name = 'Visual Studio Code';\n\n getServerPropertyName(): string {\n return 'servers';\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' ||\n process.platform === 'win32' ||\n process.platform === 'linux',\n );\n }\n\n async getConfigPath(): Promise<string> {\n const homeDir = os.homedir();\n const isWindows = process.platform === 'win32';\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n if (isMac) {\n return Promise.resolve(\n path.join(\n homeDir,\n 'Library',\n 'Application Support',\n 'Code',\n 'User',\n 'mcp.json',\n ),\n );\n }\n\n if (isWindows) {\n return Promise.resolve(\n path.join(runtimeEnv('APPDATA') || '', 'Code', 'User', 'mcp.json'),\n );\n }\n\n if (isLinux) {\n return Promise.resolve(\n path.join(homeDir, '.config', 'Code', 'User', 'mcp.json'),\n );\n }\n\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n\n getServerConfig(\n apiKey: string | undefined,\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return {\n type: 'http',\n ...getNativeHTTPServerConfig(apiKey, selectedFeatures, local),\n };\n }\n}\n","import z from 'zod';\nimport * as path from 'path';\nimport * as os from 'os';\nimport {\n DefaultMCPClient,\n MCPServerConfig,\n} from '@steps/add-mcp-server-to-clients/MCPClient';\nimport { getNativeHTTPServerConfig } from '@steps/add-mcp-server-to-clients/defaults';\nimport { runtimeEnv } from '@env';\n\nexport const ZedMCPConfig = z\n .object({\n context_servers: z.record(\n z.string(),\n z.union([\n z.object({\n enabled: z.boolean().optional(),\n source: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n z.object({\n enabled: z.boolean().optional(),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ]),\n ),\n })\n .passthrough();\n\nexport type ZedMCPConfig = z.infer<typeof ZedMCPConfig>;\n\nexport class ZedClient extends DefaultMCPClient {\n name = 'Zed';\n\n getServerPropertyName(): string {\n return 'context_servers';\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' || process.platform === 'linux',\n );\n }\n\n async getConfigPath(): Promise<string> {\n const homeDir = os.homedir();\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n if (isMac) {\n return Promise.resolve(\n path.join(homeDir, '.config', 'zed', 'settings.json'),\n );\n }\n\n if (isLinux) {\n // https://zed.dev/docs/configuring-zed#settings-files\n const xdgConfigHome = runtimeEnv('XDG_CONFIG_HOME');\n if (xdgConfigHome) {\n return Promise.resolve(\n path.join(xdgConfigHome, 'zed', 'settings.json'),\n );\n }\n return Promise.resolve(\n path.join(homeDir, '.config', 'zed', 'settings.json'),\n );\n }\n\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n\n getServerConfig(\n apiKey: string | undefined,\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return {\n enabled: true,\n ...getNativeHTTPServerConfig(apiKey, selectedFeatures, local),\n };\n }\n}\n","import { z } from 'zod';\nimport { execSync, spawnSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport { DefaultMCPClient } from '@steps/add-mcp-server-to-clients/MCPClient';\nimport {\n DefaultMCPClientConfig,\n buildMCPUrl,\n} from '@steps/add-mcp-server-to-clients/defaults';\nimport {\n PluginCapable,\n PluginInstallResult,\n} from '@steps/add-mcp-server-to-clients/plugin-client';\n\nimport { analytics } from '@utils/analytics';\n\nexport const CodexMCPConfig = DefaultMCPClientConfig;\n\nexport type CodexMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class CodexMCPClient extends DefaultMCPClient implements PluginCapable {\n name = 'Codex';\n private codexBinaryPath: string | null = null;\n\n constructor() {\n super();\n }\n\n private findCodexBinary(): string | null {\n if (this.codexBinaryPath) return this.codexBinaryPath;\n try {\n const resolved = execSync('command -v codex', { stdio: 'pipe' })\n .toString()\n .trim();\n if (resolved) {\n this.codexBinaryPath = resolved;\n return resolved;\n }\n } catch {\n // not in PATH\n }\n return null;\n }\n\n isClientSupported(): Promise<boolean> {\n return Promise.resolve(this.findCodexBinary() !== null);\n }\n\n getConfigPath(): Promise<string> {\n throw new Error('Not implemented');\n }\n\n isServerInstalled(local?: boolean): Promise<boolean> {\n const binary = this.findCodexBinary();\n if (!binary) return Promise.resolve(false);\n const serverName = local ? 'posthog-local' : 'posthog';\n const result = spawnSync(binary, ['mcp', 'list'], { encoding: 'utf-8' });\n if (result.status !== 0) return Promise.resolve(false);\n return Promise.resolve(\n (result.stdout ?? '').toLowerCase().includes(serverName),\n );\n }\n\n addServer(\n apiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n const binary = this.findCodexBinary();\n if (!binary) return Promise.resolve({ success: false });\n\n const serverName = local ? 'posthog-local' : 'posthog';\n const url = buildMCPUrl(selectedFeatures, local);\n const args = ['mcp', 'add', serverName, '--url', url];\n const env = { ...process.env };\n if (apiKey) {\n const tokenVar = 'POSTHOG_AUTH_HEADER';\n env[tokenVar] = `Bearer ${apiKey}`;\n args.push('--bearer-token-env-var', tokenVar);\n }\n\n const result = spawnSync(binary, args, { encoding: 'utf-8', env });\n if (result.status !== 0) {\n const stderr = result.stderr ?? '';\n if (stderr.toLowerCase().includes('already')) {\n return Promise.resolve({ success: true });\n }\n analytics.captureException(new Error(`Codex MCP add failed: ${stderr}`));\n return Promise.resolve({ success: false });\n }\n return Promise.resolve({ success: true });\n }\n\n removeServer(): Promise<{ success: boolean }> {\n const binary = this.findCodexBinary();\n if (!binary) return Promise.resolve({ success: false });\n\n const result = spawnSync(binary, ['mcp', 'remove', 'posthog'], {\n stdio: 'ignore',\n });\n\n if (result.error || result.status !== 0) {\n analytics.captureException(\n new Error('Failed to remove server from Codex CLI.'),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n\n supportsPlugin(): boolean {\n return this.findCodexBinary() !== null;\n }\n\n isPluginInstalled(): Promise<boolean> {\n const configPath = path.join(os.homedir(), '.codex', 'config.toml');\n try {\n const contents = fs.readFileSync(configPath, 'utf-8');\n // Marketplace installs appear as [marketplaces.posthog] in config.toml\n return Promise.resolve(\n contents.toLowerCase().includes('[marketplaces.posthog]'),\n );\n } catch {\n return Promise.resolve(false);\n }\n }\n\n installPlugin(): Promise<PluginInstallResult> {\n const binary = this.findCodexBinary();\n if (!binary) return Promise.resolve({ success: false });\n\n const run = () =>\n spawnSync(binary, ['plugin', 'marketplace', 'add', 'PostHog/ai-plugin'], {\n encoding: 'utf-8',\n });\n\n let result = run();\n\n // Stale cache directory with no config.toml entry — clear it and retry\n if (\n result.status !== 0 &&\n (result.stderr ?? '').includes('already added from a different source')\n ) {\n const staleDir = path.join(\n os.homedir(),\n '.codex',\n '.tmp',\n 'marketplaces',\n 'posthog',\n );\n try {\n fs.rmSync(staleDir, { recursive: true, force: true });\n } catch {\n // ignore — retry anyway\n }\n result = run();\n }\n\n if (result.status !== 0) {\n analytics.captureException(\n new Error(`Codex plugin install failed: ${result.stderr ?? ''}`),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n}\n\nexport default CodexMCPClient;\n","export interface PluginInstallResult {\n success: boolean;\n alreadyInstalled?: boolean;\n}\n\nexport interface PluginCapable {\n supportsPlugin(): boolean;\n isPluginInstalled(): Promise<boolean>;\n installPlugin(): Promise<PluginInstallResult>;\n}\n\nexport function isPluginCapable<T>(client: T): client is T & PluginCapable {\n return (\n typeof client === 'object' &&\n client !== null &&\n 'supportsPlugin' in client &&\n 'installPlugin' in client\n );\n}\n","import type { Integration } from '@lib/constants';\nimport type { CloudRegion } from '@utils/types';\nimport { withProgress } from '../../telemetry';\nimport { analytics } from '@utils/analytics';\nimport { getUI } from '@ui';\nimport { MCPClient } from './MCPClient';\nimport { CursorMCPClient } from './clients/cursor';\nimport { ClaudeCodeMCPClient } from './clients/claude-code';\nimport { ClaudeWebMCPClient } from './clients/claude-web';\nimport { VisualStudioCodeClient } from './clients/visual-studio-code';\nimport { ZedClient } from './clients/zed';\nimport { CodexMCPClient } from './clients/codex';\nimport { ALL_FEATURE_VALUES } from './defaults';\nimport { debug } from '@utils/debug';\nimport { isPluginCapable, PluginCapable } from './plugin-client';\n\nexport const getSupportedClients = async (): Promise<MCPClient[]> => {\n const allClients = [\n new ClaudeCodeMCPClient(),\n new ClaudeWebMCPClient(),\n new CodexMCPClient(),\n new CursorMCPClient(),\n new VisualStudioCodeClient(),\n new ZedClient(),\n ];\n const supportedClients: MCPClient[] = [];\n\n debug('Checking for supported MCP clients...');\n for (const client of allClients) {\n const isSupported = await client.isClientSupported();\n debug(`${client.name}: ${isSupported ? '✓ supported' : '✗ not supported'}`);\n if (isSupported) {\n supportedClients.push(client);\n }\n }\n debug(\n `Found ${supportedClients.length} supported client(s): ${supportedClients\n .map((c) => c.name)\n .join(', ')}`,\n );\n\n return supportedClients;\n};\n\n/**\n * Add MCP server to clients. No prompts — pure orchestration.\n * Prompts are handled by McpScreen (TUI) or auto-accepted (CI).\n */\nexport const addMCPServerToClientsStep = async ({\n integration,\n local = false,\n ci = false,\n cloudRegion: _cloudRegion,\n features,\n apiKey,\n}: {\n integration?: Integration;\n local?: boolean;\n ci?: boolean;\n cloudRegion?: CloudRegion;\n features?: string[];\n apiKey?: string;\n}): Promise<string[]> => {\n const ui = getUI();\n\n // CI mode: skip MCP installation entirely\n if (ci) {\n ui.log.info('Skipping MCP installation (CI mode)');\n return [];\n }\n\n const supportedClients = await getSupportedClients();\n\n if (supportedClients.length === 0) {\n ui.log.info(\n 'No supported MCP clients detected. Skipping MCP installation.',\n );\n return [];\n }\n\n // Auto-install to all supported clients\n await withProgress('adding mcp servers', async () => {\n await addMCPServer(\n supportedClients,\n apiKey,\n features ?? [...ALL_FEATURE_VALUES],\n local,\n );\n });\n\n ui.log.success(\n `Added the MCP server to:\n ${supportedClients.map((c) => `- ${c.name}`).join('\\n ')} `,\n );\n\n analytics.wizardCapture('mcp servers added', {\n clients: supportedClients.map((c) => c.name),\n integration,\n });\n\n return supportedClients.map((c) => c.name);\n};\n\nexport const removeMCPServerFromClientsStep = async ({\n integration,\n local = false,\n}: {\n integration?: Integration;\n local?: boolean;\n}): Promise<string[]> => {\n const installedClients = await getInstalledClients(local);\n if (installedClients.length === 0) {\n analytics.wizardCapture('mcp no servers to remove', {\n integration,\n });\n return [];\n }\n\n // Auto-remove from all installed clients\n const results = await withProgress('removing mcp servers', async () => {\n await removeMCPServer(installedClients, local);\n return installedClients.map((c) => c.name);\n });\n\n analytics.wizardCapture('mcp servers removed', {\n clients: results,\n integration,\n });\n\n return results;\n};\n\nexport const getInstalledClients = async (\n local?: boolean,\n): Promise<MCPClient[]> => {\n const clients = await getSupportedClients();\n const installedClients: MCPClient[] = [];\n\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n return installedClients;\n};\n\nexport const addMCPServer = async (\n clients: MCPClient[],\n personalApiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.addServer(personalApiKey, selectedFeatures, local);\n }\n};\n\nexport const getSupportedPluginClients = (\n clients: MCPClient[],\n): Array<MCPClient & PluginCapable> => {\n return clients.filter(isPluginCapable).filter((c) => c.supportsPlugin());\n};\n\nexport const installPlugins = async (\n clients: Array<MCPClient & PluginCapable>,\n): Promise<string[]> => {\n const installed: string[] = [];\n for (const client of clients) {\n try {\n const result = await client.installPlugin();\n if (result.success) installed.push(client.name);\n } catch (err) {\n debug(`[installPlugins] installPlugin threw for ${client.name}: ${err}`);\n }\n }\n return installed;\n};\n\nexport const removeMCPServer = async (\n clients: MCPClient[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.removeServer(local);\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { n as __require } from "./rolldown-runtime-B_-DWIq7.js";
|
|
2
|
-
import { F as POSTHOG_PROPERTY_HEADER_PREFIX, G as WIZARD_VARIANTS, H as WIZARD_REMARK_EVENT_NAME, K as WIZARD_VARIANT_FLAG_KEY, N as POSTHOG_FLAG_HEADER_PREFIX, W as WIZARD_USER_AGENT, a as getLogFilePath, f as skillTmpPath, o as initLogFile, p as getUI, r as debug, s as logToFile, u as WIZARD_YARA_REPORT_FILE } from "./debug-
|
|
3
|
-
import { t as analytics } from "./analytics-
|
|
4
|
-
import { i as getLlmGatewayUrlFromHost } from "./urls-
|
|
2
|
+
import { F as POSTHOG_PROPERTY_HEADER_PREFIX, G as WIZARD_VARIANTS, H as WIZARD_REMARK_EVENT_NAME, K as WIZARD_VARIANT_FLAG_KEY, N as POSTHOG_FLAG_HEADER_PREFIX, W as WIZARD_USER_AGENT, a as getLogFilePath, f as skillTmpPath, o as initLogFile, p as getUI, r as debug, s as logToFile, u as WIZARD_YARA_REPORT_FILE } from "./debug-DnMO6O8O.js";
|
|
3
|
+
import { t as analytics } from "./analytics-Df-Xb81i.js";
|
|
4
|
+
import { i as getLlmGatewayUrlFromHost } from "./urls-BO7doNJG.js";
|
|
5
5
|
import { n as ADDITIONAL_FEATURE_PROMPTS } from "./wizard-session-d27JGRGi.js";
|
|
6
|
-
import { n as registerCleanup, r as wizardAbort, t as WizardError } from "./wizard-abort-
|
|
6
|
+
import { n as registerCleanup, r as wizardAbort, t as WizardError } from "./wizard-abort-CDXufkqJ.js";
|
|
7
|
+
import { createRequire } from "node:module";
|
|
7
8
|
import * as fs$1 from "fs";
|
|
8
9
|
import fs from "fs";
|
|
9
10
|
import path from "path";
|
|
@@ -1452,6 +1453,83 @@ function getWizardCommandments() {
|
|
|
1452
1453
|
return WIZARD_COMMANDMENTS;
|
|
1453
1454
|
}
|
|
1454
1455
|
//#endregion
|
|
1456
|
+
//#region src/lib/agent/signals.ts
|
|
1457
|
+
/**
|
|
1458
|
+
* Agent signal vocabulary — the marker strings the agent emits and the error
|
|
1459
|
+
* taxonomy the runner returns. Kept as a dependency-free leaf module so both
|
|
1460
|
+
* `agent-interface.ts` and `output-signals.ts` can import it without a cycle.
|
|
1461
|
+
*/
|
|
1462
|
+
const AgentSignals = {
|
|
1463
|
+
STATUS: "[STATUS]",
|
|
1464
|
+
ERROR_MCP_MISSING: "[ERROR-MCP-MISSING]",
|
|
1465
|
+
ERROR_RESOURCE_MISSING: "[ERROR-RESOURCE-MISSING]",
|
|
1466
|
+
ABORT: "[ABORT]",
|
|
1467
|
+
WIZARD_REMARK: "[WIZARD-REMARK]",
|
|
1468
|
+
BENCHMARK: "[BENCHMARK]",
|
|
1469
|
+
DASHBOARD_URL: "[DASHBOARD_URL]",
|
|
1470
|
+
NOTEBOOK_URL: "[NOTEBOOK_URL]"
|
|
1471
|
+
};
|
|
1472
|
+
//#endregion
|
|
1473
|
+
//#region src/lib/agent/output-signals.ts
|
|
1474
|
+
/**
|
|
1475
|
+
* Parses the signal-bearing lines out of agent output and discards the rest.
|
|
1476
|
+
*
|
|
1477
|
+
* The agent and SDK communicate non-content events (auth/API errors, YARA
|
|
1478
|
+
* violations, missing MCP/resource, the end-of-run remark) by emitting marker
|
|
1479
|
+
* strings inside their prose. `AgentOutputSignals` keeps only the lines that
|
|
1480
|
+
* carry such a marker, so the buffer stays bounded regardless of run length.
|
|
1481
|
+
*/
|
|
1482
|
+
/**
|
|
1483
|
+
* Single source of truth for the substrings runAgent scans agent output for.
|
|
1484
|
+
* `push()` retains a line iff it contains one of these values; every query
|
|
1485
|
+
* reads the same table, so retention and consumers cannot drift. API-error
|
|
1486
|
+
* status codes are not separate entries — `API_ERROR` is the one needle and
|
|
1487
|
+
* the code is a parameter to `hasApiErrorStatus`.
|
|
1488
|
+
*/
|
|
1489
|
+
const OUTPUT_SIGNALS = {
|
|
1490
|
+
API_ERROR: "API Error:",
|
|
1491
|
+
YARA_CRITICAL: "[YARA CRITICAL]",
|
|
1492
|
+
YARA_SCANNER_ERROR: "[YARA] Scanner error",
|
|
1493
|
+
MCP_MISSING: AgentSignals.ERROR_MCP_MISSING,
|
|
1494
|
+
RESOURCE_MISSING: AgentSignals.ERROR_RESOURCE_MISSING,
|
|
1495
|
+
WIZARD_REMARK: AgentSignals.WIZARD_REMARK
|
|
1496
|
+
};
|
|
1497
|
+
const SIGNAL_NEEDLES = Object.values(OUTPUT_SIGNALS);
|
|
1498
|
+
var AgentOutputSignals = class {
|
|
1499
|
+
lines = [];
|
|
1500
|
+
/** Parse step: keep the line only if it carries a known signal; drop prose. */
|
|
1501
|
+
push(text) {
|
|
1502
|
+
if (SIGNAL_NEEDLES.some((n) => text.includes(n))) this.lines.push(text);
|
|
1503
|
+
}
|
|
1504
|
+
get text() {
|
|
1505
|
+
return this.lines.join("\n");
|
|
1506
|
+
}
|
|
1507
|
+
/** True if any retained line contains the given signal's marker. */
|
|
1508
|
+
has(signal) {
|
|
1509
|
+
return this.text.includes(OUTPUT_SIGNALS[signal]);
|
|
1510
|
+
}
|
|
1511
|
+
hasApiError() {
|
|
1512
|
+
return this.has("API_ERROR");
|
|
1513
|
+
}
|
|
1514
|
+
/** True for a specific HTTP status, e.g. 401 (auth) or 429 (rate limit). */
|
|
1515
|
+
hasApiErrorStatus(code) {
|
|
1516
|
+
return this.text.includes(`${OUTPUT_SIGNALS.API_ERROR} ${code}`);
|
|
1517
|
+
}
|
|
1518
|
+
hasYaraViolation() {
|
|
1519
|
+
return this.has("YARA_CRITICAL") || this.has("YARA_SCANNER_ERROR");
|
|
1520
|
+
}
|
|
1521
|
+
/** Joined `API Error: …` lines for the user-facing message, or undefined. */
|
|
1522
|
+
apiErrorMessage() {
|
|
1523
|
+
const m = this.text.match(new RegExp(`${OUTPUT_SIGNALS.API_ERROR} [^\\n]+`, "g"));
|
|
1524
|
+
return m ? m.join("\n") : void 0;
|
|
1525
|
+
}
|
|
1526
|
+
/** Text after the single `[WIZARD-REMARK]` marker, trimmed, or undefined. */
|
|
1527
|
+
remark() {
|
|
1528
|
+
const re = new RegExp(`${OUTPUT_SIGNALS.WIZARD_REMARK.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*(.+?)(?:\\n|$)`, "s");
|
|
1529
|
+
return this.text.match(re)?.[1]?.trim() || void 0;
|
|
1530
|
+
}
|
|
1531
|
+
};
|
|
1532
|
+
//#endregion
|
|
1455
1533
|
//#region src/lib/agent/agent-interface.ts
|
|
1456
1534
|
/**
|
|
1457
1535
|
* Shared agent interface for PostHog wizards
|
|
@@ -1467,19 +1545,9 @@ async function getSDKModule() {
|
|
|
1467
1545
|
* This ensures we use the SDK's bundled version rather than the user's installed Claude Code.
|
|
1468
1546
|
*/
|
|
1469
1547
|
function getClaudeCodeExecutablePath() {
|
|
1470
|
-
const sdkPackagePath = __require.resolve("@anthropic-ai/claude-agent-sdk");
|
|
1548
|
+
const sdkPackagePath = (typeof __require !== "undefined" ? __require : createRequire(process.argv[1] ?? `${process.cwd()}/`)).resolve("@anthropic-ai/claude-agent-sdk");
|
|
1471
1549
|
return path.join(path.dirname(sdkPackagePath), "cli.js");
|
|
1472
1550
|
}
|
|
1473
|
-
const AgentSignals = {
|
|
1474
|
-
STATUS: "[STATUS]",
|
|
1475
|
-
ERROR_MCP_MISSING: "[ERROR-MCP-MISSING]",
|
|
1476
|
-
ERROR_RESOURCE_MISSING: "[ERROR-RESOURCE-MISSING]",
|
|
1477
|
-
ABORT: "[ABORT]",
|
|
1478
|
-
WIZARD_REMARK: "[WIZARD-REMARK]",
|
|
1479
|
-
BENCHMARK: "[BENCHMARK]",
|
|
1480
|
-
DASHBOARD_URL: "[DASHBOARD_URL]",
|
|
1481
|
-
NOTEBOOK_URL: "[NOTEBOOK_URL]"
|
|
1482
|
-
};
|
|
1483
1551
|
const BLOCKING_ENV_KEYS = [
|
|
1484
1552
|
"ANTHROPIC_API_KEY",
|
|
1485
1553
|
"ANTHROPIC_BASE_URL",
|
|
@@ -1585,7 +1653,7 @@ function restoreClaudeSettings(workingDirectory) {
|
|
|
1585
1653
|
* Phase 2 — collect remark (once): block with remark prompt
|
|
1586
1654
|
* Phase 3 — allow stop: return {}
|
|
1587
1655
|
*/
|
|
1588
|
-
function createStopHook(featureQueue,
|
|
1656
|
+
function createStopHook(featureQueue, signals) {
|
|
1589
1657
|
let featureIndex = 0;
|
|
1590
1658
|
let remarkRequested = false;
|
|
1591
1659
|
return (input) => {
|
|
@@ -1595,11 +1663,9 @@ function createStopHook(featureQueue, collectedText) {
|
|
|
1595
1663
|
remarkRequested,
|
|
1596
1664
|
queueLength: featureQueue.length
|
|
1597
1665
|
});
|
|
1598
|
-
if (
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
return {};
|
|
1602
|
-
}
|
|
1666
|
+
if (signals?.hasApiError()) {
|
|
1667
|
+
logToFile("Stop hook: API error detected, allowing immediate stop");
|
|
1668
|
+
return {};
|
|
1603
1669
|
}
|
|
1604
1670
|
if (featureIndex < featureQueue.length) {
|
|
1605
1671
|
const feature = featureQueue[featureIndex++];
|
|
@@ -1903,8 +1969,8 @@ async function initializeAgent(config, options) {
|
|
|
1903
1969
|
* Check agent output for YARA scanner violations.
|
|
1904
1970
|
* Used in both the success and catch paths of runAgent.
|
|
1905
1971
|
*/
|
|
1906
|
-
function checkYaraViolation(
|
|
1907
|
-
if (
|
|
1972
|
+
function checkYaraViolation(signals, spinner) {
|
|
1973
|
+
if (signals.hasYaraViolation()) {
|
|
1908
1974
|
logToFile("Agent error: YARA_VIOLATION");
|
|
1909
1975
|
spinner.stop("Security violation detected");
|
|
1910
1976
|
return { error: "WIZARD_YARA_VIOLATION" };
|
|
@@ -1919,6 +1985,7 @@ function checkYaraViolation(outputText, spinner) {
|
|
|
1919
1985
|
*/
|
|
1920
1986
|
async function runAgent(agentConfig, prompt, options, spinner, config, middleware) {
|
|
1921
1987
|
const { spinnerMessage = "Customizing your PostHog setup...", successMessage = "PostHog integration complete", errorMessage = "Integration failed", abortCases = [] } = config ?? {};
|
|
1988
|
+
logToFile("Starting agent run");
|
|
1922
1989
|
const { query } = await getSDKModule();
|
|
1923
1990
|
spinner.start(spinnerMessage);
|
|
1924
1991
|
const cliPath = getClaudeCodeExecutablePath();
|
|
@@ -1926,7 +1993,7 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
1926
1993
|
logToFile("Claude Code executable:", cliPath);
|
|
1927
1994
|
logToFile("Prompt:", prompt);
|
|
1928
1995
|
const startTime = Date.now();
|
|
1929
|
-
const
|
|
1996
|
+
const signals = new AgentOutputSignals();
|
|
1930
1997
|
let receivedSuccessResult = false;
|
|
1931
1998
|
let loggedInitialContext = false;
|
|
1932
1999
|
let lastResultMessage = null;
|
|
@@ -1954,13 +2021,8 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
1954
2021
|
logToFile(`Ignoring post-completion error, agent completed successfully in ${durationSeconds}s`);
|
|
1955
2022
|
logToFile("Suppressed error:", suppressedError.message);
|
|
1956
2023
|
} else logToFile(`Agent run completed in ${durationSeconds}s`);
|
|
1957
|
-
const
|
|
1958
|
-
|
|
1959
|
-
const remarkMatch = outputText.match(remarkRegex);
|
|
1960
|
-
if (remarkMatch && remarkMatch[1]) {
|
|
1961
|
-
const remark = remarkMatch[1].trim();
|
|
1962
|
-
if (remark) analytics.capture(WIZARD_REMARK_EVENT_NAME, { remark });
|
|
1963
|
-
}
|
|
2024
|
+
const remark = signals.remark();
|
|
2025
|
+
if (remark) analytics.capture(WIZARD_REMARK_EVENT_NAME, { remark });
|
|
1964
2026
|
analytics.wizardCapture("agent completed", {
|
|
1965
2027
|
duration_ms: durationMs,
|
|
1966
2028
|
duration_seconds: durationSeconds
|
|
@@ -2070,7 +2132,7 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2070
2132
|
PreToolUse: createPreToolUseYaraHooks(),
|
|
2071
2133
|
PostToolUse: createPostToolUseYaraHooks(),
|
|
2072
2134
|
Stop: [{
|
|
2073
|
-
hooks: [createStopHook(config?.additionalFeatureQueue ?? [],
|
|
2135
|
+
hooks: [createStopHook(config?.additionalFeatureQueue ?? [], signals)],
|
|
2074
2136
|
timeout: 30
|
|
2075
2137
|
}]
|
|
2076
2138
|
}
|
|
@@ -2094,7 +2156,7 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2094
2156
|
}
|
|
2095
2157
|
loggedInitialContext = true;
|
|
2096
2158
|
}
|
|
2097
|
-
handleSDKMessage(message, options, spinner,
|
|
2159
|
+
handleSDKMessage(message, options, spinner, signals, receivedSuccessResult, tasks);
|
|
2098
2160
|
if (abortCases.length > 0 && !abortReason && message.type === "assistant") {
|
|
2099
2161
|
const content = message.message?.content;
|
|
2100
2162
|
if (Array.isArray(content)) {
|
|
@@ -2110,7 +2172,7 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2110
2172
|
}
|
|
2111
2173
|
}
|
|
2112
2174
|
}
|
|
2113
|
-
if (message.type === "assistant" &&
|
|
2175
|
+
if (message.type === "assistant" && signals.hasApiErrorStatus(401)) {
|
|
2114
2176
|
signalDone();
|
|
2115
2177
|
spinner.stop("Authentication failed");
|
|
2116
2178
|
const conflicts = checkAllSettingsConflicts(options.installDir);
|
|
@@ -2148,22 +2210,20 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2148
2210
|
message: abortReason
|
|
2149
2211
|
};
|
|
2150
2212
|
}
|
|
2151
|
-
const
|
|
2152
|
-
const yaraResult = checkYaraViolation(outputText, spinner);
|
|
2213
|
+
const yaraResult = checkYaraViolation(signals, spinner);
|
|
2153
2214
|
if (yaraResult) return yaraResult;
|
|
2154
|
-
if (
|
|
2215
|
+
if (signals.has("MCP_MISSING")) {
|
|
2155
2216
|
logToFile("Agent error: MCP_MISSING");
|
|
2156
2217
|
spinner.stop("Agent could not access PostHog MCP");
|
|
2157
2218
|
return { error: "WIZARD_MCP_MISSING" };
|
|
2158
2219
|
}
|
|
2159
|
-
if (
|
|
2220
|
+
if (signals.has("RESOURCE_MISSING")) {
|
|
2160
2221
|
logToFile("Agent error: RESOURCE_MISSING");
|
|
2161
2222
|
spinner.stop("Agent could not access setup resource");
|
|
2162
2223
|
return { error: "WIZARD_RESOURCE_MISSING" };
|
|
2163
2224
|
}
|
|
2164
|
-
const
|
|
2165
|
-
|
|
2166
|
-
if (outputText.includes("API Error: 429")) {
|
|
2225
|
+
const apiErrorMessage = signals.apiErrorMessage() ?? "Unknown API error";
|
|
2226
|
+
if (signals.hasApiErrorStatus(429)) {
|
|
2167
2227
|
logToFile("Agent error: RATE_LIMIT");
|
|
2168
2228
|
spinner.stop("Rate limit exceeded");
|
|
2169
2229
|
return {
|
|
@@ -2171,7 +2231,7 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2171
2231
|
message: apiErrorMessage
|
|
2172
2232
|
};
|
|
2173
2233
|
}
|
|
2174
|
-
if (
|
|
2234
|
+
if (signals.hasApiError()) {
|
|
2175
2235
|
logToFile("Agent error: API_ERROR");
|
|
2176
2236
|
spinner.stop("API error occurred");
|
|
2177
2237
|
return {
|
|
@@ -2190,12 +2250,10 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2190
2250
|
};
|
|
2191
2251
|
}
|
|
2192
2252
|
if (receivedSuccessResult) return completeWithSuccess(error);
|
|
2193
|
-
const
|
|
2194
|
-
const yaraResult = checkYaraViolation(outputText, spinner);
|
|
2253
|
+
const yaraResult = checkYaraViolation(signals, spinner);
|
|
2195
2254
|
if (yaraResult) return yaraResult;
|
|
2196
|
-
const
|
|
2197
|
-
|
|
2198
|
-
if (outputText.includes("API Error: 429")) {
|
|
2255
|
+
const apiErrorMessage = signals.apiErrorMessage() ?? "Unknown API error";
|
|
2256
|
+
if (signals.hasApiErrorStatus(429)) {
|
|
2199
2257
|
logToFile("Agent error (caught): RATE_LIMIT");
|
|
2200
2258
|
spinner.stop("Rate limit exceeded");
|
|
2201
2259
|
return {
|
|
@@ -2203,7 +2261,7 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
|
|
|
2203
2261
|
message: apiErrorMessage
|
|
2204
2262
|
};
|
|
2205
2263
|
}
|
|
2206
|
-
if (
|
|
2264
|
+
if (signals.hasApiError()) {
|
|
2207
2265
|
logToFile("Agent error (caught): API_ERROR");
|
|
2208
2266
|
spinner.stop("API error occurred");
|
|
2209
2267
|
return {
|
|
@@ -2331,7 +2389,7 @@ function extractTaskIdFromResult(content) {
|
|
|
2331
2389
|
}
|
|
2332
2390
|
}
|
|
2333
2391
|
}
|
|
2334
|
-
function handleSDKMessage(message, options, spinner,
|
|
2392
|
+
function handleSDKMessage(message, options, spinner, signals, receivedSuccessResult = false, tasks) {
|
|
2335
2393
|
const STATUS_RANK = {
|
|
2336
2394
|
completed: 0,
|
|
2337
2395
|
in_progress: 1
|
|
@@ -2349,7 +2407,7 @@ function handleSDKMessage(message, options, spinner, collectedText, receivedSucc
|
|
|
2349
2407
|
const content = message.message?.content;
|
|
2350
2408
|
if (Array.isArray(content)) for (const block of content) {
|
|
2351
2409
|
if (block.type === "text" && typeof block.text === "string") {
|
|
2352
|
-
|
|
2410
|
+
signals.push(block.text);
|
|
2353
2411
|
const statusRegex = new RegExp(`^.*${AgentSignals.STATUS.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*(.+?)$`, "m");
|
|
2354
2412
|
const statusMatch = block.text.match(statusRegex);
|
|
2355
2413
|
if (statusMatch) {
|
|
@@ -2388,14 +2446,14 @@ function handleSDKMessage(message, options, spinner, collectedText, receivedSucc
|
|
|
2388
2446
|
case "result":
|
|
2389
2447
|
if (message.is_error) {
|
|
2390
2448
|
logToFile("Agent result with error:", message.result);
|
|
2391
|
-
if (typeof message.result === "string")
|
|
2449
|
+
if (typeof message.result === "string") signals.push(message.result);
|
|
2392
2450
|
if (message.errors && !receivedSuccessResult) for (const err of message.errors) {
|
|
2393
2451
|
getUI().log.error(`Error: ${err}`);
|
|
2394
2452
|
logToFile("ERROR:", err);
|
|
2395
2453
|
}
|
|
2396
2454
|
} else if (message.subtype === "success") {
|
|
2397
2455
|
logToFile("Agent completed successfully");
|
|
2398
|
-
if (typeof message.result === "string")
|
|
2456
|
+
if (typeof message.result === "string") signals.push(message.result);
|
|
2399
2457
|
} else {
|
|
2400
2458
|
logToFile("Agent result with error:", message.result);
|
|
2401
2459
|
if (message.errors && !receivedSuccessResult) for (const err of message.errors) {
|
|
@@ -2417,6 +2475,6 @@ function handleSDKMessage(message, options, spinner, collectedText, receivedSucc
|
|
|
2417
2475
|
}
|
|
2418
2476
|
}
|
|
2419
2477
|
//#endregion
|
|
2420
|
-
export { AUDIT_REPORT_FILE as _,
|
|
2478
|
+
export { AUDIT_REPORT_FILE as _, initializeAgent as a, getAuditChecks as b, AgentSignals as c, WIZARD_TOOL_NAMES as d, downloadSkill as f, AUDIT_CHECKS_KEY as g, AUDIT_CHECKS_FILE as h, checkAllSettingsConflicts as i, formatScanReport as l, installSkillById as m, buildAgentEnv as n, restoreClaudeSettings as o, fetchSkillMenu as p, buildWizardMetadata as r, runAgent as s, backupAndFixClaudeSettings as t, writeScanReport as u, AUDIT_SEVERITY_STYLE as v, coerceAuditChecks as y };
|
|
2421
2479
|
|
|
2422
|
-
//# sourceMappingURL=agent-interface-
|
|
2480
|
+
//# sourceMappingURL=agent-interface-CQU6x4Hj.js.map
|