@m14i/sith 1.17.1 → 1.19.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 +239 -75
- 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 +15 -3
- package/docker/nix/nix-scripts/02-env-vars.sh +1 -0
- 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;AA0JrD,wBAAgB,UAAU,IAAI,KAAK,CAAC,YAAY,CAmR/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,18 +43824,51 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink_
|
|
|
43832
43824
|
|
|
43833
43825
|
|
|
43834
43826
|
|
|
43835
|
-
|
|
43827
|
+
const TOOLS = [
|
|
43828
|
+
{
|
|
43829
|
+
value: "opencode",
|
|
43830
|
+
label: "OpenCode",
|
|
43831
|
+
description: "github-copilot/claude-sonnet-4.6",
|
|
43832
|
+
},
|
|
43833
|
+
{ value: "claude", label: "Claude Code", description: "Anthropic Claude" },
|
|
43834
|
+
];
|
|
43835
|
+
function ToolPicker({ selectedIndex }) {
|
|
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, marginBottom: 2 },
|
|
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__/* .Box */ .az, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 4, paddingY: 1 },
|
|
43843
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginBottom: 1 },
|
|
43844
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "Select AI Tool")),
|
|
43845
|
+
TOOLS.map((tool, index) => (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { key: tool.value },
|
|
43846
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: index === selectedIndex ? "cyan" : undefined, bold: index === selectedIndex },
|
|
43847
|
+
index === selectedIndex ? "▶ " : " ",
|
|
43848
|
+
tool.label),
|
|
43849
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true },
|
|
43850
|
+
" ",
|
|
43851
|
+
tool.description)))),
|
|
43852
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 1 },
|
|
43853
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate \u21B5 select")))));
|
|
43854
|
+
}
|
|
43855
|
+
function WelcomeScreen({ tool }) {
|
|
43856
|
+
const toolLabel = TOOLS.find((t) => t.value === tool)?.label ?? tool;
|
|
43836
43857
|
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center", paddingY: 2 },
|
|
43837
43858
|
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
43859
|
// biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
|
|
43839
43860
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
|
|
43840
43861
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center", marginTop: 1 },
|
|
43841
43862
|
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, {
|
|
43863
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan" },
|
|
43864
|
+
"Tool: ",
|
|
43865
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { bold: true }, toolLabel))),
|
|
43843
43866
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 2, flexDirection: "column", alignItems: "center" },
|
|
43844
43867
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan" }, "Type your prompt to start coding"),
|
|
43845
43868
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "or use slash commands:")),
|
|
43846
43869
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", marginTop: 1, marginLeft: 2 },
|
|
43870
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /opencode - Switch to OpenCode"),
|
|
43871
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /claude - Switch to Claude Code"),
|
|
43847
43872
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /shell - Start Docker shell"),
|
|
43848
43873
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /skills - Install/uninstall skills"),
|
|
43849
43874
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /config - Configuration"),
|
|
@@ -43863,6 +43888,8 @@ function TerminalUI() {
|
|
|
43863
43888
|
const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)([]);
|
|
43864
43889
|
const [showConfigModal, setShowConfigModal] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);
|
|
43865
43890
|
const [nextMessageId, setNextMessageId] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(1);
|
|
43891
|
+
const [selectedTool, setSelectedTool] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);
|
|
43892
|
+
const [toolPickerIndex, setToolPickerIndex] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(0);
|
|
43866
43893
|
const addMessage = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((text, type = "system") => {
|
|
43867
43894
|
const newMessage = {
|
|
43868
43895
|
id: nextMessageId,
|
|
@@ -43880,35 +43907,51 @@ function TerminalUI() {
|
|
|
43880
43907
|
console.log('Press Ctrl+D or type "exit" to leave');
|
|
43881
43908
|
console.log();
|
|
43882
43909
|
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 */ .
|
|
43910
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerShellCommand */ .ac)(githubToken);
|
|
43911
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit", reject: false });
|
|
43912
|
+
console.log();
|
|
43913
|
+
console.log("✅ Exited shell");
|
|
43914
|
+
}, [exit]);
|
|
43915
|
+
const handleOpenCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
|
|
43916
|
+
exit();
|
|
43917
|
+
console.log("🚀 Starting OpenCode...");
|
|
43918
|
+
console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
43919
|
+
if (prompt) {
|
|
43920
|
+
console.log(`Prompt: ${prompt}`);
|
|
43921
|
+
}
|
|
43922
|
+
console.log();
|
|
43923
|
+
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43924
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerOpencodeCommand */ .Xs)(githubToken, prompt);
|
|
43884
43925
|
try {
|
|
43885
43926
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43886
43927
|
console.log();
|
|
43887
|
-
console.log("✅ Exited
|
|
43928
|
+
console.log("✅ Exited OpenCode");
|
|
43888
43929
|
}
|
|
43889
43930
|
catch (error) {
|
|
43890
|
-
const errorMessage = error instanceof Error ? error.message : "Failed to start
|
|
43931
|
+
const errorMessage = error instanceof Error ? error.message : "Failed to start OpenCode";
|
|
43891
43932
|
console.error(`❌ ${errorMessage}`);
|
|
43892
43933
|
process.exit(1);
|
|
43893
43934
|
}
|
|
43894
43935
|
}, [exit]);
|
|
43895
|
-
const
|
|
43936
|
+
const handleClaudeCode = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (prompt) => {
|
|
43896
43937
|
exit();
|
|
43897
|
-
console.log("
|
|
43938
|
+
console.log("🤖 Starting Claude Code...");
|
|
43898
43939
|
console.log(`Mounting current directory to ${_config_js__WEBPACK_IMPORTED_MODULE_4__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
43899
43940
|
if (prompt) {
|
|
43900
43941
|
console.log(`Prompt: ${prompt}`);
|
|
43901
43942
|
}
|
|
43902
43943
|
console.log();
|
|
43903
43944
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43904
|
-
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .
|
|
43945
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerClaudeCodeCommand */ .fn)(githubToken, prompt);
|
|
43905
43946
|
try {
|
|
43906
43947
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43907
43948
|
console.log();
|
|
43908
|
-
console.log("✅ Exited
|
|
43949
|
+
console.log("✅ Exited Claude Code");
|
|
43909
43950
|
}
|
|
43910
43951
|
catch (error) {
|
|
43911
|
-
const errorMessage = error instanceof Error
|
|
43952
|
+
const errorMessage = error instanceof Error
|
|
43953
|
+
? error.message
|
|
43954
|
+
: "Failed to start Claude Code";
|
|
43912
43955
|
console.error(`❌ ${errorMessage}`);
|
|
43913
43956
|
process.exit(1);
|
|
43914
43957
|
}
|
|
@@ -43937,6 +43980,14 @@ function TerminalUI() {
|
|
|
43937
43980
|
}
|
|
43938
43981
|
break;
|
|
43939
43982
|
}
|
|
43983
|
+
case "opencode":
|
|
43984
|
+
setSelectedTool("opencode");
|
|
43985
|
+
addMessage("Switched to OpenCode", "success");
|
|
43986
|
+
break;
|
|
43987
|
+
case "claude":
|
|
43988
|
+
setSelectedTool("claude");
|
|
43989
|
+
addMessage("Switched to Claude Code", "success");
|
|
43990
|
+
break;
|
|
43940
43991
|
}
|
|
43941
43992
|
}, [addMessage, handleDockerShell, exit]);
|
|
43942
43993
|
const handleSubmit = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async (value) => {
|
|
@@ -43954,10 +44005,21 @@ function TerminalUI() {
|
|
|
43954
44005
|
addMessage(`Unknown command: ${trimmedValue}. Type /help for available commands.`, "error");
|
|
43955
44006
|
}
|
|
43956
44007
|
else {
|
|
43957
|
-
// Regular text input -
|
|
43958
|
-
|
|
44008
|
+
// Regular text input - route to selected tool
|
|
44009
|
+
if (selectedTool === "claude") {
|
|
44010
|
+
await handleClaudeCode(trimmedValue);
|
|
44011
|
+
}
|
|
44012
|
+
else {
|
|
44013
|
+
await handleOpenCode(trimmedValue);
|
|
44014
|
+
}
|
|
43959
44015
|
}
|
|
43960
|
-
}, [
|
|
44016
|
+
}, [
|
|
44017
|
+
addMessage,
|
|
44018
|
+
handleOpenCode,
|
|
44019
|
+
handleClaudeCode,
|
|
44020
|
+
handleSlashCommand,
|
|
44021
|
+
selectedTool,
|
|
44022
|
+
]);
|
|
43961
44023
|
const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {
|
|
43962
44024
|
setShowConfigModal(false);
|
|
43963
44025
|
}, []);
|
|
@@ -43966,22 +44028,35 @@ function TerminalUI() {
|
|
|
43966
44028
|
}, [addMessage]);
|
|
43967
44029
|
(0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useInput */ .Ge)((input, key) => {
|
|
43968
44030
|
if (showConfigModal) {
|
|
43969
|
-
// Let modal handle input
|
|
43970
44031
|
return;
|
|
43971
44032
|
}
|
|
43972
44033
|
const shouldExit = key.escape || (key.ctrl && input === "c");
|
|
43973
44034
|
if (shouldExit) {
|
|
43974
44035
|
exit();
|
|
43975
44036
|
}
|
|
44037
|
+
if (selectedTool === null) {
|
|
44038
|
+
if (key.upArrow) {
|
|
44039
|
+
setToolPickerIndex((i) => (i - 1 + TOOLS.length) % TOOLS.length);
|
|
44040
|
+
}
|
|
44041
|
+
else if (key.downArrow) {
|
|
44042
|
+
setToolPickerIndex((i) => (i + 1) % TOOLS.length);
|
|
44043
|
+
}
|
|
44044
|
+
else if (key.return) {
|
|
44045
|
+
setSelectedTool(TOOLS[toolPickerIndex].value);
|
|
44046
|
+
}
|
|
44047
|
+
}
|
|
43976
44048
|
});
|
|
43977
44049
|
if (showConfigModal) {
|
|
43978
44050
|
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
43979
44051
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__/* .ConfigModal */ .y, { onClose: handleConfigModalClose, onMessage: handleConfigModalMessage })));
|
|
43980
44052
|
}
|
|
44053
|
+
if (selectedTool === null) {
|
|
44054
|
+
return react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ToolPicker, { selectedIndex: toolPickerIndex });
|
|
44055
|
+
}
|
|
43981
44056
|
const shouldShowWelcome = messages.length === 0;
|
|
43982
44057
|
const recentMessages = messages.slice(-10);
|
|
43983
44058
|
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,
|
|
44059
|
+
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
44060
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
43986
44061
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { borderStyle: "single", borderColor: "gray", paddingX: 1 },
|
|
43987
44062
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "\u203A"),
|
|
@@ -44066,6 +44141,8 @@ const DOCKER_CONFIG = {
|
|
|
44066
44141
|
skillsMount: "/root/.opencode/skills",
|
|
44067
44142
|
opencodeConfigMount: "/root/.config/opencode/opencode.json",
|
|
44068
44143
|
shellEntrypoint: "/opt/sith/nix/shell.nix",
|
|
44144
|
+
claudeConfigMount: "/root/.claude",
|
|
44145
|
+
claudeSkillsMount: "/root/.claude/skills",
|
|
44069
44146
|
};
|
|
44070
44147
|
// Nix configuration
|
|
44071
44148
|
const NIX_CONFIG = {
|
|
@@ -44097,21 +44174,28 @@ const ASCII_LOGO = [
|
|
|
44097
44174
|
/***/ ((module, __unused_webpack___webpack_exports__, __nccwpck_require__) => {
|
|
44098
44175
|
|
|
44099
44176
|
__nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
|
|
44100
|
-
/* harmony import */ var
|
|
44101
|
-
/* harmony import */ var
|
|
44102
|
-
/* harmony import */ var
|
|
44103
|
-
/* harmony import */ var
|
|
44104
|
-
/* harmony import */ var
|
|
44105
|
-
/* harmony import */ var
|
|
44106
|
-
/* harmony import */ var
|
|
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
|
-
var
|
|
44114
|
-
|
|
44177
|
+
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(1421);
|
|
44178
|
+
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_0__);
|
|
44179
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3024);
|
|
44180
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);
|
|
44181
|
+
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6760);
|
|
44182
|
+
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);
|
|
44183
|
+
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3136);
|
|
44184
|
+
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_3__);
|
|
44185
|
+
/* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(9611);
|
|
44186
|
+
/* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(2202);
|
|
44187
|
+
/* harmony import */ var update_notifier__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(6213);
|
|
44188
|
+
/* harmony import */ var _commands_docker_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(5515);
|
|
44189
|
+
/* harmony import */ var _commands_nix_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9922);
|
|
44190
|
+
/* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(9805);
|
|
44191
|
+
/* harmony import */ var _components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(3535);
|
|
44192
|
+
/* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(4495);
|
|
44193
|
+
/* harmony import */ var _utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(1460);
|
|
44194
|
+
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__]);
|
|
44195
|
+
([_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__);
|
|
44196
|
+
|
|
44197
|
+
|
|
44198
|
+
|
|
44115
44199
|
|
|
44116
44200
|
|
|
44117
44201
|
|
|
@@ -44123,19 +44207,19 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_com
|
|
|
44123
44207
|
|
|
44124
44208
|
|
|
44125
44209
|
// Import package.json for version and update checks
|
|
44126
|
-
const __filename = (0,
|
|
44127
|
-
const __dirname = (0,
|
|
44128
|
-
const pkg = JSON.parse((0,
|
|
44210
|
+
const __filename = (0,node_url__WEBPACK_IMPORTED_MODULE_3__.fileURLToPath)(import.meta.url);
|
|
44211
|
+
const __dirname = (0,node_path__WEBPACK_IMPORTED_MODULE_2__.dirname)(__filename);
|
|
44212
|
+
const pkg = JSON.parse((0,node_fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync)((0,node_path__WEBPACK_IMPORTED_MODULE_2__.join)(__dirname, "../package.json"), "utf-8"));
|
|
44129
44213
|
const PROGRAM_NAME = "sith";
|
|
44130
44214
|
const PROGRAM_VERSION = pkg.version;
|
|
44131
44215
|
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
44216
|
// Check for updates (automatic background check)
|
|
44133
|
-
const notifier = (0,
|
|
44217
|
+
const notifier = (0,update_notifier__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A)({ pkg });
|
|
44134
44218
|
notifier.notify();
|
|
44135
44219
|
async function checkForUpdates() {
|
|
44136
|
-
console.log(
|
|
44220
|
+
console.log(chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.cyan("Checking for updates..."));
|
|
44137
44221
|
// Force update check by setting updateCheckInterval to 0
|
|
44138
|
-
const notifier = (0,
|
|
44222
|
+
const notifier = (0,update_notifier__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A)({
|
|
44139
44223
|
pkg,
|
|
44140
44224
|
updateCheckInterval: 0,
|
|
44141
44225
|
});
|
|
@@ -44144,16 +44228,16 @@ async function checkForUpdates() {
|
|
|
44144
44228
|
const update = notifier.update;
|
|
44145
44229
|
if (update && update.latest !== pkg.version) {
|
|
44146
44230
|
console.log();
|
|
44147
|
-
console.log(
|
|
44148
|
-
console.log(
|
|
44231
|
+
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)}`));
|
|
44232
|
+
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
44233
|
console.log();
|
|
44150
44234
|
}
|
|
44151
44235
|
else {
|
|
44152
|
-
console.log(
|
|
44236
|
+
console.log(chalk__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Ay.green(`✓ You're on the latest version (${pkg.version})`));
|
|
44153
44237
|
}
|
|
44154
44238
|
}
|
|
44155
44239
|
function createProgram() {
|
|
44156
|
-
const program = new
|
|
44240
|
+
const program = new commander__WEBPACK_IMPORTED_MODULE_4__/* .Command */ .uB();
|
|
44157
44241
|
program
|
|
44158
44242
|
.name(PROGRAM_NAME)
|
|
44159
44243
|
.description(PROGRAM_DESCRIPTION)
|
|
@@ -44171,21 +44255,21 @@ function createProgram() {
|
|
|
44171
44255
|
await checkForUpdates();
|
|
44172
44256
|
}
|
|
44173
44257
|
else if (options.nix) {
|
|
44174
|
-
await (0,
|
|
44258
|
+
await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .runNixShell */ .nb)();
|
|
44175
44259
|
}
|
|
44176
44260
|
else if (options.nixInstall) {
|
|
44177
|
-
await (0,
|
|
44261
|
+
await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .nixCommand */ .Dv)({ install: true });
|
|
44178
44262
|
}
|
|
44179
44263
|
else if (options.it) {
|
|
44180
|
-
await (0,
|
|
44264
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .runShellDirect */ .l)();
|
|
44181
44265
|
}
|
|
44182
44266
|
else if (options.legacy || options.pull || options.build) {
|
|
44183
44267
|
// Use legacy menu for explicit pull/build or --legacy flag
|
|
44184
|
-
await (0,
|
|
44268
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCommand */ .Q)(options);
|
|
44185
44269
|
}
|
|
44186
44270
|
else {
|
|
44187
44271
|
// Default: show new terminal UI
|
|
44188
|
-
(0,
|
|
44272
|
+
(0,_components_TerminalUI_js__WEBPACK_IMPORTED_MODULE_8__/* .renderTerminalUI */ .t)();
|
|
44189
44273
|
}
|
|
44190
44274
|
});
|
|
44191
44275
|
// Docker command - explicit Docker management
|
|
@@ -44195,21 +44279,21 @@ function createProgram() {
|
|
|
44195
44279
|
.option("--pull", "Pull prebuilt Docker image (recommended)")
|
|
44196
44280
|
.option("--build", "Build the Docker image from scratch")
|
|
44197
44281
|
.action(async (options) => {
|
|
44198
|
-
await (0,
|
|
44282
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .dockerCommand */ .Q)(options);
|
|
44199
44283
|
});
|
|
44200
44284
|
// Shell command - direct interactive shell (bypasses menu)
|
|
44201
44285
|
program
|
|
44202
44286
|
.command("shell")
|
|
44203
44287
|
.description("Run interactive shell in Docker container")
|
|
44204
44288
|
.action(async () => {
|
|
44205
|
-
await (0,
|
|
44289
|
+
await (0,_commands_docker_js__WEBPACK_IMPORTED_MODULE_5__/* .runShellDirect */ .l)();
|
|
44206
44290
|
});
|
|
44207
44291
|
// Skills command - install/uninstall skills from catalog
|
|
44208
44292
|
program
|
|
44209
44293
|
.command("skills")
|
|
44210
44294
|
.description("Manage skills (~/.sith/skills/)")
|
|
44211
44295
|
.action(() => {
|
|
44212
|
-
(0,
|
|
44296
|
+
(0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .skillsCommand */ .a)();
|
|
44213
44297
|
});
|
|
44214
44298
|
// Nix command - native Nix environment
|
|
44215
44299
|
program
|
|
@@ -44218,7 +44302,27 @@ function createProgram() {
|
|
|
44218
44302
|
.option("--install", "Install Nix package manager")
|
|
44219
44303
|
.option("--shell", "Run Nix shell")
|
|
44220
44304
|
.action(async (options) => {
|
|
44221
|
-
await (0,
|
|
44305
|
+
await (0,_commands_nix_js__WEBPACK_IMPORTED_MODULE_6__/* .nixCommand */ .Dv)(options);
|
|
44306
|
+
});
|
|
44307
|
+
// OpenCode command - launch OpenCode in Docker
|
|
44308
|
+
program
|
|
44309
|
+
.command("opencode")
|
|
44310
|
+
.description("Launch OpenCode in Docker")
|
|
44311
|
+
.option("-p, --prompt <prompt>", "Prompt to pass to OpenCode")
|
|
44312
|
+
.action(async (options) => {
|
|
44313
|
+
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44314
|
+
const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerOpencodeCommand */ .Xs)(token, options.prompt);
|
|
44315
|
+
(0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44316
|
+
});
|
|
44317
|
+
// Claude command - launch Claude Code in Docker
|
|
44318
|
+
program
|
|
44319
|
+
.command("claude")
|
|
44320
|
+
.description("Launch Claude Code in Docker")
|
|
44321
|
+
.option("-p, --prompt <prompt>", "Prompt to pass to Claude Code")
|
|
44322
|
+
.action(async (options) => {
|
|
44323
|
+
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44324
|
+
const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerClaudeCodeCommand */ .fn)(token, options.prompt);
|
|
44325
|
+
(0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44222
44326
|
});
|
|
44223
44327
|
return program;
|
|
44224
44328
|
}
|
|
@@ -44235,11 +44339,15 @@ __webpack_async_result__();
|
|
|
44235
44339
|
/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
|
|
44236
44340
|
|
|
44237
44341
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
44238
|
-
/* harmony export */
|
|
44239
|
-
/* harmony export */
|
|
44342
|
+
/* harmony export */ Xs: () => (/* binding */ buildDockerOpencodeCommand),
|
|
44343
|
+
/* harmony export */ ac: () => (/* binding */ buildDockerShellCommand),
|
|
44344
|
+
/* harmony export */ fn: () => (/* binding */ buildDockerClaudeCodeCommand)
|
|
44240
44345
|
/* harmony export */ });
|
|
44241
|
-
/* harmony import */ var
|
|
44242
|
-
/* harmony import */ var
|
|
44346
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
|
|
44347
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
|
|
44348
|
+
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6878);
|
|
44349
|
+
/* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6400);
|
|
44350
|
+
|
|
44243
44351
|
|
|
44244
44352
|
|
|
44245
44353
|
function buildDockerShellCommand(githubToken) {
|
|
@@ -44248,17 +44356,17 @@ function buildDockerShellCommand(githubToken) {
|
|
|
44248
44356
|
"--rm",
|
|
44249
44357
|
"-it",
|
|
44250
44358
|
"-v",
|
|
44251
|
-
`${process.cwd()}:${
|
|
44359
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44252
44360
|
"-v",
|
|
44253
|
-
`${(0,
|
|
44361
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
44254
44362
|
"-v",
|
|
44255
|
-
`${(0,
|
|
44363
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44256
44364
|
"-e",
|
|
44257
44365
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44258
44366
|
"--entrypoint",
|
|
44259
44367
|
"nix-shell",
|
|
44260
|
-
|
|
44261
|
-
|
|
44368
|
+
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44369
|
+
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
44262
44370
|
];
|
|
44263
44371
|
}
|
|
44264
44372
|
function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
@@ -44267,16 +44375,16 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44267
44375
|
"--rm",
|
|
44268
44376
|
"-it",
|
|
44269
44377
|
"-v",
|
|
44270
|
-
`${process.cwd()}:${
|
|
44378
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44271
44379
|
"-v",
|
|
44272
|
-
`${(0,
|
|
44380
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
44273
44381
|
"-v",
|
|
44274
|
-
`${(0,
|
|
44382
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44275
44383
|
"-e",
|
|
44276
44384
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44277
44385
|
"--entrypoint",
|
|
44278
44386
|
"bash",
|
|
44279
|
-
|
|
44387
|
+
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44280
44388
|
"-c",
|
|
44281
44389
|
];
|
|
44282
44390
|
let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
|
|
@@ -44287,6 +44395,35 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44287
44395
|
args.push(opencodeCommand);
|
|
44288
44396
|
return args;
|
|
44289
44397
|
}
|
|
44398
|
+
function buildDockerClaudeCodeCommand(githubToken, prompt) {
|
|
44399
|
+
const claudeConfigDir = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeConfigDir */ .K1)();
|
|
44400
|
+
const claudeMdPath = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeMdPath */ .pF)();
|
|
44401
|
+
const args = [
|
|
44402
|
+
"run",
|
|
44403
|
+
"--rm",
|
|
44404
|
+
"-it",
|
|
44405
|
+
"-v",
|
|
44406
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44407
|
+
"-e",
|
|
44408
|
+
`GITHUB_TOKEN=${githubToken}`,
|
|
44409
|
+
];
|
|
44410
|
+
// Mount ~/.claude first so subsequent mounts can shadow entries within it
|
|
44411
|
+
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(claudeConfigDir)) {
|
|
44412
|
+
args.push("-v", `${claudeConfigDir}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}`);
|
|
44413
|
+
}
|
|
44414
|
+
// Skills dir overrides /root/.claude/skills inside the container
|
|
44415
|
+
args.push("-v", `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`);
|
|
44416
|
+
// Generated CLAUDE.md (with skill @imports) overrides any CLAUDE.md from ~/.claude
|
|
44417
|
+
args.push("-v", `${claudeMdPath}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}/CLAUDE.md`);
|
|
44418
|
+
args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
|
|
44419
|
+
let claudeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && /root/.npm-global/bin/claude";
|
|
44420
|
+
if (prompt) {
|
|
44421
|
+
const escapedPrompt = prompt.replace(/'/g, "'\\''");
|
|
44422
|
+
claudeCommand += ` -p '${escapedPrompt}'`;
|
|
44423
|
+
}
|
|
44424
|
+
args.push(claudeCommand);
|
|
44425
|
+
return args;
|
|
44426
|
+
}
|
|
44290
44427
|
|
|
44291
44428
|
|
|
44292
44429
|
/***/ }),
|
|
@@ -44356,8 +44493,10 @@ function getMessagePrefix(type) {
|
|
|
44356
44493
|
|
|
44357
44494
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
44358
44495
|
/* harmony export */ Jn: () => (/* binding */ getOpenCodeConfigPath),
|
|
44496
|
+
/* harmony export */ K1: () => (/* binding */ getClaudeConfigDir),
|
|
44359
44497
|
/* harmony export */ YJ: () => (/* binding */ getSkillsDir),
|
|
44360
44498
|
/* harmony export */ j$: () => (/* binding */ isInstalled),
|
|
44499
|
+
/* harmony export */ pF: () => (/* binding */ getClaudeMdPath),
|
|
44361
44500
|
/* harmony export */ rP: () => (/* binding */ installSkill),
|
|
44362
44501
|
/* harmony export */ wW: () => (/* binding */ uninstallSkill)
|
|
44363
44502
|
/* harmony export */ });
|
|
@@ -44384,6 +44523,17 @@ function getSkillsDir() {
|
|
|
44384
44523
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(dir, { recursive: true });
|
|
44385
44524
|
return dir;
|
|
44386
44525
|
}
|
|
44526
|
+
function getClaudeConfigDir() {
|
|
44527
|
+
return node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".claude");
|
|
44528
|
+
}
|
|
44529
|
+
function getClaudeMdPath() {
|
|
44530
|
+
const claudeMdPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "CLAUDE.md");
|
|
44531
|
+
if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(claudeMdPath)) {
|
|
44532
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(claudeMdPath), { recursive: true });
|
|
44533
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(claudeMdPath, "");
|
|
44534
|
+
}
|
|
44535
|
+
return claudeMdPath;
|
|
44536
|
+
}
|
|
44387
44537
|
function getOpenCodeConfigPath() {
|
|
44388
44538
|
const configPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "opencode.json");
|
|
44389
44539
|
// Docker bind-mount creates a directory if the source doesn't exist; ensure it's a file.
|
|
@@ -44412,6 +44562,11 @@ function addInstruction(containerPath) {
|
|
|
44412
44562
|
writeConfig(config);
|
|
44413
44563
|
}
|
|
44414
44564
|
}
|
|
44565
|
+
function syncClaudeMd() {
|
|
44566
|
+
const config = readConfig();
|
|
44567
|
+
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)}`);
|
|
44568
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(getClaudeMdPath(), lines.join("\n") + (lines.length ? "\n" : ""));
|
|
44569
|
+
}
|
|
44415
44570
|
function removeInstructionsUnder(skillContainerDir) {
|
|
44416
44571
|
const config = readConfig();
|
|
44417
44572
|
config.instructions = config.instructions.filter((p) => !p.startsWith(skillContainerDir));
|
|
@@ -44438,6 +44593,7 @@ async function installSkill(skill) {
|
|
|
44438
44593
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "SKILL.md"), skill.builtinInstructions);
|
|
44439
44594
|
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
44595
|
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/SKILL.md`);
|
|
44596
|
+
syncClaudeMd();
|
|
44441
44597
|
return;
|
|
44442
44598
|
}
|
|
44443
44599
|
if (!skill.source)
|
|
@@ -44463,6 +44619,7 @@ async function installSkill(skill) {
|
|
|
44463
44619
|
if (instructionsFile) {
|
|
44464
44620
|
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/${instructionsFile}`);
|
|
44465
44621
|
}
|
|
44622
|
+
syncClaudeMd();
|
|
44466
44623
|
}
|
|
44467
44624
|
finally {
|
|
44468
44625
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(tmpZip, { force: true });
|
|
@@ -44475,6 +44632,7 @@ function uninstallSkill(name) {
|
|
|
44475
44632
|
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(targetDir)) {
|
|
44476
44633
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
|
|
44477
44634
|
}
|
|
44635
|
+
syncClaudeMd();
|
|
44478
44636
|
}
|
|
44479
44637
|
|
|
44480
44638
|
|
|
@@ -44502,13 +44660,19 @@ function parseSlashCommand(input) {
|
|
|
44502
44660
|
return { type: "help", raw: trimmed };
|
|
44503
44661
|
case "skills":
|
|
44504
44662
|
return { type: "skills", raw: trimmed };
|
|
44663
|
+
case "opencode":
|
|
44664
|
+
return { type: "opencode", raw: trimmed };
|
|
44665
|
+
case "claude":
|
|
44666
|
+
return { type: "claude", raw: trimmed };
|
|
44505
44667
|
default:
|
|
44506
44668
|
return null;
|
|
44507
44669
|
}
|
|
44508
44670
|
}
|
|
44509
44671
|
function getAvailableCommands() {
|
|
44510
44672
|
return [
|
|
44511
|
-
{ command: "/
|
|
44673
|
+
{ command: "/opencode", description: "Switch to OpenCode" },
|
|
44674
|
+
{ command: "/claude", description: "Switch to Claude Code" },
|
|
44675
|
+
{ command: "/shell", description: "Start Docker shell" },
|
|
44512
44676
|
{ command: "/skills", description: "Install/uninstall skills" },
|
|
44513
44677
|
{ command: "/config", description: "Open configuration menu" },
|
|
44514
44678
|
{ 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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Version 2.3.0 - Multi-stage build with non-root user and improved security
|
|
3
3
|
#
|
|
4
4
|
# Build: docker build -t sith:latest .
|
|
5
|
-
# Run: docker run -v $(pwd):/workspace -e GITHUB_TOKEN=$GITHUB_TOKEN sith:latest analyze
|
|
5
|
+
# Run: docker run -v $(pwd):/workspace -e GITHUB_TOKEN=$GITHUB_TOKEN -e CLAUDE_CODE_OAUTH_TOKEN=$CLAUDE_CODE_OAUTH_TOKEN sith:latest analyze
|
|
6
6
|
|
|
7
7
|
# ============================================================================
|
|
8
8
|
# Stage 1: Builder - Setup environment and install dependencies
|
|
@@ -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
|
|
@@ -74,6 +85,7 @@ RUN echo "registry=https://registry.npmjs.org/" > /home/sith/.npmrc && \
|
|
|
74
85
|
ENV OPENCODE_MODEL=github-copilot/claude-sonnet-4.5
|
|
75
86
|
ENV OPENCODE_LOG_LEVEL=INFO
|
|
76
87
|
ENV NODE_ENV=production
|
|
88
|
+
ENV CLAUDE_CODE_OAUTH_TOKEN=""
|
|
77
89
|
ENV PATH="/root/.opencode/bin:/root/.local/bin:/root/.npm-global/bin:${PATH}"
|
|
78
90
|
ENV NPM_CONFIG_PREFIX=/root/.npm-global
|
|
79
91
|
ENV HOME=/root
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export OPENCODE_MODEL="${OPENCODE_MODEL:-github-copilot/claude-sonnet-4.5}"
|
|
5
5
|
export OPENCODE_LOG_LEVEL="${OPENCODE_LOG_LEVEL:-INFO}"
|
|
6
6
|
export NODE_ENV="${NODE_ENV:-production}"
|
|
7
|
+
export CLAUDE_CODE_OAUTH_TOKEN="${CLAUDE_CODE_OAUTH_TOKEN:-}"
|
|
7
8
|
|
|
8
9
|
# Chemins personnalisés
|
|
9
10
|
export PATH="/root/.opencode/bin:$PATH"
|
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.19.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
|
}
|