@within-7/minto 0.3.9 → 0.3.10
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/commands/agents/AgentsCommand.js +459 -655
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/types.js +1 -0
- package/dist/commands/agents/types.js.map +2 -2
- package/dist/commands/agents/utils/fileOperations.js +96 -36
- package/dist/commands/agents/utils/fileOperations.js.map +3 -3
- package/dist/commands/agents/utils/index.js +3 -1
- package/dist/commands/agents/utils/index.js.map +2 -2
- package/dist/commands/context.js +54 -23
- package/dist/commands/context.js.map +2 -2
- package/dist/commands/export.js +673 -93
- package/dist/commands/export.js.map +2 -2
- package/dist/commands/language.js +19 -46
- package/dist/commands/language.js.map +2 -2
- package/dist/commands/mcp-interactive.js +419 -217
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +415 -66
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/permissions.js +75 -49
- package/dist/commands/permissions.js.map +2 -2
- package/dist/commands/plugin.js +882 -185
- package/dist/commands/plugin.js.map +3 -3
- package/dist/commands/resume.js +1 -1
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/sandbox.js +168 -70
- package/dist/commands/sandbox.js.map +2 -2
- package/dist/commands/setup.js +593 -107
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/stats.js +188 -131
- package/dist/commands/stats.js.map +2 -2
- package/dist/commands/status.js +75 -13
- package/dist/commands/status.js.map +2 -2
- package/dist/commands/undo.js +138 -174
- package/dist/commands/undo.js.map +2 -2
- package/dist/commands.js.map +1 -1
- package/dist/components/Help.js +165 -32
- package/dist/components/Help.js.map +2 -2
- package/dist/components/InfoPanel/InfoPanel.js +123 -0
- package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
- package/dist/components/InfoPanel/index.js +5 -0
- package/dist/components/InfoPanel/index.js.map +7 -0
- package/dist/components/InfoPanel/types.js +1 -0
- package/dist/components/InfoPanel/types.js.map +7 -0
- package/dist/components/ModelSelector/BrandTextInput.js +43 -0
- package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
- package/dist/components/ModelSelector/ModelSelector.js +419 -501
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/ModelSelector/WizardContainer.js +45 -0
- package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
- package/dist/components/ModelSelector/index.js +1 -3
- package/dist/components/ModelSelector/index.js.map +2 -2
- package/dist/components/PromptInput.js +5 -5
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
- package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
- package/dist/components/SimpleSelector/index.js +5 -0
- package/dist/components/SimpleSelector/index.js.map +7 -0
- package/dist/components/SimpleSelector/types.js +1 -0
- package/dist/components/SimpleSelector/types.js.map +7 -0
- package/dist/components/StatusOverlayContent.js +21 -0
- package/dist/components/StatusOverlayContent.js.map +7 -0
- package/dist/components/TabbedListView/ScrollableList.js +31 -5
- package/dist/components/TabbedListView/ScrollableList.js.map +2 -2
- package/dist/components/TabbedListView/TabbedListView.js +122 -47
- package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
- package/dist/core/backupHook.js +29 -0
- package/dist/core/backupHook.js.map +7 -0
- package/dist/core/config/defaults.js +8 -2
- package/dist/core/config/defaults.js.map +2 -2
- package/dist/core/config/schema.js +14 -2
- package/dist/core/config/schema.js.map +2 -2
- package/dist/core/costTracker.js +0 -16
- package/dist/core/costTracker.js.map +2 -2
- package/dist/cost-tracker.js +0 -16
- package/dist/cost-tracker.js.map +2 -2
- package/dist/entrypoints/bootstrap.js +3 -1
- package/dist/entrypoints/bootstrap.js.map +2 -2
- package/dist/entrypoints/cli.js +32 -0
- package/dist/entrypoints/cli.js.map +2 -2
- package/dist/i18n/locales/en.js +300 -1
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.js +301 -2
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/i18n/types.js.map +1 -1
- package/dist/services/customCommands.js +30 -8
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/plugins/lspServers.js +1 -1
- package/dist/services/plugins/lspServers.js.map +2 -2
- package/dist/services/plugins/pluginRuntime.js +2 -1
- package/dist/services/plugins/pluginRuntime.js.map +2 -2
- package/dist/services/plugins/pluginValidation.js +10 -3
- package/dist/services/plugins/pluginValidation.js.map +2 -2
- package/dist/services/plugins/skillMarketplace.js +16 -8
- package/dist/services/plugins/skillMarketplace.js.map +2 -2
- package/dist/services/systemReminder.js +17 -6
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/tools/FileEditTool/FileEditTool.js +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +7 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
- package/dist/tools/TaskTool/TaskTool.js +9 -6
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/types/PermissionMode.js.map +1 -1
- package/dist/types/plugin.js +2 -4
- package/dist/types/plugin.js.map +2 -2
- package/dist/utils/agentHookExecutor.js +1 -4
- package/dist/utils/agentHookExecutor.js.map +2 -2
- package/dist/utils/agentLoader.js +67 -13
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentMemory.js.map +2 -2
- package/dist/utils/claudeCodeSync.js +439 -0
- package/dist/utils/claudeCodeSync.js.map +7 -0
- package/dist/utils/config.js +1 -23
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/execFileNoThrow.js +2 -1
- package/dist/utils/execFileNoThrow.js.map +2 -2
- package/dist/utils/marketplaceManager.js +80 -43
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/messages.js +2 -2
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/pluginInstaller.js +34 -24
- package/dist/utils/pluginInstaller.js.map +2 -2
- package/dist/utils/pluginLoader.js +48 -25
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/repoFetcher.js +110 -0
- package/dist/utils/repoFetcher.js.map +7 -0
- package/dist/utils/skillLoader.js +18 -6
- package/dist/utils/skillLoader.js.map +2 -2
- package/dist/utils/stringSubstitution.js +4 -5
- package/dist/utils/stringSubstitution.js.map +2 -2
- package/dist/utils/teamConfig.js +153 -13
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/terminal.js +1 -1
- package/dist/utils/terminal.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +6 -6
package/dist/commands/sandbox.js
CHANGED
|
@@ -1,68 +1,180 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
|
-
import { Box, Text, useInput } from "ink";
|
|
3
2
|
import {
|
|
4
3
|
getSandboxController
|
|
5
4
|
} from "../services/sandbox/index.js";
|
|
6
5
|
import { getCwd } from "../utils/state.js";
|
|
7
6
|
import { SEMANTIC_COLORS } from "../constants/colors.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
import { InfoPanel } from "../components/InfoPanel/index.js";
|
|
8
|
+
import { t } from "../i18n/index.js";
|
|
9
|
+
function getImplColor(impl) {
|
|
10
|
+
switch (impl) {
|
|
11
|
+
case "seatbelt":
|
|
12
|
+
return SEMANTIC_COLORS.success;
|
|
13
|
+
case "bubblewrap":
|
|
14
|
+
return SEMANTIC_COLORS.info;
|
|
15
|
+
case "docker":
|
|
16
|
+
return "#FFB86C";
|
|
17
|
+
case "none":
|
|
18
|
+
return SEMANTIC_COLORS.dim;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function getImplDescription(impl) {
|
|
22
|
+
switch (impl) {
|
|
23
|
+
case "seatbelt":
|
|
24
|
+
return "macOS sandbox-exec (built-in)";
|
|
25
|
+
case "bubblewrap":
|
|
26
|
+
return "Linux bubblewrap container";
|
|
27
|
+
case "docker":
|
|
28
|
+
return "Docker container isolation";
|
|
29
|
+
case "none":
|
|
30
|
+
return "No sandbox available";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function buildSections(config, implementation, isAvailable, showHelp) {
|
|
34
|
+
const sections = [];
|
|
35
|
+
const statusValue = config.enabled && isAvailable ? `\u25CF ${t("commands.sandbox.enabled")}` : `\u25CB ${t("commands.sandbox.disabled")}`;
|
|
36
|
+
const statusColor = config.enabled && isAvailable ? SEMANTIC_COLORS.success : SEMANTIC_COLORS.error;
|
|
37
|
+
const statusItems = [
|
|
38
|
+
{ label: "Status", value: statusValue, valueColor: statusColor },
|
|
39
|
+
{
|
|
40
|
+
label: t("commands.sandbox.implementation"),
|
|
41
|
+
value: `${implementation.toUpperCase()} - ${getImplDescription(implementation)}`,
|
|
42
|
+
valueColor: getImplColor(implementation)
|
|
23
43
|
}
|
|
44
|
+
];
|
|
45
|
+
if (!isAvailable) {
|
|
46
|
+
statusItems.push({
|
|
47
|
+
label: "\u26A0",
|
|
48
|
+
value: t("commands.sandbox.notAvailable"),
|
|
49
|
+
valueColor: "#FFB86C"
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
sections.push({
|
|
53
|
+
title: t("commands.sandbox.statusSection"),
|
|
54
|
+
items: statusItems
|
|
24
55
|
});
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
56
|
+
const fsItems = [
|
|
57
|
+
{
|
|
58
|
+
label: "Write Allowed",
|
|
59
|
+
value: config.filesystem.writeAllowed.length > 0 ? config.filesystem.writeAllowed.slice(0, 3).join(", ") + (config.filesystem.writeAllowed.length > 3 ? " ..." : "") : "None",
|
|
60
|
+
valueColor: config.filesystem.writeAllowed.length > 0 ? SEMANTIC_COLORS.success : SEMANTIC_COLORS.error
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
label: "Denied Paths",
|
|
64
|
+
value: config.filesystem.denied.length > 0 ? `${config.filesystem.denied.length} paths blocked` : "None blocked",
|
|
65
|
+
valueColor: config.filesystem.denied.length > 0 ? SEMANTIC_COLORS.error : SEMANTIC_COLORS.success
|
|
35
66
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return "No sandbox available";
|
|
67
|
+
];
|
|
68
|
+
sections.push({
|
|
69
|
+
title: t("commands.sandbox.filesystemPolicy"),
|
|
70
|
+
items: fsItems
|
|
71
|
+
});
|
|
72
|
+
const netItems = [
|
|
73
|
+
{
|
|
74
|
+
label: "Network Access",
|
|
75
|
+
value: config.network.blockAll ? "Blocked" : "Allowed",
|
|
76
|
+
valueColor: config.network.blockAll ? SEMANTIC_COLORS.error : SEMANTIC_COLORS.success
|
|
47
77
|
}
|
|
78
|
+
];
|
|
79
|
+
if (!config.network.blockAll && config.network.allowedDomains.length > 0) {
|
|
80
|
+
netItems.push({
|
|
81
|
+
label: "Allowed Domains",
|
|
82
|
+
value: config.network.allowedDomains.slice(0, 3).join(", ") + (config.network.allowedDomains.length > 3 ? " ..." : "")
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
sections.push({ title: t("commands.sandbox.networkPolicy"), items: netItems });
|
|
86
|
+
sections.push({
|
|
87
|
+
title: t("commands.sandbox.processPolicy"),
|
|
88
|
+
items: [
|
|
89
|
+
{
|
|
90
|
+
label: "Max Exec Time",
|
|
91
|
+
value: `${config.process.maxExecutionTime / 1e3}s`
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
label: "Excluded Cmds",
|
|
95
|
+
value: config.process.excludedCommands.length > 0 ? config.process.excludedCommands.slice(0, 3).join(", ") + (config.process.excludedCommands.length > 3 ? " ..." : "") : "None"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
});
|
|
99
|
+
if (showHelp) {
|
|
100
|
+
sections.push({
|
|
101
|
+
title: t("commands.sandbox.helpSection"),
|
|
102
|
+
items: [
|
|
103
|
+
{
|
|
104
|
+
label: "\u2022 seatbelt",
|
|
105
|
+
value: "macOS built-in sandbox-exec",
|
|
106
|
+
valueColor: SEMANTIC_COLORS.success
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
label: "\u2022 bubblewrap",
|
|
110
|
+
value: "Linux container isolation (bwrap)",
|
|
111
|
+
valueColor: SEMANTIC_COLORS.info
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
label: "\u2022 docker",
|
|
115
|
+
value: "Docker container isolation",
|
|
116
|
+
valueColor: "#FFB86C"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
label: "\u2022 none",
|
|
120
|
+
value: "No sandboxing (not recommended)",
|
|
121
|
+
valueColor: SEMANTIC_COLORS.dim
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return sections;
|
|
127
|
+
}
|
|
128
|
+
const SandboxView = ({
|
|
129
|
+
initialConfig,
|
|
130
|
+
implementation,
|
|
131
|
+
initialAvailable,
|
|
132
|
+
onDone
|
|
133
|
+
}) => {
|
|
134
|
+
const [config, setConfig] = useState(initialConfig);
|
|
135
|
+
const [isAvailable, setIsAvailable] = useState(initialAvailable);
|
|
136
|
+
const [showHelp, setShowHelp] = useState(false);
|
|
137
|
+
const cwd = getCwd();
|
|
138
|
+
const controller = getSandboxController(cwd);
|
|
139
|
+
const handleToggle = async () => {
|
|
140
|
+
const newEnabled = !config.enabled;
|
|
141
|
+
controller.updateConfig({ enabled: newEnabled });
|
|
142
|
+
const newConfig = controller.getConfig();
|
|
143
|
+
setConfig(newConfig);
|
|
144
|
+
const available = await controller.isAvailable();
|
|
145
|
+
setIsAvailable(available);
|
|
48
146
|
};
|
|
49
|
-
|
|
50
|
-
|
|
147
|
+
const sections = buildSections(config, implementation, isAvailable, showHelp);
|
|
148
|
+
const actions = [
|
|
51
149
|
{
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
150
|
+
key: "t",
|
|
151
|
+
keyLabel: "T",
|
|
152
|
+
description: t("commands.sandbox.toggle"),
|
|
153
|
+
onPress: handleToggle
|
|
56
154
|
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
155
|
+
{
|
|
156
|
+
key: "h",
|
|
157
|
+
keyLabel: "H",
|
|
158
|
+
description: t("commands.sandbox.toggleHelp"),
|
|
159
|
+
onPress: () => setShowHelp(!showHelp)
|
|
160
|
+
}
|
|
161
|
+
];
|
|
162
|
+
return /* @__PURE__ */ React.createElement(
|
|
163
|
+
InfoPanel,
|
|
164
|
+
{
|
|
165
|
+
title: t("commands.sandbox.title"),
|
|
166
|
+
sections,
|
|
167
|
+
actions,
|
|
168
|
+
onClose: onDone
|
|
169
|
+
}
|
|
170
|
+
);
|
|
60
171
|
};
|
|
61
172
|
const command = {
|
|
62
173
|
name: "sandbox",
|
|
63
|
-
description: "
|
|
174
|
+
description: t("commands.sandbox.description"),
|
|
64
175
|
isEnabled: true,
|
|
65
176
|
isHidden: false,
|
|
177
|
+
hidePromptInput: true,
|
|
66
178
|
type: "local-jsx",
|
|
67
179
|
userFacingName() {
|
|
68
180
|
return this.name;
|
|
@@ -73,29 +185,15 @@ const command = {
|
|
|
73
185
|
const initialConfig = controller.getConfig();
|
|
74
186
|
const implementation = controller.getImplementationType();
|
|
75
187
|
const initialAvailable = await controller.isAvailable();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
setIsAvailable(available);
|
|
86
|
-
};
|
|
87
|
-
return /* @__PURE__ */ React.createElement(
|
|
88
|
-
SandboxStatus,
|
|
89
|
-
{
|
|
90
|
-
config,
|
|
91
|
-
implementation,
|
|
92
|
-
isAvailable,
|
|
93
|
-
onToggle: handleToggle,
|
|
94
|
-
onDone
|
|
95
|
-
}
|
|
96
|
-
);
|
|
97
|
-
};
|
|
98
|
-
return /* @__PURE__ */ React.createElement(SandboxWrapper, null);
|
|
188
|
+
return /* @__PURE__ */ React.createElement(
|
|
189
|
+
SandboxView,
|
|
190
|
+
{
|
|
191
|
+
initialConfig,
|
|
192
|
+
implementation,
|
|
193
|
+
initialAvailable,
|
|
194
|
+
onDone
|
|
195
|
+
}
|
|
196
|
+
);
|
|
99
197
|
}
|
|
100
198
|
};
|
|
101
199
|
var sandbox_default = command;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/sandbox.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Sandbox Command\n *\n * Toggle and configure sandbox mode for command execution.\n
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * Sandbox Command\n *\n * Toggle and configure sandbox mode for command execution.\n * Uses InfoPanel with actions for consistent UI.\n */\n\nimport React, { useState } from 'react'\nimport type { Command } from '@commands'\nimport {\n getSandboxController,\n type SandboxConfig,\n type SandboxImplementation,\n} from '../services/sandbox'\nimport { getCwd } from '@utils/state'\nimport { SEMANTIC_COLORS } from '@constants/colors'\nimport { InfoPanel } from '@components/InfoPanel'\nimport type {\n InfoSection,\n InfoPanelAction,\n InfoItem,\n} from '@components/InfoPanel'\nimport { t } from '@i18n'\n\nfunction getImplColor(impl: SandboxImplementation): string {\n switch (impl) {\n case 'seatbelt':\n return SEMANTIC_COLORS.success\n case 'bubblewrap':\n return SEMANTIC_COLORS.info\n case 'docker':\n return '#FFB86C'\n case 'none':\n return SEMANTIC_COLORS.dim\n }\n}\n\nfunction getImplDescription(impl: SandboxImplementation): string {\n switch (impl) {\n case 'seatbelt':\n return 'macOS sandbox-exec (built-in)'\n case 'bubblewrap':\n return 'Linux bubblewrap container'\n case 'docker':\n return 'Docker container isolation'\n case 'none':\n return 'No sandbox available'\n }\n}\n\nfunction buildSections(\n config: SandboxConfig,\n implementation: SandboxImplementation,\n isAvailable: boolean,\n showHelp: boolean,\n): InfoSection[] {\n const sections: InfoSection[] = []\n\n // Status\n const statusValue =\n config.enabled && isAvailable\n ? `\\u25CF ${t('commands.sandbox.enabled')}`\n : `\\u25CB ${t('commands.sandbox.disabled')}`\n const statusColor =\n config.enabled && isAvailable\n ? SEMANTIC_COLORS.success\n : SEMANTIC_COLORS.error\n\n const statusItems: InfoItem[] = [\n { label: 'Status', value: statusValue, valueColor: statusColor },\n {\n label: t('commands.sandbox.implementation'),\n value: `${implementation.toUpperCase()} - ${getImplDescription(implementation)}`,\n valueColor: getImplColor(implementation),\n },\n ]\n if (!isAvailable) {\n statusItems.push({\n label: '\\u26A0',\n value: t('commands.sandbox.notAvailable'),\n valueColor: '#FFB86C',\n })\n }\n sections.push({\n title: t('commands.sandbox.statusSection'),\n items: statusItems,\n })\n\n // Filesystem Policy\n const fsItems: InfoItem[] = [\n {\n label: 'Write Allowed',\n value:\n config.filesystem.writeAllowed.length > 0\n ? config.filesystem.writeAllowed.slice(0, 3).join(', ') +\n (config.filesystem.writeAllowed.length > 3 ? ' ...' : '')\n : 'None',\n valueColor:\n config.filesystem.writeAllowed.length > 0\n ? SEMANTIC_COLORS.success\n : SEMANTIC_COLORS.error,\n },\n {\n label: 'Denied Paths',\n value:\n config.filesystem.denied.length > 0\n ? `${config.filesystem.denied.length} paths blocked`\n : 'None blocked',\n valueColor:\n config.filesystem.denied.length > 0\n ? SEMANTIC_COLORS.error\n : SEMANTIC_COLORS.success,\n },\n ]\n sections.push({\n title: t('commands.sandbox.filesystemPolicy'),\n items: fsItems,\n })\n\n // Network Policy\n const netItems: InfoItem[] = [\n {\n label: 'Network Access',\n value: config.network.blockAll ? 'Blocked' : 'Allowed',\n valueColor: config.network.blockAll\n ? SEMANTIC_COLORS.error\n : SEMANTIC_COLORS.success,\n },\n ]\n if (!config.network.blockAll && config.network.allowedDomains.length > 0) {\n netItems.push({\n label: 'Allowed Domains',\n value:\n config.network.allowedDomains.slice(0, 3).join(', ') +\n (config.network.allowedDomains.length > 3 ? ' ...' : ''),\n })\n }\n sections.push({ title: t('commands.sandbox.networkPolicy'), items: netItems })\n\n // Process Policy\n sections.push({\n title: t('commands.sandbox.processPolicy'),\n items: [\n {\n label: 'Max Exec Time',\n value: `${config.process.maxExecutionTime / 1000}s`,\n },\n {\n label: 'Excluded Cmds',\n value:\n config.process.excludedCommands.length > 0\n ? config.process.excludedCommands.slice(0, 3).join(', ') +\n (config.process.excludedCommands.length > 3 ? ' ...' : '')\n : 'None',\n },\n ],\n })\n\n // Help section (collapsible)\n if (showHelp) {\n sections.push({\n title: t('commands.sandbox.helpSection'),\n items: [\n {\n label: '\\u2022 seatbelt',\n value: 'macOS built-in sandbox-exec',\n valueColor: SEMANTIC_COLORS.success,\n },\n {\n label: '\\u2022 bubblewrap',\n value: 'Linux container isolation (bwrap)',\n valueColor: SEMANTIC_COLORS.info,\n },\n {\n label: '\\u2022 docker',\n value: 'Docker container isolation',\n valueColor: '#FFB86C',\n },\n {\n label: '\\u2022 none',\n value: 'No sandboxing (not recommended)',\n valueColor: SEMANTIC_COLORS.dim,\n },\n ],\n })\n }\n\n return sections\n}\n\ninterface SandboxViewProps {\n initialConfig: SandboxConfig\n implementation: SandboxImplementation\n initialAvailable: boolean\n onDone: () => void\n}\n\nconst SandboxView: React.FC<SandboxViewProps> = ({\n initialConfig,\n implementation,\n initialAvailable,\n onDone,\n}) => {\n const [config, setConfig] = useState(initialConfig)\n const [isAvailable, setIsAvailable] = useState(initialAvailable)\n const [showHelp, setShowHelp] = useState(false)\n\n const cwd = getCwd()\n const controller = getSandboxController(cwd)\n\n const handleToggle = async () => {\n const newEnabled = !config.enabled\n controller.updateConfig({ enabled: newEnabled })\n const newConfig = controller.getConfig()\n setConfig(newConfig)\n const available = await controller.isAvailable()\n setIsAvailable(available)\n }\n\n const sections = buildSections(config, implementation, isAvailable, showHelp)\n const actions: InfoPanelAction[] = [\n {\n key: 't',\n keyLabel: 'T',\n description: t('commands.sandbox.toggle'),\n onPress: handleToggle,\n },\n {\n key: 'h',\n keyLabel: 'H',\n description: t('commands.sandbox.toggleHelp'),\n onPress: () => setShowHelp(!showHelp),\n },\n ]\n\n return (\n <InfoPanel\n title={t('commands.sandbox.title')}\n sections={sections}\n actions={actions}\n onClose={onDone}\n />\n )\n}\n\nconst command: Command = {\n name: 'sandbox',\n description: t('commands.sandbox.description'),\n isEnabled: true,\n isHidden: false,\n hidePromptInput: true,\n type: 'local-jsx',\n\n userFacingName() {\n return this.name\n },\n\n async call(onDone, _context) {\n const cwd = getCwd()\n const controller = getSandboxController(cwd)\n const initialConfig = controller.getConfig()\n const implementation = controller.getImplementationType()\n const initialAvailable = await controller.isAvailable()\n\n return (\n <SandboxView\n initialConfig={initialConfig}\n implementation={implementation}\n initialAvailable={initialAvailable}\n onDone={onDone}\n />\n )\n },\n}\n\nexport default command\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|