@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.
Files changed (141) hide show
  1. package/dist/commands/agents/AgentsCommand.js +459 -655
  2. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  3. package/dist/commands/agents/types.js +1 -0
  4. package/dist/commands/agents/types.js.map +2 -2
  5. package/dist/commands/agents/utils/fileOperations.js +96 -36
  6. package/dist/commands/agents/utils/fileOperations.js.map +3 -3
  7. package/dist/commands/agents/utils/index.js +3 -1
  8. package/dist/commands/agents/utils/index.js.map +2 -2
  9. package/dist/commands/context.js +54 -23
  10. package/dist/commands/context.js.map +2 -2
  11. package/dist/commands/export.js +673 -93
  12. package/dist/commands/export.js.map +2 -2
  13. package/dist/commands/language.js +19 -46
  14. package/dist/commands/language.js.map +2 -2
  15. package/dist/commands/mcp-interactive.js +419 -217
  16. package/dist/commands/mcp-interactive.js.map +2 -2
  17. package/dist/commands/model.js +415 -66
  18. package/dist/commands/model.js.map +2 -2
  19. package/dist/commands/permissions.js +75 -49
  20. package/dist/commands/permissions.js.map +2 -2
  21. package/dist/commands/plugin.js +882 -185
  22. package/dist/commands/plugin.js.map +3 -3
  23. package/dist/commands/resume.js +1 -1
  24. package/dist/commands/resume.js.map +1 -1
  25. package/dist/commands/sandbox.js +168 -70
  26. package/dist/commands/sandbox.js.map +2 -2
  27. package/dist/commands/setup.js +593 -107
  28. package/dist/commands/setup.js.map +2 -2
  29. package/dist/commands/stats.js +188 -131
  30. package/dist/commands/stats.js.map +2 -2
  31. package/dist/commands/status.js +75 -13
  32. package/dist/commands/status.js.map +2 -2
  33. package/dist/commands/undo.js +138 -174
  34. package/dist/commands/undo.js.map +2 -2
  35. package/dist/commands.js.map +1 -1
  36. package/dist/components/Help.js +165 -32
  37. package/dist/components/Help.js.map +2 -2
  38. package/dist/components/InfoPanel/InfoPanel.js +123 -0
  39. package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
  40. package/dist/components/InfoPanel/index.js +5 -0
  41. package/dist/components/InfoPanel/index.js.map +7 -0
  42. package/dist/components/InfoPanel/types.js +1 -0
  43. package/dist/components/InfoPanel/types.js.map +7 -0
  44. package/dist/components/ModelSelector/BrandTextInput.js +43 -0
  45. package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
  46. package/dist/components/ModelSelector/ModelSelector.js +419 -501
  47. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  48. package/dist/components/ModelSelector/WizardContainer.js +45 -0
  49. package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
  50. package/dist/components/ModelSelector/index.js +1 -3
  51. package/dist/components/ModelSelector/index.js.map +2 -2
  52. package/dist/components/PromptInput.js +5 -5
  53. package/dist/components/PromptInput.js.map +2 -2
  54. package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
  55. package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
  56. package/dist/components/SimpleSelector/index.js +5 -0
  57. package/dist/components/SimpleSelector/index.js.map +7 -0
  58. package/dist/components/SimpleSelector/types.js +1 -0
  59. package/dist/components/SimpleSelector/types.js.map +7 -0
  60. package/dist/components/StatusOverlayContent.js +21 -0
  61. package/dist/components/StatusOverlayContent.js.map +7 -0
  62. package/dist/components/TabbedListView/ScrollableList.js +31 -5
  63. package/dist/components/TabbedListView/ScrollableList.js.map +2 -2
  64. package/dist/components/TabbedListView/TabbedListView.js +122 -47
  65. package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
  66. package/dist/core/backupHook.js +29 -0
  67. package/dist/core/backupHook.js.map +7 -0
  68. package/dist/core/config/defaults.js +8 -2
  69. package/dist/core/config/defaults.js.map +2 -2
  70. package/dist/core/config/schema.js +14 -2
  71. package/dist/core/config/schema.js.map +2 -2
  72. package/dist/core/costTracker.js +0 -16
  73. package/dist/core/costTracker.js.map +2 -2
  74. package/dist/cost-tracker.js +0 -16
  75. package/dist/cost-tracker.js.map +2 -2
  76. package/dist/entrypoints/bootstrap.js +3 -1
  77. package/dist/entrypoints/bootstrap.js.map +2 -2
  78. package/dist/entrypoints/cli.js +32 -0
  79. package/dist/entrypoints/cli.js.map +2 -2
  80. package/dist/i18n/locales/en.js +300 -1
  81. package/dist/i18n/locales/en.js.map +2 -2
  82. package/dist/i18n/locales/zh-CN.js +301 -2
  83. package/dist/i18n/locales/zh-CN.js.map +2 -2
  84. package/dist/i18n/types.js.map +1 -1
  85. package/dist/services/customCommands.js +30 -8
  86. package/dist/services/customCommands.js.map +2 -2
  87. package/dist/services/plugins/lspServers.js +1 -1
  88. package/dist/services/plugins/lspServers.js.map +2 -2
  89. package/dist/services/plugins/pluginRuntime.js +2 -1
  90. package/dist/services/plugins/pluginRuntime.js.map +2 -2
  91. package/dist/services/plugins/pluginValidation.js +10 -3
  92. package/dist/services/plugins/pluginValidation.js.map +2 -2
  93. package/dist/services/plugins/skillMarketplace.js +16 -8
  94. package/dist/services/plugins/skillMarketplace.js.map +2 -2
  95. package/dist/services/systemReminder.js +17 -6
  96. package/dist/services/systemReminder.js.map +2 -2
  97. package/dist/tools/FileEditTool/FileEditTool.js +7 -0
  98. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  99. package/dist/tools/FileWriteTool/FileWriteTool.js +7 -0
  100. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  101. package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
  102. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  103. package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
  104. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  105. package/dist/tools/TaskTool/TaskTool.js +9 -6
  106. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  107. package/dist/types/PermissionMode.js.map +1 -1
  108. package/dist/types/plugin.js +2 -4
  109. package/dist/types/plugin.js.map +2 -2
  110. package/dist/utils/agentHookExecutor.js +1 -4
  111. package/dist/utils/agentHookExecutor.js.map +2 -2
  112. package/dist/utils/agentLoader.js +67 -13
  113. package/dist/utils/agentLoader.js.map +2 -2
  114. package/dist/utils/agentMemory.js.map +2 -2
  115. package/dist/utils/claudeCodeSync.js +439 -0
  116. package/dist/utils/claudeCodeSync.js.map +7 -0
  117. package/dist/utils/config.js +1 -23
  118. package/dist/utils/config.js.map +2 -2
  119. package/dist/utils/execFileNoThrow.js +2 -1
  120. package/dist/utils/execFileNoThrow.js.map +2 -2
  121. package/dist/utils/marketplaceManager.js +80 -43
  122. package/dist/utils/marketplaceManager.js.map +2 -2
  123. package/dist/utils/messages.js +2 -2
  124. package/dist/utils/messages.js.map +2 -2
  125. package/dist/utils/pluginInstaller.js +34 -24
  126. package/dist/utils/pluginInstaller.js.map +2 -2
  127. package/dist/utils/pluginLoader.js +48 -25
  128. package/dist/utils/pluginLoader.js.map +2 -2
  129. package/dist/utils/repoFetcher.js +110 -0
  130. package/dist/utils/repoFetcher.js.map +7 -0
  131. package/dist/utils/skillLoader.js +18 -6
  132. package/dist/utils/skillLoader.js.map +2 -2
  133. package/dist/utils/stringSubstitution.js +4 -5
  134. package/dist/utils/stringSubstitution.js.map +2 -2
  135. package/dist/utils/teamConfig.js +153 -13
  136. package/dist/utils/teamConfig.js.map +2 -2
  137. package/dist/utils/terminal.js +1 -1
  138. package/dist/utils/terminal.js.map +2 -2
  139. package/dist/version.js +2 -2
  140. package/dist/version.js.map +1 -1
  141. package/package.json +6 -6
@@ -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
- const SandboxStatus = ({
9
- config,
10
- implementation,
11
- isAvailable,
12
- onToggle,
13
- onDone
14
- }) => {
15
- const [showHelp, setShowHelp] = useState(false);
16
- useInput((input, key) => {
17
- if (input === "t" || input === "T") {
18
- onToggle();
19
- } else if (input === "h" || input === "H") {
20
- setShowHelp(!showHelp);
21
- } else if (input === "q" || key.escape) {
22
- onDone();
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 getImplColor = (impl) => {
26
- switch (impl) {
27
- case "seatbelt":
28
- return "green";
29
- case "bubblewrap":
30
- return "cyan";
31
- case "docker":
32
- return "yellow";
33
- case "none":
34
- return "gray";
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
- const getImplDescription = (impl) => {
38
- switch (impl) {
39
- case "seatbelt":
40
- return "macOS sandbox-exec (built-in)";
41
- case "bubblewrap":
42
- return "Linux bubblewrap container";
43
- case "docker":
44
- return "Docker container isolation";
45
- case "none":
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
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: "cyan" }, "Sandbox Configuration")), /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Status: "), config.enabled && isAvailable ? /* @__PURE__ */ React.createElement(Text, { color: "green" }, "\u25CF ENABLED") : /* @__PURE__ */ React.createElement(Text, { color: "red" }, "\u25CB DISABLED"))), /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Implementation: "), /* @__PURE__ */ React.createElement(Text, { color: getImplColor(implementation) }, implementation.toUpperCase())), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "- ", getImplDescription(implementation))), !isAvailable && /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "\u26A0 Sandbox not available on this system")), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Filesystem Policy:"), /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Write Allowed: "), config.filesystem.writeAllowed.length > 0 ? /* @__PURE__ */ React.createElement(Text, { color: "green" }, config.filesystem.writeAllowed.slice(0, 3).join(", "), config.filesystem.writeAllowed.length > 3 && " ...") : /* @__PURE__ */ React.createElement(Text, { color: "red" }, "None")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Denied Paths: "), config.filesystem.denied.length > 0 ? /* @__PURE__ */ React.createElement(Text, { color: "red" }, config.filesystem.denied.length, " paths blocked") : /* @__PURE__ */ React.createElement(Text, { color: "green" }, "None blocked")))), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Network Policy:"), /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Network Access: "), config.network.blockAll ? /* @__PURE__ */ React.createElement(Text, { color: "red" }, "Blocked") : /* @__PURE__ */ React.createElement(Text, { color: "green" }, "Allowed")), !config.network.blockAll && config.network.allowedDomains.length > 0 && /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Allowed Domains: "), /* @__PURE__ */ React.createElement(Text, null, config.network.allowedDomains.slice(0, 3).join(", "), config.network.allowedDomains.length > 3 && " ...")))), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Process Policy:"), /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Max Execution Time: "), /* @__PURE__ */ React.createElement(Text, null, config.process.maxExecutionTime / 1e3, "s")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Excluded Commands: "), /* @__PURE__ */ React.createElement(Text, null, config.process.excludedCommands.length > 0 ? config.process.excludedCommands.slice(0, 3).join(", ") : "None", config.process.excludedCommands.length > 3 && " ...")))), showHelp && /* @__PURE__ */ React.createElement(
50
- Box,
147
+ const sections = buildSections(config, implementation, isAvailable, showHelp);
148
+ const actions = [
51
149
  {
52
- flexDirection: "column",
53
- marginY: 1,
54
- borderStyle: "round",
55
- paddingX: 1
150
+ key: "t",
151
+ keyLabel: "T",
152
+ description: t("commands.sandbox.toggle"),
153
+ onPress: handleToggle
56
154
  },
57
- /* @__PURE__ */ React.createElement(Text, { bold: true }, "Sandbox Implementations:"),
58
- /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", paddingLeft: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "green" }, "\u2022 seatbelt:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "macOS built-in sandbox-exec")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "cyan" }, "\u2022 bubblewrap:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "Linux container isolation (bwrap)")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "\u2022 docker:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "Docker container isolation")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "gray" }, "\u2022 none:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "No sandboxing (not recommended)")))
59
- ), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "t: Toggle sandbox | h: Show/hide help | q/Esc: Exit")));
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: "View and toggle sandbox mode for command execution",
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
- const SandboxWrapper = () => {
77
- const [config, setConfig] = useState(initialConfig);
78
- const [isAvailable, setIsAvailable] = useState(initialAvailable);
79
- const handleToggle = async () => {
80
- const newEnabled = !config.enabled;
81
- controller.updateConfig({ enabled: newEnabled });
82
- const newConfig = controller.getConfig();
83
- setConfig(newConfig);
84
- const available = await controller.isAvailable();
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 */\n\nimport React, { useState, useEffect } from 'react'\nimport { Box, Text, useInput } from 'ink'\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'\n\ninterface SandboxStatusProps {\n config: SandboxConfig\n implementation: SandboxImplementation\n isAvailable: boolean\n onToggle: () => void\n onDone: () => void\n}\n\nconst SandboxStatus = ({\n config,\n implementation,\n isAvailable,\n onToggle,\n onDone,\n}: SandboxStatusProps) => {\n const [showHelp, setShowHelp] = useState(false)\n\n useInput((input, key) => {\n if (input === 't' || input === 'T') {\n onToggle()\n } else if (input === 'h' || input === 'H') {\n setShowHelp(!showHelp)\n } else if (input === 'q' || key.escape) {\n onDone()\n }\n })\n\n const getImplColor = (impl: SandboxImplementation) => {\n switch (impl) {\n case 'seatbelt':\n return 'green'\n case 'bubblewrap':\n return 'cyan'\n case 'docker':\n return 'yellow'\n case 'none':\n return 'gray'\n }\n }\n\n const getImplDescription = (impl: SandboxImplementation) => {\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\n return (\n <Box flexDirection=\"column\" marginY={1}>\n {/* Header */}\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n Sandbox Configuration\n </Text>\n </Box>\n\n {/* Status */}\n <Box marginBottom={1}>\n <Text>\n <Text bold>Status: </Text>\n {config.enabled && isAvailable ? (\n <Text color=\"green\">\u25CF ENABLED</Text>\n ) : (\n <Text color=\"red\">\u25CB DISABLED</Text>\n )}\n </Text>\n </Box>\n\n {/* Implementation */}\n <Box marginBottom={1}>\n <Text>\n <Text bold>Implementation: </Text>\n <Text color={getImplColor(implementation)}>\n {implementation.toUpperCase()}\n </Text>\n </Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n - {getImplDescription(implementation)}\n </Text>\n </Box>\n\n {/* Availability */}\n {!isAvailable && (\n <Box marginBottom={1}>\n <Text color=\"yellow\">\u26A0 Sandbox not available on this system</Text>\n </Box>\n )}\n\n {/* Configuration details */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold>Filesystem Policy:</Text>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Write Allowed: </Text>\n {config.filesystem.writeAllowed.length > 0 ? (\n <Text color=\"green\">\n {config.filesystem.writeAllowed.slice(0, 3).join(', ')}\n {config.filesystem.writeAllowed.length > 3 && ' ...'}\n </Text>\n ) : (\n <Text color=\"red\">None</Text>\n )}\n </Text>\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Denied Paths: </Text>\n {config.filesystem.denied.length > 0 ? (\n <Text color=\"red\">\n {config.filesystem.denied.length} paths blocked\n </Text>\n ) : (\n <Text color=\"green\">None blocked</Text>\n )}\n </Text>\n </Box>\n </Box>\n\n {/* Network policy */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold>Network Policy:</Text>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Network Access: </Text>\n {config.network.blockAll ? (\n <Text color=\"red\">Blocked</Text>\n ) : (\n <Text color=\"green\">Allowed</Text>\n )}\n </Text>\n {!config.network.blockAll &&\n config.network.allowedDomains.length > 0 && (\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Allowed Domains: </Text>\n <Text>\n {config.network.allowedDomains.slice(0, 3).join(', ')}\n {config.network.allowedDomains.length > 3 && ' ...'}\n </Text>\n </Text>\n )}\n </Box>\n </Box>\n\n {/* Process policy */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold>Process Policy:</Text>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Max Execution Time: </Text>\n <Text>{config.process.maxExecutionTime / 1000}s</Text>\n </Text>\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Excluded Commands: </Text>\n <Text>\n {config.process.excludedCommands.length > 0\n ? config.process.excludedCommands.slice(0, 3).join(', ')\n : 'None'}\n {config.process.excludedCommands.length > 3 && ' ...'}\n </Text>\n </Text>\n </Box>\n </Box>\n\n {/* Help toggle */}\n {showHelp && (\n <Box\n flexDirection=\"column\"\n marginY={1}\n borderStyle=\"round\"\n paddingX={1}\n >\n <Text bold>Sandbox Implementations:</Text>\n <Box flexDirection=\"column\" paddingLeft={1}>\n <Text>\n <Text color=\"green\">\u2022 seatbelt:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n macOS built-in sandbox-exec\n </Text>\n </Text>\n <Text>\n <Text color=\"cyan\">\u2022 bubblewrap:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n Linux container isolation (bwrap)\n </Text>\n </Text>\n <Text>\n <Text color=\"yellow\">\u2022 docker:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n Docker container isolation\n </Text>\n </Text>\n <Text>\n <Text color=\"gray\">\u2022 none:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n No sandboxing (not recommended)\n </Text>\n </Text>\n </Box>\n </Box>\n )}\n\n {/* Controls */}\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n t: Toggle sandbox | h: Show/hide help | q/Esc: Exit\n </Text>\n </Box>\n </Box>\n )\n}\n\nconst command: Command = {\n name: 'sandbox',\n description: 'View and toggle sandbox mode for command execution',\n isEnabled: true,\n isHidden: false,\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 // Create a wrapper component to manage state\n const SandboxWrapper = () => {\n const [config, setConfig] = useState(initialConfig)\n const [isAvailable, setIsAvailable] = useState(initialAvailable)\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 return (\n <SandboxStatus\n config={config}\n implementation={implementation}\n isAvailable={isAvailable}\n onToggle={handleToggle}\n onDone={onDone}\n />\n )\n }\n\n return <SandboxWrapper />\n },\n}\n\nexport default command\n"],
5
- "mappings": "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",
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
  }