@m14i/sith 1.21.1 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -42961,13 +42961,11 @@ which.sync = whichSync
42961
42961
 
42962
42962
  /***/ }),
42963
42963
 
42964
- /***/ 5515:
42965
- /***/ ((module, __webpack_exports__, __nccwpck_require__) => {
42964
+ /***/ 3361:
42965
+ /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
42966
42966
 
42967
- __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
42968
42967
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
42969
- /* harmony export */ Q: () => (/* binding */ dockerCommand),
42970
- /* harmony export */ l: () => (/* binding */ runShellDirect)
42968
+ /* harmony export */ Q: () => (/* binding */ dockerCommand)
42971
42969
  /* harmony export */ });
42972
42970
  /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
42973
42971
  /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
@@ -42975,23 +42973,8 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
42975
42973
  /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
42976
42974
  /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
42977
42975
  /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
42978
- /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(6181);
42979
- /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3816);
42980
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(2864);
42981
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
42982
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6878);
42983
- /* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(4495);
42984
- /* harmony import */ var _utils_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(6400);
42985
- /* harmony import */ var _nix_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(9922);
42986
- /* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(9805);
42987
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_3__, _skills_js__WEBPACK_IMPORTED_MODULE_9__]);
42988
- ([ink__WEBPACK_IMPORTED_MODULE_3__, _skills_js__WEBPACK_IMPORTED_MODULE_9__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
42989
-
42990
-
42991
-
42992
-
42993
-
42994
-
42976
+ /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(6181);
42977
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6878);
42995
42978
 
42996
42979
 
42997
42980
 
@@ -43003,217 +42986,15 @@ function findProjectRoot(startDir) {
43003
42986
  let currentDir = startDir;
43004
42987
  const rootPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().parse(currentDir).root;
43005
42988
  while (currentDir !== rootPath) {
43006
- const dockerPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(currentDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName);
42989
+ const dockerPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(currentDir, _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.folderName);
43007
42990
  if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerPath) && node_fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(dockerPath).isDirectory()) {
43008
42991
  return currentDir;
43009
42992
  }
43010
42993
  currentDir = node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname(currentDir);
43011
42994
  }
43012
- throw new Error(`Could not find project root (${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName}/ folder not found)`);
42995
+ throw new Error(`Could not find project root (${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.folderName}/ folder not found)`);
43013
42996
  }
43014
42997
  const rootDir = findProjectRoot(__dirname);
43015
- const menuItems = [
43016
- { label: "Enter Shell", value: "shell", icon: "🚀" },
43017
- { label: "Manage Skills", value: "skills", icon: "🧠" },
43018
- { label: "Configuration", value: "config", icon: "⚙️" },
43019
- ];
43020
- const configMenuItems = [
43021
- { label: "Pull prebuilt image (recommended)", value: "pull", icon: "📦" },
43022
- { label: "Build Docker image from scratch", value: "build", icon: "🔨" },
43023
- { label: "Install Nix locally (no Docker)", value: "nix", icon: "❄️" },
43024
- { label: "Back", value: "back", icon: "◀️" },
43025
- ];
43026
- function Logo() {
43027
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginBottom: 1 },
43028
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" }, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .ASCII_LOGO */ .mF.map((line, index) => (
43029
- // biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
43030
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
43031
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { borderStyle: "double", borderColor: "red", paddingX: 2, marginTop: 1 },
43032
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "red", bold: true }, "SITH - Docker Manager"))));
43033
- }
43034
- function BuildingSpinner({ step }) {
43035
- const [frame, setFrame] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(0);
43036
- (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(() => {
43037
- const timer = setInterval(() => {
43038
- setFrame((prev) => (prev + 1) % _config_js__WEBPACK_IMPORTED_MODULE_5__/* .SPINNER_CONFIG */ .ZC.frames.length);
43039
- }, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .SPINNER_CONFIG */ .ZC.interval);
43040
- return () => clearInterval(timer);
43041
- }, []);
43042
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 },
43043
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "cyan" },
43044
- _config_js__WEBPACK_IMPORTED_MODULE_5__/* .SPINNER_CONFIG */ .ZC.frames[frame],
43045
- " ",
43046
- step)));
43047
- }
43048
- function Menu() {
43049
- const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .useApp */ .nm)();
43050
- const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(0);
43051
- const [isProcessing, setIsProcessing] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
43052
- const [processStep, setProcessStep] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)("");
43053
- const [processComplete, setProcessComplete] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
43054
- const [processError, setProcessError] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(null);
43055
- const [currentMenu, setCurrentMenu] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)("main");
43056
- (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .useInput */ .Ge)((_input, key) => {
43057
- if (isProcessing) {
43058
- return;
43059
- }
43060
- // Exit on any key press when process is complete or errored
43061
- if (processComplete || processError) {
43062
- exit();
43063
- return;
43064
- }
43065
- const items = currentMenu === "main" ? menuItems : configMenuItems;
43066
- if (key.upArrow) {
43067
- setSelectedIndex((prev) => (prev > 0 ? prev - 1 : items.length - 1));
43068
- }
43069
- else if (key.downArrow) {
43070
- setSelectedIndex((prev) => (prev < items.length - 1 ? prev + 1 : 0));
43071
- }
43072
- else if (key.return) {
43073
- handleSelection(items[selectedIndex].value);
43074
- }
43075
- });
43076
- async function handleSelection(value) {
43077
- switch (value) {
43078
- case "shell":
43079
- exit();
43080
- await runShell();
43081
- return;
43082
- case "skills":
43083
- exit();
43084
- (0,_skills_js__WEBPACK_IMPORTED_MODULE_9__/* .skillsCommand */ .a)();
43085
- return;
43086
- case "config":
43087
- setCurrentMenu("config");
43088
- setSelectedIndex(0);
43089
- return;
43090
- case "back":
43091
- setCurrentMenu("main");
43092
- setSelectedIndex(0);
43093
- return;
43094
- case "pull":
43095
- await handlePullCommand();
43096
- break;
43097
- case "build":
43098
- await handleBuildCommand();
43099
- break;
43100
- case "nix":
43101
- await handleNixCommand();
43102
- break;
43103
- default:
43104
- break;
43105
- }
43106
- }
43107
- async function handlePullCommand() {
43108
- setIsProcessing(true);
43109
- setProcessStep("Pulling prebuilt Docker image...");
43110
- try {
43111
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage], {
43112
- stdio: "inherit",
43113
- });
43114
- // Tag the pulled image with local name for compatibility
43115
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["tag", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName], {
43116
- stdio: "inherit",
43117
- });
43118
- setIsProcessing(false);
43119
- setProcessComplete(true);
43120
- setProcessStep("");
43121
- }
43122
- catch (error) {
43123
- setIsProcessing(false);
43124
- setProcessError(error instanceof Error ? error.message : "Pull failed");
43125
- }
43126
- }
43127
- async function handleNixCommand() {
43128
- setIsProcessing(true);
43129
- setProcessStep("Installing Nix locally...");
43130
- try {
43131
- await (0,_nix_js__WEBPACK_IMPORTED_MODULE_8__/* .installNix */ .Fh)();
43132
- await (0,_nix_js__WEBPACK_IMPORTED_MODULE_8__/* .copyNixFiles */ .Qi)();
43133
- setIsProcessing(false);
43134
- setProcessComplete(true);
43135
- setProcessStep("");
43136
- }
43137
- catch (error) {
43138
- setIsProcessing(false);
43139
- setProcessError(error instanceof Error ? error.message : "Nix installation failed");
43140
- }
43141
- }
43142
- async function handleBuildCommand() {
43143
- setIsProcessing(true);
43144
- setProcessStep("Building Docker image from scratch...");
43145
- try {
43146
- const dockerfilePath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(rootDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.dockerfileName);
43147
- if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerfilePath)) {
43148
- throw new Error(`Dockerfile not found at: ${dockerfilePath}`);
43149
- }
43150
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
43151
- stdio: "inherit",
43152
- });
43153
- setIsProcessing(false);
43154
- setProcessComplete(true);
43155
- setProcessStep("");
43156
- }
43157
- catch (error) {
43158
- setIsProcessing(false);
43159
- setProcessError(error instanceof Error ? error.message : "Operation failed");
43160
- }
43161
- }
43162
- // Render error state
43163
- if (processError) {
43164
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43165
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43166
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43167
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "red" },
43168
- "\u274C Operation failed: ",
43169
- processError)),
43170
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43171
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Press any key to exit..."))));
43172
- }
43173
- // Render success state
43174
- if (processComplete) {
43175
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43176
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43177
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43178
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "green" }, "\u2705 Docker image ready!")),
43179
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43180
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true },
43181
- "Image: ",
43182
- _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName)),
43183
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43184
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Run: sith --it")),
43185
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43186
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Press any key to exit..."))));
43187
- }
43188
- // Render processing state
43189
- if (isProcessing) {
43190
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43191
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43192
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(BuildingSpinner, { step: processStep }),
43193
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43194
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true },
43195
- "Root: ",
43196
- rootDir))));
43197
- }
43198
- // Render menu state
43199
- const items = currentMenu === "main" ? menuItems : configMenuItems;
43200
- const menuTitle = currentMenu === "main" ? "What would you like to do?" : "Configuration";
43201
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43202
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43203
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 },
43204
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { bold: true }, menuTitle),
43205
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 }, items.map((item, index) => {
43206
- const isSelected = index === selectedIndex;
43207
- return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { key: item.value, marginY: 0 },
43208
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43209
- isSelected ? "❯ " : " ",
43210
- item.icon,
43211
- " ",
43212
- item.label)));
43213
- }))),
43214
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43215
- react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Use arrow keys to navigate, Enter to select"))));
43216
- }
43217
42998
  async function dockerCommand(options) {
43218
42999
  if (options.build) {
43219
43000
  await buildDocker();
@@ -43223,36 +43004,25 @@ async function dockerCommand(options) {
43223
43004
  await pullDocker();
43224
43005
  return;
43225
43006
  }
43226
- // Check if stdin supports raw mode (interactive terminal)
43227
- if (!process.stdin.isTTY) {
43228
- console.error("Error: Interactive mode requires a TTY terminal");
43229
- console.error("Use --build or --pull flag for non-interactive mode");
43230
- process.exit(1);
43231
- }
43232
- // Render the interactive menu
43233
- (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Menu, null));
43234
- }
43235
- async function runShellDirect() {
43236
- await runShell();
43237
43007
  }
43238
43008
  async function pullDocker() {
43239
43009
  console.log("📦 Pulling prebuilt Docker image...");
43240
43010
  console.log();
43241
43011
  try {
43242
- console.log(`Source: ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage}`);
43243
- console.log(`Target: ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName}`);
43012
+ console.log(`Source: ${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.prebuiltImage}`);
43013
+ console.log(`Target: ${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.imageName}`);
43244
43014
  console.log();
43245
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage], {
43015
+ await (0,execa__WEBPACK_IMPORTED_MODULE_4__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.prebuiltImage], {
43246
43016
  stdio: "inherit",
43247
43017
  });
43248
43018
  console.log();
43249
43019
  console.log("🏷️ Tagging image for local use...");
43250
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["tag", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName], {
43020
+ await (0,execa__WEBPACK_IMPORTED_MODULE_4__/* .execa */ .Ho)("docker", ["tag", _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.prebuiltImage, _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.imageName], {
43251
43021
  stdio: "inherit",
43252
43022
  });
43253
43023
  console.log();
43254
43024
  console.log("✅ Docker image ready!");
43255
- console.log(`Image: ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName}`);
43025
+ console.log(`Image: ${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.imageName}`);
43256
43026
  console.log();
43257
43027
  console.log("Run: sith --it");
43258
43028
  }
@@ -43268,19 +43038,19 @@ async function buildDocker() {
43268
43038
  console.log("🔨 Building Docker image from scratch...");
43269
43039
  console.log();
43270
43040
  try {
43271
- const dockerfilePath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(rootDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.dockerfileName);
43041
+ const dockerfilePath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(rootDir, _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.folderName, _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.dockerfileName);
43272
43042
  if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerfilePath)) {
43273
43043
  throw new Error(`Dockerfile not found at: ${dockerfilePath}`);
43274
43044
  }
43275
43045
  console.log(`Root: ${rootDir}`);
43276
43046
  console.log(`Dockerfile: ${dockerfilePath}`);
43277
43047
  console.log();
43278
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
43048
+ await (0,execa__WEBPACK_IMPORTED_MODULE_4__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
43279
43049
  stdio: "inherit",
43280
43050
  });
43281
43051
  console.log();
43282
43052
  console.log("✅ Docker image built successfully!");
43283
- console.log(`Image: ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName}`);
43053
+ console.log(`Image: ${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.imageName}`);
43284
43054
  console.log();
43285
43055
  console.log("Run: sith --it");
43286
43056
  }
@@ -43292,34 +43062,163 @@ async function buildDocker() {
43292
43062
  process.exit(1);
43293
43063
  }
43294
43064
  }
43295
- async function runShell() {
43296
- const skillsDir = (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .getSkillsDir */ .YJ)();
43297
- console.log("🚀 Starting interactive shell...");
43298
- console.log(`Mounting workspace to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
43299
- console.log(`Mounting skills from ${skillsDir} to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`);
43300
- console.log('Press Ctrl+D or type "exit" to leave');
43065
+
43066
+
43067
+ /***/ }),
43068
+
43069
+ /***/ 6656:
43070
+ /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
43071
+
43072
+
43073
+ // EXPORTS
43074
+ __nccwpck_require__.d(__webpack_exports__, {
43075
+ Yb: () => (/* binding */ dockerCleanupCommand),
43076
+ V: () => (/* binding */ nixCleanupCommand),
43077
+ be: () => (/* binding */ nixUninstallCommand),
43078
+ Wd: () => (/* binding */ uninstallCommand)
43079
+ });
43080
+
43081
+ // EXTERNAL MODULE: external "node:child_process"
43082
+ var external_node_child_process_ = __nccwpck_require__(1421);
43083
+ // EXTERNAL MODULE: external "node:fs"
43084
+ var external_node_fs_ = __nccwpck_require__(3024);
43085
+ // EXTERNAL MODULE: external "node:os"
43086
+ var external_node_os_ = __nccwpck_require__(8161);
43087
+ // EXTERNAL MODULE: external "node:path"
43088
+ var external_node_path_ = __nccwpck_require__(6760);
43089
+ ;// CONCATENATED MODULE: external "node:readline"
43090
+ const external_node_readline_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:readline");
43091
+ // EXTERNAL MODULE: ./node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js + 3 modules
43092
+ var source = __nccwpck_require__(9611);
43093
+ // EXTERNAL MODULE: ./src/config.ts
43094
+ var config = __nccwpck_require__(6878);
43095
+ ;// CONCATENATED MODULE: ./src/commands/maintenance.ts
43096
+
43097
+
43098
+
43099
+
43100
+
43101
+
43102
+
43103
+ async function maintenance_confirm(question) {
43104
+ const rl = (0,external_node_readline_namespaceObject.createInterface)({ input: process.stdin, output: process.stdout });
43105
+ return new Promise((resolve) => {
43106
+ rl.question(question, (answer) => {
43107
+ rl.close();
43108
+ resolve(answer.toLowerCase() === "y");
43109
+ });
43110
+ });
43111
+ }
43112
+ async function dockerCleanupCommand() {
43113
+ console.log(source/* default */.Ay.cyan("Cleaning up sith Docker images..."));
43114
+ const images = [config/* DOCKER_CONFIG */.e6.imageName, config/* DOCKER_CONFIG */.e6.prebuiltImage];
43115
+ let removed = 0;
43116
+ for (const image of images) {
43117
+ try {
43118
+ (0,external_node_child_process_.execSync)(`docker image inspect ${image} 2>/dev/null`, {
43119
+ stdio: "ignore",
43120
+ });
43121
+ console.log(source/* default */.Ay.dim(` Removing ${image}...`));
43122
+ (0,external_node_child_process_.execSync)(`docker rmi ${image}`, { stdio: "inherit" });
43123
+ removed++;
43124
+ }
43125
+ catch {
43126
+ // image not present
43127
+ }
43128
+ }
43129
+ if (removed === 0) {
43130
+ console.log(source/* default */.Ay.yellow("No sith Docker images found."));
43131
+ }
43132
+ else {
43133
+ console.log(source/* default */.Ay.green(`✓ Removed ${removed} image(s).`));
43134
+ }
43135
+ }
43136
+ async function nixCleanupCommand() {
43137
+ const nixDir = (0,external_node_path_.join)((0,external_node_os_.homedir)(), ".sith", "nix");
43138
+ console.log(source/* default */.Ay.cyan("Cleaning up sith Nix files..."));
43139
+ if ((0,external_node_fs_.existsSync)(nixDir)) {
43140
+ (0,external_node_fs_.rmSync)(nixDir, { recursive: true, force: true });
43141
+ console.log(source/* default */.Ay.green(`✓ Removed ${nixDir}`));
43142
+ }
43143
+ else {
43144
+ console.log(source/* default */.Ay.yellow(`${nixDir} not found — nothing to remove.`));
43145
+ }
43146
+ console.log(source/* default */.Ay.cyan("Running nix-collect-garbage..."));
43147
+ try {
43148
+ (0,external_node_child_process_.execSync)("nix-collect-garbage -d", { stdio: "inherit" });
43149
+ console.log(source/* default */.Ay.green("✓ Nix store garbage collected."));
43150
+ }
43151
+ catch {
43152
+ console.log(source/* default */.Ay.yellow("nix-collect-garbage failed — Nix may not be installed."));
43153
+ }
43154
+ }
43155
+ async function nixUninstallCommand() {
43156
+ console.log(source/* default */.Ay.yellow("This will fully remove Nix from your system:"));
43157
+ console.log(source/* default */.Ay.dim(" /nix/store, Nix daemon, shell profile entries"));
43301
43158
  console.log();
43302
- // Try to get GitHub token from gh CLI if not in env
43303
- let githubToken = process.env.GITHUB_TOKEN || "";
43304
- if (!githubToken) {
43159
+ const ok = await maintenance_confirm(source/* default */.Ay.red("Continue? [y/N] "));
43160
+ if (!ok) {
43161
+ console.log(source/* default */.Ay.dim("Aborted."));
43162
+ return;
43163
+ }
43164
+ const platform = process.platform;
43165
+ if (platform === "darwin") {
43166
+ console.log(source/* default */.Ay.cyan("Uninstalling Nix (macOS multi-user)..."));
43305
43167
  try {
43306
- const { stdout } = await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("gh", ["auth", "token"]);
43307
- githubToken = stdout.trim();
43168
+ // Official macOS uninstall sequence
43169
+ (0,external_node_child_process_.execSync)("sudo launchctl unload /Library/LaunchDaemons/org.nixos.nix-daemon.plist 2>/dev/null || true", { stdio: "inherit" });
43170
+ (0,external_node_child_process_.execSync)("sudo rm -f /Library/LaunchDaemons/org.nixos.nix-daemon.plist", {
43171
+ stdio: "inherit",
43172
+ });
43173
+ (0,external_node_child_process_.execSync)("sudo diskutil apfs deleteVolume /nix 2>/dev/null || sudo rm -rf /nix", { stdio: "inherit" });
43174
+ (0,external_node_child_process_.execSync)("sudo rm -rf /etc/nix /etc/profile.d/nix.sh /etc/bashrc.d/nix.sh", { stdio: "inherit" });
43175
+ console.log(source/* default */.Ay.green("✓ Nix removed. Remove nix lines from ~/.zshrc / ~/.bashrc manually if present."));
43176
+ }
43177
+ catch (_e) {
43178
+ console.log(source/* default */.Ay.red("Uninstall failed. Run with sudo or check errors above."));
43179
+ }
43180
+ }
43181
+ else if (platform === "linux") {
43182
+ console.log(source/* default */.Ay.cyan("Uninstalling Nix (Linux)..."));
43183
+ try {
43184
+ (0,external_node_child_process_.execSync)("sudo systemctl stop nix-daemon 2>/dev/null || true", {
43185
+ stdio: "inherit",
43186
+ });
43187
+ (0,external_node_child_process_.execSync)("sudo systemctl disable nix-daemon 2>/dev/null || true", {
43188
+ stdio: "inherit",
43189
+ });
43190
+ (0,external_node_child_process_.execSync)("sudo rm -rf /nix /etc/nix", { stdio: "inherit" });
43191
+ console.log(source/* default */.Ay.green("✓ Nix removed. Remove nix lines from ~/.profile / ~/.bashrc manually if present."));
43308
43192
  }
43309
43193
  catch {
43310
- // Ignore if gh CLI not available or not authenticated
43194
+ console.log(source/* default */.Ay.red("Uninstall failed. Run with sudo or check errors above."));
43311
43195
  }
43312
43196
  }
43313
- const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
43314
- const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_6__/* .buildDockerShellCommand */ .ac)(githubToken, claudeOauthToken);
43315
- await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", dockerArgs, {
43316
- stdio: "inherit",
43317
- reject: false,
43318
- });
43197
+ else {
43198
+ console.log(source/* default */.Ay.red(`Unsupported platform: ${platform}. Uninstall manually.`));
43199
+ }
43200
+ }
43201
+ async function uninstallCommand() {
43202
+ const sithDir = (0,external_node_path_.join)((0,external_node_os_.homedir)(), ".sith");
43203
+ console.log(source/* default */.Ay.yellow("This will delete:"));
43204
+ console.log(source/* default */.Ay.dim(` ${sithDir} (skills, config, nix files)`));
43205
+ console.log();
43206
+ const ok = await maintenance_confirm(source/* default */.Ay.red("Continue? [y/N] "));
43207
+ if (!ok) {
43208
+ console.log(source/* default */.Ay.dim("Aborted."));
43209
+ return;
43210
+ }
43211
+ if ((0,external_node_fs_.existsSync)(sithDir)) {
43212
+ (0,external_node_fs_.rmSync)(sithDir, { recursive: true, force: true });
43213
+ console.log(source/* default */.Ay.green(`✓ Removed ${sithDir}`));
43214
+ }
43215
+ else {
43216
+ console.log(source/* default */.Ay.yellow(`${sithDir} not found — nothing to remove.`));
43217
+ }
43218
+ console.log();
43219
+ console.log(source/* default */.Ay.dim(`Run ${source/* default */.Ay.bold("npm uninstall -g sith")} to remove the CLI.`));
43319
43220
  }
43320
43221
 
43321
- __webpack_async_result__();
43322
- } catch(e) { __webpack_async_result__(e); } });
43323
43222
 
43324
43223
  /***/ }),
43325
43224
 
@@ -43328,11 +43227,9 @@ __webpack_async_result__();
43328
43227
 
43329
43228
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
43330
43229
  /* harmony export */ Dv: () => (/* binding */ nixCommand),
43331
- /* harmony export */ Fh: () => (/* binding */ installNix),
43332
- /* harmony export */ Qi: () => (/* binding */ copyNixFiles),
43333
43230
  /* harmony export */ nb: () => (/* binding */ runNixShell)
43334
43231
  /* harmony export */ });
43335
- /* unused harmony exports parseNixVersionOutput, checkNixInstalled */
43232
+ /* unused harmony exports parseNixVersionOutput, checkNixInstalled, installNix, copyNixFiles */
43336
43233
  /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
43337
43234
  /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
43338
43235
  /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(8161);
@@ -43810,17 +43707,15 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
43810
43707
  /* harmony export */ t: () => (/* binding */ renderTerminalUI)
43811
43708
  /* harmony export */ });
43812
43709
  /* unused harmony export TerminalUI */
43813
- /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(6181);
43814
43710
  /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3816);
43815
43711
  /* harmony import */ var ink_text_input__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(9046);
43816
43712
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(2864);
43817
43713
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
43818
43714
  /* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(9805);
43819
43715
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(6878);
43820
- /* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(4495);
43821
- /* harmony import */ var _utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(1460);
43716
+ /* harmony import */ var _utils_launcher_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(5800);
43822
43717
  /* harmony import */ var _utils_messageUtils_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(5534);
43823
- /* harmony import */ var _utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(9987);
43718
+ /* harmony import */ var _utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(9987);
43824
43719
  /* harmony import */ var _ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(3636);
43825
43720
  var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_0__, ink_text_input__WEBPACK_IMPORTED_MODULE_1__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_3__, _ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__]);
43826
43721
  ([ink__WEBPACK_IMPORTED_MODULE_0__, ink_text_input__WEBPACK_IMPORTED_MODULE_1__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_3__, _ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
@@ -43833,8 +43728,6 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink_
43833
43728
 
43834
43729
 
43835
43730
 
43836
-
43837
-
43838
43731
  const TOOLS = [
43839
43732
  {
43840
43733
  value: "opencode",
@@ -43912,62 +43805,15 @@ function TerminalUI() {
43912
43805
  }, []);
43913
43806
  const handleDockerShell = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async () => {
43914
43807
  exit();
43915
- console.log("🚀 Starting Docker shell...");
43916
- console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
43917
- console.log('Press Ctrl+D or type "exit" to leave');
43918
- console.log();
43919
- const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
43920
- const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
43921
- const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerShellCommand */ .ac)(githubToken, claudeOauthToken);
43922
- await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit", reject: false });
43923
- console.log();
43924
- console.log("✅ Exited shell");
43808
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_5__/* .launchShell */ .k1)();
43925
43809
  }, [exit]);
43926
43810
  const handleOpenCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
43927
43811
  exit();
43928
- console.log("🚀 Starting OpenCode...");
43929
- console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
43930
- if (prompt) {
43931
- console.log(`Prompt: ${prompt}`);
43932
- }
43933
- console.log();
43934
- const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
43935
- const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
43936
- const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerOpencodeCommand */ .Xs)(githubToken, prompt, claudeOauthToken);
43937
- try {
43938
- await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
43939
- console.log();
43940
- console.log("✅ Exited OpenCode");
43941
- }
43942
- catch (error) {
43943
- const errorMessage = error instanceof Error ? error.message : "Failed to start OpenCode";
43944
- console.error(`❌ ${errorMessage}`);
43945
- process.exit(1);
43946
- }
43812
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_5__/* .launchOpencode */ .Tg)(prompt);
43947
43813
  }, [exit]);
43948
43814
  const handleClaudeCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
43949
43815
  exit();
43950
- console.log("🤖 Starting Claude Code...");
43951
- console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
43952
- if (prompt) {
43953
- console.log(`Prompt: ${prompt}`);
43954
- }
43955
- console.log();
43956
- const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
43957
- const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
43958
- const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerClaudeCodeCommand */ .fn)(githubToken, prompt, claudeOauthToken);
43959
- try {
43960
- await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
43961
- console.log();
43962
- console.log("✅ Exited Claude Code");
43963
- }
43964
- catch (error) {
43965
- const errorMessage = error instanceof Error
43966
- ? error.message
43967
- : "Failed to start Claude Code";
43968
- console.error(`❌ ${errorMessage}`);
43969
- process.exit(1);
43970
- }
43816
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_5__/* .launchClaude */ .Q7)(prompt);
43971
43817
  }, [exit]);
43972
43818
  const handleSlashCommand = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (command, userInput) => {
43973
43819
  if (!command) {
@@ -43986,7 +43832,7 @@ function TerminalUI() {
43986
43832
  break;
43987
43833
  case "help": {
43988
43834
  addMessage("Available commands:", "info");
43989
- const availableCommands = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_10__/* .getAvailableCommands */ .K)();
43835
+ const availableCommands = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_8__/* .getAvailableCommands */ .K)();
43990
43836
  for (const cmd of availableCommands) {
43991
43837
  addMessage(` ${cmd.command} - ${cmd.description}`, "info");
43992
43838
  }
@@ -44001,14 +43847,14 @@ function TerminalUI() {
44001
43847
  addMessage("Switched to Claude Code", "success");
44002
43848
  break;
44003
43849
  }
44004
- }, [addMessage, handleDockerShell, exit]);
43850
+ }, [addMessage, handleDockerShell]);
44005
43851
  const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (value) => {
44006
43852
  const trimmedValue = value.trim();
44007
43853
  if (!trimmedValue) {
44008
43854
  return;
44009
43855
  }
44010
43856
  setInput("");
44011
- const command = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_10__/* .parseSlashCommand */ .M)(trimmedValue);
43857
+ const command = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_8__/* .parseSlashCommand */ .M)(trimmedValue);
44012
43858
  if (command) {
44013
43859
  await handleSlashCommand(command, trimmedValue);
44014
43860
  }
@@ -44096,10 +43942,10 @@ __webpack_async_result__();
44096
43942
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44097
43943
  /* harmony export */ XI: () => (/* binding */ SKILLS_CATALOG),
44098
43944
  /* harmony export */ Z3: () => (/* binding */ NIX_CONFIG),
44099
- /* harmony export */ ZC: () => (/* binding */ SPINNER_CONFIG),
44100
43945
  /* harmony export */ e6: () => (/* binding */ DOCKER_CONFIG),
44101
43946
  /* harmony export */ mF: () => (/* binding */ ASCII_LOGO)
44102
43947
  /* harmony export */ });
43948
+ /* unused harmony export SPINNER_CONFIG */
44103
43949
  // Predefined skill catalog — skills are installed to ~/.sith/skills/<name>/
44104
43950
  const SKILLS_CATALOG = [
44105
43951
  {
@@ -44191,26 +44037,23 @@ const ASCII_LOGO = [
44191
44037
  /***/ ((module, __unused_webpack___webpack_exports__, __nccwpck_require__) => {
44192
44038
 
44193
44039
  __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
44194
- /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(1421);
44195
- /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_0__);
44196
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3024);
44197
- /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);
44198
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6760);
44199
- /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);
44200
- /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3136);
44201
- /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_3__);
44040
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
44041
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
44042
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6760);
44043
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
44044
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
44045
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
44202
44046
  /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(9611);
44203
- /* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(2202);
44047
+ /* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(2202);
44204
44048
  /* harmony import */ var update_notifier__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(6213);
44205
- /* harmony import */ var _commands_docker_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(5515);
44049
+ /* harmony import */ var _commands_docker_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(3361);
44050
+ /* harmony import */ var _commands_maintenance_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6656);
44206
44051
  /* harmony import */ var _commands_nix_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9922);
44207
44052
  /* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(9805);
44208
44053
  /* harmony import */ var _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(3535);
44209
- /* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(4495);
44210
- /* harmony import */ var _utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(1460);
44211
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__]);
44212
- ([_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
44213
-
44054
+ /* harmony import */ var _utils_launcher_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(5800);
44055
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_commands_skills_js__WEBPACK_IMPORTED_MODULE_7__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__]);
44056
+ ([_commands_skills_js__WEBPACK_IMPORTED_MODULE_7__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
44214
44057
 
44215
44058
 
44216
44059
 
@@ -44224,9 +44067,9 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_com
44224
44067
 
44225
44068
 
44226
44069
  // Import package.json for version and update checks
44227
- const __filename = (0,node_url__WEBPACK_IMPORTED_MODULE_3__.fileURLToPath)(import.meta.url);
44228
- const __dirname = (0,node_path__WEBPACK_IMPORTED_MODULE_2__.dirname)(__filename);
44229
- const pkg = JSON.parse((0,node_fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync)((0,node_path__WEBPACK_IMPORTED_MODULE_2__.join)(__dirname, "../package.json"), "utf-8"));
44070
+ const __filename = (0,node_url__WEBPACK_IMPORTED_MODULE_2__.fileURLToPath)(import.meta.url);
44071
+ const __dirname = (0,node_path__WEBPACK_IMPORTED_MODULE_1__.dirname)(__filename);
44072
+ const pkg = JSON.parse((0,node_fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync)((0,node_path__WEBPACK_IMPORTED_MODULE_1__.join)(__dirname, "../package.json"), "utf-8"));
44230
44073
  const PROGRAM_NAME = "sith";
44231
44074
  const PROGRAM_VERSION = pkg.version;
44232
44075
  const PROGRAM_DESCRIPTION = "Turn your context to the dark side. Standardize and share your OpenCode setup with a fully dockerized environment, designed for seamless collaboration and CI integration.";
@@ -44254,7 +44097,7 @@ async function checkForUpdates() {
44254
44097
  }
44255
44098
  }
44256
44099
  function createProgram() {
44257
- const program = new commander__WEBPACK_IMPORTED_MODULE_4__/* .Command */ .uB();
44100
+ const program = new commander__WEBPACK_IMPORTED_MODULE_3__/* .Command */ .uB();
44258
44101
  program
44259
44102
  .name(PROGRAM_NAME)
44260
44103
  .description(PROGRAM_DESCRIPTION)
@@ -44265,10 +44108,25 @@ function createProgram() {
44265
44108
  .option("--nix", "Use native Nix shell (no Docker)")
44266
44109
  .option("--nix-install", "Install Nix package manager locally")
44267
44110
  .option("--update", "Check for updates")
44268
- .option("--legacy", "Use legacy menu interface");
44269
- // Default action - show terminal UI or legacy menu
44111
+ .option("--docker-cleanup", "Remove sith Docker images from local machine")
44112
+ .option("--nix-cleanup", "Remove ~/.sith/nix and run nix-collect-garbage")
44113
+ .option("--nix-uninstall", "Fully remove Nix from the system (daemon, /nix/store)")
44114
+ .option("--uninstall", "Remove ~/.sith config directory");
44115
+ // Default action - show terminal UI
44270
44116
  program.action(async (options) => {
44271
- if (options.update) {
44117
+ if (options.dockerCleanup) {
44118
+ await (0,_commands_maintenance_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCleanupCommand */ .Yb)();
44119
+ }
44120
+ else if (options.nixCleanup) {
44121
+ await (0,_commands_maintenance_js__WEBPACK_IMPORTED_MODULE_5__/* .nixCleanupCommand */ .V)();
44122
+ }
44123
+ else if (options.nixUninstall) {
44124
+ await (0,_commands_maintenance_js__WEBPACK_IMPORTED_MODULE_5__/* .nixUninstallCommand */ .be)();
44125
+ }
44126
+ else if (options.uninstall) {
44127
+ await (0,_commands_maintenance_js__WEBPACK_IMPORTED_MODULE_5__/* .uninstallCommand */ .Wd)();
44128
+ }
44129
+ else if (options.update) {
44272
44130
  await checkForUpdates();
44273
44131
  }
44274
44132
  else if (options.nix) {
@@ -44278,32 +44136,22 @@ function createProgram() {
44278
44136
  await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .nixCommand */ .Dv)({ install: true });
44279
44137
  }
44280
44138
  else if (options.it) {
44281
- await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .runShellDirect */ .l)();
44139
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_9__/* .launchShell */ .k1)();
44282
44140
  }
44283
- else if (options.legacy || options.pull || options.build) {
44284
- // Use legacy menu for explicit pull/build or --legacy flag
44285
- await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCommand */ .Q)(options);
44141
+ else if (options.pull || options.build) {
44142
+ await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__/* .dockerCommand */ .Q)(options);
44286
44143
  }
44287
44144
  else {
44288
44145
  // Default: show new terminal UI
44289
44146
  (0,_components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__/* .renderTerminalUI */ .t)();
44290
44147
  }
44291
44148
  });
44292
- // Docker command - explicit Docker management
44293
- program
44294
- .command("docker")
44295
- .description("Manage Docker environment")
44296
- .option("--pull", "Pull prebuilt Docker image (recommended)")
44297
- .option("--build", "Build the Docker image from scratch")
44298
- .action(async (options) => {
44299
- await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCommand */ .Q)(options);
44300
- });
44301
44149
  // Shell command - direct interactive shell (bypasses menu)
44302
44150
  program
44303
44151
  .command("shell")
44304
44152
  .description("Run interactive shell in Docker container")
44305
44153
  .action(async () => {
44306
- await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .runShellDirect */ .l)();
44154
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_9__/* .launchShell */ .k1)();
44307
44155
  });
44308
44156
  // Skills command - install/uninstall skills from catalog
44309
44157
  program
@@ -44327,10 +44175,7 @@ function createProgram() {
44327
44175
  .description("Launch OpenCode in Docker")
44328
44176
  .option("-p, --prompt <prompt>", "Prompt to pass to OpenCode")
44329
44177
  .action(async (options) => {
44330
- const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
44331
- const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
44332
- const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerOpencodeCommand */ .Xs)(token, options.prompt, claudeOauthToken);
44333
- (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
44178
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_9__/* .launchOpencode */ .Tg)(options.prompt);
44334
44179
  });
44335
44180
  // Claude command - launch Claude Code in Docker
44336
44181
  program
@@ -44338,10 +44183,7 @@ function createProgram() {
44338
44183
  .description("Launch Claude Code in Docker")
44339
44184
  .option("-p, --prompt <prompt>", "Prompt to pass to Claude Code")
44340
44185
  .action(async (options) => {
44341
- const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
44342
- const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
44343
- const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerClaudeCodeCommand */ .fn)(token, options.prompt, claudeOauthToken);
44344
- (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
44186
+ await (0,_utils_launcher_js__WEBPACK_IMPORTED_MODULE_9__/* .launchClaude */ .Q7)(options.prompt);
44345
44187
  });
44346
44188
  return program;
44347
44189
  }
@@ -44354,41 +44196,49 @@ __webpack_async_result__();
44354
44196
 
44355
44197
  /***/ }),
44356
44198
 
44357
- /***/ 4495:
44199
+ /***/ 5800:
44358
44200
  /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
44359
44201
 
44360
- /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44361
- /* harmony export */ Xs: () => (/* binding */ buildDockerOpencodeCommand),
44362
- /* harmony export */ ac: () => (/* binding */ buildDockerShellCommand),
44363
- /* harmony export */ fn: () => (/* binding */ buildDockerClaudeCodeCommand)
44364
- /* harmony export */ });
44365
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(6878);
44366
- /* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6400);
44202
+
44203
+ // EXPORTS
44204
+ __nccwpck_require__.d(__webpack_exports__, {
44205
+ Q7: () => (/* binding */ launchClaude),
44206
+ Tg: () => (/* binding */ launchOpencode),
44207
+ k1: () => (/* binding */ launchShell)
44208
+ });
44209
+
44210
+ // EXTERNAL MODULE: ./node_modules/.pnpm/execa@9.6.1/node_modules/execa/index.js + 136 modules
44211
+ var execa = __nccwpck_require__(6181);
44212
+ // EXTERNAL MODULE: ./src/config.ts
44213
+ var config = __nccwpck_require__(6878);
44214
+ // EXTERNAL MODULE: ./src/utils/skills.ts
44215
+ var skills = __nccwpck_require__(6400);
44216
+ ;// CONCATENATED MODULE: ./src/utils/dockerArgs.ts
44367
44217
 
44368
44218
 
44369
44219
  function buildDockerShellCommand(githubToken, claudeOauthToken) {
44370
- (0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .syncClaudeMd */ .RK)();
44220
+ (0,skills/* syncClaudeMd */.RK)();
44371
44221
  const args = [
44372
44222
  "run",
44373
44223
  "--rm",
44374
44224
  "-it",
44375
44225
  "-v",
44376
- `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
44226
+ `${process.cwd()}:${config/* DOCKER_CONFIG */.e6.workspaceMount}`,
44377
44227
  "-v",
44378
- `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
44228
+ `${(0,skills/* getSkillsDir */.YJ)()}:${config/* DOCKER_CONFIG */.e6.skillsMount}`,
44379
44229
  "-v",
44380
- `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`,
44230
+ `${(0,skills/* getSkillsDir */.YJ)()}:${config/* DOCKER_CONFIG */.e6.claudeSkillsMount}`,
44381
44231
  "-v",
44382
- `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getClaudeMdPath */ .pF)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}/CLAUDE.md`,
44232
+ `${(0,skills/* getClaudeMdPath */.pF)()}:${config/* DOCKER_CONFIG */.e6.claudeConfigMount}/CLAUDE.md`,
44383
44233
  "-v",
44384
- `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
44234
+ `${(0,skills/* getOpenCodeConfigPath */.Jn)()}:${config/* DOCKER_CONFIG */.e6.opencodeConfigMount}`,
44385
44235
  "-e",
44386
44236
  `GITHUB_TOKEN=${githubToken}`,
44387
44237
  ];
44388
44238
  if (claudeOauthToken) {
44389
44239
  args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
44390
44240
  }
44391
- args.push("--entrypoint", "nix-shell", _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName, _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.shellEntrypoint);
44241
+ args.push("--entrypoint", "nix-shell", config/* DOCKER_CONFIG */.e6.imageName, config/* DOCKER_CONFIG */.e6.shellEntrypoint);
44392
44242
  return args;
44393
44243
  }
44394
44244
  function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
@@ -44397,18 +44247,18 @@ function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
44397
44247
  "--rm",
44398
44248
  "-it",
44399
44249
  "-v",
44400
- `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
44250
+ `${process.cwd()}:${config/* DOCKER_CONFIG */.e6.workspaceMount}`,
44401
44251
  "-v",
44402
- `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
44252
+ `${(0,skills/* getSkillsDir */.YJ)()}:${config/* DOCKER_CONFIG */.e6.skillsMount}`,
44403
44253
  "-v",
44404
- `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
44254
+ `${(0,skills/* getOpenCodeConfigPath */.Jn)()}:${config/* DOCKER_CONFIG */.e6.opencodeConfigMount}`,
44405
44255
  "-e",
44406
44256
  `GITHUB_TOKEN=${githubToken}`,
44407
44257
  ];
44408
44258
  if (claudeOauthToken) {
44409
44259
  args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
44410
44260
  }
44411
- args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
44261
+ args.push("--entrypoint", "bash", config/* DOCKER_CONFIG */.e6.imageName, "-c");
44412
44262
  let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
44413
44263
  if (prompt) {
44414
44264
  const escapedPrompt = prompt.replace(/'/g, "'\\''");
@@ -44418,14 +44268,14 @@ function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
44418
44268
  return args;
44419
44269
  }
44420
44270
  function buildDockerClaudeCodeCommand(githubToken, prompt, claudeOauthToken) {
44421
- (0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .syncClaudeMd */ .RK)();
44422
- const claudeMdPath = (0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getClaudeMdPath */ .pF)();
44271
+ (0,skills/* syncClaudeMd */.RK)();
44272
+ const claudeMdPath = (0,skills/* getClaudeMdPath */.pF)();
44423
44273
  const args = [
44424
44274
  "run",
44425
44275
  "--rm",
44426
44276
  "-it",
44427
44277
  "-v",
44428
- `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
44278
+ `${process.cwd()}:${config/* DOCKER_CONFIG */.e6.workspaceMount}`,
44429
44279
  "-e",
44430
44280
  `GITHUB_TOKEN=${githubToken}`,
44431
44281
  ];
@@ -44433,10 +44283,10 @@ function buildDockerClaudeCodeCommand(githubToken, prompt, claudeOauthToken) {
44433
44283
  args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
44434
44284
  }
44435
44285
  // Mount only ~/.sith/ contents — never expose ~/.claude to the container
44436
- args.push("-v", `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`);
44286
+ args.push("-v", `${(0,skills/* getSkillsDir */.YJ)()}:${config/* DOCKER_CONFIG */.e6.claudeSkillsMount}`);
44437
44287
  // Generated CLAUDE.md (with skill @imports) overrides any CLAUDE.md from ~/.claude
44438
- args.push("-v", `${claudeMdPath}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}/CLAUDE.md`);
44439
- args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
44288
+ args.push("-v", `${claudeMdPath}:${config/* DOCKER_CONFIG */.e6.claudeConfigMount}/CLAUDE.md`);
44289
+ args.push("--entrypoint", "bash", config/* DOCKER_CONFIG */.e6.imageName, "-c");
44440
44290
  let claudeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && /root/.npm-global/bin/claude";
44441
44291
  if (prompt) {
44442
44292
  const escapedPrompt = prompt.replace(/'/g, "'\\''");
@@ -44446,22 +44296,13 @@ function buildDockerClaudeCodeCommand(githubToken, prompt, claudeOauthToken) {
44446
44296
  return args;
44447
44297
  }
44448
44298
 
44449
-
44450
- /***/ }),
44451
-
44452
- /***/ 1460:
44453
- /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
44454
-
44455
- /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44456
- /* harmony export */ l: () => (/* binding */ getGitHubToken)
44457
- /* harmony export */ });
44458
- /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(6181);
44299
+ ;// CONCATENATED MODULE: ./src/utils/githubToken.ts
44459
44300
 
44460
44301
  async function getGitHubToken() {
44461
44302
  if (process.env.GITHUB_TOKEN)
44462
44303
  return process.env.GITHUB_TOKEN;
44463
44304
  try {
44464
- const { stdout } = await (0,execa__WEBPACK_IMPORTED_MODULE_0__/* .execa */ .Ho)("gh", ["auth", "token"]);
44305
+ const { stdout } = await (0,execa/* execa */.Ho)("gh", ["auth", "token"]);
44465
44306
  return stdout.trim();
44466
44307
  }
44467
44308
  catch {
@@ -44469,6 +44310,62 @@ async function getGitHubToken() {
44469
44310
  }
44470
44311
  }
44471
44312
 
44313
+ ;// CONCATENATED MODULE: ./src/utils/launcher.ts
44314
+
44315
+
44316
+
44317
+
44318
+ function getClaudeOauthToken() {
44319
+ return process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
44320
+ }
44321
+ async function launchShell() {
44322
+ console.log("🚀 Starting Docker shell...");
44323
+ console.log(`Mounting current directory to ${config/* DOCKER_CONFIG */.e6.workspaceMount}`);
44324
+ console.log('Press Ctrl+D or type "exit" to leave');
44325
+ console.log();
44326
+ const githubToken = await getGitHubToken();
44327
+ const dockerArgs = buildDockerShellCommand(githubToken, getClaudeOauthToken());
44328
+ await (0,execa/* execa */.Ho)("docker", dockerArgs, { stdio: "inherit", reject: false });
44329
+ console.log();
44330
+ console.log("✅ Exited shell");
44331
+ }
44332
+ async function launchOpencode(prompt) {
44333
+ console.log("🚀 Starting OpenCode...");
44334
+ console.log(`Mounting current directory to ${config/* DOCKER_CONFIG */.e6.workspaceMount}`);
44335
+ if (prompt)
44336
+ console.log(`Prompt: ${prompt}`);
44337
+ console.log();
44338
+ const githubToken = await getGitHubToken();
44339
+ const dockerArgs = buildDockerOpencodeCommand(githubToken, prompt, getClaudeOauthToken());
44340
+ try {
44341
+ await (0,execa/* execa */.Ho)("docker", dockerArgs, { stdio: "inherit" });
44342
+ console.log();
44343
+ console.log("✅ Exited OpenCode");
44344
+ }
44345
+ catch (error) {
44346
+ console.error(`❌ ${error instanceof Error ? error.message : "Failed to start OpenCode"}`);
44347
+ process.exit(1);
44348
+ }
44349
+ }
44350
+ async function launchClaude(prompt) {
44351
+ console.log("🤖 Starting Claude Code...");
44352
+ console.log(`Mounting current directory to ${config/* DOCKER_CONFIG */.e6.workspaceMount}`);
44353
+ if (prompt)
44354
+ console.log(`Prompt: ${prompt}`);
44355
+ console.log();
44356
+ const githubToken = await getGitHubToken();
44357
+ const dockerArgs = buildDockerClaudeCodeCommand(githubToken, prompt, getClaudeOauthToken());
44358
+ try {
44359
+ await (0,execa/* execa */.Ho)("docker", dockerArgs, { stdio: "inherit" });
44360
+ console.log();
44361
+ console.log("✅ Exited Claude Code");
44362
+ }
44363
+ catch (error) {
44364
+ console.error(`❌ ${error instanceof Error ? error.message : "Failed to start Claude Code"}`);
44365
+ process.exit(1);
44366
+ }
44367
+ }
44368
+
44472
44369
 
44473
44370
  /***/ }),
44474
44371