@m14i/sith 1.20.0 → 1.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/docker.d.ts.map +1 -1
- package/dist/commands/skills.d.ts +5 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/components/TerminalUI.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.js +187 -107
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/dockerArgs.d.ts.map +1 -1
- package/dist/utils/skills.d.ts +3 -0
- package/dist/utils/skills.d.ts.map +1 -1
- package/docker/Dockerfile +11 -2
- package/docker/claude-defaults/.claude.json +10 -0
- package/docker/claude-defaults/CLAUDE.md +1 -0
- package/docker/claude-defaults/settings.json +10 -0
- package/docker/entrypoint.sh +10 -0
- package/docker/nix/nix-scripts/02-env-vars.sh +9 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/commands/docker.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEX,oBAAoB,EAEpB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/commands/docker.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEX,oBAAoB,EAEpB,MAAM,aAAa,CAAC;AAsTrB,wBAAsB,aAAa,CAClC,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/commands/skills.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/commands/skills.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;AA+BxC,iBAAS,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAuI7E;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"TerminalUI.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/components/TerminalUI.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAiJ7D,wBAAgB,UAAU,IAAI,KAAK,CAAC,YAAY,CAoS/C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
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,
|
|
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,EA8CtC,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
|
@@ -42975,16 +42975,18 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
|
|
|
42975
42975
|
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);
|
|
42976
42976
|
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(3136);
|
|
42977
42977
|
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(node_url__WEBPACK_IMPORTED_MODULE_2__);
|
|
42978
|
-
/* harmony import */ var
|
|
42978
|
+
/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(6181);
|
|
42979
42979
|
/* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(3816);
|
|
42980
42980
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(2864);
|
|
42981
42981
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__nccwpck_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
|
|
42982
42982
|
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(6878);
|
|
42983
|
-
/* harmony import */ var
|
|
42984
|
-
/* harmony import */ var
|
|
42985
|
-
/* harmony import */ var
|
|
42986
|
-
var
|
|
42987
|
-
([ink__WEBPACK_IMPORTED_MODULE_3__,
|
|
42983
|
+
/* harmony import */ var _utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(4495);
|
|
42984
|
+
/* harmony import */ var _utils_skills_js__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(6400);
|
|
42985
|
+
/* harmony import */ var _nix_js__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(9922);
|
|
42986
|
+
/* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(9805);
|
|
42987
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([ink__WEBPACK_IMPORTED_MODULE_3__, _skills_js__WEBPACK_IMPORTED_MODULE_9__]);
|
|
42988
|
+
([ink__WEBPACK_IMPORTED_MODULE_3__, _skills_js__WEBPACK_IMPORTED_MODULE_9__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
42989
|
+
|
|
42988
42990
|
|
|
42989
42991
|
|
|
42990
42992
|
|
|
@@ -43079,7 +43081,7 @@ function Menu() {
|
|
|
43079
43081
|
return;
|
|
43080
43082
|
case "skills":
|
|
43081
43083
|
exit();
|
|
43082
|
-
(0,
|
|
43084
|
+
(0,_skills_js__WEBPACK_IMPORTED_MODULE_9__/* .skillsCommand */ .a)();
|
|
43083
43085
|
return;
|
|
43084
43086
|
case "config":
|
|
43085
43087
|
setCurrentMenu("config");
|
|
@@ -43106,11 +43108,11 @@ function Menu() {
|
|
|
43106
43108
|
setIsProcessing(true);
|
|
43107
43109
|
setProcessStep("Pulling prebuilt Docker image...");
|
|
43108
43110
|
try {
|
|
43109
|
-
await (0,
|
|
43111
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage], {
|
|
43110
43112
|
stdio: "inherit",
|
|
43111
43113
|
});
|
|
43112
43114
|
// Tag the pulled image with local name for compatibility
|
|
43113
|
-
await (0,
|
|
43115
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["tag", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName], {
|
|
43114
43116
|
stdio: "inherit",
|
|
43115
43117
|
});
|
|
43116
43118
|
setIsProcessing(false);
|
|
@@ -43126,8 +43128,8 @@ function Menu() {
|
|
|
43126
43128
|
setIsProcessing(true);
|
|
43127
43129
|
setProcessStep("Installing Nix locally...");
|
|
43128
43130
|
try {
|
|
43129
|
-
await (0,
|
|
43130
|
-
await (0,
|
|
43131
|
+
await (0,_nix_js__WEBPACK_IMPORTED_MODULE_8__/* .installNix */ .Fh)();
|
|
43132
|
+
await (0,_nix_js__WEBPACK_IMPORTED_MODULE_8__/* .copyNixFiles */ .Qi)();
|
|
43131
43133
|
setIsProcessing(false);
|
|
43132
43134
|
setProcessComplete(true);
|
|
43133
43135
|
setProcessStep("");
|
|
@@ -43145,7 +43147,7 @@ function Menu() {
|
|
|
43145
43147
|
if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(dockerfilePath)) {
|
|
43146
43148
|
throw new Error(`Dockerfile not found at: ${dockerfilePath}`);
|
|
43147
43149
|
}
|
|
43148
|
-
await (0,
|
|
43150
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
|
|
43149
43151
|
stdio: "inherit",
|
|
43150
43152
|
});
|
|
43151
43153
|
setIsProcessing(false);
|
|
@@ -43240,12 +43242,12 @@ async function pullDocker() {
|
|
|
43240
43242
|
console.log(`Source: ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage}`);
|
|
43241
43243
|
console.log(`Target: ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName}`);
|
|
43242
43244
|
console.log();
|
|
43243
|
-
await (0,
|
|
43245
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["pull", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage], {
|
|
43244
43246
|
stdio: "inherit",
|
|
43245
43247
|
});
|
|
43246
43248
|
console.log();
|
|
43247
43249
|
console.log("🏷️ Tagging image for local use...");
|
|
43248
|
-
await (0,
|
|
43250
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["tag", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.prebuiltImage, _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName], {
|
|
43249
43251
|
stdio: "inherit",
|
|
43250
43252
|
});
|
|
43251
43253
|
console.log();
|
|
@@ -43273,7 +43275,7 @@ async function buildDocker() {
|
|
|
43273
43275
|
console.log(`Root: ${rootDir}`);
|
|
43274
43276
|
console.log(`Dockerfile: ${dockerfilePath}`);
|
|
43275
43277
|
console.log();
|
|
43276
|
-
await (0,
|
|
43278
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", ["build", "-f", dockerfilePath, "-t", _config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName, rootDir], {
|
|
43277
43279
|
stdio: "inherit",
|
|
43278
43280
|
});
|
|
43279
43281
|
console.log();
|
|
@@ -43291,8 +43293,7 @@ async function buildDocker() {
|
|
|
43291
43293
|
}
|
|
43292
43294
|
}
|
|
43293
43295
|
async function runShell() {
|
|
43294
|
-
const skillsDir = (0,
|
|
43295
|
-
const opencodeConfigPath = (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_6__/* .getOpenCodeConfigPath */ .Jn)();
|
|
43296
|
+
const skillsDir = (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_7__/* .getSkillsDir */ .YJ)();
|
|
43296
43297
|
console.log("🚀 Starting interactive shell...");
|
|
43297
43298
|
console.log(`Mounting workspace to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.workspaceMount}`);
|
|
43298
43299
|
console.log(`Mounting skills from ${skillsDir} to ${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`);
|
|
@@ -43302,7 +43303,7 @@ async function runShell() {
|
|
|
43302
43303
|
let githubToken = process.env.GITHUB_TOKEN || "";
|
|
43303
43304
|
if (!githubToken) {
|
|
43304
43305
|
try {
|
|
43305
|
-
const { stdout } = await (0,
|
|
43306
|
+
const { stdout } = await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("gh", ["auth", "token"]);
|
|
43306
43307
|
githubToken = stdout.trim();
|
|
43307
43308
|
}
|
|
43308
43309
|
catch {
|
|
@@ -43310,27 +43311,8 @@ async function runShell() {
|
|
|
43310
43311
|
}
|
|
43311
43312
|
}
|
|
43312
43313
|
const claudeOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN || "";
|
|
43313
|
-
const dockerArgs =
|
|
43314
|
-
|
|
43315
|
-
"--rm",
|
|
43316
|
-
"-it",
|
|
43317
|
-
"-v",
|
|
43318
|
-
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
43319
|
-
"-v",
|
|
43320
|
-
`${skillsDir}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
43321
|
-
"-v",
|
|
43322
|
-
`${opencodeConfigPath}:${_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
43323
|
-
"-e",
|
|
43324
|
-
`GITHUB_TOKEN=${githubToken}`,
|
|
43325
|
-
...(claudeOauthToken
|
|
43326
|
-
? ["-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`]
|
|
43327
|
-
: []),
|
|
43328
|
-
"--entrypoint",
|
|
43329
|
-
"nix-shell",
|
|
43330
|
-
_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.imageName,
|
|
43331
|
-
_config_js__WEBPACK_IMPORTED_MODULE_5__/* .DOCKER_CONFIG */ .e6.shellEntrypoint,
|
|
43332
|
-
];
|
|
43333
|
-
await (0,execa__WEBPACK_IMPORTED_MODULE_9__/* .execa */ .Ho)("docker", dockerArgs, {
|
|
43314
|
+
const dockerArgs = (0,_utils_dockerArgs_js__WEBPACK_IMPORTED_MODULE_6__/* .buildDockerShellCommand */ .ac)(githubToken, claudeOauthToken);
|
|
43315
|
+
await (0,execa__WEBPACK_IMPORTED_MODULE_10__/* .execa */ .Ho)("docker", dockerArgs, {
|
|
43334
43316
|
stdio: "inherit",
|
|
43335
43317
|
reject: false,
|
|
43336
43318
|
});
|
|
@@ -43536,7 +43518,8 @@ async function nixCommand(options) {
|
|
|
43536
43518
|
|
|
43537
43519
|
__nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
|
|
43538
43520
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
43539
|
-
/* harmony export */ a: () => (/* binding */ skillsCommand)
|
|
43521
|
+
/* harmony export */ a: () => (/* binding */ skillsCommand),
|
|
43522
|
+
/* harmony export */ c: () => (/* binding */ SkillsMenu)
|
|
43540
43523
|
/* harmony export */ });
|
|
43541
43524
|
/* harmony import */ var ink__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3816);
|
|
43542
43525
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(2864);
|
|
@@ -43559,11 +43542,12 @@ function statusIcon(row) {
|
|
|
43559
43542
|
return row.installed ? "✅" : "☐";
|
|
43560
43543
|
}
|
|
43561
43544
|
}
|
|
43562
|
-
function SkillsMenu() {
|
|
43545
|
+
function SkillsMenu({ onClose }) {
|
|
43563
43546
|
const { exit } = (0,ink__WEBPACK_IMPORTED_MODULE_0__/* .useApp */ .nm)();
|
|
43564
43547
|
const [selectedIndex, setSelectedIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);
|
|
43565
43548
|
const [rows, setRows] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(_config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI.map((s) => ({
|
|
43566
43549
|
installed: (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .isInstalled */ .j$)(s.name),
|
|
43550
|
+
autoLoad: (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .getSkillAutoLoad */ .z8)(s.name),
|
|
43567
43551
|
status: "idle",
|
|
43568
43552
|
message: "",
|
|
43569
43553
|
})));
|
|
@@ -43588,6 +43572,7 @@ function SkillsMenu() {
|
|
|
43588
43572
|
await (0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .installSkill */ .rP)(skill);
|
|
43589
43573
|
setRow(index, {
|
|
43590
43574
|
installed: true,
|
|
43575
|
+
autoLoad: skill.autoLoad ?? false,
|
|
43591
43576
|
status: "done",
|
|
43592
43577
|
message: "Installed",
|
|
43593
43578
|
});
|
|
@@ -43616,8 +43601,26 @@ function SkillsMenu() {
|
|
|
43616
43601
|
}
|
|
43617
43602
|
return;
|
|
43618
43603
|
}
|
|
43604
|
+
if (input === "a") {
|
|
43605
|
+
const row = rows[selectedIndex];
|
|
43606
|
+
if (row.installed && row.status !== "working") {
|
|
43607
|
+
const newAutoLoad = !row.autoLoad;
|
|
43608
|
+
(0,_utils_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .setSkillAutoLoad */ .lJ)(_config_js__WEBPACK_IMPORTED_MODULE_2__/* .SKILLS_CATALOG */ .XI[selectedIndex].name, newAutoLoad);
|
|
43609
|
+
setRow(selectedIndex, {
|
|
43610
|
+
autoLoad: newAutoLoad,
|
|
43611
|
+
status: "done",
|
|
43612
|
+
message: newAutoLoad ? "Auto-load on" : "On-demand",
|
|
43613
|
+
});
|
|
43614
|
+
}
|
|
43615
|
+
return;
|
|
43616
|
+
}
|
|
43619
43617
|
if (input === "q" || key.escape) {
|
|
43620
|
-
|
|
43618
|
+
if (onClose) {
|
|
43619
|
+
onClose();
|
|
43620
|
+
}
|
|
43621
|
+
else {
|
|
43622
|
+
exit();
|
|
43623
|
+
}
|
|
43621
43624
|
}
|
|
43622
43625
|
});
|
|
43623
43626
|
return (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", paddingX: 1 },
|
|
@@ -43634,13 +43637,17 @@ function SkillsMenu() {
|
|
|
43634
43637
|
" ",
|
|
43635
43638
|
skill.name.padEnd(12)),
|
|
43636
43639
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: !isSelected }, skill.description),
|
|
43640
|
+
row.installed ? (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: row.autoLoad ? "green" : "yellow" },
|
|
43641
|
+
" ",
|
|
43642
|
+
row.autoLoad ? "[auto]" : "[on-demand]")) : null,
|
|
43637
43643
|
row.message ? (react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: row.status === "error" ? "red" : "green" },
|
|
43638
43644
|
" ",
|
|
43639
43645
|
row.message)) : null));
|
|
43640
43646
|
}),
|
|
43641
43647
|
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginTop: 1 },
|
|
43642
|
-
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate Enter install/uninstall q quit"))));
|
|
43648
|
+
react__WEBPACK_IMPORTED_MODULE_1___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "\u2191\u2193 navigate Enter install/uninstall a toggle auto-load q quit"))));
|
|
43643
43649
|
}
|
|
43650
|
+
|
|
43644
43651
|
function skillsCommand() {
|
|
43645
43652
|
(0,ink__WEBPACK_IMPORTED_MODULE_0__/* .render */ .XX)(react__WEBPACK_IMPORTED_MODULE_1___default().createElement(SkillsMenu, null));
|
|
43646
43653
|
}
|
|
@@ -43836,13 +43843,16 @@ const TOOLS = [
|
|
|
43836
43843
|
},
|
|
43837
43844
|
{ value: "claude", label: "Claude Code", description: "Anthropic Claude" },
|
|
43838
43845
|
];
|
|
43839
|
-
function
|
|
43840
|
-
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column",
|
|
43841
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column"
|
|
43846
|
+
function SithHeader() {
|
|
43847
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center", paddingY: 1 },
|
|
43848
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" }, _config_js__WEBPACK_IMPORTED_MODULE_4__/* .ASCII_LOGO */ .mF.map((line, index) => (
|
|
43842
43849
|
// biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
|
|
43843
43850
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
|
|
43844
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .
|
|
43845
|
-
|
|
43851
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "Turn your context to the dark side")));
|
|
43852
|
+
}
|
|
43853
|
+
function ToolPicker({ selectedIndex }) {
|
|
43854
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center", paddingY: 2 },
|
|
43855
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(SithHeader, null),
|
|
43846
43856
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 4, paddingY: 1 },
|
|
43847
43857
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { marginBottom: 1 },
|
|
43848
43858
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "Select AI Tool")),
|
|
@@ -43858,12 +43868,8 @@ function ToolPicker({ selectedIndex }) {
|
|
|
43858
43868
|
}
|
|
43859
43869
|
function WelcomeScreen({ tool }) {
|
|
43860
43870
|
const toolLabel = TOOLS.find((t) => t.value === tool)?.label ?? tool;
|
|
43861
|
-
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center"
|
|
43862
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column",
|
|
43863
|
-
// biome-ignore lint/suspicious/noArrayIndexKey: static array, order never changes
|
|
43864
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { key: index, color: "red", bold: true }, line)))),
|
|
43865
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center", marginTop: 1 },
|
|
43866
|
-
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { dimColor: true }, "Turn your context to the dark side"),
|
|
43871
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", justifyContent: "center", alignItems: "center" },
|
|
43872
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", alignItems: "center" },
|
|
43867
43873
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan" },
|
|
43868
43874
|
"Tool: ",
|
|
43869
43875
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { bold: true }, toolLabel))),
|
|
@@ -43891,19 +43897,19 @@ function TerminalUI() {
|
|
|
43891
43897
|
const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)("");
|
|
43892
43898
|
const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)([]);
|
|
43893
43899
|
const [showConfigModal, setShowConfigModal] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);
|
|
43894
|
-
const [
|
|
43900
|
+
const [showSkillsMenu, setShowSkillsMenu] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);
|
|
43901
|
+
const nextMessageId = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(1);
|
|
43895
43902
|
const [selectedTool, setSelectedTool] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null);
|
|
43896
43903
|
const [toolPickerIndex, setToolPickerIndex] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(0);
|
|
43897
43904
|
const addMessage = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)((text, type = "system") => {
|
|
43898
43905
|
const newMessage = {
|
|
43899
|
-
id: nextMessageId
|
|
43906
|
+
id: nextMessageId.current++,
|
|
43900
43907
|
text,
|
|
43901
43908
|
type,
|
|
43902
43909
|
timestamp: new Date(),
|
|
43903
43910
|
};
|
|
43904
43911
|
setMessages((previousMessages) => [...previousMessages, newMessage]);
|
|
43905
|
-
|
|
43906
|
-
}, [nextMessageId]);
|
|
43912
|
+
}, []);
|
|
43907
43913
|
const handleDockerShell = (0,react__WEBPACK_IMPORTED_MODULE_2__.useCallback)(async () => {
|
|
43908
43914
|
exit();
|
|
43909
43915
|
console.log("🚀 Starting Docker shell...");
|
|
@@ -43973,8 +43979,7 @@ function TerminalUI() {
|
|
|
43973
43979
|
await handleDockerShell();
|
|
43974
43980
|
break;
|
|
43975
43981
|
case "skills":
|
|
43976
|
-
|
|
43977
|
-
(0,_commands_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .skillsCommand */ .a)();
|
|
43982
|
+
setShowSkillsMenu(true);
|
|
43978
43983
|
break;
|
|
43979
43984
|
case "config":
|
|
43980
43985
|
setShowConfigModal(true);
|
|
@@ -44057,13 +44062,17 @@ function TerminalUI() {
|
|
|
44057
44062
|
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
44058
44063
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_ConfigModal_js__WEBPACK_IMPORTED_MODULE_6__/* .ConfigModal */ .y, { onClose: handleConfigModalClose, onMessage: handleConfigModalMessage })));
|
|
44059
44064
|
}
|
|
44065
|
+
if (showSkillsMenu) {
|
|
44066
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
44067
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_commands_skills_js__WEBPACK_IMPORTED_MODULE_3__/* .SkillsMenu */ .c, { onClose: () => setShowSkillsMenu(false) })));
|
|
44068
|
+
}
|
|
44060
44069
|
if (selectedTool === null) {
|
|
44061
44070
|
return react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ToolPicker, { selectedIndex: toolPickerIndex });
|
|
44062
44071
|
}
|
|
44063
|
-
const shouldShowWelcome = messages.length === 0;
|
|
44064
44072
|
const recentMessages = messages.slice(-10);
|
|
44065
44073
|
return (react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column", height: "100%" },
|
|
44066
|
-
|
|
44074
|
+
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(SithHeader, null),
|
|
44075
|
+
messages.length === 0 ? (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 }))))),
|
|
44067
44076
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { flexDirection: "column" },
|
|
44068
44077
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Box */ .az, { borderStyle: "single", borderColor: "gray", paddingX: 1 },
|
|
44069
44078
|
react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ink__WEBPACK_IMPORTED_MODULE_0__/* .Text */ .EY, { color: "cyan", bold: true }, "\u203A"),
|
|
@@ -44097,6 +44106,7 @@ const SKILLS_CATALOG = [
|
|
|
44097
44106
|
name: "caveman",
|
|
44098
44107
|
description: "Ultra-compressed communication (~75% token reduction)",
|
|
44099
44108
|
homepage: "https://github.com/JuliusBrussee/caveman",
|
|
44109
|
+
autoLoad: true,
|
|
44100
44110
|
builtinInstructions: `---
|
|
44101
44111
|
name: caveman
|
|
44102
44112
|
description: Ultra-compressed communication mode (ultra — MAX compression, always active).
|
|
@@ -44352,31 +44362,33 @@ __webpack_async_result__();
|
|
|
44352
44362
|
/* harmony export */ ac: () => (/* binding */ buildDockerShellCommand),
|
|
44353
44363
|
/* harmony export */ fn: () => (/* binding */ buildDockerClaudeCodeCommand)
|
|
44354
44364
|
/* harmony export */ });
|
|
44355
|
-
/* harmony import */ var
|
|
44356
|
-
/* harmony import */ var
|
|
44357
|
-
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6878);
|
|
44358
|
-
/* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(6400);
|
|
44359
|
-
|
|
44365
|
+
/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(6878);
|
|
44366
|
+
/* harmony import */ var _skills_js__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6400);
|
|
44360
44367
|
|
|
44361
44368
|
|
|
44362
44369
|
function buildDockerShellCommand(githubToken, claudeOauthToken) {
|
|
44370
|
+
(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .syncClaudeMd */ .RK)();
|
|
44363
44371
|
const args = [
|
|
44364
44372
|
"run",
|
|
44365
44373
|
"--rm",
|
|
44366
44374
|
"-it",
|
|
44367
44375
|
"-v",
|
|
44368
|
-
`${process.cwd()}:${
|
|
44376
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44377
|
+
"-v",
|
|
44378
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
44369
44379
|
"-v",
|
|
44370
|
-
`${(0,
|
|
44380
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`,
|
|
44371
44381
|
"-v",
|
|
44372
|
-
`${(0,
|
|
44382
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getClaudeMdPath */ .pF)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}/CLAUDE.md`,
|
|
44383
|
+
"-v",
|
|
44384
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44373
44385
|
"-e",
|
|
44374
44386
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44375
44387
|
];
|
|
44376
44388
|
if (claudeOauthToken) {
|
|
44377
44389
|
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44378
44390
|
}
|
|
44379
|
-
args.push("--entrypoint", "nix-shell",
|
|
44391
|
+
args.push("--entrypoint", "nix-shell", _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName, _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.shellEntrypoint);
|
|
44380
44392
|
return args;
|
|
44381
44393
|
}
|
|
44382
44394
|
function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
@@ -44385,18 +44397,18 @@ function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
|
44385
44397
|
"--rm",
|
|
44386
44398
|
"-it",
|
|
44387
44399
|
"-v",
|
|
44388
|
-
`${process.cwd()}:${
|
|
44400
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44389
44401
|
"-v",
|
|
44390
|
-
`${(0,
|
|
44402
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.skillsMount}`,
|
|
44391
44403
|
"-v",
|
|
44392
|
-
`${(0,
|
|
44404
|
+
`${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getOpenCodeConfigPath */ .Jn)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.opencodeConfigMount}`,
|
|
44393
44405
|
"-e",
|
|
44394
44406
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44395
44407
|
];
|
|
44396
44408
|
if (claudeOauthToken) {
|
|
44397
44409
|
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44398
44410
|
}
|
|
44399
|
-
args.push("--entrypoint", "bash",
|
|
44411
|
+
args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
|
|
44400
44412
|
let opencodeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && opencode -m github-copilot/claude-sonnet-4.6";
|
|
44401
44413
|
if (prompt) {
|
|
44402
44414
|
const escapedPrompt = prompt.replace(/'/g, "'\\''");
|
|
@@ -44406,33 +44418,29 @@ function buildDockerOpencodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
|
44406
44418
|
return args;
|
|
44407
44419
|
}
|
|
44408
44420
|
function buildDockerClaudeCodeCommand(githubToken, prompt, claudeOauthToken) {
|
|
44409
|
-
|
|
44410
|
-
const claudeMdPath = (0,
|
|
44421
|
+
(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .syncClaudeMd */ .RK)();
|
|
44422
|
+
const claudeMdPath = (0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getClaudeMdPath */ .pF)();
|
|
44411
44423
|
const args = [
|
|
44412
44424
|
"run",
|
|
44413
44425
|
"--rm",
|
|
44414
44426
|
"-it",
|
|
44415
44427
|
"-v",
|
|
44416
|
-
`${process.cwd()}:${
|
|
44428
|
+
`${process.cwd()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.workspaceMount}`,
|
|
44417
44429
|
"-e",
|
|
44418
44430
|
`GITHUB_TOKEN=${githubToken}`,
|
|
44419
44431
|
];
|
|
44420
44432
|
if (claudeOauthToken) {
|
|
44421
44433
|
args.push("-e", `CLAUDE_CODE_OAUTH_TOKEN=${claudeOauthToken}`);
|
|
44422
44434
|
}
|
|
44423
|
-
// Mount ~/.
|
|
44424
|
-
|
|
44425
|
-
args.push("-v", `${claudeConfigDir}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}`);
|
|
44426
|
-
}
|
|
44427
|
-
// Skills dir overrides /root/.claude/skills inside the container
|
|
44428
|
-
args.push("-v", `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_2__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_1__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`);
|
|
44435
|
+
// Mount only ~/.sith/ contents — never expose ~/.claude to the container
|
|
44436
|
+
args.push("-v", `${(0,_skills_js__WEBPACK_IMPORTED_MODULE_1__/* .getSkillsDir */ .YJ)()}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}`);
|
|
44429
44437
|
// Generated CLAUDE.md (with skill @imports) overrides any CLAUDE.md from ~/.claude
|
|
44430
|
-
args.push("-v", `${claudeMdPath}:${
|
|
44431
|
-
args.push("--entrypoint", "bash",
|
|
44438
|
+
args.push("-v", `${claudeMdPath}:${_config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.claudeConfigMount}/CLAUDE.md`);
|
|
44439
|
+
args.push("--entrypoint", "bash", _config_js__WEBPACK_IMPORTED_MODULE_0__/* .DOCKER_CONFIG */ .e6.imageName, "-c");
|
|
44432
44440
|
let claudeCommand = "source /opt/sith/nix/nix-scripts/setup.sh && cd /workspace && /root/.npm-global/bin/claude";
|
|
44433
44441
|
if (prompt) {
|
|
44434
44442
|
const escapedPrompt = prompt.replace(/'/g, "'\\''");
|
|
44435
|
-
claudeCommand += `
|
|
44443
|
+
claudeCommand += ` '${escapedPrompt}'`;
|
|
44436
44444
|
}
|
|
44437
44445
|
args.push(claudeCommand);
|
|
44438
44446
|
return args;
|
|
@@ -44506,14 +44514,16 @@ function getMessagePrefix(type) {
|
|
|
44506
44514
|
|
|
44507
44515
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
44508
44516
|
/* harmony export */ Jn: () => (/* binding */ getOpenCodeConfigPath),
|
|
44509
|
-
/* harmony export */
|
|
44517
|
+
/* harmony export */ RK: () => (/* binding */ syncClaudeMd),
|
|
44510
44518
|
/* harmony export */ YJ: () => (/* binding */ getSkillsDir),
|
|
44511
44519
|
/* harmony export */ j$: () => (/* binding */ isInstalled),
|
|
44520
|
+
/* harmony export */ lJ: () => (/* binding */ setSkillAutoLoad),
|
|
44512
44521
|
/* harmony export */ pF: () => (/* binding */ getClaudeMdPath),
|
|
44513
44522
|
/* harmony export */ rP: () => (/* binding */ installSkill),
|
|
44514
|
-
/* harmony export */ wW: () => (/* binding */ uninstallSkill)
|
|
44523
|
+
/* harmony export */ wW: () => (/* binding */ uninstallSkill),
|
|
44524
|
+
/* harmony export */ z8: () => (/* binding */ getSkillAutoLoad)
|
|
44515
44525
|
/* harmony export */ });
|
|
44516
|
-
/* unused harmony
|
|
44526
|
+
/* unused harmony exports getClaudeConfigDir, findInstructionsFile */
|
|
44517
44527
|
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
|
|
44518
44528
|
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);
|
|
44519
44529
|
/* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(8161);
|
|
@@ -44528,8 +44538,9 @@ function getMessagePrefix(type) {
|
|
|
44528
44538
|
|
|
44529
44539
|
|
|
44530
44540
|
const OPENCODE_SCHEMA = "https://opencode.ai/config.json";
|
|
44541
|
+
const DEFAULT_MODEL = "github-copilot/claude-sonnet-4.6";
|
|
44531
44542
|
function defaultConfig() {
|
|
44532
|
-
return { $schema: OPENCODE_SCHEMA, instructions: [] };
|
|
44543
|
+
return { $schema: OPENCODE_SCHEMA, model: DEFAULT_MODEL, instructions: [] };
|
|
44533
44544
|
}
|
|
44534
44545
|
function getSkillsDir() {
|
|
44535
44546
|
const dir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "skills");
|
|
@@ -44537,25 +44548,38 @@ function getSkillsDir() {
|
|
|
44537
44548
|
return dir;
|
|
44538
44549
|
}
|
|
44539
44550
|
function getClaudeConfigDir() {
|
|
44540
|
-
return
|
|
44551
|
+
return path.join(os.homedir(), ".claude");
|
|
44541
44552
|
}
|
|
44542
44553
|
function getClaudeMdPath() {
|
|
44543
44554
|
const claudeMdPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "CLAUDE.md");
|
|
44544
|
-
|
|
44545
|
-
|
|
44546
|
-
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(claudeMdPath, "");
|
|
44555
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(claudeMdPath), { recursive: true });
|
|
44556
|
+
try {
|
|
44557
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(claudeMdPath, "", { flag: "ax" });
|
|
44558
|
+
}
|
|
44559
|
+
catch {
|
|
44560
|
+
// already exists
|
|
44547
44561
|
}
|
|
44548
44562
|
return claudeMdPath;
|
|
44549
44563
|
}
|
|
44550
44564
|
function getOpenCodeConfigPath() {
|
|
44551
44565
|
const configPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(node_os__WEBPACK_IMPORTED_MODULE_1___default().homedir(), ".sith", "opencode.json");
|
|
44552
44566
|
// Docker bind-mount creates a directory if the source doesn't exist; ensure it's a file.
|
|
44553
|
-
|
|
44554
|
-
node_fs__WEBPACK_IMPORTED_MODULE_0___default().
|
|
44567
|
+
try {
|
|
44568
|
+
if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().statSync(configPath).isDirectory()) {
|
|
44569
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(configPath, { recursive: true, force: true });
|
|
44570
|
+
}
|
|
44555
44571
|
}
|
|
44556
|
-
|
|
44557
|
-
|
|
44558
|
-
|
|
44572
|
+
catch {
|
|
44573
|
+
// doesn't exist yet
|
|
44574
|
+
}
|
|
44575
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(configPath), { recursive: true });
|
|
44576
|
+
try {
|
|
44577
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(configPath, JSON.stringify(defaultConfig(), null, 2), {
|
|
44578
|
+
flag: "ax",
|
|
44579
|
+
});
|
|
44580
|
+
}
|
|
44581
|
+
catch {
|
|
44582
|
+
// already exists
|
|
44559
44583
|
}
|
|
44560
44584
|
return configPath;
|
|
44561
44585
|
}
|
|
@@ -44563,6 +44587,10 @@ function readConfig() {
|
|
|
44563
44587
|
const parsed = JSON.parse(node_fs__WEBPACK_IMPORTED_MODULE_0___default().readFileSync(getOpenCodeConfigPath(), "utf8"));
|
|
44564
44588
|
if (!Array.isArray(parsed.instructions))
|
|
44565
44589
|
parsed.instructions = [];
|
|
44590
|
+
if (!parsed.model) {
|
|
44591
|
+
parsed.model = DEFAULT_MODEL;
|
|
44592
|
+
writeConfig(parsed);
|
|
44593
|
+
}
|
|
44566
44594
|
return parsed;
|
|
44567
44595
|
}
|
|
44568
44596
|
function writeConfig(config) {
|
|
@@ -44576,8 +44604,21 @@ function addInstruction(containerPath) {
|
|
|
44576
44604
|
}
|
|
44577
44605
|
}
|
|
44578
44606
|
function syncClaudeMd() {
|
|
44579
|
-
const
|
|
44580
|
-
const lines =
|
|
44607
|
+
const skillsDir = getSkillsDir();
|
|
44608
|
+
const lines = [];
|
|
44609
|
+
for (const name of node_fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(skillsDir)) {
|
|
44610
|
+
const skillDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(skillsDir, name);
|
|
44611
|
+
const skillJsonPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(skillDir, "skill.json");
|
|
44612
|
+
if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(skillJsonPath))
|
|
44613
|
+
continue;
|
|
44614
|
+
const meta = JSON.parse(node_fs__WEBPACK_IMPORTED_MODULE_0___default().readFileSync(skillJsonPath, "utf8"));
|
|
44615
|
+
if (meta.autoLoad !== true)
|
|
44616
|
+
continue;
|
|
44617
|
+
const instructionsFile = findInstructionsFile(skillDir);
|
|
44618
|
+
if (instructionsFile) {
|
|
44619
|
+
lines.push(`@${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.claudeSkillsMount}/${name}/${instructionsFile}`);
|
|
44620
|
+
}
|
|
44621
|
+
}
|
|
44581
44622
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(getClaudeMdPath(), lines.join("\n") + (lines.length ? "\n" : ""));
|
|
44582
44623
|
}
|
|
44583
44624
|
function removeInstructionsUnder(skillContainerDir) {
|
|
@@ -44599,13 +44640,45 @@ function findInstructionsFile(skillDir) {
|
|
|
44599
44640
|
function isInstalled(name) {
|
|
44600
44641
|
return node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), name, "skill.json"));
|
|
44601
44642
|
}
|
|
44643
|
+
function getSkillAutoLoad(name) {
|
|
44644
|
+
const skillJsonPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), name, "skill.json");
|
|
44645
|
+
if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(skillJsonPath))
|
|
44646
|
+
return false;
|
|
44647
|
+
const meta = JSON.parse(node_fs__WEBPACK_IMPORTED_MODULE_0___default().readFileSync(skillJsonPath, "utf8"));
|
|
44648
|
+
return meta.autoLoad === true;
|
|
44649
|
+
}
|
|
44650
|
+
function setSkillAutoLoad(name, autoLoad) {
|
|
44651
|
+
const skillDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), name);
|
|
44652
|
+
const skillJsonPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(skillDir, "skill.json");
|
|
44653
|
+
if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(skillJsonPath))
|
|
44654
|
+
return;
|
|
44655
|
+
const meta = JSON.parse(node_fs__WEBPACK_IMPORTED_MODULE_0___default().readFileSync(skillJsonPath, "utf8"));
|
|
44656
|
+
meta.autoLoad = autoLoad;
|
|
44657
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(skillJsonPath, JSON.stringify(meta, null, 2));
|
|
44658
|
+
if (autoLoad) {
|
|
44659
|
+
const instructionsFile = findInstructionsFile(skillDir);
|
|
44660
|
+
if (instructionsFile) {
|
|
44661
|
+
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${name}/${instructionsFile}`);
|
|
44662
|
+
}
|
|
44663
|
+
}
|
|
44664
|
+
else {
|
|
44665
|
+
removeInstructionsUnder(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${name}/`);
|
|
44666
|
+
}
|
|
44667
|
+
syncClaudeMd();
|
|
44668
|
+
}
|
|
44602
44669
|
async function installSkill(skill) {
|
|
44603
44670
|
const targetDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(getSkillsDir(), skill.name);
|
|
44604
44671
|
if (skill.builtinInstructions) {
|
|
44605
44672
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(targetDir, { recursive: true });
|
|
44606
44673
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "SKILL.md"), skill.builtinInstructions);
|
|
44607
|
-
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "skill.json"), JSON.stringify({
|
|
44608
|
-
|
|
44674
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "skill.json"), JSON.stringify({
|
|
44675
|
+
name: skill.name,
|
|
44676
|
+
version: "builtin",
|
|
44677
|
+
autoLoad: skill.autoLoad ?? false,
|
|
44678
|
+
}, null, 2));
|
|
44679
|
+
if (skill.autoLoad === true) {
|
|
44680
|
+
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/SKILL.md`);
|
|
44681
|
+
}
|
|
44609
44682
|
syncClaudeMd();
|
|
44610
44683
|
return;
|
|
44611
44684
|
}
|
|
@@ -44625,11 +44698,18 @@ async function installSkill(skill) {
|
|
|
44625
44698
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(targetDir, { recursive: true, force: true });
|
|
44626
44699
|
node_fs__WEBPACK_IMPORTED_MODULE_0___default().cpSync(extracted, targetDir, { recursive: true });
|
|
44627
44700
|
const skillJson = node_path__WEBPACK_IMPORTED_MODULE_2___default().join(targetDir, "skill.json");
|
|
44628
|
-
|
|
44629
|
-
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(skillJson, JSON.stringify({
|
|
44701
|
+
try {
|
|
44702
|
+
node_fs__WEBPACK_IMPORTED_MODULE_0___default().writeFileSync(skillJson, JSON.stringify({
|
|
44703
|
+
name: skill.name,
|
|
44704
|
+
version: "local",
|
|
44705
|
+
autoLoad: skill.autoLoad ?? false,
|
|
44706
|
+
}, null, 2), { flag: "ax" });
|
|
44707
|
+
}
|
|
44708
|
+
catch {
|
|
44709
|
+
// already exists (skill.json bundled in archive)
|
|
44630
44710
|
}
|
|
44631
44711
|
const instructionsFile = findInstructionsFile(targetDir);
|
|
44632
|
-
if (instructionsFile) {
|
|
44712
|
+
if (instructionsFile && skill.autoLoad === true) {
|
|
44633
44713
|
addInstruction(`${_config_js__WEBPACK_IMPORTED_MODULE_3__/* .DOCKER_CONFIG */ .e6.skillsMount}/${skill.name}/${instructionsFile}`);
|
|
44634
44714
|
}
|
|
44635
44715
|
syncClaudeMd();
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -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,CACtC,WAAW,EAAE,MAAM,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,
|
|
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,CA6BV;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,CAqCV"}
|
package/dist/utils/skills.d.ts
CHANGED
|
@@ -3,8 +3,11 @@ export declare function getSkillsDir(): string;
|
|
|
3
3
|
export declare function getClaudeConfigDir(): string;
|
|
4
4
|
export declare function getClaudeMdPath(): string;
|
|
5
5
|
export declare function getOpenCodeConfigPath(): string;
|
|
6
|
+
export declare function syncClaudeMd(): void;
|
|
6
7
|
export declare function findInstructionsFile(skillDir: string): string | null;
|
|
7
8
|
export declare function isInstalled(name: string): boolean;
|
|
9
|
+
export declare function getSkillAutoLoad(name: string): boolean;
|
|
10
|
+
export declare function setSkillAutoLoad(name: string, autoLoad: boolean): void;
|
|
8
11
|
export declare function installSkill(skill: SkillEntry): Promise<void>;
|
|
9
12
|
export declare function uninstallSkill(name: string): void;
|
|
10
13
|
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -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;
|
|
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;AAe9C,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAmB9C;AAwBD,wBAAgB,YAAY,IAAI,IAAI,CAoBnC;AAUD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYpE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAkBtE;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EnE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOjD"}
|
package/docker/Dockerfile
CHANGED
|
@@ -67,6 +67,13 @@ COPY --from=builder /root/.opencode /root/.opencode
|
|
|
67
67
|
COPY --from=builder /root/.npm-global /root/.npm-global
|
|
68
68
|
COPY --from=builder /root/.npmrc /root/.npmrc
|
|
69
69
|
|
|
70
|
+
# Bake default Claude Code config (theme, permissions, caveman mode)
|
|
71
|
+
COPY docker/claude-defaults/ /root/.claude/
|
|
72
|
+
|
|
73
|
+
# Entrypoint script: generates .credentials.json from CLAUDE_CODE_OAUTH_TOKEN before nix-shell
|
|
74
|
+
COPY docker/entrypoint.sh /opt/sith/entrypoint.sh
|
|
75
|
+
RUN chmod +x /opt/sith/entrypoint.sh
|
|
76
|
+
|
|
70
77
|
# Créer un utilisateur non-root pour l'exécution
|
|
71
78
|
RUN mkdir -p /home/sith && \
|
|
72
79
|
echo "sith:x:1000:1000:Sith User:/home/sith:/bin/sh" >> /etc/passwd && \
|
|
@@ -86,6 +93,8 @@ ENV OPENCODE_MODEL=github-copilot/claude-sonnet-4.5
|
|
|
86
93
|
ENV OPENCODE_LOG_LEVEL=INFO
|
|
87
94
|
ENV NODE_ENV=production
|
|
88
95
|
ENV CLAUDE_CODE_OAUTH_TOKEN=""
|
|
96
|
+
ENV IS_DEMO=1
|
|
97
|
+
ENV CLAUDE_CONFIG_DIR=/root/.claude
|
|
89
98
|
ENV PATH="/root/.opencode/bin:/root/.local/bin:/root/.npm-global/bin:${PATH}"
|
|
90
99
|
ENV NPM_CONFIG_PREFIX=/root/.npm-global
|
|
91
100
|
ENV HOME=/root
|
|
@@ -106,8 +115,8 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
|
106
115
|
# Répertoire de travail pour les projets
|
|
107
116
|
WORKDIR /workspace
|
|
108
117
|
|
|
109
|
-
# Point d'entrée
|
|
110
|
-
ENTRYPOINT ["
|
|
118
|
+
# Point d'entrée: génère .credentials.json puis lance nix-shell
|
|
119
|
+
ENTRYPOINT ["/opt/sith/entrypoint.sh"]
|
|
111
120
|
|
|
112
121
|
# Commande par défaut
|
|
113
122
|
CMD ["opencode --help"]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"firstStartTime": "2025-01-01T00:00:00.000Z",
|
|
3
|
+
"opusProMigrationComplete": true,
|
|
4
|
+
"sonnet1m45MigrationComplete": true,
|
|
5
|
+
"seenNotifications": {},
|
|
6
|
+
"migrationVersion": 13,
|
|
7
|
+
"hasCompletedOnboarding": true,
|
|
8
|
+
"theme": "dark",
|
|
9
|
+
"userID": "069fb867041624d227d787be4b08e8c6c165f945083ffdcc91a933153e9bc18e"
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@/root/.claude/skills/caveman/SKILL.md
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"theme": "dark",
|
|
3
|
+
"verbose": true,
|
|
4
|
+
"dangerouslySkipPermissions": true,
|
|
5
|
+
"skipDangerousModePermissionPrompt": true,
|
|
6
|
+
"hasCompletedOnboarding": true,
|
|
7
|
+
"permissions": {
|
|
8
|
+
"allow": ["Bash(*)", "Read(*)", "Write(*)", "Edit(*)", "WebFetch(*)", "WebSearch(*)", "Agent(*)"]
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Generate .credentials.json from CLAUDE_CODE_OAUTH_TOKEN if present and not already authenticated
|
|
3
|
+
if [ -n "$CLAUDE_CODE_OAUTH_TOKEN" ] && [ ! -f /root/.claude/.credentials.json ]; then
|
|
4
|
+
mkdir -p /root/.claude
|
|
5
|
+
printf '{"claudeAiOauth":{"accessToken":"%s","expiresAt":4102444800000}}\n' "$CLAUDE_CODE_OAUTH_TOKEN" \
|
|
6
|
+
> /root/.claude/.credentials.json
|
|
7
|
+
chmod 600 /root/.claude/.credentials.json
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
exec nix-shell /opt/sith/nix/shell.nix --run "$@"
|
|
@@ -5,6 +5,15 @@ 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
7
|
export CLAUDE_CODE_OAUTH_TOKEN="${CLAUDE_CODE_OAUTH_TOKEN:-}"
|
|
8
|
+
export IS_DEMO="${IS_DEMO:-1}"
|
|
9
|
+
|
|
10
|
+
# Generate .credentials.json from token so interactive claude skips login wizard
|
|
11
|
+
if [ -n "$CLAUDE_CODE_OAUTH_TOKEN" ] && [ ! -f /root/.claude/.credentials.json ]; then
|
|
12
|
+
mkdir -p /root/.claude
|
|
13
|
+
printf '{"claudeAiOauth":{"accessToken":"%s","expiresAt":4102444800000}}\n' "$CLAUDE_CODE_OAUTH_TOKEN" \
|
|
14
|
+
> /root/.claude/.credentials.json
|
|
15
|
+
chmod 600 /root/.claude/.credentials.json
|
|
16
|
+
fi
|
|
8
17
|
|
|
9
18
|
# Chemins personnalisés
|
|
10
19
|
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.21.1",
|
|
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": {
|