@praxis.guard/auditor-cli 0.0.50 → 0.0.52

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 (103) hide show
  1. package/README.md +13 -0
  2. package/README.vscode.md +48 -0
  3. package/dist/adapters/copilot-cli/adapter.d.ts +10 -0
  4. package/dist/adapters/copilot-cli/adapter.d.ts.map +1 -0
  5. package/dist/adapters/copilot-cli/adapter.js +105 -0
  6. package/dist/adapters/copilot-cli/adapter.js.map +1 -0
  7. package/dist/adapters/copilot-cli/config.d.ts +18 -0
  8. package/dist/adapters/copilot-cli/config.d.ts.map +1 -0
  9. package/dist/adapters/copilot-cli/config.js +118 -0
  10. package/dist/adapters/copilot-cli/config.js.map +1 -0
  11. package/dist/adapters/copilot-cli/index.d.ts +3 -0
  12. package/dist/adapters/copilot-cli/index.d.ts.map +1 -0
  13. package/dist/adapters/copilot-cli/index.js +3 -0
  14. package/dist/adapters/copilot-cli/index.js.map +1 -0
  15. package/dist/adapters/copilot-cli/paths.d.ts +8 -0
  16. package/dist/adapters/copilot-cli/paths.d.ts.map +1 -0
  17. package/dist/adapters/copilot-cli/paths.js +18 -0
  18. package/dist/adapters/copilot-cli/paths.js.map +1 -0
  19. package/dist/adapters/copilot-cli.d.ts +2 -0
  20. package/dist/adapters/copilot-cli.d.ts.map +1 -0
  21. package/dist/adapters/copilot-cli.js +2 -0
  22. package/dist/adapters/copilot-cli.js.map +1 -0
  23. package/dist/adapters/registry.d.ts.map +1 -1
  24. package/dist/adapters/registry.js +4 -0
  25. package/dist/adapters/registry.js.map +1 -1
  26. package/dist/adapters/select-targets.d.ts.map +1 -1
  27. package/dist/adapters/select-targets.js +4 -3
  28. package/dist/adapters/select-targets.js.map +1 -1
  29. package/dist/adapters/types.d.ts +5 -1
  30. package/dist/adapters/types.d.ts.map +1 -1
  31. package/dist/adapters/vscode.d.ts +9 -0
  32. package/dist/adapters/vscode.d.ts.map +1 -0
  33. package/dist/adapters/vscode.js +87 -0
  34. package/dist/adapters/vscode.js.map +1 -0
  35. package/dist/cli/dispatch-hook.d.ts.map +1 -1
  36. package/dist/cli/dispatch-hook.js +5 -0
  37. package/dist/cli/dispatch-hook.js.map +1 -1
  38. package/dist/cli/doctor.d.ts.map +1 -1
  39. package/dist/cli/doctor.js +4 -1
  40. package/dist/cli/doctor.js.map +1 -1
  41. package/dist/cli/help.d.ts.map +1 -1
  42. package/dist/cli/help.js +2 -1
  43. package/dist/cli/help.js.map +1 -1
  44. package/dist/cli/setup-all.d.ts.map +1 -1
  45. package/dist/cli/setup-all.js +2 -0
  46. package/dist/cli/setup-all.js.map +1 -1
  47. package/dist/cli/setup-doctor.d.ts.map +1 -1
  48. package/dist/cli/setup-doctor.js +8 -1
  49. package/dist/cli/setup-doctor.js.map +1 -1
  50. package/dist/cli/setup-hook.d.ts.map +1 -1
  51. package/dist/cli/setup-hook.js +2 -0
  52. package/dist/cli/setup-hook.js.map +1 -1
  53. package/dist/cli/setup-mcp.d.ts.map +1 -1
  54. package/dist/cli/setup-mcp.js +2 -0
  55. package/dist/cli/setup-mcp.js.map +1 -1
  56. package/dist/cli/setup-warnings.d.ts +3 -0
  57. package/dist/cli/setup-warnings.d.ts.map +1 -0
  58. package/dist/cli/setup-warnings.js +11 -0
  59. package/dist/cli/setup-warnings.js.map +1 -0
  60. package/dist/codex/config-hooks.d.ts +7 -0
  61. package/dist/codex/config-hooks.d.ts.map +1 -0
  62. package/dist/codex/config-hooks.js +61 -0
  63. package/dist/codex/config-hooks.js.map +1 -0
  64. package/dist/codex/config-io.d.ts +6 -0
  65. package/dist/codex/config-io.d.ts.map +1 -0
  66. package/dist/codex/config-io.js +34 -0
  67. package/dist/codex/config-io.js.map +1 -0
  68. package/dist/codex/config-toml.d.ts +4 -0
  69. package/dist/codex/config-toml.d.ts.map +1 -0
  70. package/dist/codex/config-toml.js +65 -0
  71. package/dist/codex/config-toml.js.map +1 -0
  72. package/dist/codex/config.d.ts +1 -4
  73. package/dist/codex/config.d.ts.map +1 -1
  74. package/dist/codex/config.js +8 -152
  75. package/dist/codex/config.js.map +1 -1
  76. package/dist/codex/evaluate-tool-audit.d.ts +2 -1
  77. package/dist/codex/evaluate-tool-audit.d.ts.map +1 -1
  78. package/dist/codex/evaluate-tool-audit.js +2 -2
  79. package/dist/codex/evaluate-tool-audit.js.map +1 -1
  80. package/dist/codex/evaluate-tool-bash.d.ts +2 -2
  81. package/dist/codex/evaluate-tool-bash.d.ts.map +1 -1
  82. package/dist/codex/evaluate-tool-bash.js +3 -3
  83. package/dist/codex/evaluate-tool-bash.js.map +1 -1
  84. package/dist/codex/evaluate-tool-mcp.d.ts +2 -2
  85. package/dist/codex/evaluate-tool-mcp.d.ts.map +1 -1
  86. package/dist/codex/evaluate-tool-mcp.js +3 -3
  87. package/dist/codex/evaluate-tool-mcp.js.map +1 -1
  88. package/dist/codex/evaluate-tool-types.d.ts +6 -0
  89. package/dist/codex/evaluate-tool-types.d.ts.map +1 -1
  90. package/dist/codex/evaluate-tool-types.js +5 -0
  91. package/dist/codex/evaluate-tool-types.js.map +1 -1
  92. package/dist/codex/evaluate-tool.d.ts +2 -2
  93. package/dist/codex/evaluate-tool.d.ts.map +1 -1
  94. package/dist/codex/evaluate-tool.js +4 -3
  95. package/dist/codex/evaluate-tool.js.map +1 -1
  96. package/dist/hooks/run-copilot-cli-pre-tool-use.d.ts +2 -0
  97. package/dist/hooks/run-copilot-cli-pre-tool-use.d.ts.map +1 -0
  98. package/dist/hooks/run-copilot-cli-pre-tool-use.js +77 -0
  99. package/dist/hooks/run-copilot-cli-pre-tool-use.js.map +1 -0
  100. package/dist/telemetry/agent-host.d.ts.map +1 -1
  101. package/dist/telemetry/agent-host.js +1 -0
  102. package/dist/telemetry/agent-host.js.map +1 -1
  103. package/package.json +1 -1
package/README.md CHANGED
@@ -23,6 +23,19 @@ Each `auditor setup` command auto-detects installed agents and configures all of
23
23
  | **Claude Desktop** (`--for=claude-desktop`) | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) / `%APPDATA%/Claude/claude_desktop_config.json` (Windows) | — | — |
24
24
  | **Claude Code** (`--for=claude-code`) | `~/.claude.json` | `PreToolUse` for Bash | — |
25
25
  | **Codex** (`--for=codex`) | `.codex/config.toml` (repo-local) | `.codex/hooks.json` (`PreToolUse` + `PermissionRequest`) | — |
26
+ | **GitHub Copilot CLI** (`--for=copilot-cli`) | `~/.copilot/mcp-config.json` | `~/.copilot/hooks/praxis.json` or `.github/copilot/settings.local.json` | — |
27
+
28
+ ## GitHub Copilot CLI workflow
29
+
30
+ ```bash
31
+ auditor setup all --for=copilot-cli
32
+ auditor setup hook --for=copilot-cli --project .
33
+ auditor setup doctor --project .
34
+ ```
35
+
36
+ The Copilot adapter installs a local `preToolUse` hook for shell and MCP enforcement and registers
37
+ the `praxis-guard` MCP server. Repository-local setup uses `settings.local.json`; it deliberately
38
+ does not create `.github/hooks/*.json`, which GitHub Copilot cloud agent would also execute.
26
39
 
27
40
  ## Codex app workflow
28
41
 
@@ -0,0 +1,48 @@
1
+ # VS Code integration for `auditor` CLI
2
+
3
+ This document explains how the `vscode` AgentAdapter integrates Visual Studio Code with the `auditor` CLI and how to enable it in your development environment.
4
+
5
+ What it does
6
+ - The `vscode` adapter writes `PRAXIS_AGENT_HOST = "vscode"` into your VS Code user settings under the appropriate `terminal.integrated.env.*` key for your platform. This ensures terminals and tasks launched by VS Code receive the env var so the Praxis MCP heartbeat and telemetry can tag calls coming from VS Code.
7
+
8
+ Where it writes
9
+ - macOS: `~/Library/Application Support/Code/User/settings.json`
10
+ - Linux: `~/.config/Code/User/settings.json`
11
+ - Windows: `%APPDATA%/Code/User/settings.json`
12
+
13
+ Enable (write changes)
14
+ Run the auditor CLI (package must be built) to write settings:
15
+
16
+ ```bash
17
+ pnpm --filter @praxis.guard/auditor-cli run -- auditor setup mcp --for=vscode
18
+ ```
19
+
20
+ You can also include VS Code when configuring all known adapters:
21
+
22
+ ```bash
23
+ pnpm --filter @praxis.guard/auditor-cli run -- auditor setup all
24
+ ```
25
+
26
+ Dry-run (preview changes)
27
+
28
+ ```bash
29
+ pnpm --filter @praxis.guard/auditor-cli run -- auditor setup mcp --for=vscode --dry-run
30
+ ```
31
+
32
+ Verify (doctor)
33
+
34
+ ```bash
35
+ pnpm --filter @praxis.guard/auditor-cli run -- auditor setup doctor
36
+ ```
37
+
38
+ Notes and troubleshooting
39
+ - After `auditor setup mcp --for=vscode` you must restart VS Code for terminal env changes to take effect.
40
+ - To undo the change, remove `PRAXIS_AGENT_HOST` from the `terminal.integrated.env.*` block in your user `settings.json`.
41
+ - The adapter only detects VS Code when a user settings file exists; if you want the CLI to target VS Code in CI or unusual environments, provide the explicit `--user-config`/`--for` flags as supported by the `auditor` setup commands.
42
+
43
+ Security
44
+ - The adapter only writes a single string env var into user settings. It does not change other settings or commit repository files.
45
+
46
+ Where to look in the code
47
+ - Adapter implementation: `packages/auditor-cli/src/adapters/vscode.ts`
48
+ - Tests: `packages/auditor-cli/src/adapters/vscode.test.ts`
@@ -0,0 +1,10 @@
1
+ import type { AgentAdapter, AgentStatus, SetupResult, StatusOpts, UpsertHookOpts, UpsertMcpOpts } from "../types.js";
2
+ export declare class CopilotCliAdapter implements AgentAdapter {
3
+ readonly id: "copilot-cli";
4
+ readonly label = "GitHub Copilot CLI";
5
+ detectInstalled(): boolean;
6
+ upsertHook(opts: UpsertHookOpts): Promise<SetupResult>;
7
+ upsertMcp(opts: UpsertMcpOpts): Promise<SetupResult>;
8
+ status(opts?: StatusOpts): Promise<AgentStatus>;
9
+ }
10
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAsBrB,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,KAAK,wBAAwB;IAEtC,eAAe,IAAI,OAAO;IAIpB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBtD,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IA2BpD,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CA8CtD"}
@@ -0,0 +1,105 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { readJson, writeJsonAtomic } from "../claude-code/config-io.js";
4
+ import { asJsonMap, cloneJson, commandAvailable, hasConfiguredMcp, hasPraxisHook, hookConfigsInDir, readForStatus, statusWarnings, upsertPraxisHook, } from "./config.js";
5
+ import { AGENT_HOST, copilotGlobalHooksPath, copilotHomeDir, copilotMcpConfigPath, copilotProjectSettingsPath, MCP_SERVER_KEY, } from "./paths.js";
6
+ export class CopilotCliAdapter {
7
+ id = "copilot-cli";
8
+ label = "GitHub Copilot CLI";
9
+ detectInstalled() {
10
+ return existsSync(copilotHomeDir());
11
+ }
12
+ async upsertHook(opts) {
13
+ const project = opts.projectDir || process.cwd();
14
+ const cfgPath = opts.explicitPath?.trim() || (opts.scope === "project"
15
+ ? copilotProjectSettingsPath(project)
16
+ : copilotGlobalHooksPath());
17
+ const existing = await readJson(cfgPath);
18
+ const config = cloneJson(existing);
19
+ upsertPraxisHook(config, opts.scope === "global");
20
+ const changed = JSON.stringify(existing ?? {}) !== JSON.stringify(config);
21
+ if (changed && !opts.dryRun)
22
+ await writeJsonAtomic(cfgPath, config);
23
+ return {
24
+ path: cfgPath,
25
+ changed,
26
+ message: changed
27
+ ? opts.dryRun ? "would update GitHub Copilot CLI preToolUse hook" : "updated GitHub Copilot CLI preToolUse hook"
28
+ : "GitHub Copilot CLI preToolUse hook already up to date",
29
+ };
30
+ }
31
+ async upsertMcp(opts) {
32
+ const cfgPath = opts.explicitPath?.trim() || copilotMcpConfigPath();
33
+ const existing = await readJson(cfgPath);
34
+ const config = cloneJson(existing);
35
+ const servers = asJsonMap(config.mcpServers) ?? {};
36
+ config.mcpServers = servers;
37
+ const entry = asJsonMap(servers[MCP_SERVER_KEY]) ?? {};
38
+ const env = asJsonMap(entry.env) ?? {};
39
+ servers[MCP_SERVER_KEY] = {
40
+ ...entry,
41
+ type: "local",
42
+ command: "auditor",
43
+ args: ["mcp"],
44
+ env: { ...env, PRAXIS_AGENT_HOST: AGENT_HOST },
45
+ tools: ["*"],
46
+ };
47
+ const changed = JSON.stringify(existing ?? {}) !== JSON.stringify(config);
48
+ if (changed && !opts.dryRun)
49
+ await writeJsonAtomic(cfgPath, config);
50
+ return {
51
+ path: cfgPath,
52
+ changed,
53
+ message: changed
54
+ ? opts.dryRun ? "would update GitHub Copilot CLI MCP config" : "updated GitHub Copilot CLI MCP config"
55
+ : "GitHub Copilot CLI MCP config already up to date",
56
+ };
57
+ }
58
+ async status(opts) {
59
+ const projectDir = opts?.projectDir || process.cwd();
60
+ const globalPath = copilotGlobalHooksPath();
61
+ const projectPath = copilotProjectSettingsPath(projectDir);
62
+ const repositorySettingsPath = path.join(projectDir, ".github", "copilot", "settings.json");
63
+ const userSettingsPath = path.join(copilotHomeDir(), "settings.json");
64
+ const mcpPath = opts?.mcpConfigPath?.trim() || copilotMcpConfigPath();
65
+ const warnings = [];
66
+ const [globalConfig, projectConfig, repositoryConfig, userConfig, mcpConfig, userHookFiles, projectHookFiles] = await Promise.all([
67
+ readForStatus(globalPath, warnings),
68
+ readForStatus(projectPath, warnings),
69
+ readForStatus(repositorySettingsPath, warnings),
70
+ readForStatus(userSettingsPath, warnings),
71
+ readForStatus(mcpPath, warnings),
72
+ hookConfigsInDir(path.join(copilotHomeDir(), "hooks"), globalPath),
73
+ hookConfigsInDir(path.join(projectDir, ".github", "hooks")),
74
+ ]);
75
+ const globalHook = hasPraxisHook(globalConfig);
76
+ const projectHook = hasPraxisHook(projectConfig);
77
+ const mcpConfigured = hasConfiguredMcp(mcpConfig);
78
+ const disabledConfigs = [projectConfig, repositoryConfig];
79
+ const disabled = disabledConfigs.some((config) => config?.disableAllHooks === true);
80
+ const auditorAvailable = commandAvailable("auditor");
81
+ const hookCount = [globalConfig, projectConfig, repositoryConfig, userConfig, ...userHookFiles, ...projectHookFiles]
82
+ .filter(hasPraxisHook).length;
83
+ const hookConfigured = globalHook || projectHook;
84
+ warnings.push(...statusWarnings({
85
+ hookConfigured,
86
+ mcpConfigured,
87
+ disabled,
88
+ hookCount,
89
+ auditorAvailable,
90
+ projectPath,
91
+ }));
92
+ return {
93
+ installed: this.detectInstalled(),
94
+ hook: {
95
+ global: { shell: globalHook && !disabled, mcp: globalHook && !disabled, path: globalPath, shellLabel: "preToolUse", mcpLabel: "preToolUse" },
96
+ project: { shell: projectHook && !disabled, mcp: projectHook && !disabled, path: projectPath, shellLabel: "preToolUse", mcpLabel: "preToolUse" },
97
+ },
98
+ mcp: { configured: mcpConfigured, path: mcpPath },
99
+ warnings,
100
+ ready: !disabled && auditorAvailable,
101
+ hookReady: hookConfigured && !disabled,
102
+ };
103
+ }
104
+ }
105
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type JsonMap } from "../claude-code/config-io.js";
2
+ export declare function cloneJson(value: JsonMap | null): JsonMap;
3
+ export declare function asJsonMap(value: unknown): JsonMap | undefined;
4
+ export declare function hasPraxisHook(config: JsonMap | null): boolean;
5
+ export declare function upsertPraxisHook(config: JsonMap, includeVersion: boolean): void;
6
+ export declare function hasConfiguredMcp(config: JsonMap | null): boolean;
7
+ export declare function commandAvailable(command: string): boolean;
8
+ export declare function readForStatus(pathname: string, warnings: string[]): Promise<JsonMap | null>;
9
+ export declare function hookConfigsInDir(dir: string, excludedPath?: string): Promise<JsonMap[]>;
10
+ export declare function statusWarnings(input: {
11
+ hookConfigured: boolean;
12
+ mcpConfigured: boolean;
13
+ disabled: boolean;
14
+ hookCount: number;
15
+ auditorAvailable: boolean;
16
+ projectPath: string;
17
+ }): string[];
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAIrE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAExD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAG7D;AAOD,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAQ7D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI,CAc/E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAShE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAczD;AAMD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAOzB;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAU7F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,EAAE,CAYX"}
@@ -0,0 +1,118 @@
1
+ import { accessSync, constants } from "node:fs";
2
+ import { readdir } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { readJson } from "../claude-code/config-io.js";
5
+ import { AGENT_HOST, HOOK_COMMAND, MCP_SERVER_KEY } from "./paths.js";
6
+ export function cloneJson(value) {
7
+ return value ? JSON.parse(JSON.stringify(value)) : {};
8
+ }
9
+ export function asJsonMap(value) {
10
+ if (!value || typeof value !== "object" || Array.isArray(value))
11
+ return undefined;
12
+ return value;
13
+ }
14
+ function matchesStringArray(value, expected) {
15
+ if (!Array.isArray(value) || value.length !== expected.length)
16
+ return false;
17
+ return expected.every((item, index) => value[index] === item);
18
+ }
19
+ export function hasPraxisHook(config) {
20
+ const hooks = config?.hooks;
21
+ if (!hooks || typeof hooks !== "object" || Array.isArray(hooks))
22
+ return false;
23
+ const entries = hooks.preToolUse;
24
+ return Array.isArray(entries) && entries.some((entry) => {
25
+ if (!entry || typeof entry !== "object")
26
+ return false;
27
+ return entry.command === HOOK_COMMAND;
28
+ });
29
+ }
30
+ export function upsertPraxisHook(config, includeVersion) {
31
+ if (includeVersion)
32
+ config.version = 1;
33
+ if (!config.hooks || typeof config.hooks !== "object" || Array.isArray(config.hooks)) {
34
+ config.hooks = {};
35
+ }
36
+ const hooks = config.hooks;
37
+ const entries = Array.isArray(hooks.preToolUse) ? hooks.preToolUse : [];
38
+ hooks.preToolUse = [
39
+ ...entries.filter((entry) => {
40
+ if (!entry || typeof entry !== "object")
41
+ return true;
42
+ return entry.command !== HOOK_COMMAND;
43
+ }),
44
+ { type: "command", command: HOOK_COMMAND },
45
+ ];
46
+ }
47
+ export function hasConfiguredMcp(config) {
48
+ const servers = asJsonMap(config?.mcpServers);
49
+ if (!servers)
50
+ return false;
51
+ const entry = asJsonMap(servers[MCP_SERVER_KEY]);
52
+ if (!entry)
53
+ return false;
54
+ if (entry.type !== "local" || entry.command !== "auditor")
55
+ return false;
56
+ if (!matchesStringArray(entry.args, ["mcp"]))
57
+ return false;
58
+ if (!matchesStringArray(entry.tools, ["*"]))
59
+ return false;
60
+ return asJsonMap(entry.env)?.PRAXIS_AGENT_HOST === AGENT_HOST;
61
+ }
62
+ export function commandAvailable(command) {
63
+ const pathValue = process.env.PATH ?? "";
64
+ const extensions = process.platform === "win32"
65
+ ? (process.env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";")
66
+ : [""];
67
+ return pathValue.split(path.delimiter).some((dir) => extensions.some((ext) => {
68
+ const candidate = path.join(dir || ".", `${command}${ext}`);
69
+ try {
70
+ accessSync(candidate, constants.X_OK);
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }));
77
+ }
78
+ async function readOptional(pathname) {
79
+ return readJson(pathname).catch(() => null);
80
+ }
81
+ export async function readForStatus(pathname, warnings) {
82
+ try {
83
+ return await readJson(pathname);
84
+ }
85
+ catch (error) {
86
+ warnings.push(`Malformed Copilot config at ${pathname}: ${String(error)}`);
87
+ return null;
88
+ }
89
+ }
90
+ export async function hookConfigsInDir(dir, excludedPath) {
91
+ const names = await readdir(dir).catch(() => []);
92
+ const configs = await Promise.all(names
93
+ .filter((name) => name.endsWith(".json"))
94
+ .map(async (name) => {
95
+ const pathname = path.join(dir, name);
96
+ if (pathname === excludedPath)
97
+ return null;
98
+ return readOptional(pathname);
99
+ }));
100
+ return configs.filter((config) => config !== null);
101
+ }
102
+ export function statusWarnings(input) {
103
+ const warnings = [];
104
+ if (input.hookConfigured && !input.mcpConfigured) {
105
+ warnings.push("Hook is configured but MCP is missing. Run: auditor setup mcp --for=copilot-cli");
106
+ }
107
+ if (input.mcpConfigured && !input.hookConfigured) {
108
+ warnings.push("MCP is configured without an enforcing hook. Run: auditor setup hook --for=copilot-cli");
109
+ }
110
+ if (input.disabled)
111
+ warnings.push(`Hooks are disabled by ${input.projectPath}; set disableAllHooks to false.`);
112
+ if (input.hookCount > 1)
113
+ warnings.push("Duplicate Praxis Copilot hooks found; remove extra entries to avoid repeated evaluation.");
114
+ if (!input.auditorAvailable)
115
+ warnings.push("auditor is not available on PATH; install or expose the CLI before starting Copilot.");
116
+ return warnings;
117
+ }
118
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { CopilotCliAdapter } from "./adapter.js";
2
+ export { copilotGlobalHooksPath, copilotHomeDir, copilotMcpConfigPath, copilotProjectSettingsPath, } from "./paths.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { CopilotCliAdapter } from "./adapter.js";
2
+ export { copilotGlobalHooksPath, copilotHomeDir, copilotMcpConfigPath, copilotProjectSettingsPath, } from "./paths.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const HOOK_COMMAND = "auditor hook copilot-cli";
2
+ export declare const MCP_SERVER_KEY = "praxis-guard";
3
+ export declare const AGENT_HOST = "copilot-cli";
4
+ export declare function copilotHomeDir(): string;
5
+ export declare function copilotGlobalHooksPath(): string;
6
+ export declare function copilotMcpConfigPath(): string;
7
+ export declare function copilotProjectSettingsPath(projectDir: string): string;
8
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,6BAA6B,CAAC;AACvD,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAC7C,eAAO,MAAM,UAAU,gBAAgB,CAAC;AAExC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAErE"}
@@ -0,0 +1,18 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ export const HOOK_COMMAND = "auditor hook copilot-cli";
4
+ export const MCP_SERVER_KEY = "praxis-guard";
5
+ export const AGENT_HOST = "copilot-cli";
6
+ export function copilotHomeDir() {
7
+ return process.env.COPILOT_HOME?.trim() || path.join(os.homedir(), ".copilot");
8
+ }
9
+ export function copilotGlobalHooksPath() {
10
+ return path.join(copilotHomeDir(), "hooks", "praxis.json");
11
+ }
12
+ export function copilotMcpConfigPath() {
13
+ return path.join(copilotHomeDir(), "mcp-config.json");
14
+ }
15
+ export function copilotProjectSettingsPath(projectDir) {
16
+ return path.join(projectDir, ".github", "copilot", "settings.local.json");
17
+ }
18
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/adapters/copilot-cli/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AAExC,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CopilotCliAdapter, copilotGlobalHooksPath, copilotHomeDir, copilotMcpConfigPath, copilotProjectSettingsPath, } from "./copilot-cli/index.js";
2
+ //# sourceMappingURL=copilot-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.d.ts","sourceRoot":"","sources":["../../src/adapters/copilot-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CopilotCliAdapter, copilotGlobalHooksPath, copilotHomeDir, copilotMcpConfigPath, copilotProjectSettingsPath, } from "./copilot-cli/index.js";
2
+ //# sourceMappingURL=copilot-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.js","sourceRoot":"","sources":["../../src/adapters/copilot-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,YAAY,EAK/C,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,YAAY,CAIpD;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,IAAI,YAAY,EAAE,CAQxD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,YAAY,EAO/C,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,YAAY,CAIpD;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,IAAI,YAAY,EAAE,CAQxD"}
@@ -1,7 +1,9 @@
1
1
  import { ClaudeCodeAdapter } from "./claude-code.js";
2
2
  import { ClaudeDesktopAdapter } from "./claude-desktop.js";
3
3
  import { CodexAdapter } from "./codex.js";
4
+ import { CopilotCliAdapter } from "./copilot-cli.js";
4
5
  import { CursorAdapter } from "./cursor.js";
6
+ import { VscodeAdapter } from "./vscode.js";
5
7
  /**
6
8
  * The set of agent adapters known to the CLI. Adding a new host is one append
7
9
  * here plus the new adapter file.
@@ -11,6 +13,8 @@ export const ALL_ADAPTERS = [
11
13
  new ClaudeDesktopAdapter(),
12
14
  new ClaudeCodeAdapter(),
13
15
  new CodexAdapter(),
16
+ new CopilotCliAdapter(),
17
+ new VscodeAdapter(),
14
18
  ];
15
19
  export function getAdapter(id) {
16
20
  const found = ALL_ADAPTERS.find((a) => a.id === id);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA4B;IACnD,IAAI,aAAa,EAAE;IACnB,IAAI,oBAAoB,EAAE;IAC1B,IAAI,iBAAiB,EAAE;IACvB,IAAI,YAAY,EAAE;CACnB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EAAW;IACpC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,uBAAuB;IACrC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA4B;IACnD,IAAI,aAAa,EAAE;IACnB,IAAI,oBAAoB,EAAE;IAC1B,IAAI,iBAAiB,EAAE;IACvB,IAAI,YAAY,EAAE;IAClB,IAAI,iBAAiB,EAAE;IACvB,IAAI,aAAa,EAAE;CACpB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EAAW;IACpC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,uBAAuB;IACrC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-targets.d.ts","sourceRoot":"","sources":["../../src/adapters/select-targets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIxD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAuBlF;AAQD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAaxE"}
1
+ {"version":3,"file":"select-targets.d.ts","sourceRoot":"","sources":["../../src/adapters/select-targets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMxD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAuBlF;AAQD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAaxE"}
@@ -1,5 +1,6 @@
1
1
  import { ALL_ADAPTERS, getAdapter } from "./registry.js";
2
- const VALID_IDS = ["cursor", "claude-desktop", "claude-code", "codex"];
2
+ const VALID_IDS = ["cursor", "claude-desktop", "claude-code", "codex", "copilot-cli"];
3
+ const EXPECTED_IDS = VALID_IDS.join(" | ");
3
4
  /**
4
5
  * Parse repeated `--for=<agent>` flags from a setup command's argv tail.
5
6
  *
@@ -15,7 +16,7 @@ export function parseForFlag(args) {
15
16
  if (arg === "--for") {
16
17
  const value = args[i + 1];
17
18
  if (!value)
18
- throw new Error("Missing value for --for (expected: cursor | claude-desktop | claude-code | codex)");
19
+ throw new Error(`Missing value for --for (expected: ${EXPECTED_IDS})`);
19
20
  assertValidAgentId(value);
20
21
  forIds.push(value);
21
22
  i++;
@@ -24,7 +25,7 @@ export function parseForFlag(args) {
24
25
  if (arg.startsWith("--for=")) {
25
26
  const value = arg.slice("--for=".length);
26
27
  if (!value)
27
- throw new Error("Missing value for --for= (expected: cursor | claude-desktop | claude-code | codex)");
28
+ throw new Error(`Missing value for --for= (expected: ${EXPECTED_IDS})`);
28
29
  assertValidAgentId(value);
29
30
  forIds.push(value);
30
31
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"select-targets.js","sourceRoot":"","sources":["../../src/adapters/select-targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGzD,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAE3F;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;YACjH,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;YAClH,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,CAAE,SAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmB;IACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"select-targets.js","sourceRoot":"","sources":["../../src/adapters/select-targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGzD,MAAM,SAAS,GAAuB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAE1G,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,GAAG,CAAC,CAAC;YACnF,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,YAAY,GAAG,CAAC,CAAC;YACpF,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,CAAE,SAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAmB;IACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * `upsertHook` and `upsertCloud` are optional — hosts that don't support pre-tool hooks
7
7
  * (e.g. Claude Desktop) simply omit them rather than implement no-op stubs.
8
8
  */
9
- export type AgentId = "cursor" | "claude-desktop" | "claude-code" | "codex";
9
+ export type AgentId = "cursor" | "claude-desktop" | "claude-code" | "codex" | "copilot-cli" | "vscode";
10
10
  export type SetupResult = {
11
11
  path: string;
12
12
  changed: boolean;
@@ -26,6 +26,10 @@ export type AgentStatus = {
26
26
  };
27
27
  /** Adapter-specific advisory messages (e.g. duplicate-hook warnings). */
28
28
  warnings: string[];
29
+ /** Adapter-specific readiness gate beyond hook/MCP presence. */
30
+ ready?: boolean;
31
+ /** Effective hook readiness when a host can use either global or project scope. */
32
+ hookReady?: boolean;
29
33
  };
30
34
  export type HookStatus = {
31
35
  /** Hook config status at the user-global scope (`~/.cursor/hooks.json` for Cursor). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,gBAAgB,GAAG,aAAa,GAAG,OAAO,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,GAAG,CAAC,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,uFAAuF;IACvF,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,gEAAgE;IAChE,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IAErB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,iFAAiF;IACjF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAExC;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC;IAE3B,mEAAmE;IACnE,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAErD,gFAAgF;IAChF,UAAU,CAAC,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAExD,6EAA6E;IAC7E,WAAW,CAAC,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1D,kEAAkE;IAClE,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AgentAdapter, AgentStatus, SetupResult, StatusOpts, UpsertMcpOpts } from "./types.js";
2
+ export declare class VscodeAdapter implements AgentAdapter {
3
+ readonly id: "vscode";
4
+ readonly label = "Visual Studio Code";
5
+ detectInstalled(): boolean;
6
+ upsertMcp(opts: UpsertMcpOpts): Promise<SetupResult>;
7
+ status(opts?: StatusOpts): Promise<AgentStatus>;
8
+ }
9
+ //# sourceMappingURL=vscode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.d.ts","sourceRoot":"","sources":["../../src/adapters/vscode.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAoCpB,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,EAAE,EAAG,QAAQ,CAAU;IAChC,QAAQ,CAAC,KAAK,wBAAwB;IAEtC,eAAe,IAAI,OAAO;IAKpB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBpD,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAiBtD"}