@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.
- package/dist/commands/__tests__/nix.test.d.ts +2 -0
- package/dist/commands/__tests__/nix.test.d.ts.map +1 -0
- package/dist/commands/docker.d.ts.map +1 -1
- package/dist/commands/nix.d.ts +1 -0
- package/dist/commands/nix.d.ts.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/components/ConfigModal.d.ts +1 -1
- package/dist/components/ConfigModal.d.ts.map +1 -1
- package/dist/components/TerminalUI.d.ts.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.js +604 -428
- package/dist/package.json +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/__tests__/dockerArgs.test.d.ts +2 -0
- package/dist/utils/__tests__/dockerArgs.test.d.ts.map +1 -0
- package/dist/utils/__tests__/githubToken.test.d.ts +2 -0
- package/dist/utils/__tests__/githubToken.test.d.ts.map +1 -0
- package/dist/utils/__tests__/messageUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/messageUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/skills.test.d.ts +2 -0
- package/dist/utils/__tests__/skills.test.d.ts.map +1 -0
- package/dist/utils/__tests__/slashCommands.test.d.ts +2 -0
- package/dist/utils/__tests__/slashCommands.test.d.ts.map +1 -0
- package/dist/utils/dockerArgs.d.ts +3 -0
- package/dist/utils/dockerArgs.d.ts.map +1 -0
- package/dist/utils/githubToken.d.ts +2 -0
- package/dist/utils/githubToken.d.ts.map +1 -0
- package/dist/utils/messageUtils.d.ts +4 -0
- package/dist/utils/messageUtils.d.ts.map +1 -0
- package/dist/utils/skills.d.ts +2 -0
- package/dist/utils/skills.d.ts.map +1 -1
- package/dist/utils/slashCommands.d.ts.map +1 -1
- package/docker/Dockerfile +6 -13
- package/docker/nix/nix-scripts/02-env-vars.sh +0 -1
- package/docker/nix/nix-scripts/03-directories.sh +2 -1
- package/docker/nix/nix-scripts/06-skills-setup.sh +14 -20
- package/docker/nix/nix-scripts/setup.sh +7 -0
- package/package.json +8 -3
- 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
|
|
42973
|
-
/* harmony import */ var
|
|
42974
|
-
/* harmony import */ var
|
|
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
|
|
42977
|
-
/* harmony import */ var
|
|
42978
|
-
/* harmony import */ var
|
|
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
|
|
42984
|
-
/* harmony import */ var
|
|
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__([
|
|
42987
|
-
([
|
|
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 =
|
|
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 =
|
|
43002
|
+
const rootPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().parse(currentDir).root;
|
|
43003
43003
|
while (currentDir !== rootPath) {
|
|
43004
|
-
const dockerPath =
|
|
43005
|
-
if (
|
|
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 =
|
|
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 (
|
|
43026
|
-
|
|
43027
|
-
|
|
43028
|
-
|
|
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,
|
|
43032
|
-
(0,
|
|
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 (
|
|
43039
|
-
|
|
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,
|
|
43046
|
-
const [selectedIndex, setSelectedIndex] = (0,
|
|
43047
|
-
const [isProcessing, setIsProcessing] = (0,
|
|
43048
|
-
const [processStep, setProcessStep] = (0,
|
|
43049
|
-
const [processComplete, setProcessComplete] = (0,
|
|
43050
|
-
const [processError, setProcessError] = (0,
|
|
43051
|
-
const [currentMenu, setCurrentMenu] = (0,
|
|
43052
|
-
(0,
|
|
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,
|
|
43128
|
-
await (0,
|
|
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 =
|
|
43143
|
-
if (!
|
|
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 (
|
|
43161
|
-
|
|
43162
|
-
|
|
43163
|
-
|
|
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
|
-
|
|
43167
|
-
|
|
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 (
|
|
43172
|
-
|
|
43173
|
-
|
|
43174
|
-
|
|
43175
|
-
|
|
43176
|
-
|
|
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
|
-
|
|
43180
|
-
|
|
43181
|
-
|
|
43182
|
-
|
|
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 (
|
|
43187
|
-
|
|
43188
|
-
|
|
43189
|
-
|
|
43190
|
-
|
|
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 (
|
|
43198
|
-
|
|
43199
|
-
|
|
43200
|
-
|
|
43201
|
-
|
|
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 (
|
|
43204
|
-
|
|
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
|
-
|
|
43211
|
-
|
|
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,
|
|
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 =
|
|
43268
|
-
if (!
|
|
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 ${
|
|
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
|
-
`${
|
|
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
|
|
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 =
|
|
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 =
|
|
43378
|
+
const rootPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().parse(currentDir).root;
|
|
43373
43379
|
while (currentDir !== rootPath) {
|
|
43374
|
-
const dockerPath =
|
|
43375
|
-
if (
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
43432
|
-
const 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 (!
|
|
43436
|
-
|
|
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 =
|
|
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 =
|
|
43443
|
-
const dest =
|
|
43444
|
-
if (
|
|
43445
|
-
|
|
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 =
|
|
43451
|
-
const configDest =
|
|
43452
|
-
if (!
|
|
43453
|
-
|
|
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 =
|
|
43464
|
+
const configFiles = node_fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(configSrc);
|
|
43456
43465
|
for (const file of configFiles) {
|
|
43457
|
-
|
|
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 =
|
|
43472
|
-
const localConfigDir =
|
|
43473
|
-
const shellNixPath =
|
|
43474
|
-
if (!
|
|
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
|
|
43537
|
-
/* harmony import */ var
|
|
43538
|
-
/* harmony import */ var
|
|
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__([
|
|
43542
|
-
|
|
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,
|
|
43549
|
-
const [selectedIndex, setSelectedIndex] = (0,
|
|
43550
|
-
const [rows, setRows] = (0,
|
|
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
|
-
|
|
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
|
|
43567
|
-
|
|
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 (
|
|
43623
|
+
if (input === "q" || key.escape) {
|
|
43591
43624
|
exit();
|
|
43592
43625
|
}
|
|
43593
43626
|
});
|
|
43594
|
-
return (
|
|
43595
|
-
|
|
43596
|
-
|
|
43597
|
-
|
|
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
|
-
|
|
43602
|
-
|
|
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
|
-
|
|
43611
|
-
row.message ?
|
|
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
|
-
|
|
43616
|
-
|
|
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,
|
|
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
|
|
43635
|
-
/* harmony import */ var
|
|
43636
|
-
/* harmony import */ var
|
|
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
|
|
43639
|
-
/* harmony import */ var
|
|
43640
|
-
/* harmony import */ var
|
|
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__([
|
|
43646
|
-
|
|
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 =
|
|
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 =
|
|
43687
|
+
const rootPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().parse(currentDir).root;
|
|
43658
43688
|
while (currentDir !== rootPath) {
|
|
43659
|
-
const dockerPath =
|
|
43660
|
-
if (
|
|
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 =
|
|
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,
|
|
43675
|
-
const [isProcessing, setIsProcessing] = (0,
|
|
43676
|
-
const [processStep, setProcessStep] = (0,
|
|
43677
|
-
(0,
|
|
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) =>
|
|
43712
|
+
setSelectedIndex((prev) => prev > 0 ? prev - 1 : configOptions.length - 1);
|
|
43683
43713
|
}
|
|
43684
43714
|
else if (key.downArrow) {
|
|
43685
|
-
setSelectedIndex((prev) =>
|
|
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], {
|
|
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 =
|
|
43729
|
-
if (!
|
|
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 (
|
|
43746
|
-
|
|
43747
|
-
|
|
43748
|
-
|
|
43749
|
-
}
|
|
43750
|
-
return (
|
|
43751
|
-
|
|
43752
|
-
|
|
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 (
|
|
43755
|
-
|
|
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
|
-
|
|
43762
|
-
|
|
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
|
|
43779
|
-
/* harmony import */ var
|
|
43780
|
-
/* harmony import */ var
|
|
43781
|
-
/* harmony import */ var
|
|
43782
|
-
/* harmony import */ var
|
|
43783
|
-
/* harmony import */ var
|
|
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
|
|
43787
|
-
/* harmony import */ var
|
|
43788
|
-
var
|
|
43789
|
-
|
|
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 (
|
|
43801
|
-
|
|
43802
|
-
|
|
43803
|
-
|
|
43804
|
-
|
|
43805
|
-
|
|
43806
|
-
|
|
43807
|
-
|
|
43808
|
-
|
|
43809
|
-
|
|
43810
|
-
|
|
43811
|
-
|
|
43812
|
-
|
|
43813
|
-
}
|
|
43814
|
-
|
|
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 (
|
|
43844
|
-
|
|
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,
|
|
43909
|
-
const [input, setInput] = (0,
|
|
43910
|
-
const [messages, setMessages] = (0,
|
|
43911
|
-
const [showConfigModal, setShowConfigModal] = (0,
|
|
43912
|
-
const [nextMessageId, setNextMessageId] = (0,
|
|
43913
|
-
const addMessage = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
43961
|
+
const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {
|
|
44008
43962
|
setShowConfigModal(false);
|
|
44009
43963
|
}, []);
|
|
44010
|
-
const handleConfigModalMessage = (0,
|
|
43964
|
+
const handleConfigModalMessage = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((text, type) => {
|
|
44011
43965
|
addMessage(text, type || "system");
|
|
44012
43966
|
}, [addMessage]);
|
|
44013
|
-
(0,
|
|
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 (
|
|
44025
|
-
|
|
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 (
|
|
44030
|
-
shouldShowWelcome ? (
|
|
44031
|
-
|
|
44032
|
-
|
|
44033
|
-
|
|
44034
|
-
|
|
44035
|
-
|
|
44036
|
-
|
|
44037
|
-
|
|
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,
|
|
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: "/
|
|
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
|
|
44108
|
-
/* harmony import */ var
|
|
44109
|
-
/* harmony import */ var
|
|
44110
|
-
/* harmony import */ var
|
|
44111
|
-
/* harmony import */ var
|
|
44112
|
-
/* harmony import */ var
|
|
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
|
|
44119
|
-
/* harmony import */ var
|
|
44120
|
-
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__,
|
|
44121
|
-
([_commands_docker_js__WEBPACK_IMPORTED_MODULE_4__,
|
|
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,
|
|
44134
|
-
const __dirname = (0,
|
|
44135
|
-
const pkg = JSON.parse((0,
|
|
44136
|
-
const PROGRAM_NAME =
|
|
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 =
|
|
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(
|
|
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
|
|
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(
|
|
44169
|
-
.option(
|
|
44170
|
-
.option(
|
|
44171
|
-
.option(
|
|
44172
|
-
.option(
|
|
44173
|
-
.option(
|
|
44174
|
-
.option(
|
|
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,
|
|
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(
|
|
44202
|
-
.description(
|
|
44203
|
-
.option(
|
|
44204
|
-
.option(
|
|
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(
|
|
44211
|
-
.description(
|
|
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(
|
|
44218
|
-
.description(
|
|
44209
|
+
.command("skills")
|
|
44210
|
+
.description("Manage skills (~/.sith/skills/)")
|
|
44219
44211
|
.action(() => {
|
|
44220
|
-
(0,
|
|
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(
|
|
44225
|
-
.description(
|
|
44226
|
-
.option(
|
|
44227
|
-
.option(
|
|
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
|
|
44252
|
-
/* harmony import */ var
|
|
44253
|
-
/* harmony import */ var
|
|
44254
|
-
/* harmony import */ var
|
|
44255
|
-
/* harmony import */ var
|
|
44256
|
-
/* harmony import */ var
|
|
44257
|
-
/* harmony import */ var
|
|
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 =
|
|
44264
|
-
|
|
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
|
-
|
|
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 =
|
|
44273
|
-
|
|
44274
|
-
|
|
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,
|
|
44277
|
-
|
|
44278
|
-
await (0,
|
|
44279
|
-
const entries =
|
|
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 =
|
|
44283
|
-
if (
|
|
44284
|
-
|
|
44285
|
-
|
|
44286
|
-
|
|
44287
|
-
|
|
44288
|
-
|
|
44289
|
-
|
|
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
|
-
|
|
44294
|
-
|
|
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
|
-
|
|
44299
|
-
|
|
44300
|
-
|
|
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 + "
|
|
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,
|