@jive-sh/skill-sync 0.4.2 → 0.4.3-latest-darwin-arm64
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/multi-call-binary +4 -0
- package/package.json +11 -39
- package/README.md +0 -60
- package/bin/package.json +0 -1
- package/bin/skill-sync +0 -571
- package/bin/skill-sync-daemon +0 -571
- package/dist/daemons/skill-sync-daemon.js +0 -374
- package/dist/daemons/skill-sync-daemon.js.map +0 -1
- package/dist/entrypoints/skill-sync.js +0 -133
- package/dist/entrypoints/skill-sync.js.map +0 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +0 -1
- package/dist/internal/config.js +0 -130
- package/dist/internal/config.js.map +0 -1
- package/dist/internal/control.js +0 -101
- package/dist/internal/control.js.map +0 -1
- package/dist/internal/folders.js +0 -48
- package/dist/internal/folders.js.map +0 -1
- package/dist/internal/path.js +0 -36
- package/dist/internal/path.js.map +0 -1
- package/dist/internal/sync.js +0 -160
- package/dist/internal/sync.js.map +0 -1
- package/dist/internal/wire.js +0 -13
- package/dist/internal/wire.js.map +0 -1
- package/install.cjs +0 -571
- package/src/daemons/skill-sync-daemon.ts +0 -368
- package/src/entrypoints/skill-sync.ts +0 -135
- package/src/index.ts +0 -15
- package/src/internal/config.ts +0 -168
- package/src/internal/control.ts +0 -127
- package/src/internal/folders.ts +0 -52
- package/src/internal/path.ts +0 -32
- package/src/internal/sync.ts +0 -196
- package/src/internal/wire.ts +0 -154
|
@@ -1,374 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, rmSync, watch } from "node:fs";
|
|
2
|
-
import { createServer } from "node:http";
|
|
3
|
-
import { exitWhenUninstalled } from "jive-abstract-library";
|
|
4
|
-
import { LEGACY_TOKEN_PATH, detectFolders, loadSettings, loadStates, saveStates, stateFor, } from "../internal/config";
|
|
5
|
-
import { serve } from "../internal/control";
|
|
6
|
-
import { authHeaders, describe, register } from "../internal/folders";
|
|
7
|
-
import { isQuiet, syncOnce } from "../internal/sync";
|
|
8
|
-
/**
|
|
9
|
-
* Keeps every enabled skills folder on this machine identical to every other machine's.
|
|
10
|
-
*
|
|
11
|
-
* Folders are detected: the `skills` folder in each `~/.claude*` home and in `~/.agents`. Which of them
|
|
12
|
-
* sync, and the one list of skills that syncs in all of them, are held by the server and changed from the
|
|
13
|
-
* dashboard, so they survive a reinstall and apply the moment they change. A skill not on the list is
|
|
14
|
-
* never pushed or pulled.
|
|
15
|
-
*
|
|
16
|
-
* The daemon holds a WebSocket to the service's hub. That connection is how the dashboard knows this
|
|
17
|
-
* machine is running, how a preference change arrives, and how a write from another machine triggers a
|
|
18
|
-
* cycle here at once. Polling stays as the fallback: every 5 minutes while connected, every 30 seconds
|
|
19
|
-
* while not, so a dropped connection costs latency and never correctness.
|
|
20
|
-
*
|
|
21
|
-
* The sync token exists only in this process's memory. The daemon starts signed out and waits; `skill-sync
|
|
22
|
-
* login` asks it, over the control socket, to sign in, and the token arrives from the browser straight to
|
|
23
|
-
* this process. A restart means signing in again — the price of never writing the credential down.
|
|
24
|
-
*/
|
|
25
|
-
const POLL_CONNECTED_MS = 5 * 60_000;
|
|
26
|
-
const POLL_DISCONNECTED_MS = 30_000;
|
|
27
|
-
/** Long enough that an editor's write-rename-write lands as one cycle, short enough to feel immediate. */
|
|
28
|
-
const SETTLE_MS = 1_000;
|
|
29
|
-
const PING_MS = 30_000;
|
|
30
|
-
/** No pong for this long means the connection is dead even if the socket has not noticed. */
|
|
31
|
-
const PONG_TIMEOUT_MS = 75_000;
|
|
32
|
-
const RECONNECT_MIN_MS = 5_000;
|
|
33
|
-
const RECONNECT_MAX_MS = 5 * 60_000;
|
|
34
|
-
/** How long a sign-in waits for the browser before giving up. */
|
|
35
|
-
const LOGIN_TIMEOUT_MS = 5 * 60_000;
|
|
36
|
-
exitWhenUninstalled();
|
|
37
|
-
// Versions before 0.3 wrote the token to a file. It is never read: a credential left on disk is one
|
|
38
|
-
// anything that can read the home directory can copy.
|
|
39
|
-
if (existsSync(LEGACY_TOKEN_PATH)) {
|
|
40
|
-
rmSync(LEGACY_TOKEN_PATH, { force: true });
|
|
41
|
-
console.log(`deleted ${LEGACY_TOKEN_PATH}; the token now lives only in this daemon's memory`);
|
|
42
|
-
}
|
|
43
|
-
const settings = loadSettings();
|
|
44
|
-
if (settings === undefined) {
|
|
45
|
-
console.error("~/.jive/skill-sync.json needs an endpoint and a machine name");
|
|
46
|
-
// Zero, not one: the service manager restarts a daemon that fails, and a file nobody has fixed would
|
|
47
|
-
// only fill the log.
|
|
48
|
-
process.exit(0);
|
|
49
|
-
}
|
|
50
|
-
const states = loadStates();
|
|
51
|
-
/** Set while signed in. Everything that talks to the server reads it; signing out clears it. */
|
|
52
|
-
let session;
|
|
53
|
-
/** The signed-in config, for code that only runs during a session. */
|
|
54
|
-
function current() {
|
|
55
|
-
if (session === undefined)
|
|
56
|
-
throw new Error("not signed in");
|
|
57
|
-
return session;
|
|
58
|
-
}
|
|
59
|
-
/** What was last registered, so registration is repeated only when a folder or skill appears or goes. */
|
|
60
|
-
let registered = "";
|
|
61
|
-
/** The enabled folders, each with the synced list. */
|
|
62
|
-
let prefs = new Map();
|
|
63
|
-
const watchers = new Map();
|
|
64
|
-
// ── Folders ─────────────────────────────────────────────────────────────────────────────────────────
|
|
65
|
-
/** Reports this machine's folders and skills, and adopts the server's answer for what syncs. */
|
|
66
|
-
async function registerFolders() {
|
|
67
|
-
const request = describe(current());
|
|
68
|
-
applyPrefs(await register(current(), request));
|
|
69
|
-
registered = JSON.stringify(request);
|
|
70
|
-
}
|
|
71
|
-
/** True when a folder or a skill has appeared or gone since the last registration. */
|
|
72
|
-
const registrationStale = () => JSON.stringify(describe(current())) !== registered;
|
|
73
|
-
function applyPrefs(folders) {
|
|
74
|
-
// Only folders this machine still has. The hub can hold a stale list — it answers a reconnect before
|
|
75
|
-
// the next registration — and creating a listed folder whose agent home is gone would bring it back.
|
|
76
|
-
const present = new Set(detectFolders());
|
|
77
|
-
const next = new Map(folders.filter((folder) => present.has(folder.path))
|
|
78
|
-
.map((folder) => [folder.path, new Set(folder.skills)]));
|
|
79
|
-
for (const [folder, watcher] of watchers) {
|
|
80
|
-
if (!next.has(folder)) {
|
|
81
|
-
watcher.close();
|
|
82
|
-
watchers.delete(folder);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// An unticked folder leaves no trace of syncing: its state goes, so the state file lists only folders
|
|
86
|
-
// that sync, and ticking it again starts it fresh.
|
|
87
|
-
// Covers folders with state from an earlier run too, not only ones this run was syncing.
|
|
88
|
-
const stopped = [...new Set([...prefs.keys(), ...Object.keys(states)])].filter((folder) => !next.has(folder));
|
|
89
|
-
for (const folder of stopped) {
|
|
90
|
-
delete states[folder];
|
|
91
|
-
console.log(`stopped syncing ${folder}`);
|
|
92
|
-
}
|
|
93
|
-
if (stopped.length > 0)
|
|
94
|
-
saveStates(states);
|
|
95
|
-
for (const folder of next.keys()) {
|
|
96
|
-
if (watchers.has(folder))
|
|
97
|
-
continue;
|
|
98
|
-
mkdirSync(folder, { recursive: true });
|
|
99
|
-
let settle;
|
|
100
|
-
watchers.set(folder, watch(folder, { recursive: true }, () => {
|
|
101
|
-
if (settle !== undefined)
|
|
102
|
-
clearTimeout(settle);
|
|
103
|
-
settle = setTimeout(runCycle, SETTLE_MS);
|
|
104
|
-
}));
|
|
105
|
-
}
|
|
106
|
-
const changed = JSON.stringify([...next].map(([path, skills]) => [path, [...skills].sort()]))
|
|
107
|
-
!== JSON.stringify([...prefs].map(([path, skills]) => [path, [...skills].sort()]));
|
|
108
|
-
prefs = next;
|
|
109
|
-
if (!changed)
|
|
110
|
-
return;
|
|
111
|
-
for (const [folder, skills] of prefs)
|
|
112
|
-
console.log(`syncing ${folder}: ${[...skills].sort().join(", ") || "no skills"}`);
|
|
113
|
-
if (prefs.size === 0)
|
|
114
|
-
console.log("syncing no folders");
|
|
115
|
-
void runCycle();
|
|
116
|
-
}
|
|
117
|
-
// ── Hub connection ──────────────────────────────────────────────────────────────────────────────────
|
|
118
|
-
let socket;
|
|
119
|
-
let lastPong = 0;
|
|
120
|
-
let reconnectDelay = RECONNECT_MIN_MS;
|
|
121
|
-
/** What the hub was last told about each folder (state and detail), so only changes are sent. */
|
|
122
|
-
const reported = new Map();
|
|
123
|
-
function connect() {
|
|
124
|
-
if (session === undefined)
|
|
125
|
-
return;
|
|
126
|
-
const config = session;
|
|
127
|
-
const url = `${config.endpoint.replace(/^http/, "ws")}/daemon`;
|
|
128
|
-
// Bun's WebSocket takes headers; the browser's does not, which is why the token can travel this way.
|
|
129
|
-
const ws = new WebSocket(url, { headers: authHeaders(config, {}) });
|
|
130
|
-
ws.onopen = () => {
|
|
131
|
-
socket = ws;
|
|
132
|
-
lastPong = Date.now();
|
|
133
|
-
reconnectDelay = RECONNECT_MIN_MS;
|
|
134
|
-
console.log("connected to the hub");
|
|
135
|
-
// Whatever the hub last heard from a previous connection is stale until re-sent.
|
|
136
|
-
reported.clear();
|
|
137
|
-
for (const folder of prefs.keys())
|
|
138
|
-
report(folder, "idle");
|
|
139
|
-
};
|
|
140
|
-
ws.onmessage = (event) => {
|
|
141
|
-
const data = String(event.data);
|
|
142
|
-
if (data === "pong") {
|
|
143
|
-
lastPong = Date.now();
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const message = JSON.parse(data);
|
|
147
|
-
if (message.type === "prefs")
|
|
148
|
-
applyPrefs(message.folders);
|
|
149
|
-
if (message.type === "changed")
|
|
150
|
-
void runCycle();
|
|
151
|
-
};
|
|
152
|
-
ws.onclose = () => {
|
|
153
|
-
if (socket === ws)
|
|
154
|
-
socket = undefined;
|
|
155
|
-
// Only the session that opened it reconnects: after a sign-out, or a sign-in with a new token, this
|
|
156
|
-
// socket belongs to nobody.
|
|
157
|
-
if (session !== config)
|
|
158
|
-
return;
|
|
159
|
-
setTimeout(connect, reconnectDelay);
|
|
160
|
-
reconnectDelay = Math.min(reconnectDelay * 2, RECONNECT_MAX_MS);
|
|
161
|
-
};
|
|
162
|
-
ws.onerror = () => {
|
|
163
|
-
// `onclose` follows and schedules the reconnect.
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
setInterval(() => {
|
|
167
|
-
if (socket === undefined)
|
|
168
|
-
return;
|
|
169
|
-
if (Date.now() - lastPong > PONG_TIMEOUT_MS) {
|
|
170
|
-
console.error("hub connection went quiet; reconnecting");
|
|
171
|
-
socket.close();
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
socket.send("ping");
|
|
175
|
-
}, PING_MS);
|
|
176
|
-
function report(folder, state, detail, activity) {
|
|
177
|
-
const key = `${state}|${detail ?? ""}`;
|
|
178
|
-
if (reported.get(folder) === key && activity === undefined)
|
|
179
|
-
return;
|
|
180
|
-
if (socket === undefined)
|
|
181
|
-
return;
|
|
182
|
-
const message = { type: "status", folder, state, detail, activity };
|
|
183
|
-
socket.send(JSON.stringify(message));
|
|
184
|
-
reported.set(folder, key);
|
|
185
|
-
}
|
|
186
|
-
// ── Sync cycles ─────────────────────────────────────────────────────────────────────────────────────
|
|
187
|
-
let running = false;
|
|
188
|
-
let cycleQueued = false;
|
|
189
|
-
function summarise(result) {
|
|
190
|
-
const parts = [
|
|
191
|
-
result.pulled.length > 0 ? `pulled ${result.pulled.join(", ")}` : "",
|
|
192
|
-
result.pushed.length > 0 ? `pushed ${result.pushed.join(", ")}` : "",
|
|
193
|
-
result.deletedLocally.length > 0 ? `deleted ${result.deletedLocally.join(", ")}` : "",
|
|
194
|
-
];
|
|
195
|
-
return parts.filter(Boolean).join("; ");
|
|
196
|
-
}
|
|
197
|
-
async function runCycle() {
|
|
198
|
-
if (session === undefined)
|
|
199
|
-
return;
|
|
200
|
-
if (running) {
|
|
201
|
-
cycleQueued = true;
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
running = true;
|
|
205
|
-
try {
|
|
206
|
-
// Folders sync one after another against the same server, so a change pushed from one folder is
|
|
207
|
-
// pulled into the others on the follow-up pass this triggers.
|
|
208
|
-
for (const [folder, skills] of [...prefs]) {
|
|
209
|
-
try {
|
|
210
|
-
const result = await syncOnce(current(), folder, stateFor(states, folder), skills);
|
|
211
|
-
saveStates(states);
|
|
212
|
-
log(folder, result);
|
|
213
|
-
if (result.rejected.length > 0)
|
|
214
|
-
report(folder, "attention", result.rejected.join("; "), summarise(result) || undefined);
|
|
215
|
-
else
|
|
216
|
-
report(folder, "idle", undefined, isQuiet(result) ? undefined : summarise(result));
|
|
217
|
-
// What this folder pushed is pulled into the machine's other folders on the follow-up pass.
|
|
218
|
-
if (result.pushed.length > 0)
|
|
219
|
-
cycleQueued = true;
|
|
220
|
-
}
|
|
221
|
-
catch (cause) {
|
|
222
|
-
// One failed folder must not end the daemon or the other folders: the usual cause is the network.
|
|
223
|
-
const reason = cause instanceof Error ? cause.message : String(cause);
|
|
224
|
-
console.error(`${folder}: sync failed: ${reason}`);
|
|
225
|
-
report(folder, "attention", `sync failed: ${reason}`);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
// A skill created or removed locally changes what the dashboard should list.
|
|
229
|
-
if (registrationStale())
|
|
230
|
-
await registerFolders().catch(() => undefined);
|
|
231
|
-
}
|
|
232
|
-
finally {
|
|
233
|
-
running = false;
|
|
234
|
-
if (cycleQueued) {
|
|
235
|
-
cycleQueued = false;
|
|
236
|
-
setTimeout(runCycle, SETTLE_MS);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
function log(folder, result) {
|
|
241
|
-
for (const path of result.pulled)
|
|
242
|
-
console.log(`${folder}: pulled ${path}`);
|
|
243
|
-
for (const path of result.pushed)
|
|
244
|
-
console.log(`${folder}: pushed ${path}`);
|
|
245
|
-
for (const path of result.deletedLocally)
|
|
246
|
-
console.log(`${folder}: deleted ${path}`);
|
|
247
|
-
for (const path of result.rejected)
|
|
248
|
-
console.error(`${folder}: refused a path the server sent: ${path}`);
|
|
249
|
-
}
|
|
250
|
-
let pollTimer;
|
|
251
|
-
/** Re-detects folders each poll: an agent home created since the last one should join without a restart. */
|
|
252
|
-
async function poll() {
|
|
253
|
-
if (session === undefined)
|
|
254
|
-
return;
|
|
255
|
-
try {
|
|
256
|
-
if (registered === "" || registrationStale())
|
|
257
|
-
await registerFolders();
|
|
258
|
-
}
|
|
259
|
-
catch (cause) {
|
|
260
|
-
console.error(`could not register folders: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
261
|
-
}
|
|
262
|
-
await runCycle();
|
|
263
|
-
if (session !== undefined)
|
|
264
|
-
pollTimer = setTimeout(poll, socket === undefined ? POLL_DISCONNECTED_MS : POLL_CONNECTED_MS);
|
|
265
|
-
}
|
|
266
|
-
// ── Signing in and out ──────────────────────────────────────────────────────────────────────────────
|
|
267
|
-
/**
|
|
268
|
-
* Starts a session with a token from the browser. Registering this machine's folders is the first call
|
|
269
|
-
* that needs the token, so it doubles as the check that the token works: a failure leaves the daemon
|
|
270
|
-
* signed out, not half-running.
|
|
271
|
-
*/
|
|
272
|
-
async function signIn(token) {
|
|
273
|
-
if (session !== undefined)
|
|
274
|
-
await signOut();
|
|
275
|
-
session = { ...settings, token };
|
|
276
|
-
try {
|
|
277
|
-
await registerFolders();
|
|
278
|
-
}
|
|
279
|
-
catch (cause) {
|
|
280
|
-
session = undefined;
|
|
281
|
-
throw cause;
|
|
282
|
-
}
|
|
283
|
-
console.log(`signed in as ${session.machine}; syncing with ${session.endpoint}`);
|
|
284
|
-
connect();
|
|
285
|
-
void poll();
|
|
286
|
-
}
|
|
287
|
-
/** Revokes the token on the server, forgets it, and stops syncing. Returns whether the revoke succeeded. */
|
|
288
|
-
async function signOut() {
|
|
289
|
-
const config = session;
|
|
290
|
-
if (config === undefined)
|
|
291
|
-
return false;
|
|
292
|
-
session = undefined;
|
|
293
|
-
if (pollTimer !== undefined)
|
|
294
|
-
clearTimeout(pollTimer);
|
|
295
|
-
socket?.close();
|
|
296
|
-
socket = undefined;
|
|
297
|
-
for (const watcher of watchers.values())
|
|
298
|
-
watcher.close();
|
|
299
|
-
watchers.clear();
|
|
300
|
-
prefs = new Map();
|
|
301
|
-
registered = "";
|
|
302
|
-
// Revoked, not just forgotten: a token copied while it was live would otherwise keep working.
|
|
303
|
-
const revoked = await fetch(`${config.endpoint}/cli/token`, { method: "DELETE", headers: authHeaders(config, {}) })
|
|
304
|
-
.then((response) => response.ok, () => false);
|
|
305
|
-
console.log(`signed out${revoked ? "" : " (the server could not be reached to revoke the token)"}`);
|
|
306
|
-
return revoked;
|
|
307
|
-
}
|
|
308
|
-
let loginInProgress = false;
|
|
309
|
-
/**
|
|
310
|
-
* One sign-in: listen on 127.0.0.1 for the browser to hand over the token, tell the CLI which URL to
|
|
311
|
-
* open, and finish when the token arrives. The browser's login page posts to this listener only, never to
|
|
312
|
-
* an address the request chose, so a page that tricks you into signing in cannot collect the token.
|
|
313
|
-
*/
|
|
314
|
-
function login(reply) {
|
|
315
|
-
if (loginInProgress) {
|
|
316
|
-
reply.send({ type: "error", message: "a sign-in is already in progress" });
|
|
317
|
-
return;
|
|
318
|
-
}
|
|
319
|
-
loginInProgress = true;
|
|
320
|
-
const done = () => {
|
|
321
|
-
loginInProgress = false;
|
|
322
|
-
listener.close();
|
|
323
|
-
clearTimeout(timer);
|
|
324
|
-
};
|
|
325
|
-
const listener = createServer((request, response) => {
|
|
326
|
-
const token = new URL(request.url ?? "/", "http://127.0.0.1").searchParams.get("token");
|
|
327
|
-
response.writeHead(200, { "content-type": "text/html" });
|
|
328
|
-
response.end(token ? "<p>Signed in. You can close this tab.</p>" : "<p>No token in the redirect.</p>");
|
|
329
|
-
if (token === null)
|
|
330
|
-
return;
|
|
331
|
-
done();
|
|
332
|
-
signIn(token).then(() => reply.send({ type: "signedIn", machine: settings.machine }), (cause) => reply.send({ type: "error", message: `the server refused the sign-in: ${cause instanceof Error ? cause.message : String(cause)}` }));
|
|
333
|
-
});
|
|
334
|
-
const timer = setTimeout(() => {
|
|
335
|
-
done();
|
|
336
|
-
reply.send({ type: "error", message: "timed out waiting for the browser" });
|
|
337
|
-
}, LOGIN_TIMEOUT_MS);
|
|
338
|
-
listener.listen(0, "127.0.0.1", () => {
|
|
339
|
-
const port = listener.address().port;
|
|
340
|
-
reply.send({ type: "open", url: `${settings.endpoint}/cli/login?port=${port}&machine=${encodeURIComponent(settings.machine)}` });
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
/** The synced list, from the server: the CLI has no token to ask with, so it asks this daemon. */
|
|
344
|
-
function list(reply) {
|
|
345
|
-
const config = session;
|
|
346
|
-
if (config === undefined) {
|
|
347
|
-
reply.send({ type: "error", message: "this machine is signed out; run `skill-sync login` first" });
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
fetch(`${config.endpoint}/skills`, { headers: authHeaders(config, {}) })
|
|
351
|
-
.then(async (response) => {
|
|
352
|
-
if (!response.ok)
|
|
353
|
-
throw new Error(`GET /skills: ${response.status} ${await response.text()}`);
|
|
354
|
-
reply.send({ type: "list", skills: (await response.json()).skills });
|
|
355
|
-
})
|
|
356
|
-
.catch((cause) => reply.send({ type: "error", message: `could not reach the server: ${cause instanceof Error ? cause.message : String(cause)}` }));
|
|
357
|
-
}
|
|
358
|
-
function handleControl(message, reply) {
|
|
359
|
-
if (message.type === "login")
|
|
360
|
-
login(reply);
|
|
361
|
-
else if (message.type === "logout")
|
|
362
|
-
void signOut().then((revoked) => reply.send({ type: "signedOut", revoked }));
|
|
363
|
-
else if (message.type === "list")
|
|
364
|
-
list(reply);
|
|
365
|
-
else
|
|
366
|
-
reply.send({ type: "error", message: `unknown request ${JSON.stringify(message)}` });
|
|
367
|
-
}
|
|
368
|
-
if (await serve(handleControl) === false) {
|
|
369
|
-
console.log("another skill-sync daemon is already running for this user; standing down");
|
|
370
|
-
// Zero: a second install's daemon is not a failure, and the service manager must not keep retrying it.
|
|
371
|
-
process.exit(0);
|
|
372
|
-
}
|
|
373
|
-
console.log(`skill-sync daemon for ${settings.machine}; waiting for \`skill-sync login\``);
|
|
374
|
-
//# sourceMappingURL=skill-sync-daemon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-sync-daemon.js","sourceRoot":"","sources":["../../../../src/daemons/skill-sync-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { spawn, spawnSync } from "node:child_process";
|
|
2
|
-
import { Command } from "commander";
|
|
3
|
-
import { Effect } from "effect";
|
|
4
|
-
import { daemonStatuses, upgrade } from "jive-abstract-library";
|
|
5
|
-
import { name } from "../../package.json";
|
|
6
|
-
import { DaemonUnreachable, request } from "../internal/control";
|
|
7
|
-
/**
|
|
8
|
-
* The CLI that accompanies the daemon: `login`, `logout`, `list` and `upgrade`, and nothing else — which
|
|
9
|
-
* folders and skills sync is chosen on the dashboard.
|
|
10
|
-
*
|
|
11
|
-
* The daemon owns the sync token and keeps it only in memory. `login`, `logout` and `list` are requests to
|
|
12
|
-
* it over the control socket; the token goes from the browser straight to the daemon and never through here.
|
|
13
|
-
*/
|
|
14
|
-
const program = new Command("skill-sync")
|
|
15
|
-
.description("keep the skills you choose identical across every Claude and Codex skills folder on every machine; choose them at https://skill-sync.jive.sh/");
|
|
16
|
-
program
|
|
17
|
-
.command("login")
|
|
18
|
-
.description("sign this machine in with your passkey in the browser; the daemon keeps the token in memory")
|
|
19
|
-
.action(async () => {
|
|
20
|
-
const result = await withDaemon({ type: "login" }, (event) => {
|
|
21
|
-
if (event.type !== "open")
|
|
22
|
-
return;
|
|
23
|
-
console.log(`Opening ${event.url}`);
|
|
24
|
-
openBrowser(event.url);
|
|
25
|
-
});
|
|
26
|
-
if (result.type === "signedIn") {
|
|
27
|
-
console.log(`Signed in. ${result.machine} is syncing; choose what syncs at https://skill-sync.jive.sh/`);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
fail(result);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
program
|
|
34
|
-
.command("logout")
|
|
35
|
-
.description("revoke this machine's token and stop syncing until the next login")
|
|
36
|
-
.action(async () => {
|
|
37
|
-
const result = await withDaemon({ type: "logout" }, () => undefined);
|
|
38
|
-
if (result.type === "signedOut") {
|
|
39
|
-
console.log(result.revoked ? "Signed out; the token is revoked." : "Signed out locally; the server could not be reached to revoke the token.");
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
fail(result);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
program
|
|
46
|
-
.command("list")
|
|
47
|
-
.description("list the skills that sync, as the server holds them; needs this machine signed in")
|
|
48
|
-
.action(async () => {
|
|
49
|
-
const result = await withDaemon({ type: "list" }, () => undefined);
|
|
50
|
-
if (result.type !== "list")
|
|
51
|
-
fail(result);
|
|
52
|
-
if (result.skills.length === 0) {
|
|
53
|
-
console.log("No skills sync yet; tick them at https://skill-sync.jive.sh/");
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const width = Math.max(...result.skills.map((skill) => skill.name.length));
|
|
57
|
-
for (const skill of result.skills) {
|
|
58
|
-
const detail = skill.editedAt === null
|
|
59
|
-
? "no files yet"
|
|
60
|
-
: `${skill.files} ${skill.files === 1 ? "file" : "files"}, last edited ${new Date(skill.editedAt).toLocaleString()} on ${skill.editedBy}`;
|
|
61
|
-
console.log(`${skill.name.padEnd(width)} ${detail}`);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
program
|
|
65
|
-
.command("upgrade")
|
|
66
|
-
.description("upgrade skill-sync to the latest version with the package manager that installed it")
|
|
67
|
-
.action(async () => {
|
|
68
|
-
await Effect.runPromise(upgrade({ packageName: name })).catch((cause) => {
|
|
69
|
-
console.error(`Upgrade failed: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
70
|
-
process.exit(1);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
program.parse();
|
|
74
|
-
if (process.argv.length <= 2)
|
|
75
|
-
program.help();
|
|
76
|
-
/**
|
|
77
|
-
* Sends a request to the running daemon. If none is listening — stopped, or never started since the
|
|
78
|
-
* install — this package's registered daemon is started through its service manager and the request is
|
|
79
|
-
* retried for a few seconds.
|
|
80
|
-
*/
|
|
81
|
-
async function withDaemon(message, onEvent) {
|
|
82
|
-
try {
|
|
83
|
-
return await request(message, onEvent);
|
|
84
|
-
}
|
|
85
|
-
catch (cause) {
|
|
86
|
-
if (!(cause instanceof DaemonUnreachable))
|
|
87
|
-
throw cause;
|
|
88
|
-
}
|
|
89
|
-
await startDaemons();
|
|
90
|
-
for (let attempt = 0;; attempt++) {
|
|
91
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
92
|
-
try {
|
|
93
|
-
return await request(message, onEvent);
|
|
94
|
-
}
|
|
95
|
-
catch (cause) {
|
|
96
|
-
if (!(cause instanceof DaemonUnreachable) || attempt >= 20) {
|
|
97
|
-
console.error(`${cause instanceof Error ? cause.message : String(cause)}. Reinstall skill-sync to register its daemon.`);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
function fail(event) {
|
|
104
|
-
console.error(event.type === "error" ? event.message : `unexpected answer from the daemon: ${JSON.stringify(event)}`);
|
|
105
|
-
process.exit(1);
|
|
106
|
-
}
|
|
107
|
-
/** Starts this package's registered daemons through their service manager. */
|
|
108
|
-
async function startDaemons() {
|
|
109
|
-
const statuses = await Effect.runPromise(daemonStatuses).catch(() => []);
|
|
110
|
-
const ours = statuses.filter((status) => status.registration.packageName === name && status.executableExists);
|
|
111
|
-
if (ours.length === 0) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
for (const { registration } of ours) {
|
|
115
|
-
const command = registration.kind === "launchd"
|
|
116
|
-
? ["launchctl", "kickstart", "-k", `gui/${process.getuid?.() ?? 0}/${registration.unit}`]
|
|
117
|
-
: registration.kind === "systemd"
|
|
118
|
-
? ["systemctl", "--user", "restart", registration.unit]
|
|
119
|
-
: ["schtasks", "/Run", "/TN", registration.unit];
|
|
120
|
-
const result = spawnSync(command[0], command.slice(1), { stdio: ["ignore", "ignore", "pipe"] });
|
|
121
|
-
if (result.status !== 0) {
|
|
122
|
-
console.error(`Could not start ${registration.unit}: ${String(result.stderr ?? "").trim() || `exit ${result.status}`}`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
function openBrowser(url) {
|
|
127
|
-
const command = process.platform === "darwin" ? "open"
|
|
128
|
-
: process.platform === "win32" ? "cmd"
|
|
129
|
-
: "xdg-open";
|
|
130
|
-
const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
131
|
-
spawn(command, args, { stdio: "ignore", detached: true }).unref();
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=skill-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-sync.js","sourceRoot":"","sources":["../../../../src/entrypoints/skill-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the service needs from this package.
|
|
3
|
-
*
|
|
4
|
-
* The daemon and CLI are the product; this entrypoint exists so the service can share the path rules
|
|
5
|
-
* and wire types rather than restate them. A rule restated is a rule that drifts, and these two are
|
|
6
|
-
* exactly the pair that must not: one validates what the other writes to disk.
|
|
7
|
-
*/
|
|
8
|
-
export { invalidPathReason, isValidPath } from "./internal/path";
|
|
9
|
-
export { skillOf } from "./internal/wire";
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|