@dev.sail.money/sailor 1.3.0-210 → 1.3.0-95

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
@@ -170,6 +170,7 @@ sailor trigger github # fire the agent's GitHub Actions workflow on demand
170
170
 
171
171
  # Dashboard
172
172
  sailor ui start # prints the per-project dashboard URL
173
+ sailor ui start --expose tailscale # also expose it on your tailnet over HTTPS (see Dashboard section)
173
174
 
174
175
  # Maintenance
175
176
  sailor update # re-sync skills, AGENTS.md, and tooling files after a CLI upgrade
@@ -263,6 +264,37 @@ sailor ui status
263
264
  sailor ui stop
264
265
  ```
265
266
 
267
+ ### Remote access over your tailnet (HTTPS) — optional
268
+
269
+ The dashboard is local-only by default. To reach it from another device (e.g. a
270
+ remote operator box), expose it over your [Tailscale](https://tailscale.com)
271
+ tailnet on HTTPS:
272
+
273
+ ```bash
274
+ sailor ui start --expose tailscale
275
+ # → Sailor UI started at http://localhost:<port>
276
+ # → Exposed on your tailnet at https://<node>.<tailnet>.ts.net/
277
+ ```
278
+
279
+ It uses `tailscale serve` (tailnet-private), **never `funnel`** — only devices on
280
+ your tailnet can reach it, not the public internet. `sailor ui stop` tears the
281
+ tailnet proxy down along with the local server.
282
+
283
+ Requirements:
284
+
285
+ - `tailscale` installed and logged in (`tailscale up`).
286
+ - Tailscale **Serve** enabled for your tailnet, plus **HTTPS certificates**
287
+ (admin console → DNS → Enable HTTPS). If Serve is disabled, the command prints
288
+ the enable link instead of reporting success.
289
+
290
+ When exposed, the tailnet origin is added to the dashboard's CORS allowlist
291
+ automatically. To allow additional origins (e.g. a custom HTTPS host in front of
292
+ the station), set a comma-separated list — the local origin is always allowed:
293
+
294
+ ```bash
295
+ SAILOR_CORS_ORIGINS=https://hermes.example.ts.net,https://another.host
296
+ ```
297
+
266
298
  ---
267
299
 
268
300
  ## Agent-driven onboarding & custom mandates
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@dev.sail.money/sailor",
3
- "version": "1.3.0-210",
3
+ "version": "1.3.0-95",
4
4
  "description": "Operator toolkit for Sail Protocol",
5
5
  "bin": {
6
- "sailor": "packages/cli/dist/index.cjs"
6
+ "sailor": "packages/cli/dist/index.cjs",
7
+ "sailor-mcp": "packages/cli/dist/mcp.cjs"
7
8
  },
8
9
  "exports": {
9
10
  "./sdk": {
@@ -26,6 +27,7 @@
26
27
  "scripts": {
27
28
  "clean": "node scripts/clean.mjs",
28
29
  "build": "pnpm --filter @sail/sdk build && pnpm --filter sailor build && pnpm --filter sailor-ui build",
30
+ "pack": "pnpm build && npm pack",
29
31
  "test": "pnpm --filter sailor-ui test",
30
32
  "test:ui": "pnpm --filter sailor-ui test:ui",
31
33
  "link:cli": "pnpm link --global",
@@ -40811,6 +40811,9 @@ Pass --force to scaffold into it anyway (existing files with the same name are o
40811
40811
  }
40812
40812
  })() : null;
40813
40813
  copyDirSync(templateSrc, dest);
40814
+ if (options.skills === false) {
40815
+ import_node_fs10.default.rmSync(import_node_path8.default.join(dest, ".agents", "skills"), { recursive: true, force: true });
40816
+ }
40814
40817
  const pkgRoot = packageRoot();
40815
40818
  const examplesPermSrc = import_node_path8.default.join(pkgRoot, "examples", "permissions");
40816
40819
  if (import_node_fs10.default.existsSync(examplesPermSrc)) {
@@ -45474,7 +45477,7 @@ function actionWith(fn) {
45474
45477
  closePrompts();
45475
45478
  };
45476
45479
  }
45477
- program2.command("init [dir]").description("Scaffold a new Sail agent into the current directory (or [dir] subdirectory)").option("--template <name>", "Template to scaffold from (default: default)").option("--chain <id>", "Default EVM chain id written to .sail/config.json and .env.example").option("--rpc-url <url>", "Default RPC_URL written to .sail/.env.local").option("--force", "Re-initialize even if already initialized (overwrites scaffold files; keys/ and state/ are preserved)").action(
45480
+ program2.command("init [dir]").description("Scaffold a new Sail agent into the current directory (or [dir] subdirectory)").option("--template <name>", "Template to scaffold from (default: default)").option("--chain <id>", "Default EVM chain id written to .sail/config.json and .env.example").option("--rpc-url <url>", "Default RPC_URL written to .sail/.env.local").option("--force", "Re-initialize even if already initialized (overwrites scaffold files; keys/ and state/ are preserved)").option("--no-skills", "Skip scaffolding the sailor skills (use under the Sailor plugin, which already provides them to the agent)").action(
45478
45481
  async (name, opts) => {
45479
45482
  try {
45480
45483
  await initCommand(name, opts);