@m14i/sith 1.15.0 → 1.17.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.
Files changed (41) hide show
  1. package/dist/commands/__tests__/nix.test.d.ts +2 -0
  2. package/dist/commands/__tests__/nix.test.d.ts.map +1 -0
  3. package/dist/commands/docker.d.ts.map +1 -1
  4. package/dist/commands/nix.d.ts +1 -0
  5. package/dist/commands/nix.d.ts.map +1 -1
  6. package/dist/commands/skills.d.ts.map +1 -1
  7. package/dist/components/ConfigModal.d.ts +1 -1
  8. package/dist/components/ConfigModal.d.ts.map +1 -1
  9. package/dist/components/TerminalUI.d.ts.map +1 -1
  10. package/dist/config.d.ts +2 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/index.js +604 -428
  13. package/dist/package.json +1 -1
  14. package/dist/types.d.ts +2 -1
  15. package/dist/types.d.ts.map +1 -1
  16. package/dist/utils/__tests__/dockerArgs.test.d.ts +2 -0
  17. package/dist/utils/__tests__/dockerArgs.test.d.ts.map +1 -0
  18. package/dist/utils/__tests__/githubToken.test.d.ts +2 -0
  19. package/dist/utils/__tests__/githubToken.test.d.ts.map +1 -0
  20. package/dist/utils/__tests__/messageUtils.test.d.ts +2 -0
  21. package/dist/utils/__tests__/messageUtils.test.d.ts.map +1 -0
  22. package/dist/utils/__tests__/skills.test.d.ts +2 -0
  23. package/dist/utils/__tests__/skills.test.d.ts.map +1 -0
  24. package/dist/utils/__tests__/slashCommands.test.d.ts +2 -0
  25. package/dist/utils/__tests__/slashCommands.test.d.ts.map +1 -0
  26. package/dist/utils/dockerArgs.d.ts +3 -0
  27. package/dist/utils/dockerArgs.d.ts.map +1 -0
  28. package/dist/utils/githubToken.d.ts +2 -0
  29. package/dist/utils/githubToken.d.ts.map +1 -0
  30. package/dist/utils/messageUtils.d.ts +4 -0
  31. package/dist/utils/messageUtils.d.ts.map +1 -0
  32. package/dist/utils/skills.d.ts +2 -0
  33. package/dist/utils/skills.d.ts.map +1 -1
  34. package/dist/utils/slashCommands.d.ts.map +1 -1
  35. package/docker/Dockerfile +6 -13
  36. package/docker/nix/nix-scripts/02-env-vars.sh +0 -1
  37. package/docker/nix/nix-scripts/03-directories.sh +2 -1
  38. package/docker/nix/nix-scripts/06-skills-setup.sh +14 -20
  39. package/docker/nix/nix-scripts/setup.sh +7 -0
  40. package/package.json +8 -3
  41. package/dist/package1.json +0 -137
package/dist/index.js CHANGED
@@ -42969,22 +42969,22 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
42969
42969
  /* harmony export */ Q: () => (/* binding */ dockerCommand),
42970
42970
  /* harmony export */ l: () => (/* binding */ runShellDirect)
42971
42971
  /* harmony export */ });
42972
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(2864);
42973
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
42974
- /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3816);
42972
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
42973
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
42974
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6760);
42975
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
42976
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
42977
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
42975
42978
  /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(6181);
42976
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(9896);
42977
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(fs__WEBPACK_IMPORTED_MODULE_2__);
42978
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6928);
42979
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);
42980
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(7016);
42981
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nccwpck_require__.n(url__WEBPACK_IMPORTED_MODULE_4__);
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
42982
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6878);
42983
- /* harmony import */ var _nix_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9922);
42984
- /* harmony import */ var _utils_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(6400);
42983
+ /* harmony import */ var _utils_skills_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(6400);
42984
+ /* harmony import */ var _nix_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(9922);
42985
42985
  /* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(9805);
42986
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_1__, _skills_js__WEBPACK_IMPORTED_MODULE_8__]);
42987
- ([ink__WEBPACK_IMPORTED_MODULE_1__, _skills_js__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
42986
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_3__, _skills_js__WEBPACK_IMPORTED_MODULE_8__]);
42987
+ ([ink__WEBPACK_IMPORTED_MODULE_3__, _skills_js__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
42988
42988
 
42989
42989
 
42990
42990
 
@@ -42995,17 +42995,17 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink_
42995
42995
 
42996
42996
 
42997
42997
 
42998
- const __dirname = path__WEBPACK_IMPORTED_MODULE_3___default().dirname((0,url__WEBPACK_IMPORTED_MODULE_4__.fileURLToPath)(import.meta.url));
42998
+ const __dirname = node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname((0,node_url__WEBPACK_IMPORTED_MODULE_2__.fileURLToPath)(import.meta.url));
42999
42999
  // Find project root by looking for docker/ folder
43000
43000
  function findProjectRoot(startDir) {
43001
43001
  let currentDir = startDir;
43002
- const rootPath = path__WEBPACK_IMPORTED_MODULE_3___default().parse(currentDir).root;
43002
+ const rootPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().parse(currentDir).root;
43003
43003
  while (currentDir !== rootPath) {
43004
- const dockerPath = path__WEBPACK_IMPORTED_MODULE_3___default().join(currentDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName);
43005
- if (fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dockerPath) && fs__WEBPACK_IMPORTED_MODULE_2___default().statSync(dockerPath).isDirectory()) {
43004
+ const dockerPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(currentDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName);
43005
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerPath) && node_fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(dockerPath).isDirectory()) {
43006
43006
  return currentDir;
43007
43007
  }
43008
- currentDir = path__WEBPACK_IMPORTED_MODULE_3___default().dirname(currentDir);
43008
+ currentDir = node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname(currentDir);
43009
43009
  }
43010
43010
  throw new Error(`Could not find project root (${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName}/ folder not found)`);
43011
43011
  }
@@ -43022,34 +43022,36 @@ const configMenuItems = [
43022
43022
  { label: "Back", value: "back", icon: "◀️" },
43023
43023
  ];
43024
43024
  function Logo() {
43025
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginBottom: 1 },
43026
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" }, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .ASCII_LOGO */ .mF.map((line, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
43027
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { borderStyle: "double", borderColor: "red", paddingX: 2, marginTop: 1 },
43028
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "red", bold: true }, "SITH - Docker Manager"))));
43025
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginBottom: 1 },
43026
+ 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) => (
43027
+ // biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
43028
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
43029
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { borderStyle: "double", borderColor: "red", paddingX: 2, marginTop: 1 },
43030
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "red", bold: true }, "SITH - Docker Manager"))));
43029
43031
  }
43030
43032
  function BuildingSpinner({ step }) {
43031
- const [frame, setFrame] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
43032
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
43033
+ const [frame, setFrame] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(0);
43034
+ (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(() => {
43033
43035
  const timer = setInterval(() => {
43034
43036
  setFrame((prev) => (prev + 1) % _config_js__WEBPACK_IMPORTED_MODULE_5__/* .SPINNER_CONFIG */ .ZC.frames.length);
43035
43037
  }, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .SPINNER_CONFIG */ .ZC.interval);
43036
43038
  return () => clearInterval(timer);
43037
43039
  }, []);
43038
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginTop: 1 },
43039
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "cyan" },
43040
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 },
43041
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "cyan" },
43040
43042
  _config_js__WEBPACK_IMPORTED_MODULE_5__/* .SPINNER_CONFIG */ .ZC.frames[frame],
43041
43043
  " ",
43042
43044
  step)));
43043
43045
  }
43044
43046
  function Menu() {
43045
- const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useApp */ .nm)();
43046
- const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
43047
- const [isProcessing, setIsProcessing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
43048
- const [processStep, setProcessStep] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
43049
- const [processComplete, setProcessComplete] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
43050
- const [processError, setProcessError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
43051
- const [currentMenu, setCurrentMenu] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("main");
43052
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useInput */ .Ge)((_input, key) => {
43047
+ const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .useApp */ .nm)();
43048
+ const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(0);
43049
+ const [isProcessing, setIsProcessing] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
43050
+ const [processStep, setProcessStep] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)("");
43051
+ const [processComplete, setProcessComplete] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
43052
+ const [processError, setProcessError] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(null);
43053
+ const [currentMenu, setCurrentMenu] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)("main");
43054
+ (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .useInput */ .Ge)((_input, key) => {
43053
43055
  if (isProcessing) {
43054
43056
  return;
43055
43057
  }
@@ -43124,8 +43126,8 @@ function Menu() {
43124
43126
  setIsProcessing(true);
43125
43127
  setProcessStep("Installing Nix locally...");
43126
43128
  try {
43127
- await (0,_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .installNix */ .Fh)();
43128
- await (0,_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .copyNixFiles */ .Qi)();
43129
+ await (0,_nix_js__WEBPACK_IMPORTED_MODULE_7__/* .installNix */ .Fh)();
43130
+ await (0,_nix_js__WEBPACK_IMPORTED_MODULE_7__/* .copyNixFiles */ .Qi)();
43129
43131
  setIsProcessing(false);
43130
43132
  setProcessComplete(true);
43131
43133
  setProcessStep("");
@@ -43139,8 +43141,8 @@ function Menu() {
43139
43141
  setIsProcessing(true);
43140
43142
  setProcessStep("Building Docker image from scratch...");
43141
43143
  try {
43142
- const dockerfilePath = path__WEBPACK_IMPORTED_MODULE_3___default().join(rootDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.dockerfileName);
43143
- if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dockerfilePath)) {
43144
+ 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);
43145
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerfilePath)) {
43144
43146
  throw new Error(`Dockerfile not found at: ${dockerfilePath}`);
43145
43147
  }
43146
43148
  await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
@@ -43157,58 +43159,58 @@ function Menu() {
43157
43159
  }
43158
43160
  // Render error state
43159
43161
  if (processError) {
43160
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" },
43161
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Logo, null),
43162
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43163
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "red" },
43162
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43163
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43164
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43165
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "red" },
43164
43166
  "\u274C Operation failed: ",
43165
43167
  processError)),
43166
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43167
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Press any key to exit..."))));
43168
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43169
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Press any key to exit..."))));
43168
43170
  }
43169
43171
  // Render success state
43170
43172
  if (processComplete) {
43171
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" },
43172
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Logo, null),
43173
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43174
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "green" }, "\u2705 Docker image ready!")),
43175
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43176
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true },
43173
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43174
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43175
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43176
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "green" }, "\u2705 Docker image ready!")),
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, { dimColor: true },
43177
43179
  "Image: ",
43178
43180
  _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName)),
43179
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43180
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Run: sith --it")),
43181
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43182
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Press any key to exit..."))));
43181
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43182
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Run: sith --it")),
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 }, "Press any key to exit..."))));
43183
43185
  }
43184
43186
  // Render processing state
43185
43187
  if (isProcessing) {
43186
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" },
43187
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Logo, null),
43188
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(BuildingSpinner, { step: processStep }),
43189
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43190
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true },
43188
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43189
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43190
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(BuildingSpinner, { step: processStep }),
43191
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43192
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true },
43191
43193
  "Root: ",
43192
43194
  rootDir))));
43193
43195
  }
43194
43196
  // Render menu state
43195
43197
  const items = currentMenu === "main" ? menuItems : configMenuItems;
43196
43198
  const menuTitle = currentMenu === "main" ? "What would you like to do?" : "Configuration";
43197
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" },
43198
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Logo, null),
43199
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginTop: 1 },
43200
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { bold: true }, menuTitle),
43201
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginTop: 1 }, items.map((item, index) => {
43199
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column" },
43200
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Logo, null),
43201
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 },
43202
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { bold: true }, menuTitle),
43203
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 }, items.map((item, index) => {
43202
43204
  const isSelected = index === selectedIndex;
43203
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { key: item.value, marginY: 0 },
43204
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43205
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { key: item.value, marginY: 0 },
43206
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43205
43207
  isSelected ? "❯ " : " ",
43206
43208
  item.icon,
43207
43209
  " ",
43208
43210
  item.label)));
43209
43211
  }))),
43210
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43211
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Use arrow keys to navigate, Enter to select"))));
43212
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43213
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Use arrow keys to navigate, Enter to select"))));
43212
43214
  }
43213
43215
  async function dockerCommand(options) {
43214
43216
  if (options.build) {
@@ -43226,7 +43228,7 @@ async function dockerCommand(options) {
43226
43228
  process.exit(1);
43227
43229
  }
43228
43230
  // Render the interactive menu
43229
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Menu, null));
43231
+ (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_4___default().createElement(Menu, null));
43230
43232
  }
43231
43233
  async function runShellDirect() {
43232
43234
  await runShell();
@@ -43264,8 +43266,8 @@ async function buildDocker() {
43264
43266
  console.log("🔨 Building Docker image from scratch...");
43265
43267
  console.log();
43266
43268
  try {
43267
- const dockerfilePath = path__WEBPACK_IMPORTED_MODULE_3___default().join(rootDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.dockerfileName);
43268
- if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dockerfilePath)) {
43269
+ 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);
43270
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerfilePath)) {
43269
43271
  throw new Error(`Dockerfile not found at: ${dockerfilePath}`);
43270
43272
  }
43271
43273
  console.log(`Root: ${rootDir}`);
@@ -43289,9 +43291,11 @@ async function buildDocker() {
43289
43291
  }
43290
43292
  }
43291
43293
  async function runShell() {
43294
+ const skillsDir = (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_6__/* .getSkillsDir */ .YJ)();
43295
+ const opencodeConfigPath = (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_6__/* .getOpenCodeConfigPath */ .Jn)();
43292
43296
  console.log("🚀 Starting interactive shell...");
43293
43297
  console.log(`Mounting workspace to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
43294
- console.log(`Mounting skills from ${(0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .getSkillsDir */ .YJ)()} to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`);
43298
+ console.log(`Mounting skills from ${skillsDir} to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`);
43295
43299
  console.log('Press Ctrl+D or type "exit" to leave');
43296
43300
  console.log();
43297
43301
  // Try to get GitHub token from gh CLI if not in env
@@ -43312,7 +43316,9 @@ async function runShell() {
43312
43316
  "-v",
43313
43317
  `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
43314
43318
  "-v",
43315
- `${(0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
43319
+ `${skillsDir}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
43320
+ "-v",
43321
+ `${opencodeConfigPath}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
43316
43322
  "-e",
43317
43323
  `GITHUB_TOKEN=${githubToken}`,
43318
43324
  "--entrypoint",
@@ -43348,16 +43354,16 @@ __webpack_async_result__();
43348
43354
  /* harmony export */ Qi: () => (/* binding */ copyNixFiles),
43349
43355
  /* harmony export */ nb: () => (/* binding */ runNixShell)
43350
43356
  /* harmony export */ });
43351
- /* unused harmony export checkNixInstalled */
43357
+ /* unused harmony exports parseNixVersionOutput, checkNixInstalled */
43358
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
43359
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
43360
+ /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(8161);
43361
+ /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_os__WEBPACK_IMPORTED_MODULE_1__);
43362
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6760);
43363
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);
43364
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3136);
43365
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_3__);
43352
43366
  /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6181);
43353
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(9896);
43354
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);
43355
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6928);
43356
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);
43357
- /* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(857);
43358
- /* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(os__WEBPACK_IMPORTED_MODULE_2__);
43359
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(7016);
43360
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(url__WEBPACK_IMPORTED_MODULE_3__);
43361
43367
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(6878);
43362
43368
 
43363
43369
 
@@ -43365,32 +43371,35 @@ __webpack_async_result__();
43365
43371
 
43366
43372
 
43367
43373
 
43368
- const __dirname = path__WEBPACK_IMPORTED_MODULE_1___default().dirname((0,url__WEBPACK_IMPORTED_MODULE_3__.fileURLToPath)(import.meta.url));
43374
+ const __dirname = node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname((0,node_url__WEBPACK_IMPORTED_MODULE_3__.fileURLToPath)(import.meta.url));
43369
43375
  // Find project root by looking for docker/ folder
43370
43376
  function findProjectRoot(startDir) {
43371
43377
  let currentDir = startDir;
43372
- const rootPath = path__WEBPACK_IMPORTED_MODULE_1___default().parse(currentDir).root;
43378
+ const rootPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().parse(currentDir).root;
43373
43379
  while (currentDir !== rootPath) {
43374
- const dockerPath = path__WEBPACK_IMPORTED_MODULE_1___default().join(currentDir, "docker");
43375
- if (fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerPath) && fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(dockerPath).isDirectory()) {
43380
+ const dockerPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(currentDir, "docker");
43381
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerPath) && node_fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(dockerPath).isDirectory()) {
43376
43382
  return currentDir;
43377
43383
  }
43378
- currentDir = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(currentDir);
43384
+ currentDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(currentDir);
43379
43385
  }
43380
43386
  throw new Error("Could not find project root (docker/ folder not found)");
43381
43387
  }
43382
43388
  const rootDir = findProjectRoot(__dirname);
43389
+ function parseNixVersionOutput(stdout) {
43390
+ const match = stdout.match(/nix \(Nix\) (\d+\.\d+)/);
43391
+ if (!match)
43392
+ return false;
43393
+ const [major, minor] = match[1].split(".").map(Number);
43394
+ const [reqMajor, reqMinor] = _config_js__WEBPACK_IMPORTED_MODULE_4__/* .NIX_CONFIG */ .Z3.requiredVersion
43395
+ .split(".")
43396
+ .map(Number);
43397
+ return major > reqMajor || (major === reqMajor && minor >= reqMinor);
43398
+ }
43383
43399
  async function checkNixInstalled() {
43384
43400
  try {
43385
43401
  const { stdout } = await (0,execa__WEBPACK_IMPORTED_MODULE_5__/* .execa */ .Ho)("nix", ["--version"]);
43386
- const versionMatch = stdout.match(/nix \(Nix\) (\d+\.\d+)/);
43387
- if (versionMatch) {
43388
- const version = versionMatch[1];
43389
- const [major, minor] = version.split(".").map(Number);
43390
- const [reqMajor, reqMinor] = _config_js__WEBPACK_IMPORTED_MODULE_4__/* .NIX_CONFIG */ .Z3.requiredVersion.split(".").map(Number);
43391
- return major > reqMajor || (major === reqMajor && minor >= reqMinor);
43392
- }
43393
- return false;
43402
+ return parseNixVersionOutput(stdout);
43394
43403
  }
43395
43404
  catch {
43396
43405
  return false;
@@ -43405,7 +43414,7 @@ async function installNix() {
43405
43414
  return;
43406
43415
  }
43407
43416
  // Detect OS
43408
- const platform = os__WEBPACK_IMPORTED_MODULE_2___default().platform();
43417
+ const platform = node_os__WEBPACK_IMPORTED_MODULE_1___default().platform();
43409
43418
  if (platform !== "darwin" && platform !== "linux") {
43410
43419
  throw new Error(`Unsupported platform: ${platform}. Nix only supports macOS and Linux.`);
43411
43420
  }
@@ -43428,33 +43437,33 @@ async function installNix() {
43428
43437
  console.log("⚠️ Please restart your shell or run: source ~/.nix-profile/etc/profile.d/nix.sh");
43429
43438
  }
43430
43439
  async function copyNixFiles() {
43431
- const homeDir = os__WEBPACK_IMPORTED_MODULE_2___default().homedir();
43432
- const localConfigDir = path__WEBPACK_IMPORTED_MODULE_1___default().join(homeDir, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .NIX_CONFIG */ .Z3.localConfigDir);
43440
+ const homeDir = node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir();
43441
+ const localConfigDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(homeDir, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .NIX_CONFIG */ .Z3.localConfigDir);
43433
43442
  console.log(`📁 Copying Nix configuration to ${localConfigDir}...`);
43434
43443
  // Create directory if it doesn't exist
43435
- if (!fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(localConfigDir)) {
43436
- fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(localConfigDir, { recursive: true });
43444
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(localConfigDir)) {
43445
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(localConfigDir, { recursive: true });
43437
43446
  }
43438
43447
  // Copy shell.nix and flake files
43439
- const sourcePath = path__WEBPACK_IMPORTED_MODULE_1___default().join(rootDir, "docker", "nix");
43448
+ const sourcePath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(rootDir, "docker", "nix");
43440
43449
  const filesToCopy = ["shell.nix", "flake.nix", "flake.lock"];
43441
43450
  for (const file of filesToCopy) {
43442
- const src = path__WEBPACK_IMPORTED_MODULE_1___default().join(sourcePath, file);
43443
- const dest = path__WEBPACK_IMPORTED_MODULE_1___default().join(localConfigDir, file);
43444
- if (fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(src)) {
43445
- fs__WEBPACK_IMPORTED_MODULE_0___default().copyFileSync(src, dest);
43451
+ const src = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(sourcePath, file);
43452
+ const dest = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(localConfigDir, file);
43453
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(src)) {
43454
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().copyFileSync(src, dest);
43446
43455
  console.log(` ✓ Copied ${file}`);
43447
43456
  }
43448
43457
  }
43449
43458
  // Copy nix-config directory
43450
- const configSrc = path__WEBPACK_IMPORTED_MODULE_1___default().join(sourcePath, "nix-config");
43451
- const configDest = path__WEBPACK_IMPORTED_MODULE_1___default().join(localConfigDir, "nix-config");
43452
- if (!fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(configDest)) {
43453
- fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(configDest, { recursive: true });
43459
+ const configSrc = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(sourcePath, "nix-config");
43460
+ const configDest = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(localConfigDir, "nix-config");
43461
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(configDest)) {
43462
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(configDest, { recursive: true });
43454
43463
  }
43455
- const configFiles = fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(configSrc);
43464
+ const configFiles = node_fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(configSrc);
43456
43465
  for (const file of configFiles) {
43457
- fs__WEBPACK_IMPORTED_MODULE_0___default().copyFileSync(path__WEBPACK_IMPORTED_MODULE_1___default().join(configSrc, file), path__WEBPACK_IMPORTED_MODULE_1___default().join(configDest, file));
43466
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().copyFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(configSrc, file), node_path__WEBPACK_IMPORTED_MODULE_2___default().join(configDest, file));
43458
43467
  console.log(` ✓ Copied nix-config/${file}`);
43459
43468
  }
43460
43469
  console.log();
@@ -43468,10 +43477,10 @@ async function runNixShell() {
43468
43477
  process.exit(1);
43469
43478
  }
43470
43479
  // Copy files if not already present
43471
- const homeDir = os__WEBPACK_IMPORTED_MODULE_2___default().homedir();
43472
- const localConfigDir = path__WEBPACK_IMPORTED_MODULE_1___default().join(homeDir, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .NIX_CONFIG */ .Z3.localConfigDir);
43473
- const shellNixPath = path__WEBPACK_IMPORTED_MODULE_1___default().join(localConfigDir, "shell.nix");
43474
- if (!fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(shellNixPath)) {
43480
+ const homeDir = node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir();
43481
+ const localConfigDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(homeDir, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .NIX_CONFIG */ .Z3.localConfigDir);
43482
+ const shellNixPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(localConfigDir, "shell.nix");
43483
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(shellNixPath)) {
43475
43484
  await copyNixFiles();
43476
43485
  }
43477
43486
  console.log("🚀 Starting Nix shell...");
@@ -43533,25 +43542,69 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
43533
43542
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
43534
43543
  /* harmony export */ a: () => (/* binding */ skillsCommand)
43535
43544
  /* harmony export */ });
43536
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(2864);
43537
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
43538
- /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3816);
43545
+ /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3816);
43546
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(2864);
43547
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
43539
43548
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6878);
43540
43549
  /* harmony import */ var _utils_skills_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6400);
43541
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_1__]);
43542
- ink__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
43550
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_0__]);
43551
+ ink__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
43543
43552
 
43544
43553
 
43545
43554
 
43546
43555
 
43556
+ function statusIcon(row) {
43557
+ switch (row.status) {
43558
+ case "working":
43559
+ return "⏳";
43560
+ case "error":
43561
+ return "❌";
43562
+ default:
43563
+ return row.installed ? "✅" : "☐";
43564
+ }
43565
+ }
43547
43566
  function SkillsMenu() {
43548
- const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useApp */ .nm)();
43549
- const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
43550
- const [rows, setRows] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI.map((s) => ({ installed: (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .isInstalled */ .j$)(s.name), status: "idle", message: "" })));
43567
+ const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useApp */ .nm)();
43568
+ const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);
43569
+ const [rows, setRows] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(_config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI.map((s) => ({
43570
+ installed: (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .isInstalled */ .j$)(s.name),
43571
+ status: "idle",
43572
+ message: "",
43573
+ })));
43551
43574
  function setRow(index, patch) {
43552
43575
  setRows((prev) => prev.map((r, i) => (i === index ? { ...r, ...patch } : r)));
43553
43576
  }
43554
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useInput */ .Ge)(async (_input, key) => {
43577
+ async function toggleSkill(index, skill, installed) {
43578
+ setRow(index, {
43579
+ status: "working",
43580
+ message: installed ? "Uninstalling..." : "Downloading...",
43581
+ });
43582
+ try {
43583
+ if (installed) {
43584
+ (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .uninstallSkill */ .wW)(skill.name);
43585
+ setRow(index, {
43586
+ installed: false,
43587
+ status: "done",
43588
+ message: "Uninstalled",
43589
+ });
43590
+ }
43591
+ else {
43592
+ await (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .installSkill */ .rP)(skill);
43593
+ setRow(index, {
43594
+ installed: true,
43595
+ status: "done",
43596
+ message: "Installed",
43597
+ });
43598
+ }
43599
+ }
43600
+ catch (e) {
43601
+ setRow(index, {
43602
+ status: "error",
43603
+ message: e instanceof Error ? e.message : "Failed",
43604
+ });
43605
+ }
43606
+ }
43607
+ (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useInput */ .Ge)((input, key) => {
43555
43608
  if (key.upArrow) {
43556
43609
  setSelectedIndex((p) => (p > 0 ? p - 1 : _config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI.length - 1));
43557
43610
  return;
@@ -43561,62 +43614,39 @@ function SkillsMenu() {
43561
43614
  return;
43562
43615
  }
43563
43616
  if (key.return) {
43564
- const skill = _config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI[selectedIndex];
43565
43617
  const row = rows[selectedIndex];
43566
- if (row.status === "working")
43567
- return;
43568
- if (row.installed) {
43569
- setRow(selectedIndex, { status: "working", message: "Uninstalling..." });
43570
- try {
43571
- (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .uninstallSkill */ .wW)(skill.name);
43572
- setRow(selectedIndex, { installed: false, status: "done", message: "Uninstalled" });
43573
- }
43574
- catch (e) {
43575
- setRow(selectedIndex, { status: "error", message: e instanceof Error ? e.message : "Failed" });
43576
- }
43577
- }
43578
- else {
43579
- setRow(selectedIndex, { status: "working", message: "Downloading..." });
43580
- try {
43581
- await (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .installSkill */ .rP)(skill);
43582
- setRow(selectedIndex, { installed: true, status: "done", message: "Installed" });
43583
- }
43584
- catch (e) {
43585
- setRow(selectedIndex, { status: "error", message: e instanceof Error ? e.message : "Failed" });
43586
- }
43618
+ if (row.status !== "working") {
43619
+ void toggleSkill(selectedIndex, _config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI[selectedIndex], row.installed);
43587
43620
  }
43588
43621
  return;
43589
43622
  }
43590
- if (_input === "q" || key.escape) {
43623
+ if (input === "q" || key.escape) {
43591
43624
  exit();
43592
43625
  }
43593
43626
  });
43594
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", paddingX: 1 },
43595
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginBottom: 1 },
43596
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { bold: true, color: "red" }, "Skills Manager"),
43597
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " (~/.sith/skills/)")),
43627
+ return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", paddingX: 1 },
43628
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginBottom: 1 },
43629
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { bold: true, color: "red" }, "Skills Manager"),
43630
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " (~/.sith/skills/)")),
43598
43631
  _config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI.map((skill, i) => {
43599
43632
  const row = rows[i];
43600
43633
  const isSelected = i === selectedIndex;
43601
- const statusIcon = row.status === "working" ? "⏳"
43602
- : row.status === "error" ? ""
43603
- : row.installed ? "✅" : "☐";
43604
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { key: skill.name, marginY: 0 },
43605
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43634
+ return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { key: skill.name, marginY: 0 },
43635
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43606
43636
  isSelected ? "❯ " : " ",
43607
- statusIcon,
43637
+ statusIcon(row),
43608
43638
  " ",
43609
43639
  skill.name.padEnd(12)),
43610
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: !isSelected }, skill.description),
43611
- row.message ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: row.status === "error" ? "red" : "green" },
43612
- " ",
43613
- row.message) : null));
43640
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: !isSelected }, skill.description),
43641
+ row.message ? (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: row.status === "error" ? "red" : "green" },
43642
+ " ",
43643
+ row.message)) : null));
43614
43644
  }),
43615
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43616
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate Enter install/uninstall q quit"))));
43645
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 1 },
43646
+ react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate Enter install/uninstall q quit"))));
43617
43647
  }
43618
43648
  function skillsCommand() {
43619
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SkillsMenu, null));
43649
+ (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_1___default().createElement(SkillsMenu, null));
43620
43650
  }
43621
43651
 
43622
43652
  __webpack_async_result__();
@@ -43631,19 +43661,19 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
43631
43661
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
43632
43662
  /* harmony export */ y: () => (/* binding */ ConfigModal)
43633
43663
  /* harmony export */ });
43634
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(2864);
43635
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
43636
- /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3816);
43664
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
43665
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
43666
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6760);
43667
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
43668
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
43669
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
43637
43670
  /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(6181);
43638
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(9896);
43639
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(fs__WEBPACK_IMPORTED_MODULE_2__);
43640
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6928);
43641
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);
43642
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(7016);
43643
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nccwpck_require__.n(url__WEBPACK_IMPORTED_MODULE_4__);
43671
+ /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3816);
43672
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(2864);
43673
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
43644
43674
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6878);
43645
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_1__]);
43646
- ink__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
43675
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_3__]);
43676
+ ink__WEBPACK_IMPORTED_MODULE_3__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];
43647
43677
 
43648
43678
 
43649
43679
 
@@ -43651,16 +43681,16 @@ ink__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await
43651
43681
 
43652
43682
 
43653
43683
 
43654
- const __dirname = path__WEBPACK_IMPORTED_MODULE_3___default().dirname((0,url__WEBPACK_IMPORTED_MODULE_4__.fileURLToPath)(import.meta.url));
43684
+ const __dirname = node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname((0,node_url__WEBPACK_IMPORTED_MODULE_2__.fileURLToPath)(import.meta.url));
43655
43685
  function findProjectRoot(startDir) {
43656
43686
  let currentDir = startDir;
43657
- const rootPath = path__WEBPACK_IMPORTED_MODULE_3___default().parse(currentDir).root;
43687
+ const rootPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().parse(currentDir).root;
43658
43688
  while (currentDir !== rootPath) {
43659
- const dockerPath = path__WEBPACK_IMPORTED_MODULE_3___default().join(currentDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName);
43660
- if (fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dockerPath) && fs__WEBPACK_IMPORTED_MODULE_2___default().statSync(dockerPath).isDirectory()) {
43689
+ const dockerPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(currentDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName);
43690
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerPath) && node_fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(dockerPath).isDirectory()) {
43661
43691
  return currentDir;
43662
43692
  }
43663
- currentDir = path__WEBPACK_IMPORTED_MODULE_3___default().dirname(currentDir);
43693
+ currentDir = node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname(currentDir);
43664
43694
  }
43665
43695
  throw new Error(`Could not find project root (${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName}/ folder not found)`);
43666
43696
  }
@@ -43670,19 +43700,19 @@ const configOptions = [
43670
43700
  { label: "Build Docker image from scratch", value: "build", icon: "🔨" },
43671
43701
  { label: "Back", value: "back", icon: "◀️" },
43672
43702
  ];
43673
- function ConfigModal({ onClose, onMessage }) {
43674
- const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
43675
- const [isProcessing, setIsProcessing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
43676
- const [processStep, setProcessStep] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
43677
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useInput */ .Ge)((_input, key) => {
43703
+ function ConfigModal({ onClose, onMessage, }) {
43704
+ const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(0);
43705
+ const [isProcessing, setIsProcessing] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(false);
43706
+ const [processStep, setProcessStep] = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)("");
43707
+ (0,ink__WEBPACK_IMPORTED_MODULE_3__/* .useInput */ .Ge)((_input, key) => {
43678
43708
  if (isProcessing) {
43679
43709
  return;
43680
43710
  }
43681
43711
  if (key.upArrow) {
43682
- setSelectedIndex((prev) => (prev > 0 ? prev - 1 : configOptions.length - 1));
43712
+ setSelectedIndex((prev) => prev > 0 ? prev - 1 : configOptions.length - 1);
43683
43713
  }
43684
43714
  else if (key.downArrow) {
43685
- setSelectedIndex((prev) => (prev < configOptions.length - 1 ? prev + 1 : 0));
43715
+ setSelectedIndex((prev) => prev < configOptions.length - 1 ? prev + 1 : 0);
43686
43716
  }
43687
43717
  else if (key.return) {
43688
43718
  handleSelection(configOptions[selectedIndex].value);
@@ -43708,7 +43738,9 @@ function ConfigModal({ onClose, onMessage }) {
43708
43738
  setIsProcessing(true);
43709
43739
  setProcessStep("Pulling prebuilt Docker image...");
43710
43740
  try {
43711
- await (0,execa__WEBPACK_IMPORTED_MODULE_6__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage], { stdio: "inherit" });
43741
+ await (0,execa__WEBPACK_IMPORTED_MODULE_6__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage], {
43742
+ stdio: "inherit",
43743
+ });
43712
43744
  await (0,execa__WEBPACK_IMPORTED_MODULE_6__/* .execa */ .Ho)("docker", ["tag", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName], {
43713
43745
  stdio: "inherit",
43714
43746
  });
@@ -43725,8 +43757,8 @@ function ConfigModal({ onClose, onMessage }) {
43725
43757
  setIsProcessing(true);
43726
43758
  setProcessStep("Building Docker image from scratch...");
43727
43759
  try {
43728
- const dockerfilePath = path__WEBPACK_IMPORTED_MODULE_3___default().join(rootDir, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.folderName, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.dockerfileName);
43729
- if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dockerfilePath)) {
43760
+ 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);
43761
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerfilePath)) {
43730
43762
  throw new Error(`Dockerfile not found at: ${dockerfilePath}`);
43731
43763
  }
43732
43764
  await (0,execa__WEBPACK_IMPORTED_MODULE_6__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
@@ -43742,24 +43774,24 @@ function ConfigModal({ onClose, onMessage }) {
43742
43774
  }
43743
43775
  }
43744
43776
  if (isProcessing) {
43745
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1 },
43746
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "cyan", bold: true }, "\u2699\uFE0F Configuration"),
43747
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43748
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "yellow" }, processStep))));
43749
- }
43750
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1 },
43751
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "cyan", bold: true }, "\u2699\uFE0F Configuration"),
43752
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginTop: 1 }, configOptions.map((option, index) => {
43777
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1 },
43778
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "cyan", bold: true }, "\u2699\uFE0F Configuration"),
43779
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43780
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "yellow" }, processStep))));
43781
+ }
43782
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1 },
43783
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: "cyan", bold: true }, "\u2699\uFE0F Configuration"),
43784
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { flexDirection: "column", marginTop: 1 }, configOptions.map((option, index) => {
43753
43785
  const isSelected = index === selectedIndex;
43754
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { key: option.value, marginY: 0 },
43755
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43786
+ return (react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { key: option.value, marginY: 0 },
43787
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { color: isSelected ? "cyan" : undefined },
43756
43788
  isSelected ? "❯ " : " ",
43757
43789
  option.icon,
43758
43790
  " ",
43759
43791
  option.label)));
43760
43792
  })),
43761
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1 },
43762
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Use arrow keys to navigate, Enter to select, Esc to close"))));
43793
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Box */ .az, { marginTop: 1 },
43794
+ react__WEBPACK_IMPORTED_MODULE_4___default().createElement(ink__WEBPACK_IMPORTED_MODULE_3__/* .Text */ .EY, { dimColor: true }, "Use arrow keys to navigate, Enter to select, Esc to close"))));
43763
43795
  }
43764
43796
 
43765
43797
  __webpack_async_result__();
@@ -43775,18 +43807,22 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
43775
43807
  /* harmony export */ t: () => (/* binding */ renderTerminalUI)
43776
43808
  /* harmony export */ });
43777
43809
  /* unused harmony export TerminalUI */
43778
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(2864);
43779
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
43780
- /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3816);
43781
- /* harmony import */ var ink_text_input__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(9046);
43782
- /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(6181);
43783
- /* harmony import */ var _ConfigModal_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3636);
43784
- /* harmony import */ var _utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(9987);
43810
+ /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(6181);
43811
+ /* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3816);
43812
+ /* harmony import */ var ink_text_input__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(9046);
43813
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(2864);
43814
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
43815
+ /* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(9805);
43785
43816
  /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(6878);
43786
- /* harmony import */ var _utils_skills_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6400);
43787
- /* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9805);
43788
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_1__, ink_text_input__WEBPACK_IMPORTED_MODULE_2__, _ConfigModal_js__WEBPACK_IMPORTED_MODULE_3__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_6__]);
43789
- ([ink__WEBPACK_IMPORTED_MODULE_1__, ink_text_input__WEBPACK_IMPORTED_MODULE_2__, _ConfigModal_js__WEBPACK_IMPORTED_MODULE_3__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
43817
+ /* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(4495);
43818
+ /* harmony import */ var _utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(1460);
43819
+ /* harmony import */ var _utils_messageUtils_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(5534);
43820
+ /* harmony import */ var _utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(9987);
43821
+ /* harmony import */ var _ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(3636);
43822
+ 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__]);
43823
+ ([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__);
43824
+
43825
+
43790
43826
 
43791
43827
 
43792
43828
 
@@ -43797,120 +43833,37 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink_
43797
43833
 
43798
43834
 
43799
43835
  function WelcomeScreen() {
43800
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center", paddingY: 2 },
43801
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginBottom: 2 }, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .ASCII_LOGO */ .mF.map((line, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
43802
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", alignItems: "center", marginTop: 1 },
43803
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Turn your context to the dark side"),
43804
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Dockerized OpenCode environment")),
43805
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 2, flexDirection: "column", alignItems: "center" },
43806
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "cyan" }, "Type your prompt to start coding"),
43807
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "or use slash commands:")),
43808
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", marginTop: 1, marginLeft: 2 },
43809
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /shell - Start Docker shell"),
43810
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /skills - Install/uninstall skills"),
43811
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /config - Configuration"),
43812
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, " /help - Show help"))));
43813
- }
43814
- function getMessageColor(messageType) {
43815
- switch (messageType) {
43816
- case "success":
43817
- return "green";
43818
- case "error":
43819
- return "red";
43820
- case "info":
43821
- return "cyan";
43822
- case "user":
43823
- return "white";
43824
- case "system":
43825
- return "gray";
43826
- default:
43827
- return undefined;
43828
- }
43829
- }
43830
- function getMessagePrefix(messageType) {
43831
- switch (messageType) {
43832
- case "user":
43833
- return "› ";
43834
- case "system":
43835
- return "⚡ ";
43836
- default:
43837
- return "";
43838
- }
43836
+ return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center", paddingY: 2 },
43837
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", marginBottom: 2 }, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .ASCII_LOGO */ .mF.map((line, index) => (
43838
+ // biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
43839
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
43840
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center", marginTop: 1 },
43841
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "Turn your context to the dark side"),
43842
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "Dockerized OpenCode environment")),
43843
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 2, flexDirection: "column", alignItems: "center" },
43844
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan" }, "Type your prompt to start coding"),
43845
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "or use slash commands:")),
43846
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", marginTop: 1, marginLeft: 2 },
43847
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /shell - Start Docker shell"),
43848
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /skills - Install/uninstall skills"),
43849
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /config - Configuration"),
43850
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /help - Show help"))));
43839
43851
  }
43840
43852
  function MessageItem({ message }) {
43841
- const color = getMessageColor(message.type);
43842
- const prefix = getMessagePrefix(message.type);
43843
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginBottom: 0 },
43844
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: color },
43853
+ const color = (0,_utils_messageUtils_js__WEBPACK_IMPORTED_MODULE_7__/* .getMessageColor */ .l)(message.type);
43854
+ const prefix = (0,_utils_messageUtils_js__WEBPACK_IMPORTED_MODULE_7__/* .getMessagePrefix */ .U)(message.type);
43855
+ return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginBottom: 0 },
43856
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: color },
43845
43857
  prefix,
43846
43858
  message.text)));
43847
43859
  }
43848
- async function getGitHubToken() {
43849
- // Check environment variable first
43850
- const envToken = process.env.GITHUB_TOKEN;
43851
- if (envToken) {
43852
- return envToken;
43853
- }
43854
- // Try to get token from gh CLI
43855
- try {
43856
- const { stdout } = await (0,execa__WEBPACK_IMPORTED_MODULE_7__/* .execa */ .Ho)("gh", ["auth", "token"]);
43857
- return stdout.trim();
43858
- }
43859
- catch {
43860
- // Return empty string if gh CLI is not available
43861
- return "";
43862
- }
43863
- }
43864
- function buildDockerShellCommand(githubToken) {
43865
- return [
43866
- "run",
43867
- "--rm",
43868
- "-it",
43869
- "-v",
43870
- `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
43871
- "-v",
43872
- `${(0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_5__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
43873
- "-e",
43874
- `GITHUB_TOKEN=${githubToken}`,
43875
- "--entrypoint",
43876
- "nix-shell",
43877
- _config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.imageName,
43878
- _config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
43879
- ];
43880
- }
43881
- function buildDockerOpencodeCommand(githubToken, prompt) {
43882
- const dockerArgs = [
43883
- "run",
43884
- "--rm",
43885
- "-it",
43886
- "-v",
43887
- `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
43888
- "-v",
43889
- `${(0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_5__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
43890
- "-e",
43891
- `GITHUB_TOKEN=${githubToken}`,
43892
- "--entrypoint",
43893
- "bash",
43894
- _config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.imageName,
43895
- "-c",
43896
- ];
43897
- // Build opencode command - always interactive, use Sonnet 4.6
43898
- let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
43899
- if (prompt) {
43900
- // Escape single quotes in prompt and use --prompt flag for interactive mode
43901
- const escapedPrompt = prompt.replace(/'/g, "'\\''");
43902
- opencodeCommand += ` --prompt '${escapedPrompt}'`;
43903
- }
43904
- dockerArgs.push(opencodeCommand);
43905
- return dockerArgs;
43906
- }
43907
43860
  function TerminalUI() {
43908
- const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useApp */ .nm)();
43909
- const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
43910
- const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
43911
- const [showConfigModal, setShowConfigModal] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
43912
- const [nextMessageId, setNextMessageId] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(1);
43913
- const addMessage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, type = "system") => {
43861
+ const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useApp */ .nm)();
43862
+ const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)("");
43863
+ const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)([]);
43864
+ const [showConfigModal, setShowConfigModal] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);
43865
+ const [nextMessageId, setNextMessageId] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(1);
43866
+ const addMessage = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((text, type = "system") => {
43914
43867
  const newMessage = {
43915
43868
  id: nextMessageId,
43916
43869
  text,
@@ -43920,16 +43873,16 @@ function TerminalUI() {
43920
43873
  setMessages((previousMessages) => [...previousMessages, newMessage]);
43921
43874
  setNextMessageId((previousId) => previousId + 1);
43922
43875
  }, [nextMessageId]);
43923
- const handleDockerShell = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {
43876
+ const handleDockerShell = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async () => {
43924
43877
  exit();
43925
43878
  console.log("🚀 Starting Docker shell...");
43926
43879
  console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
43927
43880
  console.log('Press Ctrl+D or type "exit" to leave');
43928
43881
  console.log();
43929
- const githubToken = await getGitHubToken();
43930
- const dockerArgs = buildDockerShellCommand(githubToken);
43882
+ const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
43883
+ const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerShellCommand */ .a)(githubToken);
43931
43884
  try {
43932
- await (0,execa__WEBPACK_IMPORTED_MODULE_7__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
43885
+ await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
43933
43886
  console.log();
43934
43887
  console.log("✅ Exited shell");
43935
43888
  }
@@ -43939,7 +43892,7 @@ function TerminalUI() {
43939
43892
  process.exit(1);
43940
43893
  }
43941
43894
  }, [exit]);
43942
- const handleOpenCode = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (prompt) => {
43895
+ const handleOpenCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
43943
43896
  exit();
43944
43897
  console.log("🚀 Starting OpenCode...");
43945
43898
  console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
@@ -43947,10 +43900,10 @@ function TerminalUI() {
43947
43900
  console.log(`Prompt: ${prompt}`);
43948
43901
  }
43949
43902
  console.log();
43950
- const githubToken = await getGitHubToken();
43951
- const dockerArgs = buildDockerOpencodeCommand(githubToken, prompt);
43903
+ const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
43904
+ const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerOpencodeCommand */ .X)(githubToken, prompt);
43952
43905
  try {
43953
- await (0,execa__WEBPACK_IMPORTED_MODULE_7__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
43906
+ await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
43954
43907
  console.log();
43955
43908
  console.log("✅ Exited OpenCode");
43956
43909
  }
@@ -43960,7 +43913,7 @@ function TerminalUI() {
43960
43913
  process.exit(1);
43961
43914
  }
43962
43915
  }, [exit]);
43963
- const handleSlashCommand = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (command, userInput) => {
43916
+ const handleSlashCommand = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (command, userInput) => {
43964
43917
  if (!command) {
43965
43918
  return;
43966
43919
  }
@@ -43971,27 +43924,28 @@ function TerminalUI() {
43971
43924
  break;
43972
43925
  case "skills":
43973
43926
  exit();
43974
- (0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_6__/* .skillsCommand */ .a)();
43927
+ (0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .skillsCommand */ .a)();
43975
43928
  break;
43976
43929
  case "config":
43977
43930
  setShowConfigModal(true);
43978
43931
  break;
43979
- case "help":
43932
+ case "help": {
43980
43933
  addMessage("Available commands:", "info");
43981
- const availableCommands = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_8__/* .getAvailableCommands */ .K)();
43934
+ const availableCommands = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_10__/* .getAvailableCommands */ .K)();
43982
43935
  for (const cmd of availableCommands) {
43983
43936
  addMessage(` ${cmd.command} - ${cmd.description}`, "info");
43984
43937
  }
43985
43938
  break;
43939
+ }
43986
43940
  }
43987
- }, [addMessage, handleDockerShell]);
43988
- const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (value) => {
43941
+ }, [addMessage, handleDockerShell, exit]);
43942
+ const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (value) => {
43989
43943
  const trimmedValue = value.trim();
43990
43944
  if (!trimmedValue) {
43991
43945
  return;
43992
43946
  }
43993
43947
  setInput("");
43994
- const command = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_8__/* .parseSlashCommand */ .M)(trimmedValue);
43948
+ const command = (0,_utils_slashCommands_js__WEBPACK_IMPORTED_MODULE_10__/* .parseSlashCommand */ .M)(trimmedValue);
43995
43949
  if (command) {
43996
43950
  await handleSlashCommand(command, trimmedValue);
43997
43951
  }
@@ -44004,13 +43958,13 @@ function TerminalUI() {
44004
43958
  await handleOpenCode(trimmedValue);
44005
43959
  }
44006
43960
  }, [addMessage, handleOpenCode, handleSlashCommand]);
44007
- const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
43961
+ const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {
44008
43962
  setShowConfigModal(false);
44009
43963
  }, []);
44010
- const handleConfigModalMessage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((text, type) => {
43964
+ const handleConfigModalMessage = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((text, type) => {
44011
43965
  addMessage(text, type || "system");
44012
43966
  }, [addMessage]);
44013
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .useInput */ .Ge)((input, key) => {
43967
+ (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useInput */ .Ge)((input, key) => {
44014
43968
  if (showConfigModal) {
44015
43969
  // Let modal handle input
44016
43970
  return;
@@ -44021,23 +43975,23 @@ function TerminalUI() {
44021
43975
  }
44022
43976
  });
44023
43977
  if (showConfigModal) {
44024
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" },
44025
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ConfigModal_js__WEBPACK_IMPORTED_MODULE_3__/* .ConfigModal */ .y, { onClose: handleConfigModalClose, onMessage: handleConfigModalMessage })));
43978
+ return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
43979
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__/* .ConfigModal */ .y, { onClose: handleConfigModalClose, onMessage: handleConfigModalMessage })));
44026
43980
  }
44027
43981
  const shouldShowWelcome = messages.length === 0;
44028
43982
  const recentMessages = messages.slice(-10);
44029
- return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", height: "100%" },
44030
- shouldShowWelcome ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(WelcomeScreen, null)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column", flexGrow: 1, marginBottom: 1 }, recentMessages.map((message) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MessageItem, { key: message.id, message: message }))))),
44031
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { flexDirection: "column" },
44032
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { borderStyle: "single", borderColor: "gray", paddingX: 1 },
44033
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { color: "cyan", bold: true }, "\u203A"),
44034
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, null, " "),
44035
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink_text_input__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, { value: input, onChange: setInput, onSubmit: handleSubmit, placeholder: "Enter your prompt..." })),
44036
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Box */ .az, { marginTop: 1, paddingX: 1 },
44037
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ink__WEBPACK_IMPORTED_MODULE_1__/* .Text */ .EY, { dimColor: true }, "Ctrl+C to exit")))));
43983
+ return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", height: "100%" },
43984
+ shouldShowWelcome ? (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(WelcomeScreen, null)) : (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", flexGrow: 1, marginBottom: 1 }, recentMessages.map((message) => (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(MessageItem, { key: message.id, message: message }))))),
43985
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
43986
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { borderStyle: "single", borderColor: "gray", paddingX: 1 },
43987
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "\u203A"),
43988
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, null, " "),
43989
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink_text_input__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, { value: input, onChange: setInput, onSubmit: handleSubmit, placeholder: "Enter your prompt..." })),
43990
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 1, paddingX: 1 },
43991
+ react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "Ctrl+C to exit")))));
44038
43992
  }
44039
43993
  function renderTerminalUI() {
44040
- (0,ink__WEBPACK_IMPORTED_MODULE_1__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TerminalUI, null));
43994
+ (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_2___default().createElement(TerminalUI, null));
44041
43995
  }
44042
43996
 
44043
43997
  __webpack_async_result__();
@@ -44060,8 +44014,46 @@ const SKILLS_CATALOG = [
44060
44014
  {
44061
44015
  name: "caveman",
44062
44016
  description: "Ultra-compressed communication (~75% token reduction)",
44063
- source: "https://github.com/JuliusBrussee/caveman/archive/refs/heads/main.zip",
44064
44017
  homepage: "https://github.com/JuliusBrussee/caveman",
44018
+ builtinInstructions: `---
44019
+ name: caveman
44020
+ description: Ultra-compressed communication mode (ultra — MAX compression, always active).
44021
+ ---
44022
+
44023
+ Respond terse like smart caveman. All technical substance stay. Only fluff die.
44024
+
44025
+ ## Persistence
44026
+
44027
+ ACTIVE EVERY RESPONSE. No revert. Off only: "stop caveman" / "normal mode".
44028
+
44029
+ Level: **ultra** (fixed).
44030
+
44031
+ ## Rules
44032
+
44033
+ Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries, hedging. Fragments OK. Short synonyms. Technical terms exact. Code blocks unchanged. Errors quoted exact.
44034
+
44035
+ Pattern: \`[thing] [action] [reason]. [next step].\`
44036
+
44037
+ Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
44038
+ Yes: "Bug in auth middleware. Token expiry check use \`<\` not \`<=\`. Fix:"
44039
+
44040
+ ## Ultra intensity
44041
+
44042
+ Abbreviate prose (DB/auth/config/req/res/fn/impl), strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code symbols/fn names/API names/error strings: never abbreviate.
44043
+
44044
+ Example — "Why React re-render?"
44045
+ ultra: "Inline obj prop → new ref → re-render. \`useMemo\`."
44046
+
44047
+ Example — "Explain DB connection pooling."
44048
+ ultra: "Pool = reuse DB conn. Skip handshake → fast under load."
44049
+
44050
+ ## Auto-Clarity
44051
+
44052
+ Drop for: security warnings, irreversible ops, steps where order risks misread. Resume after.
44053
+
44054
+ ## Boundaries
44055
+
44056
+ Code/commits/PRs: write normal. "stop caveman" or "normal mode": revert.`,
44065
44057
  },
44066
44058
  ];
44067
44059
  // Docker configuration
@@ -44071,7 +44063,8 @@ const DOCKER_CONFIG = {
44071
44063
  folderName: "docker",
44072
44064
  dockerfileName: "Dockerfile",
44073
44065
  workspaceMount: "/workspace",
44074
- skillsMount: "/opt/sith/external-skills",
44066
+ skillsMount: "/root/.opencode/skills",
44067
+ opencodeConfigMount: "/root/.config/opencode/opencode.json",
44075
44068
  shellEntrypoint: "/opt/sith/nix/shell.nix",
44076
44069
  };
44077
44070
  // Nix configuration
@@ -44104,21 +44097,21 @@ const ASCII_LOGO = [
44104
44097
  /***/ ((module, __unused_webpack___webpack_exports__, __nccwpck_require__) => {
44105
44098
 
44106
44099
  __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
44107
- /* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(2202);
44108
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(9896);
44109
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);
44110
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(7016);
44111
- /* harmony import */ var url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(url__WEBPACK_IMPORTED_MODULE_2__);
44112
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6928);
44113
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);
44114
- /* harmony import */ var update_notifier__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(6213);
44100
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
44101
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
44102
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6760);
44103
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
44104
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
44105
+ /* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
44115
44106
  /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(9611);
44107
+ /* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(2202);
44108
+ /* harmony import */ var update_notifier__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(6213);
44116
44109
  /* harmony import */ var _commands_docker_js__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(5515);
44117
44110
  /* harmony import */ var _commands_nix_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(9922);
44118
- /* harmony import */ var _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(3535);
44119
- /* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(9805);
44120
- var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_6__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__]);
44121
- ([_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_6__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
44111
+ /* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9805);
44112
+ /* harmony import */ var _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(3535);
44113
+ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_6__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_7__]);
44114
+ ([_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_6__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
44122
44115
 
44123
44116
 
44124
44117
 
@@ -44130,21 +44123,21 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_com
44130
44123
 
44131
44124
 
44132
44125
  // Import package.json for version and update checks
44133
- const __filename = (0,url__WEBPACK_IMPORTED_MODULE_2__.fileURLToPath)(import.meta.url);
44134
- const __dirname = (0,path__WEBPACK_IMPORTED_MODULE_3__.dirname)(__filename);
44135
- const pkg = JSON.parse((0,fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync)(__nccwpck_require__.ab + "package.json", 'utf-8'));
44136
- const PROGRAM_NAME = 'sith';
44126
+ const __filename = (0,node_url__WEBPACK_IMPORTED_MODULE_2__.fileURLToPath)(import.meta.url);
44127
+ const __dirname = (0,node_path__WEBPACK_IMPORTED_MODULE_1__.dirname)(__filename);
44128
+ 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"));
44129
+ const PROGRAM_NAME = "sith";
44137
44130
  const PROGRAM_VERSION = pkg.version;
44138
- 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.';
44131
+ 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.";
44139
44132
  // Check for updates (automatic background check)
44140
44133
  const notifier = (0,update_notifier__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)({ pkg });
44141
44134
  notifier.notify();
44142
44135
  async function checkForUpdates() {
44143
- console.log(chalk__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Ay.cyan('Checking for updates...'));
44136
+ console.log(chalk__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Ay.cyan("Checking for updates..."));
44144
44137
  // Force update check by setting updateCheckInterval to 0
44145
44138
  const notifier = (0,update_notifier__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)({
44146
44139
  pkg,
44147
- updateCheckInterval: 0
44140
+ updateCheckInterval: 0,
44148
44141
  });
44149
44142
  // Fetch the latest version
44150
44143
  await notifier.fetchInfo();
@@ -44160,21 +44153,20 @@ async function checkForUpdates() {
44160
44153
  }
44161
44154
  }
44162
44155
  function createProgram() {
44163
- const program = new commander__WEBPACK_IMPORTED_MODULE_0__/* .Command */ .uB();
44156
+ const program = new commander__WEBPACK_IMPORTED_MODULE_3__/* .Command */ .uB();
44164
44157
  program
44165
44158
  .name(PROGRAM_NAME)
44166
44159
  .description(PROGRAM_DESCRIPTION)
44167
44160
  .version(PROGRAM_VERSION)
44168
- .option('--pull', 'Pull prebuilt Docker image (recommended)')
44169
- .option('--build', 'Build the Docker image from scratch')
44170
- .option('--it', 'Launch interactive shell in Docker container')
44171
- .option('--nix', 'Use native Nix shell (no Docker)')
44172
- .option('--nix-install', 'Install Nix package manager locally')
44173
- .option('--update', 'Check for updates')
44174
- .option('--legacy', 'Use legacy menu interface');
44161
+ .option("--pull", "Pull prebuilt Docker image (recommended)")
44162
+ .option("--build", "Build the Docker image from scratch")
44163
+ .option("--it", "Launch interactive shell in Docker container")
44164
+ .option("--nix", "Use native Nix shell (no Docker)")
44165
+ .option("--nix-install", "Install Nix package manager locally")
44166
+ .option("--update", "Check for updates")
44167
+ .option("--legacy", "Use legacy menu interface");
44175
44168
  // Default action - show terminal UI or legacy menu
44176
- program
44177
- .action(async (options) => {
44169
+ program.action(async (options) => {
44178
44170
  if (options.update) {
44179
44171
  await checkForUpdates();
44180
44172
  }
@@ -44193,38 +44185,38 @@ function createProgram() {
44193
44185
  }
44194
44186
  else {
44195
44187
  // Default: show new terminal UI
44196
- (0,_components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_6__/* .renderTerminalUI */ .t)();
44188
+ (0,_components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_7__/* .renderTerminalUI */ .t)();
44197
44189
  }
44198
44190
  });
44199
44191
  // Docker command - explicit Docker management
44200
44192
  program
44201
- .command('docker')
44202
- .description('Manage Docker environment')
44203
- .option('--pull', 'Pull prebuilt Docker image (recommended)')
44204
- .option('--build', 'Build the Docker image from scratch')
44193
+ .command("docker")
44194
+ .description("Manage Docker environment")
44195
+ .option("--pull", "Pull prebuilt Docker image (recommended)")
44196
+ .option("--build", "Build the Docker image from scratch")
44205
44197
  .action(async (options) => {
44206
44198
  await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__/* .dockerCommand */ .Q)(options);
44207
44199
  });
44208
44200
  // Shell command - direct interactive shell (bypasses menu)
44209
44201
  program
44210
- .command('shell')
44211
- .description('Run interactive shell in Docker container')
44202
+ .command("shell")
44203
+ .description("Run interactive shell in Docker container")
44212
44204
  .action(async () => {
44213
44205
  await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__/* .runShellDirect */ .l)();
44214
44206
  });
44215
44207
  // Skills command - install/uninstall skills from catalog
44216
44208
  program
44217
- .command('skills')
44218
- .description('Manage skills (~/.sith/skills/)')
44209
+ .command("skills")
44210
+ .description("Manage skills (~/.sith/skills/)")
44219
44211
  .action(() => {
44220
- (0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .skillsCommand */ .a)();
44212
+ (0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_6__/* .skillsCommand */ .a)();
44221
44213
  });
44222
44214
  // Nix command - native Nix environment
44223
44215
  program
44224
- .command('nix')
44225
- .description('Manage native Nix environment')
44226
- .option('--install', 'Install Nix package manager')
44227
- .option('--shell', 'Run Nix shell')
44216
+ .command("nix")
44217
+ .description("Manage native Nix environment")
44218
+ .option("--install", "Install Nix package manager")
44219
+ .option("--shell", "Run Nix shell")
44228
44220
  .action(async (options) => {
44229
44221
  await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_5__/* .nixCommand */ .Dv)(options);
44230
44222
  });
@@ -44237,67 +44229,251 @@ program.parse();
44237
44229
  __webpack_async_result__();
44238
44230
  } catch(e) { __webpack_async_result__(e); } });
44239
44231
 
44232
+ /***/ }),
44233
+
44234
+ /***/ 4495:
44235
+ /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
44236
+
44237
+ /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44238
+ /* harmony export */ X: () => (/* binding */ buildDockerOpencodeCommand),
44239
+ /* harmony export */ a: () => (/* binding */ buildDockerShellCommand)
44240
+ /* harmony export */ });
44241
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(6878);
44242
+ /* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6400);
44243
+
44244
+
44245
+ function buildDockerShellCommand(githubToken) {
44246
+ return [
44247
+ "run",
44248
+ "--rm",
44249
+ "-it",
44250
+ "-v",
44251
+ `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
44252
+ "-v",
44253
+ `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
44254
+ "-v",
44255
+ `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
44256
+ "-e",
44257
+ `GITHUB_TOKEN=${githubToken}`,
44258
+ "--entrypoint",
44259
+ "nix-shell",
44260
+ _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName,
44261
+ _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
44262
+ ];
44263
+ }
44264
+ function buildDockerOpencodeCommand(githubToken, prompt) {
44265
+ const args = [
44266
+ "run",
44267
+ "--rm",
44268
+ "-it",
44269
+ "-v",
44270
+ `${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
44271
+ "-v",
44272
+ `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
44273
+ "-v",
44274
+ `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
44275
+ "-e",
44276
+ `GITHUB_TOKEN=${githubToken}`,
44277
+ "--entrypoint",
44278
+ "bash",
44279
+ _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName,
44280
+ "-c",
44281
+ ];
44282
+ let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
44283
+ if (prompt) {
44284
+ const escapedPrompt = prompt.replace(/'/g, "'\\''");
44285
+ opencodeCommand += ` --prompt '${escapedPrompt}'`;
44286
+ }
44287
+ args.push(opencodeCommand);
44288
+ return args;
44289
+ }
44290
+
44291
+
44292
+ /***/ }),
44293
+
44294
+ /***/ 1460:
44295
+ /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
44296
+
44297
+ /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44298
+ /* harmony export */ l: () => (/* binding */ getGitHubToken)
44299
+ /* harmony export */ });
44300
+ /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(6181);
44301
+
44302
+ async function getGitHubToken() {
44303
+ if (process.env.GITHUB_TOKEN)
44304
+ return process.env.GITHUB_TOKEN;
44305
+ try {
44306
+ const { stdout } = await (0,execa__WEBPACK_IMPORTED_MODULE_0__/* .execa */ .Ho)("gh", ["auth", "token"]);
44307
+ return stdout.trim();
44308
+ }
44309
+ catch {
44310
+ return "";
44311
+ }
44312
+ }
44313
+
44314
+
44315
+ /***/ }),
44316
+
44317
+ /***/ 5534:
44318
+ /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
44319
+
44320
+ /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44321
+ /* harmony export */ U: () => (/* binding */ getMessagePrefix),
44322
+ /* harmony export */ l: () => (/* binding */ getMessageColor)
44323
+ /* harmony export */ });
44324
+ function getMessageColor(type) {
44325
+ switch (type) {
44326
+ case "success":
44327
+ return "green";
44328
+ case "error":
44329
+ return "red";
44330
+ case "info":
44331
+ return "cyan";
44332
+ case "user":
44333
+ return "white";
44334
+ case "system":
44335
+ return "gray";
44336
+ default:
44337
+ return undefined;
44338
+ }
44339
+ }
44340
+ function getMessagePrefix(type) {
44341
+ switch (type) {
44342
+ case "user":
44343
+ return "› ";
44344
+ case "system":
44345
+ return "⚡ ";
44346
+ default:
44347
+ return "";
44348
+ }
44349
+ }
44350
+
44351
+
44240
44352
  /***/ }),
44241
44353
 
44242
44354
  /***/ 6400:
44243
44355
  /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
44244
44356
 
44245
44357
  /* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
44358
+ /* harmony export */ Jn: () => (/* binding */ getOpenCodeConfigPath),
44246
44359
  /* harmony export */ YJ: () => (/* binding */ getSkillsDir),
44247
44360
  /* harmony export */ j$: () => (/* binding */ isInstalled),
44248
44361
  /* harmony export */ rP: () => (/* binding */ installSkill),
44249
44362
  /* harmony export */ wW: () => (/* binding */ uninstallSkill)
44250
44363
  /* harmony export */ });
44251
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(9896);
44252
- /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);
44253
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6928);
44254
- /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);
44255
- /* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(857);
44256
- /* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(os__WEBPACK_IMPORTED_MODULE_2__);
44257
- /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6181);
44364
+ /* unused harmony export findInstructionsFile */
44365
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
44366
+ /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
44367
+ /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(8161);
44368
+ /* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_os__WEBPACK_IMPORTED_MODULE_1__);
44369
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6760);
44370
+ /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);
44371
+ /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(6181);
44372
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(6878);
44373
+
44258
44374
 
44259
44375
 
44260
44376
 
44261
44377
 
44378
+ const OPENCODE_SCHEMA = "https://opencode.ai/config.json";
44379
+ function defaultConfig() {
44380
+ return { $schema: OPENCODE_SCHEMA, instructions: [] };
44381
+ }
44262
44382
  function getSkillsDir() {
44263
- const dir = path__WEBPACK_IMPORTED_MODULE_1___default().join(os__WEBPACK_IMPORTED_MODULE_2___default().homedir(), ".sith", "skills");
44264
- fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(dir, { recursive: true });
44383
+ const dir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "skills");
44384
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(dir, { recursive: true });
44265
44385
  return dir;
44266
44386
  }
44387
+ function getOpenCodeConfigPath() {
44388
+ const configPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "opencode.json");
44389
+ // Docker bind-mount creates a directory if the source doesn't exist; ensure it's a file.
44390
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(configPath) && node_fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(configPath).isDirectory()) {
44391
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(configPath, { recursive: true, force: true });
44392
+ }
44393
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(configPath)) {
44394
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(configPath), { recursive: true });
44395
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(configPath, JSON.stringify(defaultConfig(), null, 2));
44396
+ }
44397
+ return configPath;
44398
+ }
44399
+ function readConfig() {
44400
+ const parsed = JSON.parse(node_fs__WEBPACK_IMPORTED_MODULE_0___default().readFileSync(getOpenCodeConfigPath(), "utf8"));
44401
+ if (!Array.isArray(parsed.instructions))
44402
+ parsed.instructions = [];
44403
+ return parsed;
44404
+ }
44405
+ function writeConfig(config) {
44406
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(getOpenCodeConfigPath(), JSON.stringify(config, null, 2));
44407
+ }
44408
+ function addInstruction(containerPath) {
44409
+ const config = readConfig();
44410
+ if (!config.instructions.includes(containerPath)) {
44411
+ config.instructions.push(containerPath);
44412
+ writeConfig(config);
44413
+ }
44414
+ }
44415
+ function removeInstructionsUnder(skillContainerDir) {
44416
+ const config = readConfig();
44417
+ config.instructions = config.instructions.filter((p) => !p.startsWith(skillContainerDir));
44418
+ writeConfig(config);
44419
+ }
44420
+ function findInstructionsFile(skillDir) {
44421
+ const skillName = node_path__WEBPACK_IMPORTED_MODULE_2___default().basename(skillDir);
44422
+ const candidates = [
44423
+ "SKILL.md",
44424
+ "CAVEMAN.md",
44425
+ "instructions.md",
44426
+ node_path__WEBPACK_IMPORTED_MODULE_2___default().join("skills", skillName, "SKILL.md"),
44427
+ "AGENTS.md",
44428
+ ];
44429
+ return (candidates.find((name) => node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(skillDir, name))) ?? null);
44430
+ }
44267
44431
  function isInstalled(name) {
44268
- const skillJson = path__WEBPACK_IMPORTED_MODULE_1___default().join(getSkillsDir(), name, "skill.json");
44269
- return fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(skillJson);
44432
+ return node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), name, "skill.json"));
44270
44433
  }
44271
44434
  async function installSkill(skill) {
44272
- const targetDir = path__WEBPACK_IMPORTED_MODULE_1___default().join(getSkillsDir(), skill.name);
44273
- const tmpZip = path__WEBPACK_IMPORTED_MODULE_1___default().join(os__WEBPACK_IMPORTED_MODULE_2___default().tmpdir(), `sith-skill-${skill.name}.zip`);
44274
- const tmpExtract = path__WEBPACK_IMPORTED_MODULE_1___default().join(os__WEBPACK_IMPORTED_MODULE_2___default().tmpdir(), `sith-skill-${skill.name}-extract`);
44435
+ const targetDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), skill.name);
44436
+ if (skill.builtinInstructions) {
44437
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(targetDir, { recursive: true });
44438
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "SKILL.md"), skill.builtinInstructions);
44439
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "skill.json"), JSON.stringify({ name: skill.name, version: "builtin" }, null, 2));
44440
+ addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/SKILL.md`);
44441
+ return;
44442
+ }
44443
+ if (!skill.source)
44444
+ throw new Error(`Skill "${skill.name}" has no source URL`);
44445
+ const tmpZip = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().tmpdir(), `sith-skill-${skill.name}.zip`);
44446
+ const tmpExtract = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().tmpdir(), `sith-skill-${skill.name}-extract`);
44275
44447
  try {
44276
- await (0,execa__WEBPACK_IMPORTED_MODULE_3__/* .execa */ .Ho)("curl", ["-fsSL", skill.source, "-o", tmpZip]);
44277
- fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(tmpExtract, { recursive: true });
44278
- await (0,execa__WEBPACK_IMPORTED_MODULE_3__/* .execa */ .Ho)("unzip", ["-q", "-o", tmpZip, "-d", tmpExtract]);
44279
- const entries = fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(tmpExtract);
44448
+ await (0,execa__WEBPACK_IMPORTED_MODULE_4__/* .execa */ .Ho)("curl", ["-fsSL", skill.source, "-o", tmpZip]);
44449
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(tmpExtract, { recursive: true });
44450
+ await (0,execa__WEBPACK_IMPORTED_MODULE_4__/* .execa */ .Ho)("unzip", ["-q", "-o", tmpZip, "-d", tmpExtract]);
44451
+ const entries = node_fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(tmpExtract);
44280
44452
  if (entries.length === 0)
44281
44453
  throw new Error("Empty archive");
44282
- const extracted = path__WEBPACK_IMPORTED_MODULE_1___default().join(tmpExtract, entries[0]);
44283
- if (fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(targetDir))
44284
- fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
44285
- fs__WEBPACK_IMPORTED_MODULE_0___default().cpSync(extracted, targetDir, { recursive: true });
44286
- // Ensure skill.json exists with at minimum a name field
44287
- const skillJson = path__WEBPACK_IMPORTED_MODULE_1___default().join(targetDir, "skill.json");
44288
- if (!fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(skillJson)) {
44289
- fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(skillJson, JSON.stringify({ name: skill.name, version: "local" }, null, 2));
44454
+ const extracted = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(tmpExtract, entries[0]);
44455
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(targetDir))
44456
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
44457
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().cpSync(extracted, targetDir, { recursive: true });
44458
+ const skillJson = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "skill.json");
44459
+ if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(skillJson)) {
44460
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(skillJson, JSON.stringify({ name: skill.name, version: "local" }, null, 2));
44461
+ }
44462
+ const instructionsFile = findInstructionsFile(targetDir);
44463
+ if (instructionsFile) {
44464
+ addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/${instructionsFile}`);
44290
44465
  }
44291
44466
  }
44292
44467
  finally {
44293
- fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(tmpZip, { force: true });
44294
- fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(tmpExtract, { recursive: true, force: true });
44468
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(tmpZip, { force: true });
44469
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(tmpExtract, { recursive: true, force: true });
44295
44470
  }
44296
44471
  }
44297
44472
  function uninstallSkill(name) {
44298
- const targetDir = path__WEBPACK_IMPORTED_MODULE_1___default().join(getSkillsDir(), name);
44299
- if (fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(targetDir)) {
44300
- fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
44473
+ removeInstructionsUnder(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${name}/`);
44474
+ const targetDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), name);
44475
+ if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(targetDir)) {
44476
+ node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
44301
44477
  }
44302
44478
  }
44303
44479
 
@@ -64067,7 +64243,7 @@ let currentUpdatePriority = react_reconciler_constants_js__WEBPACK_IMPORTED_MODU
64067
64243
  let currentRootNode;
64068
64244
  async function loadPackageJson() {
64069
64245
  const fs = await Promise.resolve(/* import() */).then(__nccwpck_require__.t.bind(__nccwpck_require__, 3024, 19));
64070
- const content = fs.readFileSync(__nccwpck_require__.ab + "package1.json", 'utf8');
64246
+ const content = fs.readFileSync(__nccwpck_require__.ab + "package.json", 'utf8');
64071
64247
  const parsedContent = JSON.parse(content);
64072
64248
  return {
64073
64249
  name: parsedContent?.name,