oh-my-claude-sisyphus 3.7.2 → 3.7.3
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/__tests__/compatibility-security.test.d.ts +13 -0
- package/dist/__tests__/compatibility-security.test.d.ts.map +1 -0
- package/dist/__tests__/compatibility-security.test.js +403 -0
- package/dist/__tests__/compatibility-security.test.js.map +1 -0
- package/dist/__tests__/compatibility.test.d.ts +7 -0
- package/dist/__tests__/compatibility.test.d.ts.map +1 -0
- package/dist/__tests__/compatibility.test.js +484 -0
- package/dist/__tests__/compatibility.test.js.map +1 -0
- package/dist/__tests__/hud/analytics-display.test.js +4 -0
- package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
- package/dist/cli/analytics.js +0 -0
- package/dist/cli/index.js +0 -0
- package/dist/compatibility/discovery.d.ts +58 -0
- package/dist/compatibility/discovery.d.ts.map +1 -0
- package/dist/compatibility/discovery.js +619 -0
- package/dist/compatibility/discovery.js.map +1 -0
- package/dist/compatibility/index.d.ts +51 -0
- package/dist/compatibility/index.d.ts.map +1 -0
- package/dist/compatibility/index.js +72 -0
- package/dist/compatibility/index.js.map +1 -0
- package/dist/compatibility/mcp-bridge.d.ts +138 -0
- package/dist/compatibility/mcp-bridge.d.ts.map +1 -0
- package/dist/compatibility/mcp-bridge.js +524 -0
- package/dist/compatibility/mcp-bridge.js.map +1 -0
- package/dist/compatibility/permission-adapter.d.ts +79 -0
- package/dist/compatibility/permission-adapter.d.ts.map +1 -0
- package/dist/compatibility/permission-adapter.js +369 -0
- package/dist/compatibility/permission-adapter.js.map +1 -0
- package/dist/compatibility/registry.d.ts +161 -0
- package/dist/compatibility/registry.d.ts.map +1 -0
- package/dist/compatibility/registry.js +389 -0
- package/dist/compatibility/registry.js.map +1 -0
- package/dist/compatibility/types.d.ts +249 -0
- package/dist/compatibility/types.d.ts.map +1 -0
- package/dist/compatibility/types.js +8 -0
- package/dist/compatibility/types.js.map +1 -0
- package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -1
- package/dist/features/rate-limit-wait/daemon.js +3 -0
- package/dist/features/rate-limit-wait/daemon.js.map +1 -1
- package/dist/hud/analytics-display.d.ts +1 -1
- package/dist/hud/analytics-display.d.ts.map +1 -1
- package/dist/hud/analytics-display.js +24 -7
- package/dist/hud/analytics-display.js.map +1 -1
- package/docs/COMPATIBILITY.md +1051 -0
- package/package.json +3 -1
- package/dist/__tests__/analytics/analytics-summary.test.d.ts +0 -2
- package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/analytics-summary.test.js +0 -267
- package/dist/__tests__/analytics/analytics-summary.test.js.map +0 -1
- package/dist/__tests__/analytics/cost-estimator.test.d.ts +0 -2
- package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +0 -1
- package/dist/__tests__/analytics/cost-estimator.test.js +0 -212
- package/dist/__tests__/analytics/cost-estimator.test.js.map +0 -1
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +0 -7
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +0 -1
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js +0 -374
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +0 -1
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +0 -2
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +0 -1
- package/dist/__tests__/hud/auto-tracking.integration.test.js +0 -12
- package/dist/__tests__/hud/auto-tracking.integration.test.js.map +0 -1
- package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
- package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
- package/dist/__tests__/learned-skills/config.test.js +0 -37
- package/dist/__tests__/learned-skills/config.test.js.map +0 -1
- package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
- package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
- package/dist/__tests__/learned-skills/detector.test.js +0 -99
- package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
- package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
- package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
- package/dist/__tests__/learned-skills/finder.test.js +0 -59
- package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
- package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
- package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
- package/dist/__tests__/learned-skills/loader.test.js +0 -69
- package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
- package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
- package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
- package/dist/__tests__/learned-skills/parser.test.js +0 -81
- package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
- package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
- package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
- package/dist/__tests__/learned-skills/validator.test.js +0 -85
- package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
- package/dist/agents/codex-agents.d.ts +0 -20
- package/dist/agents/codex-agents.d.ts.map +0 -1
- package/dist/agents/codex-agents.js +0 -36
- package/dist/agents/codex-agents.js.map +0 -1
- package/dist/agents/document-writer.d.ts +0 -11
- package/dist/agents/document-writer.d.ts.map +0 -1
- package/dist/agents/document-writer.js +0 -209
- package/dist/agents/document-writer.js.map +0 -1
- package/dist/agents/frontend-engineer.d.ts +0 -11
- package/dist/agents/frontend-engineer.d.ts.map +0 -1
- package/dist/agents/frontend-engineer.js +0 -115
- package/dist/agents/frontend-engineer.js.map +0 -1
- package/dist/agents/librarian.d.ts +0 -12
- package/dist/agents/librarian.d.ts.map +0 -1
- package/dist/agents/librarian.js +0 -103
- package/dist/agents/librarian.js.map +0 -1
- package/dist/agents/metis.d.ts +0 -12
- package/dist/agents/metis.d.ts.map +0 -1
- package/dist/agents/metis.js +0 -117
- package/dist/agents/metis.js.map +0 -1
- package/dist/agents/momus.d.ts +0 -12
- package/dist/agents/momus.d.ts.map +0 -1
- package/dist/agents/momus.js +0 -128
- package/dist/agents/momus.js.map +0 -1
- package/dist/agents/multimodal-looker.d.ts +0 -11
- package/dist/agents/multimodal-looker.d.ts.map +0 -1
- package/dist/agents/multimodal-looker.js +0 -70
- package/dist/agents/multimodal-looker.js.map +0 -1
- package/dist/agents/oracle.d.ts +0 -13
- package/dist/agents/oracle.d.ts.map +0 -1
- package/dist/agents/oracle.js +0 -191
- package/dist/agents/oracle.js.map +0 -1
- package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
- package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
- package/dist/agents/orchestrator-sisyphus.js +0 -115
- package/dist/agents/orchestrator-sisyphus.js.map +0 -1
- package/dist/agents/prometheus.d.ts +0 -12
- package/dist/agents/prometheus.d.ts.map +0 -1
- package/dist/agents/prometheus.js +0 -195
- package/dist/agents/prometheus.js.map +0 -1
- package/dist/agents/sisyphus-junior.d.ts +0 -12
- package/dist/agents/sisyphus-junior.d.ts.map +0 -1
- package/dist/agents/sisyphus-junior.js +0 -93
- package/dist/agents/sisyphus-junior.js.map +0 -1
- package/dist/cli/components/CostDashboard.d.ts +0 -15
- package/dist/cli/components/CostDashboard.d.ts.map +0 -1
- package/dist/cli/components/CostDashboard.js +0 -15
- package/dist/cli/components/CostDashboard.js.map +0 -1
- package/dist/cli/components/LiveStats.d.ts +0 -16
- package/dist/cli/components/LiveStats.d.ts.map +0 -1
- package/dist/cli/components/LiveStats.js +0 -16
- package/dist/cli/components/LiveStats.js.map +0 -1
- package/dist/cli/components/SessionBrowser.d.ts +0 -14
- package/dist/cli/components/SessionBrowser.d.ts.map +0 -1
- package/dist/cli/components/SessionBrowser.js +0 -14
- package/dist/cli/components/SessionBrowser.js.map +0 -1
- package/dist/cli/tui.d.ts +0 -21
- package/dist/cli/tui.d.ts.map +0 -1
- package/dist/cli/tui.js +0 -21
- package/dist/cli/tui.js.map +0 -1
- package/dist/hooks/autopilot/signals.d.ts +0 -20
- package/dist/hooks/autopilot/signals.d.ts.map +0 -1
- package/dist/hooks/autopilot/signals.js +0 -75
- package/dist/hooks/autopilot/signals.js.map +0 -1
- package/dist/hooks/autopilot/summary.d.ts +0 -27
- package/dist/hooks/autopilot/summary.d.ts.map +0 -1
- package/dist/hooks/autopilot/summary.js +0 -160
- package/dist/hooks/autopilot/summary.js.map +0 -1
- package/dist/hooks/autopilot/transition.d.ts +0 -39
- package/dist/hooks/autopilot/transition.d.ts.map +0 -1
- package/dist/hooks/autopilot/transition.js +0 -216
- package/dist/hooks/autopilot/transition.js.map +0 -1
- package/dist/hooks/context-window-limit-recovery/constants.d.ts +0 -28
- package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +0 -1
- package/dist/hooks/context-window-limit-recovery/constants.js +0 -85
- package/dist/hooks/context-window-limit-recovery/constants.js.map +0 -1
- package/dist/hooks/context-window-limit-recovery/index.d.ts +0 -62
- package/dist/hooks/context-window-limit-recovery/index.d.ts.map +0 -1
- package/dist/hooks/context-window-limit-recovery/index.js +0 -201
- package/dist/hooks/context-window-limit-recovery/index.js.map +0 -1
- package/dist/hooks/context-window-limit-recovery/parser.d.ts +0 -31
- package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +0 -1
- package/dist/hooks/context-window-limit-recovery/parser.js +0 -241
- package/dist/hooks/context-window-limit-recovery/parser.js.map +0 -1
- package/dist/hooks/context-window-limit-recovery/types.d.ts +0 -84
- package/dist/hooks/context-window-limit-recovery/types.d.ts.map +0 -1
- package/dist/hooks/context-window-limit-recovery/types.js +0 -34
- package/dist/hooks/context-window-limit-recovery/types.js.map +0 -1
- package/dist/hooks/edit-error-recovery/index.d.ts +0 -62
- package/dist/hooks/edit-error-recovery/index.d.ts.map +0 -1
- package/dist/hooks/edit-error-recovery/index.js +0 -89
- package/dist/hooks/edit-error-recovery/index.js.map +0 -1
- package/dist/hooks/learned-skills/config.d.ts +0 -53
- package/dist/hooks/learned-skills/config.d.ts.map +0 -1
- package/dist/hooks/learned-skills/config.js +0 -103
- package/dist/hooks/learned-skills/config.js.map +0 -1
- package/dist/hooks/learned-skills/constants.d.ts +0 -24
- package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
- package/dist/hooks/learned-skills/constants.js +0 -26
- package/dist/hooks/learned-skills/constants.js.map +0 -1
- package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
- package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
- package/dist/hooks/learned-skills/detection-hook.js +0 -83
- package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
- package/dist/hooks/learned-skills/detector.d.ts +0 -30
- package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
- package/dist/hooks/learned-skills/detector.js +0 -150
- package/dist/hooks/learned-skills/detector.js.map +0 -1
- package/dist/hooks/learned-skills/finder.d.ts +0 -21
- package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
- package/dist/hooks/learned-skills/finder.js +0 -117
- package/dist/hooks/learned-skills/finder.js.map +0 -1
- package/dist/hooks/learned-skills/index.d.ts +0 -62
- package/dist/hooks/learned-skills/index.d.ts.map +0 -1
- package/dist/hooks/learned-skills/index.js +0 -137
- package/dist/hooks/learned-skills/index.js.map +0 -1
- package/dist/hooks/learned-skills/loader.d.ts +0 -20
- package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
- package/dist/hooks/learned-skills/loader.js +0 -107
- package/dist/hooks/learned-skills/loader.js.map +0 -1
- package/dist/hooks/learned-skills/parser.d.ts +0 -21
- package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
- package/dist/hooks/learned-skills/parser.js +0 -190
- package/dist/hooks/learned-skills/parser.js.map +0 -1
- package/dist/hooks/learned-skills/promotion.d.ts +0 -29
- package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
- package/dist/hooks/learned-skills/promotion.js +0 -87
- package/dist/hooks/learned-skills/promotion.js.map +0 -1
- package/dist/hooks/learned-skills/types.d.ts +0 -109
- package/dist/hooks/learned-skills/types.d.ts.map +0 -1
- package/dist/hooks/learned-skills/types.js +0 -8
- package/dist/hooks/learned-skills/types.js.map +0 -1
- package/dist/hooks/learned-skills/validator.d.ts +0 -15
- package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
- package/dist/hooks/learned-skills/validator.js +0 -87
- package/dist/hooks/learned-skills/validator.js.map +0 -1
- package/dist/hooks/learned-skills/writer.d.ts +0 -27
- package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
- package/dist/hooks/learned-skills/writer.js +0 -126
- package/dist/hooks/learned-skills/writer.js.map +0 -1
- package/dist/hooks/mnemosyne/config.d.ts +0 -53
- package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/config.js +0 -103
- package/dist/hooks/mnemosyne/config.js.map +0 -1
- package/dist/hooks/mnemosyne/constants.d.ts +0 -24
- package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/constants.js +0 -26
- package/dist/hooks/mnemosyne/constants.js.map +0 -1
- package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
- package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/detection-hook.js +0 -83
- package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
- package/dist/hooks/mnemosyne/detector.d.ts +0 -30
- package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/detector.js +0 -150
- package/dist/hooks/mnemosyne/detector.js.map +0 -1
- package/dist/hooks/mnemosyne/finder.d.ts +0 -21
- package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/finder.js +0 -117
- package/dist/hooks/mnemosyne/finder.js.map +0 -1
- package/dist/hooks/mnemosyne/index.d.ts +0 -62
- package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/index.js +0 -137
- package/dist/hooks/mnemosyne/index.js.map +0 -1
- package/dist/hooks/mnemosyne/loader.d.ts +0 -20
- package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/loader.js +0 -113
- package/dist/hooks/mnemosyne/loader.js.map +0 -1
- package/dist/hooks/mnemosyne/parser.d.ts +0 -21
- package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/parser.js +0 -190
- package/dist/hooks/mnemosyne/parser.js.map +0 -1
- package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
- package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/promotion.js +0 -87
- package/dist/hooks/mnemosyne/promotion.js.map +0 -1
- package/dist/hooks/mnemosyne/types.d.ts +0 -109
- package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/types.js +0 -8
- package/dist/hooks/mnemosyne/types.js.map +0 -1
- package/dist/hooks/mnemosyne/validator.d.ts +0 -15
- package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/validator.js +0 -87
- package/dist/hooks/mnemosyne/validator.js.map +0 -1
- package/dist/hooks/mnemosyne/writer.d.ts +0 -27
- package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
- package/dist/hooks/mnemosyne/writer.js +0 -126
- package/dist/hooks/mnemosyne/writer.js.map +0 -1
- package/dist/hooks/ralph-loop/index.d.ts +0 -116
- package/dist/hooks/ralph-loop/index.d.ts.map +0 -1
- package/dist/hooks/ralph-loop/index.js +0 -322
- package/dist/hooks/ralph-loop/index.js.map +0 -1
- package/dist/hooks/ralph-prd/index.d.ts +0 -130
- package/dist/hooks/ralph-prd/index.d.ts.map +0 -1
- package/dist/hooks/ralph-prd/index.js +0 -310
- package/dist/hooks/ralph-prd/index.js.map +0 -1
- package/dist/hooks/ralph-progress/index.d.ts +0 -102
- package/dist/hooks/ralph-progress/index.d.ts.map +0 -1
- package/dist/hooks/ralph-progress/index.js +0 -408
- package/dist/hooks/ralph-progress/index.js.map +0 -1
- package/dist/hooks/ralph-verifier/index.d.ts +0 -72
- package/dist/hooks/ralph-verifier/index.d.ts.map +0 -1
- package/dist/hooks/ralph-verifier/index.js +0 -223
- package/dist/hooks/ralph-verifier/index.js.map +0 -1
- package/dist/hooks/session-recovery/constants.d.ts +0 -56
- package/dist/hooks/session-recovery/constants.d.ts.map +0 -1
- package/dist/hooks/session-recovery/constants.js +0 -78
- package/dist/hooks/session-recovery/constants.js.map +0 -1
- package/dist/hooks/session-recovery/index.d.ts +0 -53
- package/dist/hooks/session-recovery/index.d.ts.map +0 -1
- package/dist/hooks/session-recovery/index.js +0 -321
- package/dist/hooks/session-recovery/index.js.map +0 -1
- package/dist/hooks/session-recovery/storage.d.ts +0 -76
- package/dist/hooks/session-recovery/storage.d.ts.map +0 -1
- package/dist/hooks/session-recovery/storage.js +0 -383
- package/dist/hooks/session-recovery/storage.js.map +0 -1
- package/dist/hooks/session-recovery/types.d.ts +0 -145
- package/dist/hooks/session-recovery/types.d.ts.map +0 -1
- package/dist/hooks/session-recovery/types.js +0 -8
- package/dist/hooks/session-recovery/types.js.map +0 -1
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
- package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
- package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
- package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
- package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
- package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
- package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
- package/dist/hooks/ultraqa-loop/index.d.ts +0 -94
- package/dist/hooks/ultraqa-loop/index.d.ts.map +0 -1
- package/dist/hooks/ultraqa-loop/index.js +0 -216
- package/dist/hooks/ultraqa-loop/index.js.map +0 -1
- package/dist/hooks/ultrawork-state/index.d.ts +0 -62
- package/dist/hooks/ultrawork-state/index.d.ts.map +0 -1
- package/dist/hooks/ultrawork-state/index.js +0 -208
- package/dist/hooks/ultrawork-state/index.js.map +0 -1
- package/dist/hud/sisyphus-state.d.ts +0 -31
- package/dist/hud/sisyphus-state.d.ts.map +0 -1
- package/dist/hud/sisyphus-state.js +0 -163
- package/dist/hud/sisyphus-state.js.map +0 -1
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Bridge
|
|
3
|
+
*
|
|
4
|
+
* Connects to MCP servers and exposes their tools to OMC.
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Server lifecycle (spawn, connect, disconnect)
|
|
7
|
+
* - Tool discovery from MCP servers
|
|
8
|
+
* - Tool invocation routing
|
|
9
|
+
* - Resource access
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from 'child_process';
|
|
12
|
+
import { EventEmitter } from 'events';
|
|
13
|
+
import { basename } from 'path';
|
|
14
|
+
import { getRegistry } from './registry.js';
|
|
15
|
+
/**
|
|
16
|
+
* Security Error for MCP bridge operations
|
|
17
|
+
*/
|
|
18
|
+
export class McpSecurityError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'McpSecurityError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Allowed commands whitelist for MCP server spawning
|
|
26
|
+
* Only these executables can be spawned as MCP servers
|
|
27
|
+
*/
|
|
28
|
+
const ALLOWED_COMMANDS = new Set([
|
|
29
|
+
'node',
|
|
30
|
+
'npx',
|
|
31
|
+
'python',
|
|
32
|
+
'python3',
|
|
33
|
+
'ruby',
|
|
34
|
+
'go',
|
|
35
|
+
'deno',
|
|
36
|
+
'bun',
|
|
37
|
+
'uvx',
|
|
38
|
+
'uv',
|
|
39
|
+
'cargo',
|
|
40
|
+
'java',
|
|
41
|
+
'dotnet',
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Dangerous environment variables that could be used for code injection
|
|
45
|
+
*/
|
|
46
|
+
const BLOCKED_ENV_VARS = new Set([
|
|
47
|
+
'LD_PRELOAD',
|
|
48
|
+
'LD_LIBRARY_PATH',
|
|
49
|
+
'DYLD_INSERT_LIBRARIES',
|
|
50
|
+
'DYLD_LIBRARY_PATH',
|
|
51
|
+
'NODE_OPTIONS',
|
|
52
|
+
'NODE_DEBUG',
|
|
53
|
+
'ELECTRON_RUN_AS_NODE',
|
|
54
|
+
'PYTHONSTARTUP',
|
|
55
|
+
'PYTHONPATH',
|
|
56
|
+
'RUBYOPT',
|
|
57
|
+
'PERL5OPT',
|
|
58
|
+
'BASH_ENV',
|
|
59
|
+
'ENV',
|
|
60
|
+
'ZDOTDIR',
|
|
61
|
+
]);
|
|
62
|
+
/**
|
|
63
|
+
* MCP Bridge - Manages connections to MCP servers
|
|
64
|
+
*/
|
|
65
|
+
export class McpBridge extends EventEmitter {
|
|
66
|
+
connections = new Map();
|
|
67
|
+
serverConfigs = new Map();
|
|
68
|
+
/**
|
|
69
|
+
* Register a server configuration
|
|
70
|
+
*/
|
|
71
|
+
registerServer(name, config) {
|
|
72
|
+
this.serverConfigs.set(name, config);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Connect to an MCP server
|
|
76
|
+
*/
|
|
77
|
+
async connect(serverName) {
|
|
78
|
+
const config = this.serverConfigs.get(serverName);
|
|
79
|
+
if (!config) {
|
|
80
|
+
throw new Error(`Unknown MCP server: ${serverName}`);
|
|
81
|
+
}
|
|
82
|
+
// Check if already connected
|
|
83
|
+
if (this.connections.has(serverName)) {
|
|
84
|
+
const conn = this.connections.get(serverName);
|
|
85
|
+
return this.convertToExternalTools(serverName, conn.tools);
|
|
86
|
+
}
|
|
87
|
+
// SECURITY: Validate command is in whitelist
|
|
88
|
+
const commandBasename = basename(config.command);
|
|
89
|
+
if (!ALLOWED_COMMANDS.has(commandBasename)) {
|
|
90
|
+
throw new McpSecurityError(`Command not in whitelist: ${config.command}. ` +
|
|
91
|
+
`Allowed commands: ${[...ALLOWED_COMMANDS].join(', ')}`);
|
|
92
|
+
}
|
|
93
|
+
// SECURITY: Filter out dangerous environment variables
|
|
94
|
+
const safeEnv = { ...process.env };
|
|
95
|
+
if (config.env) {
|
|
96
|
+
for (const [key, value] of Object.entries(config.env)) {
|
|
97
|
+
if (BLOCKED_ENV_VARS.has(key.toUpperCase())) {
|
|
98
|
+
this.emit('security-warning', {
|
|
99
|
+
server: serverName,
|
|
100
|
+
message: `Blocked dangerous environment variable: ${key}`,
|
|
101
|
+
});
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
safeEnv[key] = value;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Spawn the server process
|
|
108
|
+
const child = spawn(config.command, config.args || [], {
|
|
109
|
+
env: safeEnv,
|
|
110
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
111
|
+
});
|
|
112
|
+
const connection = {
|
|
113
|
+
process: child,
|
|
114
|
+
serverName,
|
|
115
|
+
requestId: 0,
|
|
116
|
+
pendingRequests: new Map(),
|
|
117
|
+
tools: [],
|
|
118
|
+
resources: [],
|
|
119
|
+
buffer: '',
|
|
120
|
+
};
|
|
121
|
+
this.connections.set(serverName, connection);
|
|
122
|
+
// SECURITY: Set up error handler for spawn failures
|
|
123
|
+
child.on('error', (error) => {
|
|
124
|
+
this.connections.delete(serverName);
|
|
125
|
+
this.emit('spawn-error', { server: serverName, error: error.message });
|
|
126
|
+
// Update registry with error state
|
|
127
|
+
const registry = getRegistry();
|
|
128
|
+
registry.updateMcpServer(serverName, {
|
|
129
|
+
connected: false,
|
|
130
|
+
error: `Spawn failed: ${error.message}`,
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
// Set up message handling
|
|
134
|
+
child.stdout?.on('data', (data) => {
|
|
135
|
+
this.handleData(serverName, data);
|
|
136
|
+
});
|
|
137
|
+
child.stderr?.on('data', (data) => {
|
|
138
|
+
this.emit('server-error', { server: serverName, error: data.toString() });
|
|
139
|
+
});
|
|
140
|
+
child.on('exit', (code) => {
|
|
141
|
+
this.connections.delete(serverName);
|
|
142
|
+
this.emit('server-disconnected', { server: serverName, code });
|
|
143
|
+
// Update registry
|
|
144
|
+
const registry = getRegistry();
|
|
145
|
+
registry.updateMcpServer(serverName, { connected: false });
|
|
146
|
+
});
|
|
147
|
+
// Wait for server to be ready
|
|
148
|
+
await this.waitForReady(serverName);
|
|
149
|
+
// Initialize the connection
|
|
150
|
+
await this.initialize(serverName);
|
|
151
|
+
// Discover tools
|
|
152
|
+
const tools = await this.listTools(serverName);
|
|
153
|
+
connection.tools = tools;
|
|
154
|
+
// Discover resources
|
|
155
|
+
try {
|
|
156
|
+
const resources = await this.listResources(serverName);
|
|
157
|
+
connection.resources = resources;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Resources are optional
|
|
161
|
+
}
|
|
162
|
+
// Convert to external tools and update registry
|
|
163
|
+
const externalTools = this.convertToExternalTools(serverName, tools);
|
|
164
|
+
const registry = getRegistry();
|
|
165
|
+
registry.updateMcpServer(serverName, {
|
|
166
|
+
connected: true,
|
|
167
|
+
tools: externalTools,
|
|
168
|
+
});
|
|
169
|
+
this.emit('server-connected', { server: serverName, toolCount: tools.length });
|
|
170
|
+
return externalTools;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Disconnect from an MCP server
|
|
174
|
+
*/
|
|
175
|
+
disconnect(serverName) {
|
|
176
|
+
const connection = this.connections.get(serverName);
|
|
177
|
+
if (!connection)
|
|
178
|
+
return;
|
|
179
|
+
try {
|
|
180
|
+
connection.process.kill();
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Ignore kill errors
|
|
184
|
+
}
|
|
185
|
+
this.connections.delete(serverName);
|
|
186
|
+
// Update registry
|
|
187
|
+
const registry = getRegistry();
|
|
188
|
+
registry.updateMcpServer(serverName, { connected: false, tools: [] });
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Disconnect from all servers
|
|
192
|
+
*/
|
|
193
|
+
disconnectAll() {
|
|
194
|
+
for (const serverName of this.connections.keys()) {
|
|
195
|
+
this.disconnect(serverName);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if connected to a server
|
|
200
|
+
*/
|
|
201
|
+
isConnected(serverName) {
|
|
202
|
+
return this.connections.has(serverName);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Invoke a tool on an MCP server
|
|
206
|
+
*/
|
|
207
|
+
async invokeTool(serverName, toolName, arguments_) {
|
|
208
|
+
const connection = this.connections.get(serverName);
|
|
209
|
+
if (!connection) {
|
|
210
|
+
return {
|
|
211
|
+
success: false,
|
|
212
|
+
error: `Not connected to MCP server: ${serverName}`,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const startTime = Date.now();
|
|
216
|
+
try {
|
|
217
|
+
const result = await this.sendRequest(serverName, 'tools/call', {
|
|
218
|
+
name: toolName,
|
|
219
|
+
arguments: arguments_,
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
success: true,
|
|
223
|
+
data: result,
|
|
224
|
+
executionTime: Date.now() - startTime,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
error: error instanceof Error ? error.message : String(error),
|
|
231
|
+
executionTime: Date.now() - startTime,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Read a resource from an MCP server
|
|
237
|
+
*/
|
|
238
|
+
async readResource(serverName, uri) {
|
|
239
|
+
const connection = this.connections.get(serverName);
|
|
240
|
+
if (!connection) {
|
|
241
|
+
return {
|
|
242
|
+
success: false,
|
|
243
|
+
error: `Not connected to MCP server: ${serverName}`,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
const result = await this.sendRequest(serverName, 'resources/read', { uri });
|
|
248
|
+
return {
|
|
249
|
+
success: true,
|
|
250
|
+
data: result,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
return {
|
|
255
|
+
success: false,
|
|
256
|
+
error: error instanceof Error ? error.message : String(error),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get available tools from a connected server
|
|
262
|
+
*/
|
|
263
|
+
getServerTools(serverName) {
|
|
264
|
+
return this.connections.get(serverName)?.tools || [];
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get available resources from a connected server
|
|
268
|
+
*/
|
|
269
|
+
getServerResources(serverName) {
|
|
270
|
+
return this.connections.get(serverName)?.resources || [];
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Wait for server to be ready
|
|
274
|
+
*/
|
|
275
|
+
async waitForReady(serverName, timeout = 10000) {
|
|
276
|
+
const start = Date.now();
|
|
277
|
+
while (Date.now() - start < timeout) {
|
|
278
|
+
const connection = this.connections.get(serverName);
|
|
279
|
+
if (!connection) {
|
|
280
|
+
throw new Error('Server connection lost');
|
|
281
|
+
}
|
|
282
|
+
// Try to ping the server
|
|
283
|
+
try {
|
|
284
|
+
await this.sendRequest(serverName, 'ping', undefined, 1000);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// Server not ready yet, wait and retry
|
|
289
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
throw new Error(`Timeout waiting for MCP server ${serverName} to be ready`);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Initialize the MCP connection
|
|
296
|
+
*/
|
|
297
|
+
async initialize(serverName) {
|
|
298
|
+
await this.sendRequest(serverName, 'initialize', {
|
|
299
|
+
protocolVersion: '2024-11-05',
|
|
300
|
+
capabilities: {
|
|
301
|
+
tools: {},
|
|
302
|
+
resources: {},
|
|
303
|
+
},
|
|
304
|
+
clientInfo: {
|
|
305
|
+
name: 'oh-my-claudecode',
|
|
306
|
+
version: '3.7.2',
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
// Send initialized notification
|
|
310
|
+
this.sendNotification(serverName, 'initialized', {});
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* List available tools from server
|
|
314
|
+
*/
|
|
315
|
+
async listTools(serverName) {
|
|
316
|
+
const result = await this.sendRequest(serverName, 'tools/list', {});
|
|
317
|
+
return result.tools || [];
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* List available resources from server
|
|
321
|
+
*/
|
|
322
|
+
async listResources(serverName) {
|
|
323
|
+
const result = await this.sendRequest(serverName, 'resources/list', {});
|
|
324
|
+
return result.resources || [];
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Send an MCP request and wait for response
|
|
328
|
+
*/
|
|
329
|
+
sendRequest(serverName, method, params, timeout = 30000) {
|
|
330
|
+
const connection = this.connections.get(serverName);
|
|
331
|
+
if (!connection) {
|
|
332
|
+
return Promise.reject(new Error(`Not connected to server: ${serverName}`));
|
|
333
|
+
}
|
|
334
|
+
const id = ++connection.requestId;
|
|
335
|
+
const request = {
|
|
336
|
+
jsonrpc: '2.0',
|
|
337
|
+
id,
|
|
338
|
+
method,
|
|
339
|
+
params,
|
|
340
|
+
};
|
|
341
|
+
return new Promise((resolve, reject) => {
|
|
342
|
+
const timer = setTimeout(() => {
|
|
343
|
+
connection.pendingRequests.delete(id);
|
|
344
|
+
reject(new Error(`Request timeout: ${method}`));
|
|
345
|
+
}, timeout);
|
|
346
|
+
connection.pendingRequests.set(id, {
|
|
347
|
+
resolve: (result) => {
|
|
348
|
+
clearTimeout(timer);
|
|
349
|
+
resolve(result);
|
|
350
|
+
},
|
|
351
|
+
reject: (error) => {
|
|
352
|
+
clearTimeout(timer);
|
|
353
|
+
reject(error);
|
|
354
|
+
},
|
|
355
|
+
});
|
|
356
|
+
// Send the request
|
|
357
|
+
const message = JSON.stringify(request) + '\n';
|
|
358
|
+
connection.process.stdin?.write(message);
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Send an MCP notification (no response expected)
|
|
363
|
+
*/
|
|
364
|
+
sendNotification(serverName, method, params) {
|
|
365
|
+
const connection = this.connections.get(serverName);
|
|
366
|
+
if (!connection)
|
|
367
|
+
return;
|
|
368
|
+
const notification = {
|
|
369
|
+
jsonrpc: '2.0',
|
|
370
|
+
method,
|
|
371
|
+
params,
|
|
372
|
+
};
|
|
373
|
+
const message = JSON.stringify(notification) + '\n';
|
|
374
|
+
connection.process.stdin?.write(message);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Handle incoming data from server
|
|
378
|
+
*/
|
|
379
|
+
handleData(serverName, data) {
|
|
380
|
+
const connection = this.connections.get(serverName);
|
|
381
|
+
if (!connection)
|
|
382
|
+
return;
|
|
383
|
+
connection.buffer += data.toString();
|
|
384
|
+
// Process complete messages (newline-delimited JSON)
|
|
385
|
+
const lines = connection.buffer.split('\n');
|
|
386
|
+
connection.buffer = lines.pop() || '';
|
|
387
|
+
for (const line of lines) {
|
|
388
|
+
if (!line.trim())
|
|
389
|
+
continue;
|
|
390
|
+
try {
|
|
391
|
+
const message = JSON.parse(line);
|
|
392
|
+
this.handleMessage(serverName, message);
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
this.emit('parse-error', { server: serverName, data: line });
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Handle a parsed MCP message
|
|
401
|
+
*/
|
|
402
|
+
handleMessage(serverName, message) {
|
|
403
|
+
const connection = this.connections.get(serverName);
|
|
404
|
+
if (!connection)
|
|
405
|
+
return;
|
|
406
|
+
// Check if this is a response to a pending request
|
|
407
|
+
if (message.id !== undefined) {
|
|
408
|
+
const pending = connection.pendingRequests.get(message.id);
|
|
409
|
+
if (pending) {
|
|
410
|
+
connection.pendingRequests.delete(message.id);
|
|
411
|
+
if (message.error) {
|
|
412
|
+
pending.reject(new Error(message.error.message));
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
pending.resolve(message.result);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Convert MCP tools to ExternalTool format
|
|
422
|
+
*/
|
|
423
|
+
convertToExternalTools(serverName, tools) {
|
|
424
|
+
return tools.map(tool => ({
|
|
425
|
+
name: `mcp__${serverName}__${tool.name}`,
|
|
426
|
+
type: 'mcp',
|
|
427
|
+
source: serverName,
|
|
428
|
+
description: tool.description,
|
|
429
|
+
capabilities: this.inferCapabilities(tool.name, tool.description),
|
|
430
|
+
enabled: true,
|
|
431
|
+
schema: tool.inputSchema,
|
|
432
|
+
priority: 40, // MCP tools have lower priority than built-in
|
|
433
|
+
}));
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Infer capabilities from tool name and description
|
|
437
|
+
*/
|
|
438
|
+
inferCapabilities(name, description) {
|
|
439
|
+
const capabilities = [];
|
|
440
|
+
const text = `${name} ${description || ''}`.toLowerCase();
|
|
441
|
+
if (text.includes('read') || text.includes('get') || text.includes('list') || text.includes('fetch')) {
|
|
442
|
+
capabilities.push('read');
|
|
443
|
+
}
|
|
444
|
+
if (text.includes('write') || text.includes('create') || text.includes('edit') || text.includes('update')) {
|
|
445
|
+
capabilities.push('write');
|
|
446
|
+
}
|
|
447
|
+
if (text.includes('exec') || text.includes('run') || text.includes('execute')) {
|
|
448
|
+
capabilities.push('execute');
|
|
449
|
+
}
|
|
450
|
+
if (text.includes('search') || text.includes('find') || text.includes('query')) {
|
|
451
|
+
capabilities.push('search');
|
|
452
|
+
}
|
|
453
|
+
return capabilities.length > 0 ? capabilities : ['unknown'];
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Auto-connect to enabled servers from registry
|
|
457
|
+
*/
|
|
458
|
+
async autoConnect() {
|
|
459
|
+
const registry = getRegistry();
|
|
460
|
+
const results = new Map();
|
|
461
|
+
for (const server of registry.getAllMcpServers()) {
|
|
462
|
+
if (server.config.enabled === false)
|
|
463
|
+
continue;
|
|
464
|
+
this.registerServer(server.name, server.config);
|
|
465
|
+
try {
|
|
466
|
+
const tools = await this.connect(server.name);
|
|
467
|
+
results.set(server.name, tools);
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
registry.updateMcpServer(server.name, {
|
|
471
|
+
connected: false,
|
|
472
|
+
error: error instanceof Error ? error.message : String(error),
|
|
473
|
+
});
|
|
474
|
+
this.emit('connect-error', { server: server.name, error });
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return results;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Get connection status for all servers
|
|
481
|
+
*/
|
|
482
|
+
getConnectionStatus() {
|
|
483
|
+
const status = new Map();
|
|
484
|
+
for (const [name, config] of this.serverConfigs) {
|
|
485
|
+
status.set(name, this.connections.has(name));
|
|
486
|
+
}
|
|
487
|
+
return status;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Singleton bridge instance
|
|
492
|
+
*/
|
|
493
|
+
let bridgeInstance = null;
|
|
494
|
+
/**
|
|
495
|
+
* Get the MCP bridge singleton
|
|
496
|
+
*/
|
|
497
|
+
export function getMcpBridge() {
|
|
498
|
+
if (!bridgeInstance) {
|
|
499
|
+
bridgeInstance = new McpBridge();
|
|
500
|
+
}
|
|
501
|
+
return bridgeInstance;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Reset bridge instance (for testing)
|
|
505
|
+
*/
|
|
506
|
+
export function resetMcpBridge() {
|
|
507
|
+
if (bridgeInstance) {
|
|
508
|
+
bridgeInstance.disconnectAll();
|
|
509
|
+
bridgeInstance = null;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Quick access to invoke a tool
|
|
514
|
+
*/
|
|
515
|
+
export async function invokeMcpTool(serverName, toolName, arguments_) {
|
|
516
|
+
return getMcpBridge().invokeTool(serverName, toolName, arguments_);
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Quick access to read a resource
|
|
520
|
+
*/
|
|
521
|
+
export async function readMcpResource(serverName, uri) {
|
|
522
|
+
return getMcpBridge().readResource(serverName, uri);
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=mcp-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../src/compatibility/mcp-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Adapter for External Tools
|
|
3
|
+
*
|
|
4
|
+
* Integrates external plugins and MCP tools with OMC's permission system.
|
|
5
|
+
* Provides:
|
|
6
|
+
* - Safe command pattern registration from plugins
|
|
7
|
+
* - Permission inheritance for known-safe tools
|
|
8
|
+
* - Delegation-aware routing to avoid conflicts
|
|
9
|
+
*/
|
|
10
|
+
import type { PermissionCheckResult, SafeCommandPattern, DiscoveredPlugin } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Security Error for permission adapter operations
|
|
13
|
+
*/
|
|
14
|
+
export declare class PermissionSecurityError extends Error {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Register safe patterns from a plugin
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerPluginSafePatterns(plugin: DiscoveredPlugin): void;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a tool/action is allowed without prompting user
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkPermission(toolName: string, input?: Record<string, unknown>): PermissionCheckResult;
|
|
25
|
+
/**
|
|
26
|
+
* Grant permission for a tool (cache the decision)
|
|
27
|
+
*/
|
|
28
|
+
export declare function grantPermission(toolName: string, input?: Record<string, unknown>): void;
|
|
29
|
+
/**
|
|
30
|
+
* Deny permission for a tool (cache the decision)
|
|
31
|
+
*/
|
|
32
|
+
export declare function denyPermission(toolName: string, input?: Record<string, unknown>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Clear permission cache
|
|
35
|
+
*/
|
|
36
|
+
export declare function clearPermissionCache(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get all registered safe patterns
|
|
39
|
+
*/
|
|
40
|
+
export declare function getSafePatterns(): SafeCommandPattern[];
|
|
41
|
+
/**
|
|
42
|
+
* Add a custom safe pattern
|
|
43
|
+
*/
|
|
44
|
+
export declare function addSafePattern(pattern: SafeCommandPattern): void;
|
|
45
|
+
/**
|
|
46
|
+
* Remove safe patterns from a specific source
|
|
47
|
+
*/
|
|
48
|
+
export declare function removeSafePatternsFromSource(source: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* Check if tool should be delegated (not handled directly by OMC)
|
|
51
|
+
*/
|
|
52
|
+
export declare function shouldDelegate(toolName: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get delegation target for a tool
|
|
55
|
+
*/
|
|
56
|
+
export declare function getDelegationTarget(toolName: string): {
|
|
57
|
+
type: 'plugin' | 'mcp' | 'internal';
|
|
58
|
+
target: string;
|
|
59
|
+
} | null;
|
|
60
|
+
/**
|
|
61
|
+
* Integrate permission adapter with OMC's permission system
|
|
62
|
+
* Call this during initialization to register patterns from discovered plugins
|
|
63
|
+
*/
|
|
64
|
+
export declare function integrateWithPermissionSystem(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Process a permission request from hook system
|
|
67
|
+
* Returns hook-compatible output
|
|
68
|
+
*/
|
|
69
|
+
export declare function processExternalToolPermission(toolName: string, toolInput?: Record<string, unknown>): {
|
|
70
|
+
continue: boolean;
|
|
71
|
+
hookSpecificOutput?: {
|
|
72
|
+
hookEventName: string;
|
|
73
|
+
decision: {
|
|
74
|
+
behavior: 'allow' | 'deny' | 'ask';
|
|
75
|
+
reason?: string;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=permission-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-adapter.d.ts","sourceRoot":"","sources":["../../src/compatibility/permission-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAGV,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA+FpB;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAiBD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAuBzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,qBAAqB,CAmEvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAMvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAMtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,kBAAkB,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAwBxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACrD,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CA0BP;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAqBpD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE;YACR,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;YACnC,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH,CAgCA"}
|