@m14i/sith 1.18.0 → 1.20.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/README.md +51 -1
- package/dist/components/TerminalUI.d.ts.map +1 -1
- package/dist/index.js +67 -42
- package/dist/utils/dockerArgs.d.ts +3 -3
- package/dist/utils/dockerArgs.d.ts.map +1 -1
- package/docker/Dockerfile +2 -1
- package/docker/nix/nix-scripts/02-env-vars.sh +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,7 +97,39 @@ cosign verify \
|
|
|
97
97
|
|
|
98
98
|
## Authentication
|
|
99
99
|
|
|
100
|
-
Sith
|
|
100
|
+
Sith supports two AI providers: **Claude Code** (via Anthropic) and **OpenCode** (via GitHub Copilot).
|
|
101
|
+
|
|
102
|
+
### Claude Code (claude CLI)
|
|
103
|
+
|
|
104
|
+
Sith ships with the `claude` CLI. Authenticate it with your Anthropic account using a long-lived OAuth token — no API key required.
|
|
105
|
+
|
|
106
|
+
**Step 1 — Generate the token (once, on your local machine):**
|
|
107
|
+
```bash
|
|
108
|
+
claude setup-token
|
|
109
|
+
```
|
|
110
|
+
Follow the browser prompt, then copy the printed token. It is valid for one year and scoped to inference only.
|
|
111
|
+
|
|
112
|
+
**Step 2 — Export it:**
|
|
113
|
+
```bash
|
|
114
|
+
export CLAUDE_CODE_OAUTH_TOKEN=your_token_here
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Make it persistent (add to ~/.zshrc or ~/.bashrc):**
|
|
118
|
+
```bash
|
|
119
|
+
export CLAUDE_CODE_OAUTH_TOKEN=your_token_here
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Verify:**
|
|
123
|
+
```bash
|
|
124
|
+
claude auth status
|
|
125
|
+
# Should show: "loggedIn": true, "authMethod": "claude.ai"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Requirements:** Claude Pro, Max, Team, or Enterprise subscription.
|
|
129
|
+
|
|
130
|
+
### GitHub Copilot (opencode CLI)
|
|
131
|
+
|
|
132
|
+
Sith uses **Claude Sonnet 4.6 via GitHub Copilot** by default for OpenCode. Requires a GitHub token with Copilot access.
|
|
101
133
|
|
|
102
134
|
**Automatic (recommended):**
|
|
103
135
|
If you have GitHub CLI (`gh`) installed and authenticated, Sith automatically fetches your token:
|
|
@@ -129,6 +161,24 @@ opencode providers login
|
|
|
129
161
|
# Follow prompts to authenticate with GitHub
|
|
130
162
|
```
|
|
131
163
|
|
|
164
|
+
### CI / GitHub Actions
|
|
165
|
+
|
|
166
|
+
Add both tokens as repository secrets, then pass them to the container:
|
|
167
|
+
|
|
168
|
+
```yaml
|
|
169
|
+
- name: Run sith
|
|
170
|
+
env:
|
|
171
|
+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
172
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
173
|
+
run: |
|
|
174
|
+
docker run --rm \
|
|
175
|
+
-e CLAUDE_CODE_OAUTH_TOKEN=$CLAUDE_CODE_OAUTH_TOKEN \
|
|
176
|
+
-e GITHUB_TOKEN=$GITHUB_TOKEN \
|
|
177
|
+
ghcr.io/merzoukemanouri/sith:latest "claude auth status"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Generate `CLAUDE_CODE_OAUTH_TOKEN` once with `claude setup-token` and store it in **Settings → Secrets → Actions** as `CLAUDE_CODE_OAUTH_TOKEN`.
|
|
181
|
+
|
|
132
182
|
## Features
|
|
133
183
|
|
|
134
184
|
- **Claude Code-style UI**: Interactive terminal interface with prompt input and slash commands
|
|
@@ -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,CA8R/C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/index.js
CHANGED
|
@@ -43309,6 +43309,7 @@ async function runShell() {
|
|
|
43309
43309
|
// Ignore if gh CLI not available or not authenticated
|
|
43310
43310
|
}
|
|
43311
43311
|
}
|
|
43312
|
+
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
43312
43313
|
const dockerArgs = [
|
|
43313
43314
|
"run",
|
|
43314
43315
|
"--rm",
|
|
@@ -43321,6 +43322,9 @@ async function runShell() {
|
|
|
43321
43322
|
`${opencodeConfigPath}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
43322
43323
|
"-e",
|
|
43323
43324
|
`GITHUB_TOKEN=${githubToken}`,
|
|
43325
|
+
...(claudeOauthToken
|
|
43326
|
+
? ["-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`]
|
|
43327
|
+
: []),
|
|
43324
43328
|
"--entrypoint",
|
|
43325
43329
|
"nix-shell",
|
|
43326
43330
|
_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
@@ -43825,7 +43829,11 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink_
|
|
|
43825
43829
|
|
|
43826
43830
|
|
|
43827
43831
|
const TOOLS = [
|
|
43828
|
-
{
|
|
43832
|
+
{
|
|
43833
|
+
value: "opencode",
|
|
43834
|
+
label: "OpenCode",
|
|
43835
|
+
description: "github-copilot/claude-sonnet-4.6",
|
|
43836
|
+
},
|
|
43829
43837
|
{ value: "claude", label: "Claude Code", description: "Anthropic Claude" },
|
|
43830
43838
|
];
|
|
43831
43839
|
function ToolPicker({ selectedIndex }) {
|
|
@@ -43846,7 +43854,7 @@ function ToolPicker({ selectedIndex }) {
|
|
|
43846
43854
|
" ",
|
|
43847
43855
|
tool.description)))),
|
|
43848
43856
|
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
|
|
43857
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate \u21B5 select")))));
|
|
43850
43858
|
}
|
|
43851
43859
|
function WelcomeScreen({ tool }) {
|
|
43852
43860
|
const toolLabel = TOOLS.find((t) => t.value === tool)?.label ?? tool;
|
|
@@ -43864,11 +43872,11 @@ function WelcomeScreen({ tool }) {
|
|
|
43864
43872
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "or use slash commands:")),
|
|
43865
43873
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", marginTop: 1, marginLeft: 2 },
|
|
43866
43874
|
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
|
|
43868
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /shell
|
|
43869
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /skills
|
|
43870
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /config
|
|
43871
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /help
|
|
43875
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /claude - Switch to Claude Code"),
|
|
43876
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /shell - Start Docker shell"),
|
|
43877
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /skills - Install/uninstall skills"),
|
|
43878
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /config - Configuration"),
|
|
43879
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, " /help - Show help"))));
|
|
43872
43880
|
}
|
|
43873
43881
|
function MessageItem({ message }) {
|
|
43874
43882
|
const color = (0,_utils_messageUtils_js__WEBPACK_IMPORTED_MODULE_7__/* .getMessageColor */ .l)(message.type);
|
|
@@ -43903,7 +43911,8 @@ function TerminalUI() {
|
|
|
43903
43911
|
console.log('Press Ctrl+D or type "exit" to leave');
|
|
43904
43912
|
console.log();
|
|
43905
43913
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43906
|
-
const
|
|
43914
|
+
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
43915
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerShellCommand */ .ac)(githubToken, claudeOauthToken);
|
|
43907
43916
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit", reject: false });
|
|
43908
43917
|
console.log();
|
|
43909
43918
|
console.log("✅ Exited shell");
|
|
@@ -43917,7 +43926,8 @@ function TerminalUI() {
|
|
|
43917
43926
|
}
|
|
43918
43927
|
console.log();
|
|
43919
43928
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43920
|
-
const
|
|
43929
|
+
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
43930
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerOpencodeCommand */ .Xs)(githubToken, prompt, claudeOauthToken);
|
|
43921
43931
|
try {
|
|
43922
43932
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43923
43933
|
console.log();
|
|
@@ -43938,14 +43948,17 @@ function TerminalUI() {
|
|
|
43938
43948
|
}
|
|
43939
43949
|
console.log();
|
|
43940
43950
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43941
|
-
const
|
|
43951
|
+
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
43952
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_5__/* .buildDockerClaudeCodeCommand */ .fn)(githubToken, prompt, claudeOauthToken);
|
|
43942
43953
|
try {
|
|
43943
43954
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43944
43955
|
console.log();
|
|
43945
43956
|
console.log("✅ Exited Claude Code");
|
|
43946
43957
|
}
|
|
43947
43958
|
catch (error) {
|
|
43948
|
-
const errorMessage = error instanceof Error
|
|
43959
|
+
const errorMessage = error instanceof Error
|
|
43960
|
+
? error.message
|
|
43961
|
+
: "Failed to start Claude Code";
|
|
43949
43962
|
console.error(`❌ ${errorMessage}`);
|
|
43950
43963
|
process.exit(1);
|
|
43951
43964
|
}
|
|
@@ -44007,7 +44020,13 @@ function TerminalUI() {
|
|
|
44007
44020
|
await handleOpenCode(trimmedValue);
|
|
44008
44021
|
}
|
|
44009
44022
|
}
|
|
44010
|
-
}, [
|
|
44023
|
+
}, [
|
|
44024
|
+
addMessage,
|
|
44025
|
+
handleOpenCode,
|
|
44026
|
+
handleClaudeCode,
|
|
44027
|
+
handleSlashCommand,
|
|
44028
|
+
selectedTool,
|
|
44029
|
+
]);
|
|
44011
44030
|
const handleConfigModalClose = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(() => {
|
|
44012
44031
|
setShowConfigModal(false);
|
|
44013
44032
|
}, []);
|
|
@@ -44162,23 +44181,23 @@ const ASCII_LOGO = [
|
|
|
44162
44181
|
/***/ ((module, __unused_webpack___webpack_exports__, __nccwpck_require__) => {
|
|
44163
44182
|
|
|
44164
44183
|
__nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
|
|
44165
|
-
/* harmony import */ var
|
|
44166
|
-
/* harmony import */ var
|
|
44167
|
-
/* harmony import */ var
|
|
44168
|
-
/* harmony import */ var
|
|
44169
|
-
/* harmony import */ var
|
|
44170
|
-
/* harmony import */ var
|
|
44184
|
+
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(1421);
|
|
44185
|
+
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_0__);
|
|
44186
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3024);
|
|
44187
|
+
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);
|
|
44188
|
+
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6760);
|
|
44189
|
+
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);
|
|
44190
|
+
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3136);
|
|
44191
|
+
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_3__);
|
|
44171
44192
|
/* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(9611);
|
|
44172
|
-
/* harmony import */ var
|
|
44193
|
+
/* harmony import */ var commander__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(2202);
|
|
44173
44194
|
/* 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
44195
|
/* harmony import */ var _commands_docker_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(5515);
|
|
44177
44196
|
/* harmony import */ var _commands_nix_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(9922);
|
|
44178
44197
|
/* harmony import */ var _commands_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(9805);
|
|
44179
44198
|
/* 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
44199
|
/* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(4495);
|
|
44200
|
+
/* harmony import */ var _utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(1460);
|
|
44182
44201
|
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
44202
|
([_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
44203
|
|
|
@@ -44195,9 +44214,9 @@ var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_com
|
|
|
44195
44214
|
|
|
44196
44215
|
|
|
44197
44216
|
// Import package.json for version and update checks
|
|
44198
|
-
const __filename = (0,
|
|
44199
|
-
const __dirname = (0,
|
|
44200
|
-
const pkg = JSON.parse((0,
|
|
44217
|
+
const __filename = (0,node_url__WEBPACK_IMPORTED_MODULE_3__.fileURLToPath)(import.meta.url);
|
|
44218
|
+
const __dirname = (0,node_path__WEBPACK_IMPORTED_MODULE_2__.dirname)(__filename);
|
|
44219
|
+
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"));
|
|
44201
44220
|
const PROGRAM_NAME = "sith";
|
|
44202
44221
|
const PROGRAM_VERSION = pkg.version;
|
|
44203
44222
|
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.";
|
|
@@ -44225,7 +44244,7 @@ async function checkForUpdates() {
|
|
|
44225
44244
|
}
|
|
44226
44245
|
}
|
|
44227
44246
|
function createProgram() {
|
|
44228
|
-
const program = new
|
|
44247
|
+
const program = new commander__WEBPACK_IMPORTED_MODULE_4__/* .Command */ .uB();
|
|
44229
44248
|
program
|
|
44230
44249
|
.name(PROGRAM_NAME)
|
|
44231
44250
|
.description(PROGRAM_DESCRIPTION)
|
|
@@ -44299,8 +44318,9 @@ function createProgram() {
|
|
|
44299
44318
|
.option("-p, --prompt <prompt>", "Prompt to pass to OpenCode")
|
|
44300
44319
|
.action(async (options) => {
|
|
44301
44320
|
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44302
|
-
const
|
|
44303
|
-
(0,
|
|
44321
|
+
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
44322
|
+
const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerOpencodeCommand */ .Xs)(token, options.prompt, claudeOauthToken);
|
|
44323
|
+
(0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44304
44324
|
});
|
|
44305
44325
|
// Claude command - launch Claude Code in Docker
|
|
44306
44326
|
program
|
|
@@ -44309,8 +44329,9 @@ function createProgram() {
|
|
|
44309
44329
|
.option("-p, --prompt <prompt>", "Prompt to pass to Claude Code")
|
|
44310
44330
|
.action(async (options) => {
|
|
44311
44331
|
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44312
|
-
const
|
|
44313
|
-
(0,
|
|
44332
|
+
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
44333
|
+
const args = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_9__/* .buildDockerClaudeCodeCommand */ .fn)(token, options.prompt, claudeOauthToken);
|
|
44334
|
+
(0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44314
44335
|
});
|
|
44315
44336
|
return program;
|
|
44316
44337
|
}
|
|
@@ -44338,8 +44359,8 @@ __webpack_async_result__();
|
|
|
44338
44359
|
|
|
44339
44360
|
|
|
44340
44361
|
|
|
44341
|
-
function buildDockerShellCommand(githubToken) {
|
|
44342
|
-
|
|
44362
|
+
function buildDockerShellCommand(githubToken, claudeOauthToken) {
|
|
44363
|
+
const args = [
|
|
44343
44364
|
"run",
|
|
44344
44365
|
"--rm",
|
|
44345
44366
|
"-it",
|
|
@@ -44351,13 +44372,14 @@ function buildDockerShellCommand(githubToken) {
|
|
|
44351
44372
|
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44352
44373
|
"-e",
|
|
44353
44374
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44354
|
-
"--entrypoint",
|
|
44355
|
-
"nix-shell",
|
|
44356
|
-
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44357
|
-
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
44358
44375
|
];
|
|
44376
|
+
if (claudeOauthToken) {
|
|
44377
|
+
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44378
|
+
}
|
|
44379
|
+
args.push("--entrypoint", "nix-shell", _config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName, _config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.shellEntrypoint);
|
|
44380
|
+
return args;
|
|
44359
44381
|
}
|
|
44360
|
-
function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
44382
|
+
function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
44361
44383
|
const args = [
|
|
44362
44384
|
"run",
|
|
44363
44385
|
"--rm",
|
|
@@ -44370,11 +44392,11 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44370
44392
|
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44371
44393
|
"-e",
|
|
44372
44394
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44373
|
-
"--entrypoint",
|
|
44374
|
-
"bash",
|
|
44375
|
-
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44376
|
-
"-c",
|
|
44377
44395
|
];
|
|
44396
|
+
if (claudeOauthToken) {
|
|
44397
|
+
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44398
|
+
}
|
|
44399
|
+
args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
|
|
44378
44400
|
let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
|
|
44379
44401
|
if (prompt) {
|
|
44380
44402
|
const escapedPrompt = prompt.replace(/'/g, "'\\''");
|
|
@@ -44383,7 +44405,7 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44383
44405
|
args.push(opencodeCommand);
|
|
44384
44406
|
return args;
|
|
44385
44407
|
}
|
|
44386
|
-
function buildDockerClaudeCodeCommand(githubToken, prompt) {
|
|
44408
|
+
function buildDockerClaudeCodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
44387
44409
|
const claudeConfigDir = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeConfigDir */ .K1)();
|
|
44388
44410
|
const claudeMdPath = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeMdPath */ .pF)();
|
|
44389
44411
|
const args = [
|
|
@@ -44395,6 +44417,9 @@ function buildDockerClaudeCodeCommand(githubToken, prompt) {
|
|
|
44395
44417
|
"-e",
|
|
44396
44418
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44397
44419
|
];
|
|
44420
|
+
if (claudeOauthToken) {
|
|
44421
|
+
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44422
|
+
}
|
|
44398
44423
|
// Mount ~/.claude first so subsequent mounts can shadow entries within it
|
|
44399
44424
|
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(claudeConfigDir)) {
|
|
44400
44425
|
args.push("-v", `${claudeConfigDir}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function buildDockerShellCommand(githubToken: string): string[];
|
|
2
|
-
export declare function buildDockerOpencodeCommand(githubToken: string, prompt?: string): string[];
|
|
3
|
-
export declare function buildDockerClaudeCodeCommand(githubToken: string, prompt?: string): string[];
|
|
1
|
+
export declare function buildDockerShellCommand(githubToken: string, claudeOauthToken?: string): string[];
|
|
2
|
+
export declare function buildDockerOpencodeCommand(githubToken: string, prompt?: string, claudeOauthToken?: string): string[];
|
|
3
|
+
export declare function buildDockerClaudeCodeCommand(githubToken: string, prompt?: string, claudeOauthToken?: string): string[];
|
|
4
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":"AASA,wBAAgB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"dockerArgs.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/dockerArgs.ts"],"names":[],"mappings":"AASA,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CAwBV;AAED,wBAAgB,0BAA0B,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CA6BV;AAED,wBAAgB,4BAA4B,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CA0CV"}
|
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
|
|
@@ -85,6 +85,7 @@ RUN echo "registry=https://registry.npmjs.org/" > /home/sith/.npmrc && \
|
|
|
85
85
|
ENV OPENCODE_MODEL=github-copilot/claude-sonnet-4.5
|
|
86
86
|
ENV OPENCODE_LOG_LEVEL=INFO
|
|
87
87
|
ENV NODE_ENV=production
|
|
88
|
+
ENV CLAUDE_CODE_OAUTH_TOKEN=""
|
|
88
89
|
ENV PATH="/root/.opencode/bin:/root/.local/bin:/root/.npm-global/bin:${PATH}"
|
|
89
90
|
ENV NPM_CONFIG_PREFIX=/root/.npm-global
|
|
90
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m14i/sith",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.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": {
|