@m14i/sith 1.19.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 +30 -17
- package/dist/utils/dockerArgs.d.ts +3 -3
- package/dist/utils/dockerArgs.d.ts.map +1 -1
- 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;AA0JrD,wBAAgB,UAAU,IAAI,KAAK,CAAC,YAAY,
|
|
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,
|
|
@@ -43907,7 +43911,8 @@ function TerminalUI() {
|
|
|
43907
43911
|
console.log('Press Ctrl+D or type "exit" to leave');
|
|
43908
43912
|
console.log();
|
|
43909
43913
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43910
|
-
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);
|
|
43911
43916
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit", reject: false });
|
|
43912
43917
|
console.log();
|
|
43913
43918
|
console.log("✅ Exited shell");
|
|
@@ -43921,7 +43926,8 @@ function TerminalUI() {
|
|
|
43921
43926
|
}
|
|
43922
43927
|
console.log();
|
|
43923
43928
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43924
|
-
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);
|
|
43925
43931
|
try {
|
|
43926
43932
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43927
43933
|
console.log();
|
|
@@ -43942,7 +43948,8 @@ function TerminalUI() {
|
|
|
43942
43948
|
}
|
|
43943
43949
|
console.log();
|
|
43944
43950
|
const githubToken = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_8__/* .getGitHubToken */ .l)();
|
|
43945
|
-
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);
|
|
43946
43953
|
try {
|
|
43947
43954
|
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, { stdio: "inherit" });
|
|
43948
43955
|
console.log();
|
|
@@ -44311,7 +44318,8 @@ function createProgram() {
|
|
|
44311
44318
|
.option("-p, --prompt <prompt>", "Prompt to pass to OpenCode")
|
|
44312
44319
|
.action(async (options) => {
|
|
44313
44320
|
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44314
|
-
const
|
|
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);
|
|
44315
44323
|
(0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44316
44324
|
});
|
|
44317
44325
|
// Claude command - launch Claude Code in Docker
|
|
@@ -44321,7 +44329,8 @@ function createProgram() {
|
|
|
44321
44329
|
.option("-p, --prompt <prompt>", "Prompt to pass to Claude Code")
|
|
44322
44330
|
.action(async (options) => {
|
|
44323
44331
|
const token = await (0,_utils_githubToken_js__WEBPACK_IMPORTED_MODULE_12__/* .getGitHubToken */ .l)();
|
|
44324
|
-
const
|
|
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);
|
|
44325
44334
|
(0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)("docker", args, { stdio: "inherit" });
|
|
44326
44335
|
});
|
|
44327
44336
|
return program;
|
|
@@ -44350,8 +44359,8 @@ __webpack_async_result__();
|
|
|
44350
44359
|
|
|
44351
44360
|
|
|
44352
44361
|
|
|
44353
|
-
function buildDockerShellCommand(githubToken) {
|
|
44354
|
-
|
|
44362
|
+
function buildDockerShellCommand(githubToken, claudeOauthToken) {
|
|
44363
|
+
const args = [
|
|
44355
44364
|
"run",
|
|
44356
44365
|
"--rm",
|
|
44357
44366
|
"-it",
|
|
@@ -44363,13 +44372,14 @@ function buildDockerShellCommand(githubToken) {
|
|
|
44363
44372
|
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44364
44373
|
"-e",
|
|
44365
44374
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44366
|
-
"--entrypoint",
|
|
44367
|
-
"nix-shell",
|
|
44368
|
-
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44369
|
-
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
44370
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;
|
|
44371
44381
|
}
|
|
44372
|
-
function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
44382
|
+
function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
44373
44383
|
const args = [
|
|
44374
44384
|
"run",
|
|
44375
44385
|
"--rm",
|
|
@@ -44382,11 +44392,11 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44382
44392
|
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44383
44393
|
"-e",
|
|
44384
44394
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44385
|
-
"--entrypoint",
|
|
44386
|
-
"bash",
|
|
44387
|
-
_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
44388
|
-
"-c",
|
|
44389
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");
|
|
44390
44400
|
let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
|
|
44391
44401
|
if (prompt) {
|
|
44392
44402
|
const escapedPrompt = prompt.replace(/'/g, "'\\''");
|
|
@@ -44395,7 +44405,7 @@ function buildDockerOpencodeCommand(githubToken, prompt) {
|
|
|
44395
44405
|
args.push(opencodeCommand);
|
|
44396
44406
|
return args;
|
|
44397
44407
|
}
|
|
44398
|
-
function buildDockerClaudeCodeCommand(githubToken, prompt) {
|
|
44408
|
+
function buildDockerClaudeCodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
44399
44409
|
const claudeConfigDir = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeConfigDir */ .K1)();
|
|
44400
44410
|
const claudeMdPath = (0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getClaudeMdPath */ .pF)();
|
|
44401
44411
|
const args = [
|
|
@@ -44407,6 +44417,9 @@ function buildDockerClaudeCodeCommand(githubToken, prompt) {
|
|
|
44407
44417
|
"-e",
|
|
44408
44418
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44409
44419
|
];
|
|
44420
|
+
if (claudeOauthToken) {
|
|
44421
|
+
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44422
|
+
}
|
|
44410
44423
|
// Mount ~/.claude first so subsequent mounts can shadow entries within it
|
|
44411
44424
|
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(claudeConfigDir)) {
|
|
44412
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/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": {
|