vps-hybrid-networking 1.0.2 → 1.0.4

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 CHANGED
@@ -72,11 +72,13 @@ Hermes security-scans skills on install. You can also register this repo as a re
72
72
  ### npm / npx installer (this repo's own package)
73
73
 
74
74
  ```bash
75
- npx vps-hybrid-networking@1.0.2
75
+ npx vps-hybrid-networking@1.0.4
76
76
  ```
77
77
 
78
78
  Auto-detects your installed agents and copies the skill into each one's skills folder. Targets: Claude Code, Antigravity, Codex / agents standard, Gemini CLI, OpenCode, Cursor, Hermes Agent, Cline, Roo Code, Goose, Amp, Windsurf, Kiro CLI, Qwen Code, GitHub Copilot, Trae, and Continue. Useful flags: `--all`, `--agent claude-code,antigravity`, `--list`, `--dry-run`. (If the npm package is not yet published, clone this repo and run `node bin/install.mjs --all` — it is the same code with the same result.)
79
79
 
80
+ Runs on **Windows, macOS, and Linux**. Platform notes: on macOS and Linux, the XDG-style targets (OpenCode, Goose, Amp) honor `$XDG_CONFIG_HOME` when it is set — matching how those tools resolve their own config directories (OpenCode uses `~/.config/opencode` on macOS too, not `~/Library`). Hermes uses `%LOCALAPPDATA%\hermes\skills\` on Windows and `~/.hermes/skills/` on macOS/Linux.
81
+
80
82
  ### Manual
81
83
 
82
84
  Copy the `skills/vps-hybrid-networking/` folder into your agent's skills directory (e.g. `~/.claude/skills/`, `~/.agents/skills/`, `~/.gemini/config/skills/`, `~/.hermes/skills/` — on Windows, Hermes uses `%LOCALAPPDATA%\hermes\skills\`). Done — the skill is just files.
@@ -88,7 +90,7 @@ The npm installer is built to be boring and auditable:
88
90
  - **Zero dependencies** — Node.js standard library only; there is no dependency tree to compromise.
89
91
  - **No install hooks** — `package.json` defines no lifecycle scripts, so nothing runs implicitly on `npm install`/`npx`. The installer runs only when you invoke it.
90
92
  - **No network, no execution** — the installer never downloads anything and never spawns a process. It only copies the skill files bundled inside the package into a fixed allow-list of well-known agent folders, and it verifies every destination stays inside its allow-listed folder before copying.
91
- - **Pin the version** (`npx vps-hybrid-networking@1.0.2`) if you want reproducible installs, and read [`bin/install.mjs`](bin/install.mjs) — it is short on purpose.
93
+ - **Pin the version** (`npx vps-hybrid-networking@1.0.4`) if you want reproducible installs, and read [`bin/install.mjs`](bin/install.mjs) — it is short on purpose.
92
94
  - Prefer not to run third-party installers at all? Use `npx skills add` (which pulls straight from GitHub) or the manual copy above.
93
95
 
94
96
  ## What's inside
package/bin/install.mjs CHANGED
@@ -48,18 +48,28 @@ const hermesHome = process.platform === 'win32'
48
48
  ? join(process.env.LOCALAPPDATA ?? join(home, 'AppData', 'Local'), 'hermes')
49
49
  : join(home, '.hermes');
50
50
 
51
+ // Config base for the XDG-style targets (OpenCode, Goose, Amp). Those tools
52
+ // resolve their config dirs the XDG way on macOS and Linux: they use
53
+ // $XDG_CONFIG_HOME when it is set and ~/.config otherwise. (OpenCode does
54
+ // this on every platform via xdg-basedir — on macOS its config lives in
55
+ // ~/.config/opencode, NOT in ~/Library.) Mirror that here so the skill
56
+ // lands where the tools actually look. Windows keeps ~/.config, unchanged.
57
+ const configBase = process.platform === 'win32'
58
+ ? join(home, '.config')
59
+ : (process.env.XDG_CONFIG_HOME || join(home, '.config'));
60
+
51
61
  const TARGETS = {
52
62
  'claude-code': { label: 'Claude Code', skillsDir: join(home, '.claude', 'skills'), detectDir: join(home, '.claude') },
53
63
  'antigravity': { label: 'Antigravity', skillsDir: join(home, '.gemini', 'config', 'skills'), detectDir: join(home, '.gemini') },
54
64
  'codex': { label: 'Codex / agents standard', skillsDir: join(home, '.agents', 'skills'), detectDir: join(home, '.agents') },
55
65
  'gemini-cli': { label: 'Gemini CLI', skillsDir: join(home, '.gemini', 'skills'), detectDir: join(home, '.gemini') },
56
- 'opencode': { label: 'OpenCode', skillsDir: join(home, '.config', 'opencode', 'skills'), detectDir: join(home, '.config', 'opencode') },
66
+ 'opencode': { label: 'OpenCode', skillsDir: join(configBase, 'opencode', 'skills'), detectDir: join(configBase, 'opencode') },
57
67
  'cursor': { label: 'Cursor', skillsDir: join(home, '.cursor', 'skills'), detectDir: join(home, '.cursor') },
58
68
  'hermes': { label: 'Hermes Agent', skillsDir: join(hermesHome, 'skills'), detectDir: hermesHome },
59
69
  'cline': { label: 'Cline', skillsDir: join(home, '.agents', 'skills'), detectDir: join(home, '.cline') },
60
70
  'roo': { label: 'Roo Code', skillsDir: join(home, '.roo', 'skills'), detectDir: join(home, '.roo') },
61
- 'goose': { label: 'Goose', skillsDir: join(home, '.config', 'goose', 'skills'), detectDir: join(home, '.config', 'goose') },
62
- 'amp': { label: 'Amp', skillsDir: join(home, '.config', 'agents', 'skills'), detectDir: join(home, '.config', 'amp') },
71
+ 'goose': { label: 'Goose', skillsDir: join(configBase, 'goose', 'skills'), detectDir: join(configBase, 'goose') },
72
+ 'amp': { label: 'Amp', skillsDir: join(configBase, 'agents', 'skills'), detectDir: join(configBase, 'amp') },
63
73
  'windsurf': { label: 'Windsurf', skillsDir: join(home, '.codeium', 'windsurf', 'skills'), detectDir: join(home, '.codeium') },
64
74
  'kiro-cli': { label: 'Kiro CLI', skillsDir: join(home, '.kiro', 'skills'), detectDir: join(home, '.kiro') },
65
75
  'qwen-code': { label: 'Qwen Code', skillsDir: join(home, '.qwen', 'skills'), detectDir: join(home, '.qwen') },
package/package.json CHANGED
@@ -1 +1 @@
1
- {"author":"Ananda Apriliansyah Cahya Utama","bin":{"vps-hybrid-networking":"bin/install.mjs"},"description":"Installer for the vps-hybrid-networking agent skill \u2014 serves a NAT-blocked VPS via Tailscale + Cloudflare Tunnel + Caddy (DNS-01). Zero dependencies, no install hooks, no network access.","engines":{"node":">=18"},"files":["bin/install.mjs","skills","README.md","LICENSE"],"homepage":"https://github.com/AnandaAp/vps-hybrid-networking#readme","keywords":["agent-skill","claude-code","antigravity","codex","gemini-cli","opencode","cursor","hermes-agent","cline","roo-code","goose","amp","windsurf","kiro-cli","qwen-code","github-copilot","trae","continue","vps","caddy","cloudflare-tunnel","tailscale"],"license":"MIT","name":"vps-hybrid-networking","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/AnandaAp/vps-hybrid-networking.git"},"type":"module","version":"1.0.2"}
1
+ {"author":"Ananda Apriliansyah Cahya Utama","bin":{"vps-hybrid-networking":"bin/install.mjs"},"description":"Installer for the vps-hybrid-networking agent skill \u2014 serves a NAT-blocked VPS via Tailscale + Cloudflare Tunnel + Caddy (DNS-01). Zero dependencies, no install hooks, no network access.","engines":{"node":">=18"},"files":["bin/install.mjs","skills","README.md","LICENSE"],"homepage":"https://github.com/AnandaAp/vps-hybrid-networking#readme","keywords":["agent-skill","claude-code","antigravity","codex","gemini-cli","opencode","cursor","hermes-agent","cline","roo-code","goose","amp","windsurf","kiro-cli","qwen-code","github-copilot","trae","continue","vps","caddy","cloudflare-tunnel","tailscale"],"license":"MIT","name":"vps-hybrid-networking","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/AnandaAp/vps-hybrid-networking.git"},"type":"module","version":"1.0.4"}