@m14i/sith 1.15.0 → 1.17.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.
Files changed (41) hide show
  1. package/dist/commands/__tests__/nix.test.d.ts +2 -0
  2. package/dist/commands/__tests__/nix.test.d.ts.map +1 -0
  3. package/dist/commands/docker.d.ts.map +1 -1
  4. package/dist/commands/nix.d.ts +1 -0
  5. package/dist/commands/nix.d.ts.map +1 -1
  6. package/dist/commands/skills.d.ts.map +1 -1
  7. package/dist/components/ConfigModal.d.ts +1 -1
  8. package/dist/components/ConfigModal.d.ts.map +1 -1
  9. package/dist/components/TerminalUI.d.ts.map +1 -1
  10. package/dist/config.d.ts +2 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/index.js +604 -428
  13. package/dist/package.json +1 -1
  14. package/dist/types.d.ts +2 -1
  15. package/dist/types.d.ts.map +1 -1
  16. package/dist/utils/__tests__/dockerArgs.test.d.ts +2 -0
  17. package/dist/utils/__tests__/dockerArgs.test.d.ts.map +1 -0
  18. package/dist/utils/__tests__/githubToken.test.d.ts +2 -0
  19. package/dist/utils/__tests__/githubToken.test.d.ts.map +1 -0
  20. package/dist/utils/__tests__/messageUtils.test.d.ts +2 -0
  21. package/dist/utils/__tests__/messageUtils.test.d.ts.map +1 -0
  22. package/dist/utils/__tests__/skills.test.d.ts +2 -0
  23. package/dist/utils/__tests__/skills.test.d.ts.map +1 -0
  24. package/dist/utils/__tests__/slashCommands.test.d.ts +2 -0
  25. package/dist/utils/__tests__/slashCommands.test.d.ts.map +1 -0
  26. package/dist/utils/dockerArgs.d.ts +3 -0
  27. package/dist/utils/dockerArgs.d.ts.map +1 -0
  28. package/dist/utils/githubToken.d.ts +2 -0
  29. package/dist/utils/githubToken.d.ts.map +1 -0
  30. package/dist/utils/messageUtils.d.ts +4 -0
  31. package/dist/utils/messageUtils.d.ts.map +1 -0
  32. package/dist/utils/skills.d.ts +2 -0
  33. package/dist/utils/skills.d.ts.map +1 -1
  34. package/dist/utils/slashCommands.d.ts.map +1 -1
  35. package/docker/Dockerfile +6 -13
  36. package/docker/nix/nix-scripts/02-env-vars.sh +0 -1
  37. package/docker/nix/nix-scripts/03-directories.sh +2 -1
  38. package/docker/nix/nix-scripts/06-skills-setup.sh +14 -20
  39. package/docker/nix/nix-scripts/setup.sh +7 -0
  40. package/package.json +8 -3
  41. package/dist/package1.json +0 -137
package/dist/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@m14i/sith","version":"1.15.0","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.","type":"module","repository":{"type":"git","url":"https://github.com/MerzoukeMansouri/sith.git"},"bin":{"sith":"./dist/index.js"},"scripts":{"build":"ncc build src/index.ts -o dist && rm -rf dist/assets && cp -r assets dist/","dev":"tsx src/index.ts","dev:build":"pnpm build && node dist/index.js","dev:shell":"pnpm build && node dist/index.js shell","typecheck":"tsc --noEmit","clean":"rm -rf dist","prepublishOnly":"pnpm build"},"files":["dist","assets","docker"],"keywords":["opencode","docker","ci","automation","cli","nix"],"author":"","license":"MIT","dependencies":{"@inquirer/prompts":"^5.0.0","chalk":"^5.3.0","commander":"^12.1.0","execa":"^9.0.0","ink":"^7.0.3","ink-text-input":"^6.0.0","react":"^19.2.6","update-notifier":"^7.3.1"},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^11.0.1","@semantic-release/npm":"^12.0.1","@types/node":"^20.12.7","@types/react":"^19.2.14","@types/update-notifier":"^6.0.8","@vercel/ncc":"^0.38.1","semantic-release":"^24.2.0","tsx":"^4.7.2","typescript":"^5.4.5"},"engines":{"node":">=18"}}
1
+ {"name":"ink","version":"7.0.3","description":"React for CLI","license":"MIT","repository":"vadimdemedes/ink","author":{"name":"Vadim Demedes","email":"vadimdemedes@hey.com","url":"https://github.com/vadimdemedes"},"type":"module","exports":{"types":"./build/index.d.ts","default":"./build/index.js"},"engines":{"node":">=22"},"scripts":{"dev":"tsc --watch","build":"tsc","prepare":"npm run build","test":"npm run typecheck && npm run lint && FORCE_COLOR=true ava","lint":"xo","format":"prettier --write .","typecheck":"tsc --noEmit","example":"NODE_NO_WARNINGS=1 node --import=tsx","benchmark":"NODE_NO_WARNINGS=1 node --import=tsx","inspect":"react-devtools"},"files":["build"],"keywords":["react","cli","jsx","stdout","components","command-line","preact","redux","print","render","colors","text"],"dependencies":{"@alcalzone/ansi-tokenize":"^0.3.0","ansi-escapes":"^7.3.0","ansi-styles":"^6.2.3","auto-bind":"^5.0.1","chalk":"^5.6.2","cli-boxes":"^4.0.1","cli-cursor":"^4.0.0","cli-truncate":"^6.0.0","code-excerpt":"^4.0.0","es-toolkit":"^1.45.1","indent-string":"^5.0.0","is-in-ci":"^2.0.0","patch-console":"^2.0.0","react-reconciler":"^0.33.0","scheduler":"^0.27.0","signal-exit":"^3.0.7","slice-ansi":"^9.0.0","stack-utils":"^2.0.6","string-width":"^8.2.0","terminal-size":"^4.0.1","type-fest":"^5.5.0","widest-line":"^6.0.0","wrap-ansi":"^10.0.0","ws":"^8.20.0","yoga-layout":"~3.2.1"},"devDependencies":{"@faker-js/faker":"^10.4.0","@sindresorhus/tsconfig":"^8.1.0","@sinonjs/fake-timers":"^15.3.0","@types/ms":"^2.1.0","@types/node":"^25.5.2","@types/react":"^19.2.14","@types/react-reconciler":"^0.33.0","@types/scheduler":"^0.26.0","@types/signal-exit":"^3.0.0","@types/sinon":"^21.0.1","@types/stack-utils":"^2.0.3","@types/ws":"^8.18.1","@vdemedes/prettier-config":"^2.0.1","ava":"^7.0.0","boxen":"^8.0.1","delay":"^7.0.0","ms":"^2.1.3","node-pty":"^1.2.0-beta.12","p-queue":"^9.1.2","prettier":"^3.8.1","react":"^19.2.4","react-devtools":"^7.0.1","react-devtools-core":"^7.0.1","react-router":"^7.14.0","sinon":"^21.0.3","strip-ansi":"^7.2.0","tsx":"^4.21.0","typescript":"^5.8.3","xo":"^1.2.3"},"peerDependencies":{"@types/react":">=19.2.0","react":">=19.2.0","react-devtools-core":">=6.1.2"},"peerDependenciesMeta":{"@types/react":{"optional":true},"react-devtools-core":{"optional":true}},"ava":{"workerThreads":false,"serial":true,"files":["test/**/*","!test/helpers/**/*","!test/fixtures/**/*"],"extensions":{"ts":"module","tsx":"module"},"nodeArguments":["--import=tsx"]},"prettier":"@vdemedes/prettier-config"}
package/dist/types.d.ts CHANGED
@@ -17,6 +17,7 @@ export interface NixCommandOptions {
17
17
  export interface SkillEntry {
18
18
  name: string;
19
19
  description: string;
20
- source: string;
20
+ source?: string;
21
21
  homepage: string;
22
+ builtinInstructions?: string;
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB"}
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;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dockerArgs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerArgs.test.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/__tests__/dockerArgs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=githubToken.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubToken.test.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/__tests__/githubToken.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messageUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageUtils.test.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/__tests__/messageUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skills.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.test.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/__tests__/skills.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=slashCommands.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slashCommands.test.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/__tests__/slashCommands.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare function buildDockerShellCommand(githubToken: string): string[];
2
+ export declare function buildDockerOpencodeCommand(githubToken: string, prompt?: string): string[];
3
+ //# sourceMappingURL=dockerArgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerArgs.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/dockerArgs.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBrE;AAED,wBAAgB,0BAA0B,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CA6BV"}
@@ -0,0 +1,2 @@
1
+ export declare function getGitHubToken(): Promise<string>;
2
+ //# sourceMappingURL=githubToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubToken.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/githubToken.ts"],"names":[],"mappings":"AAEA,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAQtD"}
@@ -0,0 +1,4 @@
1
+ export type MessageType = "system" | "user" | "success" | "error" | "info";
2
+ export declare function getMessageColor(type: MessageType): string | undefined;
3
+ export declare function getMessagePrefix(type: MessageType): string;
4
+ //# sourceMappingURL=messageUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageUtils.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/messageUtils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAerE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAS1D"}
@@ -1,5 +1,7 @@
1
1
  import type { SkillEntry } from "../types.js";
2
2
  export declare function getSkillsDir(): string;
3
+ export declare function getOpenCodeConfigPath(): string;
4
+ export declare function findInstructionsFile(skillDir: string): string | null;
3
5
  export declare function isInstalled(name: string): boolean;
4
6
  export declare function installSkill(skill: SkillEntry): Promise<void>;
5
7
  export declare function uninstallSkill(name: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BnE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKjD"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/skills.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9C,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAW9C;AA4BD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYpE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDnE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/slashCommands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAqBpE;AAED,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAOtF"}
1
+ {"version":3,"file":"slashCommands.d.ts","sourceRoot":"","sources":["file:///home/runner/work/sith/sith/src/utils/slashCommands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAqBpE;AAED,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC,CAOD"}
package/docker/Dockerfile CHANGED
@@ -21,15 +21,10 @@ COPY assets/ /opt/sith/assets/
21
21
  # Copier les fichiers Nix (scripts, config, shell.nix)
22
22
  COPY docker/nix/ /opt/sith/nix/
23
23
 
24
- # Configurer npm pour utiliser le registry public
25
- RUN echo "registry=https://registry.npmjs.org/" > /root/.npmrc
26
-
27
- # Pré-charger l'environnement Nix (installe tous les packages)
28
- # Cela cache les dépendances dans le layer Docker
29
- RUN nix-shell /opt/sith/nix/shell.nix --run "echo '✅ Environment cached'"
30
-
31
- # Installer OpenCode CLI via script officiel
32
- RUN nix-shell /opt/sith/nix/shell.nix --run " \
24
+ # Configurer npm, pré-charger Nix et installer OpenCode CLI
25
+ RUN echo "registry=https://registry.npmjs.org/" > /root/.npmrc && \
26
+ nix-shell /opt/sith/nix/shell.nix --run "echo '✅ Environment cached'" && \
27
+ nix-shell /opt/sith/nix/shell.nix --run " \
33
28
  curl -fsSL https://opencode.ai/install | bash && \
34
29
  patchelf --set-interpreter \$(patchelf --print-interpreter \$(which bash)) /root/.opencode/bin/opencode && \
35
30
  /root/.opencode/bin/opencode --version \
@@ -84,10 +79,8 @@ ENV NPM_CONFIG_PREFIX=/root/.npm-global
84
79
  ENV HOME=/root
85
80
 
86
81
  # === Skills Configuration ===
87
- # Skills are loaded at runtime from the host via volume mount:
88
- # docker run -v ~/.sith/skills:/opt/sith/external-skills ...
89
- # Each skill must have a skill.json in its directory.
90
- ENV SITH_EXTERNAL_SKILLS=/opt/sith/external-skills
82
+ # Skills loaded at runtime via volume mount:
83
+ # docker run -v ~/.sith/skills:/root/.opencode/skills ...
91
84
 
92
85
  # Note: Keep running as root due to Nix permission requirements
93
86
  # Nix-shell needs to modify /nix/var/nix/profiles/per-user at runtime
@@ -8,7 +8,6 @@ export NODE_ENV="${NODE_ENV:-production}"
8
8
  # Chemins personnalisés
9
9
  export PATH="/root/.opencode/bin:$PATH"
10
10
  export PATH="/root/.local/bin:$PATH"
11
- export PATH="/root/.agents/skills/rtk/bin:$PATH"
12
11
  export PATH="/root/.npm-global/bin:$PATH"
13
12
 
14
13
  # Configuration npm
@@ -4,4 +4,5 @@
4
4
  mkdir -p /root/.local/bin
5
5
  mkdir -p /root/.local/share/opencode
6
6
  mkdir -p /workspace/opencode-output
7
- mkdir -p /opt/sith/external-skills
7
+ mkdir -p /root/.opencode/skills
8
+ mkdir -p /root/.config/opencode
@@ -1,34 +1,28 @@
1
1
  #!/bin/bash
2
- # Skills installation from volume mount (~/.sith/skills /opt/sith/external-skills)
2
+ # Display active skills mounted via volume at /root/.opencode/skills/
3
3
 
4
- EXTERNAL_SKILLS_DIR="${SITH_EXTERNAL_SKILLS:-/opt/sith/external-skills}"
5
- declare -a INSTALLED_SKILLS=()
4
+ SKILLS_DIR="/root/.opencode/skills"
5
+ declare -a ACTIVE_SKILLS=()
6
6
 
7
- mkdir -p /root/.agents/skills
8
-
9
- if [ -d "$EXTERNAL_SKILLS_DIR" ]; then
10
- for skill_dir in "$EXTERNAL_SKILLS_DIR"/*/; do
7
+ if [ -d "$SKILLS_DIR" ]; then
8
+ for skill_dir in "$SKILLS_DIR"/*/; do
11
9
  [ -d "$skill_dir" ] || continue
12
10
  [ -f "$skill_dir/skill.json" ] || continue
13
11
  skill_name=$(basename "$skill_dir")
14
- cp -r "$skill_dir" "/root/.agents/skills/$skill_name"
15
- if [ -f "/root/.agents/skills/$skill_name/skill.sh" ]; then
16
- source "/root/.agents/skills/$skill_name/skill.sh" 2>/dev/null || true
17
- fi
18
12
  version=$(grep -o '"version":"[^"]*"' "$skill_dir/skill.json" | cut -d'"' -f4 || echo "local")
19
- INSTALLED_SKILLS+=("$skill_name|$version|~/.sith/skills")
13
+ ACTIVE_SKILLS+=("$skill_name|$version")
20
14
  done
21
15
  fi
22
16
 
23
- if [ ${#INSTALLED_SKILLS[@]} -gt 0 ]; then
17
+ if [ ${#ACTIVE_SKILLS[@]} -gt 0 ]; then
24
18
  echo ""
25
- echo "┌─────────────────┬──────────┬─────────────────────────────────────────┐"
26
- echo "│ Skill │ Version │ Source │"
27
- echo "├─────────────────┼──────────┼─────────────────────────────────────────┤"
28
- for skill_info in "${INSTALLED_SKILLS[@]}"; do
29
- IFS='|' read -r name version source <<< "$skill_info"
30
- printf "│ %-15s │ %-8s │ %-39s │\n" "$name" "$version" "$source"
19
+ echo "┌─────────────────┬──────────┐"
20
+ echo "│ Skill │ Version │"
21
+ echo "├─────────────────┼──────────┤"
22
+ for skill_info in "${ACTIVE_SKILLS[@]}"; do
23
+ IFS='|' read -r name version <<< "$skill_info"
24
+ printf "│ %-15s │ %-8s │\n" "$name" "$version"
31
25
  done
32
- echo "└─────────────────┴──────────┴─────────────────────────────────────────┘"
26
+ echo "└─────────────────┴──────────┘"
33
27
  echo ""
34
28
  fi
@@ -8,22 +8,29 @@ set -e
8
8
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
9
 
10
10
  # 1. Banner and versions
11
+ # shellcheck source=./01-banner.sh
11
12
  source "${SCRIPT_DIR}/01-banner.sh"
12
13
 
13
14
  # 2. Environment variables
15
+ # shellcheck source=./02-env-vars.sh
14
16
  source "${SCRIPT_DIR}/02-env-vars.sh"
15
17
 
16
18
  # 3. Directory setup
19
+ # shellcheck source=./03-directories.sh
17
20
  source "${SCRIPT_DIR}/03-directories.sh"
18
21
 
19
22
  # 4. Git configuration
23
+ # shellcheck source=./04-git-config.sh
20
24
  source "${SCRIPT_DIR}/04-git-config.sh"
21
25
 
22
26
  # 5. OpenCode CLI installation
27
+ # shellcheck source=./05-opencode-cli.sh
23
28
  source "${SCRIPT_DIR}/05-opencode-cli.sh"
24
29
 
25
30
  # 6. Skills installation (from volume mount)
31
+ # shellcheck source=./06-skills-setup.sh
26
32
  source "${SCRIPT_DIR}/06-skills-setup.sh"
27
33
 
28
34
  # 7. Ready message
35
+ # shellcheck source=./07-ready.sh
29
36
  source "${SCRIPT_DIR}/07-ready.sh"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m14i/sith",
3
- "version": "1.15.0",
3
+ "version": "1.17.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": {
@@ -15,6 +15,8 @@
15
15
  "dev": "tsx src/index.ts",
16
16
  "dev:build": "pnpm build && node dist/index.js",
17
17
  "dev:shell": "pnpm build && node dist/index.js shell",
18
+ "test": "vitest run",
19
+ "lint": "biome check src/",
18
20
  "typecheck": "tsc --noEmit",
19
21
  "clean": "rm -rf dist",
20
22
  "prepublishOnly": "pnpm build"
@@ -35,7 +37,7 @@
35
37
  "author": "",
36
38
  "license": "MIT",
37
39
  "dependencies": {
38
- "@inquirer/prompts": "^5.0.0",
40
+ "@inquirer/prompts": "^8.5.1",
39
41
  "chalk": "^5.3.0",
40
42
  "commander": "^12.1.0",
41
43
  "execa": "^9.0.0",
@@ -45,6 +47,7 @@
45
47
  "update-notifier": "^7.3.1"
46
48
  },
47
49
  "devDependencies": {
50
+ "@biomejs/biome": "^2.4.16",
48
51
  "@semantic-release/changelog": "^6.0.3",
49
52
  "@semantic-release/git": "^10.0.1",
50
53
  "@semantic-release/github": "^11.0.1",
@@ -53,9 +56,11 @@
53
56
  "@types/react": "^19.2.14",
54
57
  "@types/update-notifier": "^6.0.8",
55
58
  "@vercel/ncc": "^0.38.1",
59
+ "@vitest/coverage-v8": "^4.1.7",
56
60
  "semantic-release": "^24.2.0",
57
61
  "tsx": "^4.7.2",
58
- "typescript": "^5.4.5"
62
+ "typescript": "^5.4.5",
63
+ "vitest": "^4.1.7"
59
64
  },
60
65
  "engines": {
61
66
  "node": ">=18"
@@ -1,137 +0,0 @@
1
- {
2
- "name": "ink",
3
- "version": "7.0.3",
4
- "description": "React for CLI",
5
- "license": "MIT",
6
- "repository": "vadimdemedes/ink",
7
- "author": {
8
- "name": "Vadim Demedes",
9
- "email": "vadimdemedes@hey.com",
10
- "url": "https://github.com/vadimdemedes"
11
- },
12
- "type": "module",
13
- "exports": {
14
- "types": "./build/index.d.ts",
15
- "default": "./build/index.js"
16
- },
17
- "engines": {
18
- "node": ">=22"
19
- },
20
- "scripts": {
21
- "dev": "tsc --watch",
22
- "build": "tsc",
23
- "prepare": "npm run build",
24
- "test": "npm run typecheck && npm run lint && FORCE_COLOR=true ava",
25
- "lint": "xo",
26
- "format": "prettier --write .",
27
- "typecheck": "tsc --noEmit",
28
- "example": "NODE_NO_WARNINGS=1 node --import=tsx",
29
- "benchmark": "NODE_NO_WARNINGS=1 node --import=tsx",
30
- "inspect": "react-devtools"
31
- },
32
- "files": [
33
- "build"
34
- ],
35
- "keywords": [
36
- "react",
37
- "cli",
38
- "jsx",
39
- "stdout",
40
- "components",
41
- "command-line",
42
- "preact",
43
- "redux",
44
- "print",
45
- "render",
46
- "colors",
47
- "text"
48
- ],
49
- "dependencies": {
50
- "@alcalzone/ansi-tokenize": "^0.3.0",
51
- "ansi-escapes": "^7.3.0",
52
- "ansi-styles": "^6.2.3",
53
- "auto-bind": "^5.0.1",
54
- "chalk": "^5.6.2",
55
- "cli-boxes": "^4.0.1",
56
- "cli-cursor": "^4.0.0",
57
- "cli-truncate": "^6.0.0",
58
- "code-excerpt": "^4.0.0",
59
- "es-toolkit": "^1.45.1",
60
- "indent-string": "^5.0.0",
61
- "is-in-ci": "^2.0.0",
62
- "patch-console": "^2.0.0",
63
- "react-reconciler": "^0.33.0",
64
- "scheduler": "^0.27.0",
65
- "signal-exit": "^3.0.7",
66
- "slice-ansi": "^9.0.0",
67
- "stack-utils": "^2.0.6",
68
- "string-width": "^8.2.0",
69
- "terminal-size": "^4.0.1",
70
- "type-fest": "^5.5.0",
71
- "widest-line": "^6.0.0",
72
- "wrap-ansi": "^10.0.0",
73
- "ws": "^8.20.0",
74
- "yoga-layout": "~3.2.1"
75
- },
76
- "devDependencies": {
77
- "@faker-js/faker": "^10.4.0",
78
- "@sindresorhus/tsconfig": "^8.1.0",
79
- "@sinonjs/fake-timers": "^15.3.0",
80
- "@types/ms": "^2.1.0",
81
- "@types/node": "^25.5.2",
82
- "@types/react": "^19.2.14",
83
- "@types/react-reconciler": "^0.33.0",
84
- "@types/scheduler": "^0.26.0",
85
- "@types/signal-exit": "^3.0.0",
86
- "@types/sinon": "^21.0.1",
87
- "@types/stack-utils": "^2.0.3",
88
- "@types/ws": "^8.18.1",
89
- "@vdemedes/prettier-config": "^2.0.1",
90
- "ava": "^7.0.0",
91
- "boxen": "^8.0.1",
92
- "delay": "^7.0.0",
93
- "ms": "^2.1.3",
94
- "node-pty": "^1.2.0-beta.12",
95
- "p-queue": "^9.1.2",
96
- "prettier": "^3.8.1",
97
- "react": "^19.2.4",
98
- "react-devtools": "^7.0.1",
99
- "react-devtools-core": "^7.0.1",
100
- "react-router": "^7.14.0",
101
- "sinon": "^21.0.3",
102
- "strip-ansi": "^7.2.0",
103
- "tsx": "^4.21.0",
104
- "typescript": "^5.8.3",
105
- "xo": "^1.2.3"
106
- },
107
- "peerDependencies": {
108
- "@types/react": ">=19.2.0",
109
- "react": ">=19.2.0",
110
- "react-devtools-core": ">=6.1.2"
111
- },
112
- "peerDependenciesMeta": {
113
- "@types/react": {
114
- "optional": true
115
- },
116
- "react-devtools-core": {
117
- "optional": true
118
- }
119
- },
120
- "ava": {
121
- "workerThreads": false,
122
- "serial": true,
123
- "files": [
124
- "test/**/*",
125
- "!test/helpers/**/*",
126
- "!test/fixtures/**/*"
127
- ],
128
- "extensions": {
129
- "ts": "module",
130
- "tsx": "module"
131
- },
132
- "nodeArguments": [
133
- "--import=tsx"
134
- ]
135
- },
136
- "prettier": "@vdemedes/prettier-config"
137
- }