opencode-multidevice-sync 0.1.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.
- package/LICENSE +21 -0
- package/NOTICE +15 -0
- package/README.md +111 -0
- package/README.ru.md +57 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +460 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/render.d.ts +45 -0
- package/dist/cli/render.d.ts.map +1 -0
- package/dist/cli/render.js +167 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/cli/theme.d.ts +45 -0
- package/dist/cli/theme.d.ts.map +1 -0
- package/dist/cli/theme.js +88 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/core/backup.d.ts +13 -0
- package/dist/core/backup.d.ts.map +1 -0
- package/dist/core/backup.js +102 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/fsx.d.ts +81 -0
- package/dist/core/fsx.d.ts.map +1 -0
- package/dist/core/fsx.js +353 -0
- package/dist/core/fsx.js.map +1 -0
- package/dist/core/git.d.ts +62 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +162 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/guard.d.ts +5 -0
- package/dist/core/guard.d.ts.map +1 -0
- package/dist/core/guard.js +97 -0
- package/dist/core/guard.js.map +1 -0
- package/dist/core/health.d.ts +18 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +88 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/host.d.ts +20 -0
- package/dist/core/host.d.ts.map +1 -0
- package/dist/core/host.js +50 -0
- package/dist/core/host.js.map +1 -0
- package/dist/core/index.d.ts +18 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/jsonc.d.ts +20 -0
- package/dist/core/jsonc.d.ts.map +1 -0
- package/dist/core/jsonc.js +115 -0
- package/dist/core/jsonc.js.map +1 -0
- package/dist/core/lock.d.ts +14 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +111 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/overrides.d.ts +43 -0
- package/dist/core/overrides.d.ts.map +1 -0
- package/dist/core/overrides.js +169 -0
- package/dist/core/overrides.js.map +1 -0
- package/dist/core/paths.d.ts +36 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +55 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/preview.d.ts +3 -0
- package/dist/core/preview.d.ts.map +1 -0
- package/dist/core/preview.js +56 -0
- package/dist/core/preview.js.map +1 -0
- package/dist/core/repo.d.ts +57 -0
- package/dist/core/repo.d.ts.map +1 -0
- package/dist/core/repo.js +196 -0
- package/dist/core/repo.js.map +1 -0
- package/dist/core/reporter.d.ts +50 -0
- package/dist/core/reporter.d.ts.map +1 -0
- package/dist/core/reporter.js +63 -0
- package/dist/core/reporter.js.map +1 -0
- package/dist/core/sessions.d.ts +83 -0
- package/dist/core/sessions.d.ts.map +1 -0
- package/dist/core/sessions.js +508 -0
- package/dist/core/sessions.js.map +1 -0
- package/dist/core/settings.d.ts +68 -0
- package/dist/core/settings.d.ts.map +1 -0
- package/dist/core/settings.js +126 -0
- package/dist/core/settings.js.map +1 -0
- package/dist/core/setup.d.ts +48 -0
- package/dist/core/setup.d.ts.map +1 -0
- package/dist/core/setup.js +186 -0
- package/dist/core/setup.js.map +1 -0
- package/dist/core/sqlite.d.ts +37 -0
- package/dist/core/sqlite.d.ts.map +1 -0
- package/dist/core/sqlite.js +108 -0
- package/dist/core/sqlite.js.map +1 -0
- package/dist/core/stage.d.ts +44 -0
- package/dist/core/stage.d.ts.map +1 -0
- package/dist/core/stage.js +304 -0
- package/dist/core/stage.js.map +1 -0
- package/dist/core/sync.d.ts +52 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/sync.js +423 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/plugin/index.d.ts +29 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +88 -0
- package/dist/plugin/index.js.map +1 -0
- package/docs/MIGRATION.md +29 -0
- package/docs/ROADMAP.md +29 -0
- package/docs/SAFETY.md +31 -0
- package/examples/home-laptop.jsonc +31 -0
- package/examples/opencode-sync.overrides.jsonc +4 -0
- package/examples/work-laptop.jsonc +26 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ChangeSummary, ChangedFile, Reporter } from "../core/reporter.js";
|
|
2
|
+
export declare function write(line?: string): void;
|
|
3
|
+
/**
|
|
4
|
+
* The product wordmark.
|
|
5
|
+
*
|
|
6
|
+
* Rendered on every command so the output reads as one coherent tool rather
|
|
7
|
+
* than a pile of scripts.
|
|
8
|
+
*/
|
|
9
|
+
export declare function banner(subtitle?: string, badge?: string): void;
|
|
10
|
+
export declare function rule(width?: number): void;
|
|
11
|
+
export declare function heading(text: string): void;
|
|
12
|
+
export declare function keyValue(key: string, value: string, width?: number): void;
|
|
13
|
+
export declare function ok(message: string): void;
|
|
14
|
+
export declare function fail(message: string): void;
|
|
15
|
+
export declare function warn(message: string): void;
|
|
16
|
+
export declare function info(message: string): void;
|
|
17
|
+
export declare function step(message: string): void;
|
|
18
|
+
export declare function detail(message: string): void;
|
|
19
|
+
export declare function summaryLine(summary: ChangeSummary): string;
|
|
20
|
+
/**
|
|
21
|
+
* Print the changed files.
|
|
22
|
+
*
|
|
23
|
+
* The list is capped so a large sync does not bury the important lines; the
|
|
24
|
+
* full list is one environment variable away.
|
|
25
|
+
*/
|
|
26
|
+
export declare function changeList(files: ChangedFile[]): void;
|
|
27
|
+
export declare function outcome(message: string, changed: boolean): void;
|
|
28
|
+
/** A live spinner that degrades to a single static line when not a TTY. */
|
|
29
|
+
export declare class Spinner {
|
|
30
|
+
private label;
|
|
31
|
+
private timer;
|
|
32
|
+
private frame;
|
|
33
|
+
private active;
|
|
34
|
+
/** Last label printed in non-animated mode, so restarts do not duplicate it. */
|
|
35
|
+
private printed;
|
|
36
|
+
constructor(label: string);
|
|
37
|
+
start(): void;
|
|
38
|
+
update(label: string): void;
|
|
39
|
+
/** In non-animated mode each distinct label is printed exactly once. */
|
|
40
|
+
private print;
|
|
41
|
+
stop(): void;
|
|
42
|
+
}
|
|
43
|
+
/** Reporter that renders straight to the terminal. */
|
|
44
|
+
export declare function createCliReporter(spinner?: Spinner): Reporter;
|
|
45
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/cli/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKhF,wBAAgB,KAAK,CAAC,IAAI,SAAK,GAAG,IAAI,CAErC;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAU9D;AAED,wBAAgB,IAAI,CAAC,KAAK,SAAK,GAAG,IAAI,CAErC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG1C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,IAAI,CAGrE;AAED,wBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAK1C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5C;AASD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAcrD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAK/D;AAED,2EAA2E;AAC3E,qBAAa,OAAO;IAON,OAAO,CAAC,KAAK;IANzB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,gFAAgF;IAChF,OAAO,CAAC,OAAO,CAAqB;gBAEhB,KAAK,EAAE,MAAM;IAEjC,KAAK,IAAI,IAAI;IAgBb,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B,wEAAwE;IACxE,OAAO,CAAC,KAAK;IAMb,IAAI,IAAI,IAAI;CAMb;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAqB7D"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { SPINNER, canAnimate, displayWidth, glyph, paint, style } from "./theme.js";
|
|
2
|
+
const INDENT = " ";
|
|
3
|
+
export function write(line = "") {
|
|
4
|
+
process.stdout.write(`${line}\n`);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The product wordmark.
|
|
8
|
+
*
|
|
9
|
+
* Rendered on every command so the output reads as one coherent tool rather
|
|
10
|
+
* than a pile of scripts.
|
|
11
|
+
*/
|
|
12
|
+
export function banner(subtitle, badge) {
|
|
13
|
+
const mark = paint("opencode", style.bold, style.brand) + paint("-sync", style.bold, style.accent);
|
|
14
|
+
const tail = subtitle
|
|
15
|
+
? `${paint(" ".repeat(1) + glyph.bullet + " ", style.faint)}${paint(subtitle, style.muted)}`
|
|
16
|
+
: "";
|
|
17
|
+
const tag = badge ? ` ${paint(` ${badge} `, style.bold, style.yellow)}` : "";
|
|
18
|
+
write();
|
|
19
|
+
write(`${INDENT}${mark}${tail}${tag}`);
|
|
20
|
+
write();
|
|
21
|
+
}
|
|
22
|
+
export function rule(width = 52) {
|
|
23
|
+
write(`${INDENT}${paint("─".repeat(width), style.faint)}`);
|
|
24
|
+
}
|
|
25
|
+
export function heading(text) {
|
|
26
|
+
write();
|
|
27
|
+
write(`${INDENT}${paint(text, style.bold, style.text)}`);
|
|
28
|
+
}
|
|
29
|
+
export function keyValue(key, value, width = 16) {
|
|
30
|
+
const padding = " ".repeat(Math.max(0, width - displayWidth(key)));
|
|
31
|
+
write(`${INDENT}${paint(key, style.muted)}${padding}${value}`);
|
|
32
|
+
}
|
|
33
|
+
export function ok(message) {
|
|
34
|
+
write(`${INDENT}${paint(glyph.ok, style.green)} ${message}`);
|
|
35
|
+
}
|
|
36
|
+
export function fail(message) {
|
|
37
|
+
for (const [index, line] of message.split("\n").entries()) {
|
|
38
|
+
if (index === 0)
|
|
39
|
+
write(`${INDENT}${paint(glyph.fail, style.red)} ${paint(line, style.text)}`);
|
|
40
|
+
else
|
|
41
|
+
write(`${INDENT} ${paint(line, style.muted)}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function warn(message) {
|
|
45
|
+
write(`${INDENT}${paint(glyph.warn, style.yellow)} ${message}`);
|
|
46
|
+
}
|
|
47
|
+
export function info(message) {
|
|
48
|
+
write(`${INDENT}${paint(glyph.info, style.cyan)} ${message}`);
|
|
49
|
+
}
|
|
50
|
+
export function step(message) {
|
|
51
|
+
write(`${INDENT}${paint(glyph.step, style.faint)} ${paint(message, style.muted)}`);
|
|
52
|
+
}
|
|
53
|
+
export function detail(message) {
|
|
54
|
+
write(`${INDENT} ${paint(message, style.faint)}`);
|
|
55
|
+
}
|
|
56
|
+
const CHANGE_STYLE = {
|
|
57
|
+
added: { glyph: glyph.added, color: style.green, label: "added" },
|
|
58
|
+
modified: { glyph: glyph.modified, color: style.yellow, label: "modified" },
|
|
59
|
+
deleted: { glyph: glyph.deleted, color: style.red, label: "deleted" },
|
|
60
|
+
renamed: { glyph: glyph.renamed, color: style.cyan, label: "renamed" },
|
|
61
|
+
};
|
|
62
|
+
export function summaryLine(summary) {
|
|
63
|
+
const parts = [];
|
|
64
|
+
for (const kind of ["added", "modified", "deleted", "renamed"]) {
|
|
65
|
+
const count = summary[kind];
|
|
66
|
+
if (count === 0)
|
|
67
|
+
continue;
|
|
68
|
+
const meta = CHANGE_STYLE[kind];
|
|
69
|
+
parts.push(paint(`${meta.glyph}${count} ${meta.label}`, meta.color));
|
|
70
|
+
}
|
|
71
|
+
if (parts.length === 0)
|
|
72
|
+
return paint("no changes", style.muted);
|
|
73
|
+
return parts.join(paint(" ", style.faint));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Print the changed files.
|
|
77
|
+
*
|
|
78
|
+
* The list is capped so a large sync does not bury the important lines; the
|
|
79
|
+
* full list is one environment variable away.
|
|
80
|
+
*/
|
|
81
|
+
export function changeList(files) {
|
|
82
|
+
if (files.length === 0)
|
|
83
|
+
return;
|
|
84
|
+
const cap = process.env.OPENCODE_SYNC_VERBOSE === "1" ? Number.POSITIVE_INFINITY : 20;
|
|
85
|
+
const shown = files.slice(0, cap);
|
|
86
|
+
for (const file of shown) {
|
|
87
|
+
const meta = CHANGE_STYLE[file.kind];
|
|
88
|
+
write(`${INDENT} ${paint(meta.glyph, meta.color)} ${paint(file.path, style.faint)}`);
|
|
89
|
+
}
|
|
90
|
+
const hidden = files.length - shown.length;
|
|
91
|
+
if (hidden > 0) {
|
|
92
|
+
write(`${INDENT} ${paint(`… ${hidden} more (set OPENCODE_SYNC_VERBOSE=1 to see all)`, style.faint)}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export function outcome(message, changed) {
|
|
96
|
+
write();
|
|
97
|
+
const icon = changed ? paint("✦", style.accent) : paint(glyph.ok, style.green);
|
|
98
|
+
write(`${INDENT}${icon} ${paint(message, style.bold, style.text)}`);
|
|
99
|
+
write();
|
|
100
|
+
}
|
|
101
|
+
/** A live spinner that degrades to a single static line when not a TTY. */
|
|
102
|
+
export class Spinner {
|
|
103
|
+
label;
|
|
104
|
+
timer;
|
|
105
|
+
frame = 0;
|
|
106
|
+
active = false;
|
|
107
|
+
/** Last label printed in non-animated mode, so restarts do not duplicate it. */
|
|
108
|
+
printed;
|
|
109
|
+
constructor(label) {
|
|
110
|
+
this.label = label;
|
|
111
|
+
}
|
|
112
|
+
start() {
|
|
113
|
+
if (!canAnimate) {
|
|
114
|
+
this.print();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.active = true;
|
|
118
|
+
this.timer = setInterval(() => {
|
|
119
|
+
const glyphFrame = SPINNER[this.frame % SPINNER.length];
|
|
120
|
+
this.frame++;
|
|
121
|
+
process.stdout.write(`\r${INDENT}${paint(glyphFrame, style.brand)} ${paint(this.label, style.muted)}`);
|
|
122
|
+
}, 80);
|
|
123
|
+
this.timer.unref?.();
|
|
124
|
+
}
|
|
125
|
+
update(label) {
|
|
126
|
+
this.label = label;
|
|
127
|
+
if (!canAnimate)
|
|
128
|
+
this.print();
|
|
129
|
+
}
|
|
130
|
+
/** In non-animated mode each distinct label is printed exactly once. */
|
|
131
|
+
print() {
|
|
132
|
+
if (this.printed === this.label)
|
|
133
|
+
return;
|
|
134
|
+
this.printed = this.label;
|
|
135
|
+
step(this.label);
|
|
136
|
+
}
|
|
137
|
+
stop() {
|
|
138
|
+
if (!this.active)
|
|
139
|
+
return;
|
|
140
|
+
if (this.timer)
|
|
141
|
+
clearInterval(this.timer);
|
|
142
|
+
this.active = false;
|
|
143
|
+
process.stdout.write("\r\x1b[2K");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** Reporter that renders straight to the terminal. */
|
|
147
|
+
export function createCliReporter(spinner) {
|
|
148
|
+
const pause = (fn) => {
|
|
149
|
+
spinner?.stop();
|
|
150
|
+
const result = fn();
|
|
151
|
+
spinner?.start();
|
|
152
|
+
return result;
|
|
153
|
+
};
|
|
154
|
+
return {
|
|
155
|
+
step: (message) => (spinner ? spinner.update(message) : step(message)),
|
|
156
|
+
info: (message) => pause(() => info(message)),
|
|
157
|
+
success: (message) => pause(() => ok(message)),
|
|
158
|
+
warn: (message) => pause(() => warn(message)),
|
|
159
|
+
error: (message) => pause(() => fail(message)),
|
|
160
|
+
detail: (message) => pause(() => detail(message)),
|
|
161
|
+
changes: (summary, files) => pause(() => {
|
|
162
|
+
ok(summaryLine(summary));
|
|
163
|
+
changeList(files);
|
|
164
|
+
}),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/cli/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal theme.
|
|
3
|
+
*
|
|
4
|
+
* Colour is opt-out: it is disabled when stdout is not a TTY, when `NO_COLOR`
|
|
5
|
+
* is set, or when `TERM=dumb`, so piping the CLI into a file or a CI log
|
|
6
|
+
* produces clean text. Truecolor is used when the terminal advertises it and
|
|
7
|
+
* degrades to the 256-colour palette otherwise.
|
|
8
|
+
*/
|
|
9
|
+
export declare const style: {
|
|
10
|
+
reset: string;
|
|
11
|
+
bold: string;
|
|
12
|
+
dim: string;
|
|
13
|
+
italic: string;
|
|
14
|
+
brand: string;
|
|
15
|
+
accent: string;
|
|
16
|
+
cyan: string;
|
|
17
|
+
green: string;
|
|
18
|
+
yellow: string;
|
|
19
|
+
red: string;
|
|
20
|
+
text: string;
|
|
21
|
+
muted: string;
|
|
22
|
+
faint: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function paint(text: string, ...styles: string[]): string;
|
|
25
|
+
/** Strip ANSI sequences — used for width calculations. */
|
|
26
|
+
export declare function stripAnsi(text: string): string;
|
|
27
|
+
/** Display width, counting CJK and emoji as two columns. */
|
|
28
|
+
export declare function displayWidth(text: string): number;
|
|
29
|
+
export declare const glyph: {
|
|
30
|
+
ok: string;
|
|
31
|
+
fail: string;
|
|
32
|
+
warn: string;
|
|
33
|
+
info: string;
|
|
34
|
+
step: string;
|
|
35
|
+
bullet: string;
|
|
36
|
+
added: string;
|
|
37
|
+
modified: string;
|
|
38
|
+
deleted: string;
|
|
39
|
+
renamed: string;
|
|
40
|
+
arrow: string;
|
|
41
|
+
};
|
|
42
|
+
/** Braille spinner frames — smooth at 80ms. */
|
|
43
|
+
export declare const SPINNER: string[];
|
|
44
|
+
export declare const canAnimate: boolean;
|
|
45
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;CAgBjB,CAAC;AAEF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAG/D;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBjD;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;CAYjB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,OAAO,UAAqD,CAAC;AAE1E,eAAO,MAAM,UAAU,SAAiD,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal theme.
|
|
3
|
+
*
|
|
4
|
+
* Colour is opt-out: it is disabled when stdout is not a TTY, when `NO_COLOR`
|
|
5
|
+
* is set, or when `TERM=dumb`, so piping the CLI into a file or a CI log
|
|
6
|
+
* produces clean text. Truecolor is used when the terminal advertises it and
|
|
7
|
+
* degrades to the 256-colour palette otherwise.
|
|
8
|
+
*/
|
|
9
|
+
const supportsColor = (() => {
|
|
10
|
+
if (process.env.NO_COLOR)
|
|
11
|
+
return false;
|
|
12
|
+
if (process.env.FORCE_COLOR)
|
|
13
|
+
return true;
|
|
14
|
+
if (process.env.TERM === "dumb")
|
|
15
|
+
return false;
|
|
16
|
+
return Boolean(process.stdout.isTTY);
|
|
17
|
+
})();
|
|
18
|
+
const truecolor = supportsColor && /truecolor|24bit/i.test(process.env.COLORTERM ?? "");
|
|
19
|
+
function rgb(r, g, b, fallback) {
|
|
20
|
+
if (!supportsColor)
|
|
21
|
+
return "";
|
|
22
|
+
return truecolor ? `\x1b[38;2;${r};${g};${b}m` : `\x1b[38;5;${fallback}m`;
|
|
23
|
+
}
|
|
24
|
+
function code(sequence) {
|
|
25
|
+
return supportsColor ? sequence : "";
|
|
26
|
+
}
|
|
27
|
+
export const style = {
|
|
28
|
+
reset: code("\x1b[0m"),
|
|
29
|
+
bold: code("\x1b[1m"),
|
|
30
|
+
dim: code("\x1b[2m"),
|
|
31
|
+
italic: code("\x1b[3m"),
|
|
32
|
+
// Palette — a cool blue/violet base with high-contrast accents.
|
|
33
|
+
brand: rgb(122, 162, 247, 111),
|
|
34
|
+
accent: rgb(187, 154, 247, 141),
|
|
35
|
+
cyan: rgb(125, 207, 255, 117),
|
|
36
|
+
green: rgb(158, 206, 106, 149),
|
|
37
|
+
yellow: rgb(224, 175, 104, 179),
|
|
38
|
+
red: rgb(247, 118, 142, 204),
|
|
39
|
+
text: rgb(192, 202, 245, 189),
|
|
40
|
+
muted: rgb(108, 119, 158, 103),
|
|
41
|
+
faint: rgb(70, 79, 115, 60),
|
|
42
|
+
};
|
|
43
|
+
export function paint(text, ...styles) {
|
|
44
|
+
if (!supportsColor)
|
|
45
|
+
return text;
|
|
46
|
+
return `${styles.join("")}${text}${style.reset}`;
|
|
47
|
+
}
|
|
48
|
+
/** Strip ANSI sequences — used for width calculations. */
|
|
49
|
+
export function stripAnsi(text) {
|
|
50
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: matching ANSI escapes is the point
|
|
51
|
+
return text.replace(/\x1b\[[0-9;]*m/g, "");
|
|
52
|
+
}
|
|
53
|
+
/** Display width, counting CJK and emoji as two columns. */
|
|
54
|
+
export function displayWidth(text) {
|
|
55
|
+
let width = 0;
|
|
56
|
+
for (const char of stripAnsi(text)) {
|
|
57
|
+
const cp = char.codePointAt(0) ?? 0;
|
|
58
|
+
if (cp === 0)
|
|
59
|
+
continue;
|
|
60
|
+
const wide = (cp >= 0x1100 && cp <= 0x115f) ||
|
|
61
|
+
(cp >= 0x2e80 && cp <= 0xa4cf) ||
|
|
62
|
+
(cp >= 0xac00 && cp <= 0xd7a3) ||
|
|
63
|
+
(cp >= 0xf900 && cp <= 0xfaff) ||
|
|
64
|
+
(cp >= 0xfe30 && cp <= 0xfe6f) ||
|
|
65
|
+
(cp >= 0xff00 && cp <= 0xff60) ||
|
|
66
|
+
(cp >= 0xffe0 && cp <= 0xffe6) ||
|
|
67
|
+
(cp >= 0x1f300 && cp <= 0x1f9ff);
|
|
68
|
+
width += wide ? 2 : 1;
|
|
69
|
+
}
|
|
70
|
+
return width;
|
|
71
|
+
}
|
|
72
|
+
export const glyph = {
|
|
73
|
+
ok: "✓",
|
|
74
|
+
fail: "✗",
|
|
75
|
+
warn: "!",
|
|
76
|
+
info: "i",
|
|
77
|
+
step: "›",
|
|
78
|
+
bullet: "·",
|
|
79
|
+
added: "+",
|
|
80
|
+
modified: "~",
|
|
81
|
+
deleted: "-",
|
|
82
|
+
renamed: "»",
|
|
83
|
+
arrow: "→",
|
|
84
|
+
};
|
|
85
|
+
/** Braille spinner frames — smooth at 80ms. */
|
|
86
|
+
export const SPINNER = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
87
|
+
export const canAnimate = supportsColor && Boolean(process.stdout.isTTY);
|
|
88
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface BackupInfo {
|
|
2
|
+
path: string;
|
|
3
|
+
createdAt: number;
|
|
4
|
+
bytes: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function backupRoot(dataRoot?: string): string;
|
|
7
|
+
export declare function listDatabaseBackups(root?: string): BackupInfo[];
|
|
8
|
+
export declare function createDatabaseBackup(file: string, root?: string, retention?: number): Promise<BackupInfo>;
|
|
9
|
+
export declare function latestDatabaseBackup(root?: string): BackupInfo | undefined;
|
|
10
|
+
export declare function restoreDatabaseBackup(file: string, backupFile: string, options?: {
|
|
11
|
+
offlineConfirmed?: boolean;
|
|
12
|
+
}): Promise<string | undefined>;
|
|
13
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/core/backup.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,wBAAgB,UAAU,CAAC,QAAQ,SAAgB,GAAG,MAAM,CAE3D;AAID,wBAAgB,mBAAmB,CAAC,IAAI,SAAe,GAAG,UAAU,EAAE,CAYrE;AACD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,IAAI,SAAiC,EACrC,SAAS,SAAK,GACb,OAAO,CAAC,UAAU,CAAC,CAiCrB;AACD,wBAAgB,oBAAoB,CAAC,IAAI,SAAe,GAAG,UAAU,GAAG,SAAS,CAEhF;AACD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyC7B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { checkDatabaseHealth, healthProblems } from "./health.js";
|
|
5
|
+
import { getDataRoot } from "./paths.js";
|
|
6
|
+
import { openDatabase } from "./sqlite.js";
|
|
7
|
+
export function backupRoot(dataRoot = getDataRoot()) {
|
|
8
|
+
return path.join(dataRoot, "backups", "opencode-multidevice-sync");
|
|
9
|
+
}
|
|
10
|
+
function timestamp() {
|
|
11
|
+
return new Date().toISOString().replace(/[:.]/g, "-");
|
|
12
|
+
}
|
|
13
|
+
export function listDatabaseBackups(root = backupRoot()) {
|
|
14
|
+
if (!fs.existsSync(root))
|
|
15
|
+
return [];
|
|
16
|
+
return fs
|
|
17
|
+
.readdirSync(root)
|
|
18
|
+
.filter((n) => /^opencode-.*\.db$/.test(n))
|
|
19
|
+
.filter((n) => fs.statSync(path.join(root, n)).isFile())
|
|
20
|
+
.map((n) => {
|
|
21
|
+
const p = path.join(root, n);
|
|
22
|
+
const s = fs.statSync(p);
|
|
23
|
+
return { path: p, createdAt: s.mtimeMs, bytes: s.size };
|
|
24
|
+
})
|
|
25
|
+
.sort((a, b) => b.createdAt - a.createdAt);
|
|
26
|
+
}
|
|
27
|
+
export async function createDatabaseBackup(file, root = backupRoot(path.dirname(file)), retention = 10) {
|
|
28
|
+
if (!Number.isInteger(retention) || retention < 1)
|
|
29
|
+
throw new Error("backupRetention must be a positive integer");
|
|
30
|
+
if (!fs.existsSync(file))
|
|
31
|
+
throw new Error(`Database not found: ${file}`);
|
|
32
|
+
fs.mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
33
|
+
const destination = path.join(root, `opencode-${timestamp()}-${randomUUID()}.db`);
|
|
34
|
+
const temp = destination + ".partial";
|
|
35
|
+
const db = await openDatabase(file, { readOnly: true });
|
|
36
|
+
try {
|
|
37
|
+
db.prepare("VACUUM INTO ?").run(temp);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
fs.rmSync(temp, { force: true });
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
db.close();
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const health = await checkDatabaseHealth(temp);
|
|
48
|
+
if (!health.ok)
|
|
49
|
+
throw new Error(`Backup validation failed: ${healthProblems(health).join("; ")}`);
|
|
50
|
+
fs.chmodSync(temp, 0o600);
|
|
51
|
+
fs.renameSync(temp, destination);
|
|
52
|
+
const stat = fs.statSync(destination);
|
|
53
|
+
// Retention is applied only after a new backup passed integrity checks.
|
|
54
|
+
for (const old of listDatabaseBackups(root)
|
|
55
|
+
.filter((b) => b.path !== destination)
|
|
56
|
+
.slice(retention - 1))
|
|
57
|
+
fs.rmSync(old.path);
|
|
58
|
+
return { path: destination, createdAt: stat.mtimeMs, bytes: stat.size };
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
fs.rmSync(temp, { force: true });
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function latestDatabaseBackup(root = backupRoot()) {
|
|
66
|
+
return listDatabaseBackups(root)[0];
|
|
67
|
+
}
|
|
68
|
+
export async function restoreDatabaseBackup(file, backupFile, options = {}) {
|
|
69
|
+
if (!options.offlineConfirmed)
|
|
70
|
+
throw new Error("Restore requires explicit offline confirmation; close all OpenCode processes first");
|
|
71
|
+
if (path.resolve(file) === path.resolve(backupFile))
|
|
72
|
+
throw new Error("Backup and destination must differ");
|
|
73
|
+
const assertNoJournals = () => {
|
|
74
|
+
for (const suffix of ["-wal", "-shm", "-journal"]) {
|
|
75
|
+
if (fs.existsSync(file + suffix))
|
|
76
|
+
throw new Error(`Restore refused: ${suffix} exists. Close OpenCode cleanly; do not delete journals manually.`);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
assertNoJournals();
|
|
80
|
+
const health = await checkDatabaseHealth(backupFile);
|
|
81
|
+
if (!health.ok)
|
|
82
|
+
throw new Error(`Invalid backup: ${healthProblems(health).join("; ")}`);
|
|
83
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
84
|
+
const temp = file + `.restore-${randomUUID()}`;
|
|
85
|
+
fs.copyFileSync(backupFile, temp);
|
|
86
|
+
fs.chmodSync(temp, 0o600);
|
|
87
|
+
let safety;
|
|
88
|
+
try {
|
|
89
|
+
if (fs.existsSync(file))
|
|
90
|
+
safety = (await createDatabaseBackup(file, path.join(backupRoot(path.dirname(file)), "before-restore"), 10)).path;
|
|
91
|
+
assertNoJournals();
|
|
92
|
+
fs.renameSync(temp, file);
|
|
93
|
+
// A restored snapshot must not inherit baselines from a newer database.
|
|
94
|
+
if (fs.existsSync(file + ".omds-bases.json"))
|
|
95
|
+
fs.renameSync(file + ".omds-bases.json", file + `.omds-bases-before-${randomUUID()}.json`);
|
|
96
|
+
return safety;
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
fs.rmSync(temp, { force: true });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/core/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem helpers used by staging.
|
|
3
|
+
*
|
|
4
|
+
* Two properties matter throughout this module:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Symlinks are refused, never followed.** A sync repo that follows a
|
|
7
|
+
* symlink can be tricked into copying arbitrary files off the machine, and
|
|
8
|
+
* on Windows a directory junction silently turns a delete into a delete of
|
|
9
|
+
* something else entirely.
|
|
10
|
+
* 2. **Replacements are atomic.** Destinations are built beside the target and
|
|
11
|
+
* renamed into place, so a crash mid-copy can never leave a half-written
|
|
12
|
+
* config that stops OpenCode from starting.
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureDir(dir: string): void;
|
|
15
|
+
export declare function exists(target: string): boolean;
|
|
16
|
+
export declare function removeRecursive(target: string): void;
|
|
17
|
+
export declare class SymlinkRefusedError extends Error {
|
|
18
|
+
constructor(role: string, target: string);
|
|
19
|
+
}
|
|
20
|
+
export declare function rejectLink(target: string, role: "source" | "target"): void;
|
|
21
|
+
/** Write only when the content actually differs. Returns true if written. */
|
|
22
|
+
export declare function writeIfDiffers(filePath: string, content: string): boolean;
|
|
23
|
+
/** Create the file only when missing. Returns true if created. */
|
|
24
|
+
export declare function ensureFile(filePath: string, content: string): boolean;
|
|
25
|
+
export declare function copyFileIfExists(src: string, dst: string): boolean;
|
|
26
|
+
/** Copy `src` onto `dst`, deleting `dst` when `src` does not exist. */
|
|
27
|
+
export declare function mirrorFile(src: string, dst: string): number;
|
|
28
|
+
export interface CopyOptions {
|
|
29
|
+
excludeFiles?: Set<string>;
|
|
30
|
+
excludeDirs?: Set<string>;
|
|
31
|
+
}
|
|
32
|
+
export declare function copyDirRecursive(src: string, dst: string, options?: CopyOptions): number;
|
|
33
|
+
export interface IncrementalOptions extends CopyOptions {
|
|
34
|
+
/** Delete files in `dst` that no longer exist in `src`. Default true. */
|
|
35
|
+
deleteExtraneous?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface IncrementalResult {
|
|
38
|
+
copied: number;
|
|
39
|
+
deleted: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Mirror `srcDir` into `dstDir`, copying only what changed.
|
|
43
|
+
*
|
|
44
|
+
* Change detection compares size and modification time at **one-second
|
|
45
|
+
* granularity**, then falls back to a content compare. Whole seconds are
|
|
46
|
+
* exactly representable on every filesystem we support; sub-second precision
|
|
47
|
+
* drifts between NTFS and APFS and would make every run re-copy the entire
|
|
48
|
+
* tree, which defeats the point.
|
|
49
|
+
*/
|
|
50
|
+
export declare function syncDirIncremental(srcDir: string, dstDir: string, options?: IncrementalOptions): IncrementalResult;
|
|
51
|
+
export interface ReplaceFileOptions {
|
|
52
|
+
/** When `src` is missing, keep the existing destination instead of deleting. */
|
|
53
|
+
preserveMissing?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/** Replace a single file atomically. */
|
|
56
|
+
export declare function replaceFileAtomically(src: string, dst: string, options?: ReplaceFileOptions): number;
|
|
57
|
+
export interface ReplaceDirOptions extends CopyOptions {
|
|
58
|
+
/** Files at the destination root that survive the replacement. */
|
|
59
|
+
preserveRootFiles?: Iterable<string>;
|
|
60
|
+
}
|
|
61
|
+
/** Replace a whole directory atomically. */
|
|
62
|
+
export declare function replaceDirAtomically(src: string, dst: string, options?: ReplaceDirOptions): number;
|
|
63
|
+
/**
|
|
64
|
+
* Copy a path that may be either a file or a directory.
|
|
65
|
+
*
|
|
66
|
+
* OpenCode's `storage/migration` is a one-byte file while `storage/project` is
|
|
67
|
+
* a directory, and which is which has changed between releases — so the type is
|
|
68
|
+
* decided by looking at the source, not by assumption.
|
|
69
|
+
*/
|
|
70
|
+
export declare function copyPath(src: string, dst: string): number;
|
|
71
|
+
/**
|
|
72
|
+
* Strip nested `.git` directories from a staging copy.
|
|
73
|
+
*
|
|
74
|
+
* The `skills` CLI installs by cloning, which leaves a `.git` inside the skill
|
|
75
|
+
* directory. Git records a nested repository as a gitlink instead of tracking
|
|
76
|
+
* the files, so the skill's contents become invisible to every other machine.
|
|
77
|
+
* Only staging copies are touched; the real source directories are never
|
|
78
|
+
* modified.
|
|
79
|
+
*/
|
|
80
|
+
export declare function removeNestedGitDirs(...dirs: string[]): number;
|
|
81
|
+
//# sourceMappingURL=fsx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fsx.d.ts","sourceRoot":"","sources":["../../src/core/fsx.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAIzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAO1E;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKrE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,CAwB5F;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAwGnB;AAED,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAsBR;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,4CAA4C;AAC5C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CA0BR;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAqC7D"}
|