@m14i/sith 1.17.1 → 1.18.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/components/TerminalUI.d.ts.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.js +220 -68
- package/dist/utils/dockerArgs.d.ts +1 -0
- package/dist/utils/dockerArgs.d.ts.map +1 -1
- package/dist/utils/skills.d.ts +2 -0
- package/dist/utils/skills.d.ts.map +1 -1
- package/dist/utils/slashCommands.d.ts +1 -1
- package/dist/utils/slashCommands.d.ts.map +1 -1
- package/docker/Dockerfile +13 -2
- package/docker/nix/shell.nix +2 -0
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalUI.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/components/TerminalUI.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TerminalUI.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/components/TerminalUI.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAiIrD,wBAAgB,UAAU,IAAI,KAAK,CAAC,YAAY,CA2Q/C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export declare const DOCKER_CONFIG: {
|
|
|
9
9
|
readonly skillsMount: "/root/.opencode/skills";
|
|
10
10
|
readonly opencodeConfigMount: "/root/.config/opencode/opencode.json";
|
|
11
11
|
readonly shellEntrypoint: "/opt/sith/nix/shell.nix";
|
|
12
|
+
readonly claudeConfigMount: "/root/.claude";
|
|
13
|
+
readonly claudeSkillsMount: "/root/.claude/skills";
|
|
12
14
|
};
|
|
13
15
|
export declare const NIX_CONFIG: {
|
|
14
16
|
readonly shellPath: "docker/nix/shell.nix";
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAO,MAAM,cAAc,EAAE,UAAU,EA6CtC,CAAC;AAGF,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAO,MAAM,cAAc,EAAE,UAAU,EA6CtC,CAAC;AAGF,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AAGX,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAGX,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAGX,eAAO,MAAM,UAAU,mOAOb,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43326,18 +43326,10 @@ async function runShell() {
|
|
|
43326
43326
|
_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
43327
43327
|
_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
43328
43328
|
];
|
|
43329
|
-
|
|
43330
|
-
|
|
43331
|
-
|
|
43332
|
-
|
|
43333
|
-
}
|
|
43334
|
-
catch (error) {
|
|
43335
|
-
console.error("❌ Failed to start shell");
|
|
43336
|
-
if (error instanceof Error) {
|
|
43337
|
-
console.error(error.message);
|
|
43338
|
-
}
|
|
43339
|
-
process.exit(1);
|
|
43340
|
-
}
|
|
43329
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, {
|
|
43330
|
+
stdio: "inherit",
|
|
43331
|
+
reject: false,
|
|
43332
|
+
});
|
|
43341
43333
|
}
|
|
43342
43334
|
|
|
43343
43335
|
__webpack_async_result__();
|
|
@@ -43832,22 +43824,51 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink_
|
|
|
43832
43824
|
|
|
43833
43825
|
|
|
43834
43826
|
|
|
43835
|
-
|
|
43827
|
+
const TOOLS = [
|
|
43828
|
+
{ value: "opencode", label: "OpenCode", description: "github-copilot/claude-sonnet-4.6" },
|
|
43829
|
+
{ value: "claude", label: "Claude Code", description: "Anthropic Claude" },
|
|
43830
|
+
];
|
|
43831
|
+
function ToolPicker({ selectedIndex }) {
|
|
43832
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center", paddingY: 2 },
|
|
43833
|
+
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) => (
|
|
43834
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
|
|
43835
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
|
|
43836
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center", marginTop: 1, marginBottom: 2 },
|
|
43837
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "Turn your context to the dark side")),
|
|
43838
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 4, paddingY: 1 },
|
|
43839
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginBottom: 1 },
|
|
43840
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "Select AI Tool")),
|
|
43841
|
+
TOOLS.map((tool, index) => (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { key: tool.value },
|
|
43842
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: index === selectedIndex ? "cyan" : undefined, bold: index === selectedIndex },
|
|
43843
|
+
index === selectedIndex ? "▶ " : " ",
|
|
43844
|
+
tool.label),
|
|
43845
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true },
|
|
43846
|
+
" ",
|
|
43847
|
+
tool.description)))),
|
|
43848
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 1 },
|
|
43849
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate \u21B5 select")))));
|
|
43850
|
+
}
|
|
43851
|
+
function WelcomeScreen({ tool }) {
|
|
43852
|
+
const toolLabel = TOOLS.find((t) => t.value === tool)?.label ?? tool;
|
|
43836
43853
|
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center", paddingY: 2 },
|
|
43837
43854
|
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
43855
|
// biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
|
|
43839
43856
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
|
|
43840
43857
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center", marginTop: 1 },
|
|
43841
43858
|
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, {
|
|
43859
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan" },
|
|
43860
|
+
"Tool: ",
|
|
43861
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { bold: true }, toolLabel))),
|
|
43843
43862
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 2, flexDirection: "column", alignItems: "center" },
|
|
43844
43863
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan" }, "Type your prompt to start coding"),
|
|
43845
43864
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "or use slash commands:")),
|
|
43846
43865
|
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 }, " /
|
|
43848
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /
|
|
43849
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /
|
|
43850
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /
|
|
43866
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /opencode - Switch to OpenCode"),
|
|
43867
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /claude - Switch to Claude Code"),
|
|
43868
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /shell - Start Docker shell"),
|
|
43869
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /skills - Install/uninstall skills"),
|
|
43870
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /config - Configuration"),
|
|
43871
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /help - Show help"))));
|
|
43851
43872
|
}
|
|
43852
43873
|
function MessageItem({ message }) {
|
|
43853
43874
|
const color = (0,_utils_messageUtils_js__WEBPACK_IMPORTED_MODULE_7__/* .getMessageColor */ .l)(message.type);
|
|
@@ -43863,6 +43884,8 @@ function TerminalUI() {
|
|
|
43863
43884
|
const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)([]);
|
|
43864
43885
|
const [showConfigModal, setShowConfigModal] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);
|
|
43865
43886
|
const [nextMessageId, setNextMessageId] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(1);
|
|
43887
|
+
const [selectedTool, setSelectedTool] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);
|
|
43888
|
+
const [toolPickerIndex, setToolPickerIndex] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(0);
|
|
43866
43889
|
const addMessage = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((text, type = "system") => {
|
|
43867
43890
|
const newMessage = {
|
|
43868
43891
|
id: nextMessageId,
|
|
@@ -43880,35 +43903,49 @@ function TerminalUI() {
|
|
|
43880
43903
|
console.log('Press Ctrl+D or type "exit" to leave');
|
|
43881
43904
|
console.log();
|
|
43882
43905
|
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 */ .
|
|
43906
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerShellCommand */ .ac)(githubToken);
|
|
43907
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit", reject: false });
|
|
43908
|
+
console.log();
|
|
43909
|
+
console.log("✅ Exited shell");
|
|
43910
|
+
}, [exit]);
|
|
43911
|
+
const handleOpenCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
|
|
43912
|
+
exit();
|
|
43913
|
+
console.log("🚀 Starting OpenCode...");
|
|
43914
|
+
console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
43915
|
+
if (prompt) {
|
|
43916
|
+
console.log(`Prompt: ${prompt}`);
|
|
43917
|
+
}
|
|
43918
|
+
console.log();
|
|
43919
|
+
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43920
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerOpencodeCommand */ .Xs)(githubToken, prompt);
|
|
43884
43921
|
try {
|
|
43885
43922
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43886
43923
|
console.log();
|
|
43887
|
-
console.log("✅ Exited
|
|
43924
|
+
console.log("✅ Exited OpenCode");
|
|
43888
43925
|
}
|
|
43889
43926
|
catch (error) {
|
|
43890
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to start
|
|
43927
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to start OpenCode";
|
|
43891
43928
|
console.error(`❌ ${errorMessage}`);
|
|
43892
43929
|
process.exit(1);
|
|
43893
43930
|
}
|
|
43894
43931
|
}, [exit]);
|
|
43895
|
-
const
|
|
43932
|
+
const handleClaudeCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
|
|
43896
43933
|
exit();
|
|
43897
|
-
console.log("
|
|
43934
|
+
console.log("🤖 Starting Claude Code...");
|
|
43898
43935
|
console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
43899
43936
|
if (prompt) {
|
|
43900
43937
|
console.log(`Prompt: ${prompt}`);
|
|
43901
43938
|
}
|
|
43902
43939
|
console.log();
|
|
43903
43940
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43904
|
-
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .
|
|
43941
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerClaudeCodeCommand */ .fn)(githubToken, prompt);
|
|
43905
43942
|
try {
|
|
43906
43943
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43907
43944
|
console.log();
|
|
43908
|
-
console.log("✅ Exited
|
|
43945
|
+
console.log("✅ Exited Claude Code");
|
|
43909
43946
|
}
|
|
43910
43947
|
catch (error) {
|
|
43911
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to start
|
|
43948
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to start Claude Code";
|
|
43912
43949
|
console.error(`❌ ${errorMessage}`);
|
|
43913
43950
|
process.exit(1);
|
|
43914
43951
|
}
|
|
@@ -43937,6 +43974,14 @@ function TerminalUI() {
|
|
|
43937
43974
|
}
|
|
43938
43975
|
break;
|
|
43939
43976
|
}
|
|
43977
|
+
case "opencode":
|
|
43978
|
+
setSelectedTool("opencode");
|
|
43979
|
+
addMessage("Switched to OpenCode", "success");
|
|
43980
|
+
break;
|
|
43981
|
+
case "claude":
|
|
43982
|
+
setSelectedTool("claude");
|
|
43983
|
+
addMessage("Switched to Claude Code", "success");
|
|
43984
|
+
break;
|
|
43940
43985
|
}
|
|
43941
43986
|
}, [addMessage, handleDockerShell, exit]);
|
|
43942
43987
|
const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (value) => {
|
|
@@ -43954,10 +43999,15 @@ function TerminalUI() {
|
|
|
43954
43999
|
addMessage(`Unknown command: ${trimmedValue}. Type /help for available commands.`, "error");
|
|
43955
44000
|
}
|
|
43956
44001
|
else {
|
|
43957
|
-
// Regular text input -
|
|
43958
|
-
|
|
44002
|
+
// Regular text input - route to selected tool
|
|
44003
|
+
if (selectedTool === "claude") {
|
|
44004
|
+
await handleClaudeCode(trimmedValue);
|
|
44005
|
+
}
|
|
44006
|
+
else {
|
|
44007
|
+
await handleOpenCode(trimmedValue);
|
|
44008
|
+
}
|
|
43959
44009
|
}
|
|
43960
|
-
}, [addMessage, handleOpenCode, handleSlashCommand]);
|
|
44010
|
+
}, [addMessage, handleOpenCode, handleClaudeCode, handleSlashCommand, selectedTool]);
|
|
43961
44011
|
const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {
|
|
43962
44012
|
setShowConfigModal(false);
|
|
43963
44013
|
}, []);
|
|
@@ -43966,22 +44016,35 @@ function TerminalUI() {
|
|
|
43966
44016
|
}, [addMessage]);
|
|
43967
44017
|
(0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useInput */ .Ge)((input, key) => {
|
|
43968
44018
|
if (showConfigModal) {
|
|
43969
|
-
// Let modal handle input
|
|
43970
44019
|
return;
|
|
43971
44020
|
}
|
|
43972
44021
|
const shouldExit = key.escape || (key.ctrl && input === "c");
|
|
43973
44022
|
if (shouldExit) {
|
|
43974
44023
|
exit();
|
|
43975
44024
|
}
|
|
44025
|
+
if (selectedTool === null) {
|
|
44026
|
+
if (key.upArrow) {
|
|
44027
|
+
setToolPickerIndex((i) => (i - 1 + TOOLS.length) % TOOLS.length);
|
|
44028
|
+
}
|
|
44029
|
+
else if (key.downArrow) {
|
|
44030
|
+
setToolPickerIndex((i) => (i + 1) % TOOLS.length);
|
|
44031
|
+
}
|
|
44032
|
+
else if (key.return) {
|
|
44033
|
+
setSelectedTool(TOOLS[toolPickerIndex].value);
|
|
44034
|
+
}
|
|
44035
|
+
}
|
|
43976
44036
|
});
|
|
43977
44037
|
if (showConfigModal) {
|
|
43978
44038
|
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
43979
44039
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__/* .ConfigModal */ .y, { onClose: handleConfigModalClose, onMessage: handleConfigModalMessage })));
|
|
43980
44040
|
}
|
|
44041
|
+
if (selectedTool === null) {
|
|
44042
|
+
return react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ToolPicker, { selectedIndex: toolPickerIndex });
|
|
44043
|
+
}
|
|
43981
44044
|
const shouldShowWelcome = messages.length === 0;
|
|
43982
44045
|
const recentMessages = messages.slice(-10);
|
|
43983
44046
|
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,
|
|
44047
|
+
shouldShowWelcome ? (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(WelcomeScreen, { tool: selectedTool })) : (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
44048
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
43986
44049
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { borderStyle: "single", borderColor: "gray", paddingX: 1 },
|
|
43987
44050
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "\u203A"),
|
|
@@ -44066,6 +44129,8 @@ const DOCKER_CONFIG = {
|
|
|
44066
44129
|
skillsMount: "/root/.opencode/skills",
|
|
44067
44130
|
opencodeConfigMount: "/root/.config/opencode/opencode.json",
|
|
44068
44131
|
shellEntrypoint: "/opt/sith/nix/shell.nix",
|
|
44132
|
+
claudeConfigMount: "/root/.claude",
|
|
44133
|
+
claudeSkillsMount: "/root/.claude/skills",
|
|
44069
44134
|
};
|
|
44070
44135
|
// Nix configuration
|
|
44071
44136
|
const NIX_CONFIG = {
|
|
@@ -44103,15 +44168,22 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
|
|
|
44103
44168
|
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
|
|
44104
44169
|
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
|
|
44105
44170
|
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
|
|
44106
|
-
/* harmony import */ var
|
|
44171
|
+
/* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(9611);
|
|
44107
44172
|
/* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(2202);
|
|
44108
|
-
/* harmony import */ var
|
|
44109
|
-
/* harmony import */ var
|
|
44110
|
-
/* harmony import */ var
|
|
44111
|
-
/* harmony import */ var
|
|
44112
|
-
/* harmony import */ var
|
|
44113
|
-
var
|
|
44114
|
-
|
|
44173
|
+
/* harmony import */ var update_notifier__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(6213);
|
|
44174
|
+
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(1421);
|
|
44175
|
+
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nccwpck_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_4__);
|
|
44176
|
+
/* harmony import */ var _commands_docker_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(5515);
|
|
44177
|
+
/* harmony import */ var _commands_nix_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9922);
|
|
44178
|
+
/* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(9805);
|
|
44179
|
+
/* harmony import */ var _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(3535);
|
|
44180
|
+
/* harmony import */ var _utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(1460);
|
|
44181
|
+
/* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(4495);
|
|
44182
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__]);
|
|
44183
|
+
([_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__, _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__, _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
44184
|
+
|
|
44185
|
+
|
|
44186
|
+
|
|
44115
44187
|
|
|
44116
44188
|
|
|
44117
44189
|
|
|
@@ -44130,12 +44202,12 @@ const PROGRAM_NAME = "sith";
|
|
|
44130
44202
|
const PROGRAM_VERSION = pkg.version;
|
|
44131
44203
|
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.";
|
|
44132
44204
|
// Check for updates (automatic background check)
|
|
44133
|
-
const notifier = (0,
|
|
44205
|
+
const notifier = (0,update_notifier__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A)({ pkg });
|
|
44134
44206
|
notifier.notify();
|
|
44135
44207
|
async function checkForUpdates() {
|
|
44136
|
-
console.log(
|
|
44208
|
+
console.log(chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.cyan("Checking for updates..."));
|
|
44137
44209
|
// Force update check by setting updateCheckInterval to 0
|
|
44138
|
-
const notifier = (0,
|
|
44210
|
+
const notifier = (0,update_notifier__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A)({
|
|
44139
44211
|
pkg,
|
|
44140
44212
|
updateCheckInterval: 0,
|
|
44141
44213
|
});
|
|
@@ -44144,12 +44216,12 @@ async function checkForUpdates() {
|
|
|
44144
44216
|
const update = notifier.update;
|
|
44145
44217
|
if (update && update.latest !== pkg.version) {
|
|
44146
44218
|
console.log();
|
|
44147
|
-
console.log(
|
|
44148
|
-
console.log(
|
|
44219
|
+
console.log(chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.green(`Update available: ${chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.dim(pkg.version)} → ${chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.bold(update.latest)}`));
|
|
44220
|
+
console.log(chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.cyan(`Run ${chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.bold(`npm install -g ${pkg.name}`)} to update`));
|
|
44149
44221
|
console.log();
|
|
44150
44222
|
}
|
|
44151
44223
|
else {
|
|
44152
|
-
console.log(
|
|
44224
|
+
console.log(chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.green(`✓ You're on the latest version (${pkg.version})`));
|
|
44153
44225
|
}
|
|
44154
44226
|
}
|
|
44155
44227
|
function createProgram() {
|
|
@@ -44171,21 +44243,21 @@ function createProgram() {
|
|
|
44171
44243
|
await checkForUpdates();
|
|
44172
44244
|
}
|
|
44173
44245
|
else if (options.nix) {
|
|
44174
|
-
await (0,
|
|
44246
|
+
await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .runNixShell */ .nb)();
|
|
44175
44247
|
}
|
|
44176
44248
|
else if (options.nixInstall) {
|
|
44177
|
-
await (0,
|
|
44249
|
+
await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .nixCommand */ .Dv)({ install: true });
|
|
44178
44250
|
}
|
|
44179
44251
|
else if (options.it) {
|
|
44180
|
-
await (0,
|
|
44252
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .runShellDirect */ .l)();
|
|
44181
44253
|
}
|
|
44182
44254
|
else if (options.legacy || options.pull || options.build) {
|
|
44183
44255
|
// Use legacy menu for explicit pull/build or --legacy flag
|
|
44184
|
-
await (0,
|
|
44256
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCommand */ .Q)(options);
|
|
44185
44257
|
}
|
|
44186
44258
|
else {
|
|
44187
44259
|
// Default: show new terminal UI
|
|
44188
|
-
(0,
|
|
44260
|
+
(0,_components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__/* .renderTerminalUI */ .t)();
|
|
44189
44261
|
}
|
|
44190
44262
|
});
|
|
44191
44263
|
// Docker command - explicit Docker management
|
|
@@ -44195,21 +44267,21 @@ function createProgram() {
|
|
|
44195
44267
|
.option("--pull", "Pull prebuilt Docker image (recommended)")
|
|
44196
44268
|
.option("--build", "Build the Docker image from scratch")
|
|
44197
44269
|
.action(async (options) => {
|
|
44198
|
-
await (0,
|
|
44270
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCommand */ .Q)(options);
|
|
44199
44271
|
});
|
|
44200
44272
|
// Shell command - direct interactive shell (bypasses menu)
|
|
44201
44273
|
program
|
|
44202
44274
|
.command("shell")
|
|
44203
44275
|
.description("Run interactive shell in Docker container")
|
|
44204
44276
|
.action(async () => {
|
|
44205
|
-
await (0,
|
|
44277
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .runShellDirect */ .l)();
|
|
44206
44278
|
});
|
|
44207
44279
|
// Skills command - install/uninstall skills from catalog
|
|
44208
44280
|
program
|
|
44209
44281
|
.command("skills")
|
|
44210
44282
|
.description("Manage skills (~/.sith/skills/)")
|
|
44211
44283
|
.action(() => {
|
|
44212
|
-
(0,
|
|
44284
|
+
(0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .skillsCommand */ .a)();
|
|
44213
44285
|
});
|
|
44214
44286
|
// Nix command - native Nix environment
|
|
44215
44287
|
program
|
|
@@ -44218,7 +44290,27 @@ function createProgram() {
|
|
|
44218
44290
|
.option("--install", "Install Nix package manager")
|
|
44219
44291
|
.option("--shell", "Run Nix shell")
|
|
44220
44292
|
.action(async (options) => {
|
|
44221
|
-
await (0,
|
|
44293
|
+
await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .nixCommand */ .Dv)(options);
|
|
44294
|
+
});
|
|
44295
|
+
// OpenCode command - launch OpenCode in Docker
|
|
44296
|
+
program
|
|
44297
|
+
.command("opencode")
|
|
44298
|
+
.description("Launch OpenCode in Docker")
|
|
44299
|
+
.option("-p, --prompt <prompt>", "Prompt to pass to OpenCode")
|
|
44300
|
+
.action(async (options) => {
|
|
44301
|
+
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44302
|
+
const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerOpencodeCommand */ .Xs)(token, options.prompt);
|
|
44303
|
+
(0,node_child_process__WEBPACK_IMPORTED_MODULE_4__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44304
|
+
});
|
|
44305
|
+
// Claude command - launch Claude Code in Docker
|
|
44306
|
+
program
|
|
44307
|
+
.command("claude")
|
|
44308
|
+
.description("Launch Claude Code in Docker")
|
|
44309
|
+
.option("-p, --prompt <prompt>", "Prompt to pass to Claude Code")
|
|
44310
|
+
.action(async (options) => {
|
|
44311
|
+
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44312
|
+
const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerClaudeCodeCommand */ .fn)(token, options.prompt);
|
|
44313
|
+
(0,node_child_process__WEBPACK_IMPORTED_MODULE_4__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44222
44314
|
});
|
|
44223
44315
|
return program;
|
|
44224
44316
|
}
|
|
@@ -44235,11 +44327,15 @@ __webpack_async_result__();
|
|
|
44235
44327
|
/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
|
|
44236
44328
|
|
|
44237
44329
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
44238
|
-
/* harmony export */
|
|
44239
|
-
/* harmony export */
|
|
44330
|
+
/* harmony export */ Xs: () => (/* binding */ buildDockerOpencodeCommand),
|
|
44331
|
+
/* harmony export */ ac: () => (/* binding */ buildDockerShellCommand),
|
|
44332
|
+
/* harmony export */ fn: () => (/* binding */ buildDockerClaudeCodeCommand)
|
|
44240
44333
|
/* harmony export */ });
|
|
44241
|
-
/* harmony import */ var
|
|
44242
|
-
/* harmony import */ var
|
|
44334
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
|
|
44335
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
|
|
44336
|
+
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6878);
|
|
44337
|
+
/* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6400);
|
|
44338
|
+
|
|
44243
44339
|
|
|
44244
44340
|
|
|
44245
44341
|
function buildDockerShellCommand(githubToken) {
|
|
@@ -44248,17 +44344,17 @@ function buildDockerShellCommand(githubToken) {
|
|
|
44248
44344
|
"--rm",
|
|
44249
44345
|
"-it",
|
|
44250
44346
|
"-v",
|
|
44251
|
-
`${process.cwd()}:${
|
|
44347
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44252
44348
|
"-v",
|
|
44253
|
-
`${(0,
|
|
44349
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
44254
44350
|
"-v",
|
|
44255
|
-
`${(0,
|
|
44351
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44256
44352
|
"-e",
|
|
44257
44353
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44258
44354
|
"--entrypoint",
|
|
44259
44355
|
"nix-shell",
|
|
44260
|
-
|
|
44261
|
-
|
|
44356
|
+
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44357
|
+
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
44262
44358
|
];
|
|
44263
44359
|
}
|
|
44264
44360
|
function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
@@ -44267,16 +44363,16 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44267
44363
|
"--rm",
|
|
44268
44364
|
"-it",
|
|
44269
44365
|
"-v",
|
|
44270
|
-
`${process.cwd()}:${
|
|
44366
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44271
44367
|
"-v",
|
|
44272
|
-
`${(0,
|
|
44368
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
44273
44369
|
"-v",
|
|
44274
|
-
`${(0,
|
|
44370
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44275
44371
|
"-e",
|
|
44276
44372
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44277
44373
|
"--entrypoint",
|
|
44278
44374
|
"bash",
|
|
44279
|
-
|
|
44375
|
+
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44280
44376
|
"-c",
|
|
44281
44377
|
];
|
|
44282
44378
|
let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
|
|
@@ -44287,6 +44383,35 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44287
44383
|
args.push(opencodeCommand);
|
|
44288
44384
|
return args;
|
|
44289
44385
|
}
|
|
44386
|
+
function buildDockerClaudeCodeCommand(githubToken, prompt) {
|
|
44387
|
+
const claudeConfigDir = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeConfigDir */ .K1)();
|
|
44388
|
+
const claudeMdPath = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeMdPath */ .pF)();
|
|
44389
|
+
const args = [
|
|
44390
|
+
"run",
|
|
44391
|
+
"--rm",
|
|
44392
|
+
"-it",
|
|
44393
|
+
"-v",
|
|
44394
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44395
|
+
"-e",
|
|
44396
|
+
`GITHUB_TOKEN=${githubToken}`,
|
|
44397
|
+
];
|
|
44398
|
+
// Mount ~/.claude first so subsequent mounts can shadow entries within it
|
|
44399
|
+
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(claudeConfigDir)) {
|
|
44400
|
+
args.push("-v", `${claudeConfigDir}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}`);
|
|
44401
|
+
}
|
|
44402
|
+
// Skills dir overrides /root/.claude/skills inside the container
|
|
44403
|
+
args.push("-v", `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`);
|
|
44404
|
+
// Generated CLAUDE.md (with skill @imports) overrides any CLAUDE.md from ~/.claude
|
|
44405
|
+
args.push("-v", `${claudeMdPath}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}/CLAUDE.md`);
|
|
44406
|
+
args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
|
|
44407
|
+
let claudeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && /root/.npm-global/bin/claude";
|
|
44408
|
+
if (prompt) {
|
|
44409
|
+
const escapedPrompt = prompt.replace(/'/g, "'\\''");
|
|
44410
|
+
claudeCommand += ` -p '${escapedPrompt}'`;
|
|
44411
|
+
}
|
|
44412
|
+
args.push(claudeCommand);
|
|
44413
|
+
return args;
|
|
44414
|
+
}
|
|
44290
44415
|
|
|
44291
44416
|
|
|
44292
44417
|
/***/ }),
|
|
@@ -44356,8 +44481,10 @@ function getMessagePrefix(type) {
|
|
|
44356
44481
|
|
|
44357
44482
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
44358
44483
|
/* harmony export */ Jn: () => (/* binding */ getOpenCodeConfigPath),
|
|
44484
|
+
/* harmony export */ K1: () => (/* binding */ getClaudeConfigDir),
|
|
44359
44485
|
/* harmony export */ YJ: () => (/* binding */ getSkillsDir),
|
|
44360
44486
|
/* harmony export */ j$: () => (/* binding */ isInstalled),
|
|
44487
|
+
/* harmony export */ pF: () => (/* binding */ getClaudeMdPath),
|
|
44361
44488
|
/* harmony export */ rP: () => (/* binding */ installSkill),
|
|
44362
44489
|
/* harmony export */ wW: () => (/* binding */ uninstallSkill)
|
|
44363
44490
|
/* harmony export */ });
|
|
@@ -44384,6 +44511,17 @@ function getSkillsDir() {
|
|
|
44384
44511
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(dir, { recursive: true });
|
|
44385
44512
|
return dir;
|
|
44386
44513
|
}
|
|
44514
|
+
function getClaudeConfigDir() {
|
|
44515
|
+
return node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".claude");
|
|
44516
|
+
}
|
|
44517
|
+
function getClaudeMdPath() {
|
|
44518
|
+
const claudeMdPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "CLAUDE.md");
|
|
44519
|
+
if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(claudeMdPath)) {
|
|
44520
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(claudeMdPath), { recursive: true });
|
|
44521
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(claudeMdPath, "");
|
|
44522
|
+
}
|
|
44523
|
+
return claudeMdPath;
|
|
44524
|
+
}
|
|
44387
44525
|
function getOpenCodeConfigPath() {
|
|
44388
44526
|
const configPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "opencode.json");
|
|
44389
44527
|
// Docker bind-mount creates a directory if the source doesn't exist; ensure it's a file.
|
|
@@ -44412,6 +44550,11 @@ function addInstruction(containerPath) {
|
|
|
44412
44550
|
writeConfig(config);
|
|
44413
44551
|
}
|
|
44414
44552
|
}
|
|
44553
|
+
function syncClaudeMd() {
|
|
44554
|
+
const config = readConfig();
|
|
44555
|
+
const lines = config.instructions.map((p) => `@${p.replace(_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount, _config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount)}`);
|
|
44556
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(getClaudeMdPath(), lines.join("\n") + (lines.length ? "\n" : ""));
|
|
44557
|
+
}
|
|
44415
44558
|
function removeInstructionsUnder(skillContainerDir) {
|
|
44416
44559
|
const config = readConfig();
|
|
44417
44560
|
config.instructions = config.instructions.filter((p) => !p.startsWith(skillContainerDir));
|
|
@@ -44438,6 +44581,7 @@ async function installSkill(skill) {
|
|
|
44438
44581
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "SKILL.md"), skill.builtinInstructions);
|
|
44439
44582
|
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
44583
|
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/SKILL.md`);
|
|
44584
|
+
syncClaudeMd();
|
|
44441
44585
|
return;
|
|
44442
44586
|
}
|
|
44443
44587
|
if (!skill.source)
|
|
@@ -44463,6 +44607,7 @@ async function installSkill(skill) {
|
|
|
44463
44607
|
if (instructionsFile) {
|
|
44464
44608
|
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/${instructionsFile}`);
|
|
44465
44609
|
}
|
|
44610
|
+
syncClaudeMd();
|
|
44466
44611
|
}
|
|
44467
44612
|
finally {
|
|
44468
44613
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(tmpZip, { force: true });
|
|
@@ -44475,6 +44620,7 @@ function uninstallSkill(name) {
|
|
|
44475
44620
|
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(targetDir)) {
|
|
44476
44621
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
|
|
44477
44622
|
}
|
|
44623
|
+
syncClaudeMd();
|
|
44478
44624
|
}
|
|
44479
44625
|
|
|
44480
44626
|
|
|
@@ -44502,13 +44648,19 @@ function parseSlashCommand(input) {
|
|
|
44502
44648
|
return { type: "help", raw: trimmed };
|
|
44503
44649
|
case "skills":
|
|
44504
44650
|
return { type: "skills", raw: trimmed };
|
|
44651
|
+
case "opencode":
|
|
44652
|
+
return { type: "opencode", raw: trimmed };
|
|
44653
|
+
case "claude":
|
|
44654
|
+
return { type: "claude", raw: trimmed };
|
|
44505
44655
|
default:
|
|
44506
44656
|
return null;
|
|
44507
44657
|
}
|
|
44508
44658
|
}
|
|
44509
44659
|
function getAvailableCommands() {
|
|
44510
44660
|
return [
|
|
44511
|
-
{ command: "/
|
|
44661
|
+
{ command: "/opencode", description: "Switch to OpenCode" },
|
|
44662
|
+
{ command: "/claude", description: "Switch to Claude Code" },
|
|
44663
|
+
{ command: "/shell", description: "Start Docker shell" },
|
|
44512
44664
|
{ command: "/skills", description: "Install/uninstall skills" },
|
|
44513
44665
|
{ command: "/config", description: "Open configuration menu" },
|
|
44514
44666
|
{ command: "/help", description: "Show available commands" },
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare function buildDockerShellCommand(githubToken: string): string[];
|
|
2
2
|
export declare function buildDockerOpencodeCommand(githubToken: string, prompt?: string): string[];
|
|
3
|
+
export declare function buildDockerClaudeCodeCommand(githubToken: string, prompt?: string): string[];
|
|
3
4
|
//# sourceMappingURL=dockerArgs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dockerArgs.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/dockerArgs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dockerArgs.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/dockerArgs.ts"],"names":[],"mappings":"AASA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBrE;AAED,wBAAgB,0BAA0B,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CA6BV;AAED,wBAAgB,4BAA4B,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CAuCV"}
|
package/dist/utils/skills.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { SkillEntry } from "../types.js";
|
|
2
2
|
export declare function getSkillsDir(): string;
|
|
3
|
+
export declare function getClaudeConfigDir(): string;
|
|
4
|
+
export declare function getClaudeMdPath(): string;
|
|
3
5
|
export declare function getOpenCodeConfigPath(): string;
|
|
4
6
|
export declare function findInstructionsFile(skillDir: string): string | null;
|
|
5
7
|
export declare function isInstalled(name: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/skills.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9C,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAW9C;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/skills.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9C,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAOxC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAW9C;AAwCD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYpE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDnE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/slashCommands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/slashCommands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACzB,OAAO,GACP,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,UAAU,GACV,QAAQ,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAyBpE;AAED,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC,CASD"}
|
package/docker/Dockerfile
CHANGED
|
@@ -21,13 +21,23 @@ COPY assets/ /opt/sith/assets/
|
|
|
21
21
|
# Copier les fichiers Nix (scripts, config, shell.nix)
|
|
22
22
|
COPY docker/nix/ /opt/sith/nix/
|
|
23
23
|
|
|
24
|
-
# Configurer npm, pré-charger Nix
|
|
25
|
-
RUN
|
|
24
|
+
# Configurer npm, pré-charger Nix, installer OpenCode CLI et Claude Code CLI
|
|
25
|
+
RUN printf 'registry=https://registry.npmjs.org/\nprefix=/root/.npm-global\n' > /root/.npmrc && \
|
|
26
|
+
mkdir -p /root/.npm-global && \
|
|
26
27
|
nix-shell /opt/sith/nix/shell.nix --run "echo '✅ Environment cached'" && \
|
|
27
28
|
nix-shell /opt/sith/nix/shell.nix --run " \
|
|
28
29
|
curl -fsSL https://opencode.ai/install | bash && \
|
|
29
30
|
patchelf --set-interpreter \$(patchelf --print-interpreter \$(which bash)) /root/.opencode/bin/opencode && \
|
|
30
31
|
/root/.opencode/bin/opencode --version \
|
|
32
|
+
" && \
|
|
33
|
+
nix-shell /opt/sith/nix/shell.nix --run " \
|
|
34
|
+
npm install -g --prefix /root/.npm-global @anthropic-ai/claude-code \
|
|
35
|
+
" && \
|
|
36
|
+
nix-shell /opt/sith/nix/shell.nix --run " \
|
|
37
|
+
CLAUDE_BIN=\$(readlink -f /root/.npm-global/bin/claude) && \
|
|
38
|
+
file \$CLAUDE_BIN && \
|
|
39
|
+
patchelf --set-interpreter \$(patchelf --print-interpreter \$(which bash)) \$CLAUDE_BIN && \
|
|
40
|
+
/root/.npm-global/bin/claude --version \
|
|
31
41
|
"
|
|
32
42
|
|
|
33
43
|
# ============================================================================
|
|
@@ -54,6 +64,7 @@ COPY --from=builder /opt/sith/ /opt/sith/
|
|
|
54
64
|
COPY --from=builder /nix/store /nix/store
|
|
55
65
|
COPY --from=builder /nix/var /nix/var
|
|
56
66
|
COPY --from=builder /root/.opencode /root/.opencode
|
|
67
|
+
COPY --from=builder /root/.npm-global /root/.npm-global
|
|
57
68
|
COPY --from=builder /root/.npmrc /root/.npmrc
|
|
58
69
|
|
|
59
70
|
# Créer un utilisateur non-root pour l'exécution
|
package/docker/nix/shell.nix
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m14i/sith",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -64,5 +64,10 @@
|
|
|
64
64
|
},
|
|
65
65
|
"engines": {
|
|
66
66
|
"node": ">=18"
|
|
67
|
+
},
|
|
68
|
+
"pnpm": {
|
|
69
|
+
"overrides": {
|
|
70
|
+
"esbuild": ">=0.28.1"
|
|
71
|
+
}
|
|
67
72
|
}
|
|
68
73
|
}
|