jouzu 0.0.1 → 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/README.md +50 -0
- package/dist/args.d.ts +45 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +221 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.js +250 -29
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +36 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +224 -0
- package/dist/doctor.js.map +1 -0
- package/dist/keybindings.d.ts +68 -0
- package/dist/keybindings.d.ts.map +1 -0
- package/dist/keybindings.js +460 -0
- package/dist/keybindings.js.map +1 -0
- package/dist/metadata.d.ts +21 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +22 -0
- package/dist/metadata.js.map +1 -0
- package/dist/paths.d.ts +17 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +65 -0
- package/dist/paths.js.map +1 -0
- package/dist/pi.lock.json +15 -0
- package/dist/presentation.d.ts +45 -0
- package/dist/presentation.d.ts.map +1 -0
- package/dist/presentation.js +202 -0
- package/dist/presentation.js.map +1 -0
- package/dist/private-fs.d.ts +12 -0
- package/dist/private-fs.d.ts.map +1 -0
- package/dist/private-fs.js +64 -0
- package/dist/private-fs.js.map +1 -0
- package/dist/profile-choice.d.ts +14 -0
- package/dist/profile-choice.d.ts.map +1 -0
- package/dist/profile-choice.js +83 -0
- package/dist/profile-choice.js.map +1 -0
- package/dist/profile-manager.d.ts +50 -0
- package/dist/profile-manager.d.ts.map +1 -0
- package/dist/profile-manager.js +364 -0
- package/dist/profile-manager.js.map +1 -0
- package/dist/profiles/core/assets/jouzu-core-skill.md +12 -0
- package/dist/profiles/core/assets/jouzu-review.md +1 -0
- package/dist/profiles/core/manifest.json +17 -0
- package/dist/profiles/ja/assets/APPEND_SYSTEM.md +8 -0
- package/dist/profiles/ja/manifest.json +13 -0
- package/dist/profiles.d.ts +18 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +153 -0
- package/dist/profiles.js.map +1 -0
- package/dist/resume.d.ts +7 -0
- package/dist/resume.d.ts.map +1 -0
- package/dist/resume.js +23 -0
- package/dist/resume.js.map +1 -0
- package/dist/runtime.d.ts +18 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +59 -0
- package/dist/runtime.js.map +1 -0
- package/dist/state-lock.d.ts +39 -0
- package/dist/state-lock.d.ts.map +1 -0
- package/dist/state-lock.js +143 -0
- package/dist/state-lock.js.map +1 -0
- package/dist/updater.d.ts +113 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +698 -0
- package/dist/updater.js.map +1 -0
- package/package.json +7 -4
package/dist/resume.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const ANSI_SEQUENCE = String.raw `\x1B\[[0-?]*[ -/]*[@-~]`;
|
|
2
|
+
const PI_RESUME_HINT = new RegExp(String.raw `(To resume this session:(?:${ANSI_SEQUENCE})*[\t ]+)pi[^\r\n]*[\t ]--session[\t ]+([A-Za-z0-9._-]+)(?=\r?\n|$)`, "g");
|
|
3
|
+
/** Replace Pi's process-level exit hint without changing stock Pi or its session files. */
|
|
4
|
+
export function rewriteResumeHint(text) {
|
|
5
|
+
return text.replace(PI_RESUME_HINT, "$1jz --session $2");
|
|
6
|
+
}
|
|
7
|
+
/** Scope the exit-hint adapter to the pinned Pi runtime invocation. */
|
|
8
|
+
export async function withJouzuResumeHint(operation) {
|
|
9
|
+
const originalWrite = process.stdout.write;
|
|
10
|
+
const jouzuWrite = function (chunk, ...args) {
|
|
11
|
+
const output = typeof chunk === "string" ? rewriteResumeHint(chunk) : chunk;
|
|
12
|
+
return Reflect.apply(originalWrite, this, [output, ...args]);
|
|
13
|
+
};
|
|
14
|
+
process.stdout.write = jouzuWrite;
|
|
15
|
+
try {
|
|
16
|
+
return await operation();
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
if (process.stdout.write === jouzuWrite)
|
|
20
|
+
process.stdout.write = originalWrite;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA,yBAAyB,CAAC;AAC1D,MAAM,cAAc,GAAG,IAAI,MAAM,CAChC,MAAM,CAAC,GAAG,CAAA,8BAA8B,aAAa,qEAAqE,EAC1H,GAAG,CACH,CAAC;AAEF,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAC1D,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,SAA4B;IACxE,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAoC,KAA0B,EAAE,GAAG,IAAe;QACpG,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5E,OAAO,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAY,CAAC;IACzE,CAAgC,CAAC;IAEjC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;IAClC,IAAI,CAAC;QACJ,OAAO,MAAM,SAAS,EAAE,CAAC;IAC1B,CAAC;YAAS,CAAC;QACV,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC;IAC/E,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProfileId } from "./args.js";
|
|
2
|
+
import type { JouzuPaths } from "./paths.js";
|
|
3
|
+
interface ProfileSelection {
|
|
4
|
+
id: ProfileId;
|
|
5
|
+
source: "command line" | "environment" | "profile state" | "saved choice" | "first-run choice" | "default";
|
|
6
|
+
appliedManifestSha256?: string;
|
|
7
|
+
needsFirstRunInput: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ProfileResolutionOptions {
|
|
10
|
+
explicitProfile?: ProfileId;
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
allowSavedChoice?: boolean;
|
|
13
|
+
interactiveStartup?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type { ProfileSelection };
|
|
16
|
+
export declare function resolveProfileSelection(paths: JouzuPaths, options?: ProfileResolutionOptions): ProfileSelection;
|
|
17
|
+
export declare function configurePiProcess(paths: JouzuPaths): void;
|
|
18
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,UAAU,gBAAgB;IACzB,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,cAAc,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC3G,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACxC,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAMjC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,wBAA6B,GAAG,gBAAgB,CAgDnH;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAO1D"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readProfileChoice } from "./profile-choice.js";
|
|
3
|
+
import { readProfileState } from "./profile-manager.js";
|
|
4
|
+
function isProfileId(value) {
|
|
5
|
+
return value === "core" || value === "ja";
|
|
6
|
+
}
|
|
7
|
+
export function resolveProfileSelection(paths, options = {}) {
|
|
8
|
+
const state = readProfileState(paths.profileStatePath);
|
|
9
|
+
const explicitProfile = options.explicitProfile;
|
|
10
|
+
const env = options.env ?? process.env;
|
|
11
|
+
if (explicitProfile) {
|
|
12
|
+
return {
|
|
13
|
+
id: explicitProfile,
|
|
14
|
+
source: "command line",
|
|
15
|
+
appliedManifestSha256: state?.activeProfile === explicitProfile && typeof state.manifestSha256 === "string"
|
|
16
|
+
? state.manifestSha256
|
|
17
|
+
: undefined,
|
|
18
|
+
needsFirstRunInput: false,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (isProfileId(env.JOUZU_PROFILE)) {
|
|
22
|
+
return {
|
|
23
|
+
id: env.JOUZU_PROFILE,
|
|
24
|
+
source: "environment",
|
|
25
|
+
appliedManifestSha256: state?.activeProfile === env.JOUZU_PROFILE && typeof state.manifestSha256 === "string"
|
|
26
|
+
? state.manifestSha256
|
|
27
|
+
: undefined,
|
|
28
|
+
needsFirstRunInput: false,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const interactiveStartup = options.interactiveStartup === true;
|
|
32
|
+
if (isProfileId(state?.activeProfile)) {
|
|
33
|
+
const savedChoice = interactiveStartup && state.activeProfile === "core"
|
|
34
|
+
? readProfileChoice(join(paths.stateDir, "profile-choice.json"))
|
|
35
|
+
: undefined;
|
|
36
|
+
return {
|
|
37
|
+
id: state.activeProfile,
|
|
38
|
+
source: "profile state",
|
|
39
|
+
appliedManifestSha256: typeof state.manifestSha256 === "string" ? state.manifestSha256 : undefined,
|
|
40
|
+
needsFirstRunInput: interactiveStartup && state.activeProfile === "core" && savedChoice === undefined,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (options.allowSavedChoice !== false) {
|
|
44
|
+
const savedChoice = readProfileChoice(join(paths.stateDir, "profile-choice.json"));
|
|
45
|
+
if (savedChoice) {
|
|
46
|
+
return { id: savedChoice.profile, source: "saved choice", needsFirstRunInput: false };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { id: "core", source: "default", needsFirstRunInput: interactiveStartup };
|
|
50
|
+
}
|
|
51
|
+
export function configurePiProcess(paths) {
|
|
52
|
+
process.title = "jouzu";
|
|
53
|
+
process.env.AI_AGENT = "jouzu";
|
|
54
|
+
process.env.PI_CODING_AGENT = "true";
|
|
55
|
+
process.env.PI_CODING_AGENT_DIR = paths.agentDir;
|
|
56
|
+
process.env.PI_CODING_AGENT_SESSION_DIR = paths.sessionDir;
|
|
57
|
+
process.env.PI_SKIP_VERSION_CHECK = "1";
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Stale threshold after which a dead or owner-unknown lock may be recovered. */
|
|
2
|
+
export declare const STATE_LOCK_STALE_MS: number;
|
|
3
|
+
export interface StateLockRecord {
|
|
4
|
+
pid: number;
|
|
5
|
+
startedAt: string;
|
|
6
|
+
token: string;
|
|
7
|
+
}
|
|
8
|
+
export type StateLockStatus = "free" | "held-live" | "held-dead" | "owner-unknown" | "invalid";
|
|
9
|
+
export interface StateLockInspection {
|
|
10
|
+
exists: boolean;
|
|
11
|
+
status: StateLockStatus;
|
|
12
|
+
ageMs: number | null;
|
|
13
|
+
}
|
|
14
|
+
export interface AcquireStateLockOptions {
|
|
15
|
+
path: string;
|
|
16
|
+
staleMs?: number;
|
|
17
|
+
describe: string;
|
|
18
|
+
now?: Date;
|
|
19
|
+
/** Maps a busy inspection to the caller's domain-specific error. */
|
|
20
|
+
onBusy: (inspection: StateLockInspection) => Error;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Inspect a state lock without acquiring it. An empty or unparsable legacy
|
|
24
|
+
* lock is classified as owner-unknown; its age is approximated from the file
|
|
25
|
+
* modification time because no started-at record exists.
|
|
26
|
+
*/
|
|
27
|
+
export declare function inspectStateLock(path: string, now: Date): StateLockInspection;
|
|
28
|
+
/**
|
|
29
|
+
* Acquire a state lock shared by the updater, profile, and keybinding
|
|
30
|
+
* operations. The lock records a PID, started-at timestamp, and a release
|
|
31
|
+
* token. A lock held by a live process is always refused; a dead owner's lock
|
|
32
|
+
* or an owner-unknown legacy lock is refused while younger than the stale
|
|
33
|
+
* threshold and recovered automatically once it is older, without deleting a
|
|
34
|
+
* successor's lock. Returns a token-matched release function.
|
|
35
|
+
*/
|
|
36
|
+
export declare function acquireStateLock(options: AcquireStateLockOptions): () => void;
|
|
37
|
+
/** Human-readable one-line description of a lock for doctor output. */
|
|
38
|
+
export declare function describeStateLock(path: string, staleMs: number, now: Date): string;
|
|
39
|
+
//# sourceMappingURL=state-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-lock.d.ts","sourceRoot":"","sources":["../src/state-lock.ts"],"names":[],"mappings":"AAcA,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QAAiB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;AAE/F,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,oEAAoE;IACpE,MAAM,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,KAAK,CAAC;CACnD;AAWD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,mBAAmB,CAwC7E;AAWD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,IAAI,CAkC7E;AASD,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAclF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, existsSync, fsyncSync, lstatSync, openSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { ensurePrivateDirectory, validatePrivateDirectory } from "./private-fs.js";
|
|
5
|
+
/** Stale threshold after which a dead or owner-unknown lock may be recovered. */
|
|
6
|
+
export const STATE_LOCK_STALE_MS = 30 * 60 * 1000;
|
|
7
|
+
function pidIsAlive(pid) {
|
|
8
|
+
try {
|
|
9
|
+
process.kill(pid, 0);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return error instanceof Error && "code" in error && error.code === "EPERM";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Inspect a state lock without acquiring it. An empty or unparsable legacy
|
|
18
|
+
* lock is classified as owner-unknown; its age is approximated from the file
|
|
19
|
+
* modification time because no started-at record exists.
|
|
20
|
+
*/
|
|
21
|
+
export function inspectStateLock(path, now) {
|
|
22
|
+
try {
|
|
23
|
+
validatePrivateDirectory(dirname(path));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { exists: true, status: "invalid", ageMs: null };
|
|
27
|
+
}
|
|
28
|
+
if (!existsSync(path))
|
|
29
|
+
return { exists: false, status: "free", ageMs: null };
|
|
30
|
+
try {
|
|
31
|
+
const metadata = lstatSync(path);
|
|
32
|
+
if (!metadata.isFile() || metadata.isSymbolicLink()) {
|
|
33
|
+
return { exists: true, status: "invalid", ageMs: null };
|
|
34
|
+
}
|
|
35
|
+
let record = null;
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
38
|
+
if (typeof parsed.pid === "number" &&
|
|
39
|
+
typeof parsed.startedAt === "string" &&
|
|
40
|
+
typeof parsed.token === "string" &&
|
|
41
|
+
Number.isFinite(Date.parse(parsed.startedAt))) {
|
|
42
|
+
record = { pid: parsed.pid, startedAt: parsed.startedAt, token: parsed.token };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch { }
|
|
46
|
+
if (record === null) {
|
|
47
|
+
let ageMs = null;
|
|
48
|
+
try {
|
|
49
|
+
ageMs = now.getTime() - lstatSync(path).mtimeMs;
|
|
50
|
+
}
|
|
51
|
+
catch { }
|
|
52
|
+
return { exists: true, status: "owner-unknown", ageMs };
|
|
53
|
+
}
|
|
54
|
+
const ageMs = now.getTime() - Date.parse(record.startedAt);
|
|
55
|
+
return {
|
|
56
|
+
exists: true,
|
|
57
|
+
status: pidIsAlive(record.pid) ? "held-live" : "held-dead",
|
|
58
|
+
ageMs,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return { exists: false, status: "free", ageMs: null };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function releaseToken(path, token) {
|
|
66
|
+
try {
|
|
67
|
+
const metadata = lstatSync(path);
|
|
68
|
+
if (!metadata.isFile() || metadata.isSymbolicLink())
|
|
69
|
+
return;
|
|
70
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
71
|
+
if (parsed.token === token)
|
|
72
|
+
unlinkSync(path);
|
|
73
|
+
}
|
|
74
|
+
catch { }
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Acquire a state lock shared by the updater, profile, and keybinding
|
|
78
|
+
* operations. The lock records a PID, started-at timestamp, and a release
|
|
79
|
+
* token. A lock held by a live process is always refused; a dead owner's lock
|
|
80
|
+
* or an owner-unknown legacy lock is refused while younger than the stale
|
|
81
|
+
* threshold and recovered automatically once it is older, without deleting a
|
|
82
|
+
* successor's lock. Returns a token-matched release function.
|
|
83
|
+
*/
|
|
84
|
+
export function acquireStateLock(options) {
|
|
85
|
+
const now = options.now ?? new Date();
|
|
86
|
+
const staleMs = options.staleMs ?? STATE_LOCK_STALE_MS;
|
|
87
|
+
ensurePrivateDirectory(dirname(options.path));
|
|
88
|
+
const token = randomUUID();
|
|
89
|
+
const record = { pid: process.pid, startedAt: now.toISOString(), token };
|
|
90
|
+
const writeNew = () => {
|
|
91
|
+
const descriptor = openSync(options.path, "wx", 0o600);
|
|
92
|
+
writeFileSync(descriptor, `${JSON.stringify(record)}\n`);
|
|
93
|
+
fsyncSync(descriptor);
|
|
94
|
+
closeSync(descriptor);
|
|
95
|
+
};
|
|
96
|
+
try {
|
|
97
|
+
writeNew();
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (!(error instanceof Error && "code" in error && error.code === "EEXIST"))
|
|
101
|
+
throw error;
|
|
102
|
+
const inspection = inspectStateLock(options.path, now);
|
|
103
|
+
if (inspection.status === "free") {
|
|
104
|
+
writeNew();
|
|
105
|
+
return () => releaseToken(options.path, token);
|
|
106
|
+
}
|
|
107
|
+
if (inspection.status === "held-live" || inspection.status === "invalid") {
|
|
108
|
+
throw options.onBusy(inspection);
|
|
109
|
+
}
|
|
110
|
+
// held-dead or owner-unknown: refuse while younger than the threshold,
|
|
111
|
+
// recover automatically once stale.
|
|
112
|
+
if (inspection.ageMs === null || inspection.ageMs <= staleMs) {
|
|
113
|
+
throw options.onBusy(inspection);
|
|
114
|
+
}
|
|
115
|
+
unlinkSync(options.path);
|
|
116
|
+
writeNew();
|
|
117
|
+
return () => releaseToken(options.path, token);
|
|
118
|
+
}
|
|
119
|
+
return () => releaseToken(options.path, token);
|
|
120
|
+
}
|
|
121
|
+
function ageText(ageMs) {
|
|
122
|
+
const totalSeconds = Math.max(0, Math.floor(ageMs / 1000));
|
|
123
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
124
|
+
const seconds = totalSeconds % 60;
|
|
125
|
+
return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
|
|
126
|
+
}
|
|
127
|
+
/** Human-readable one-line description of a lock for doctor output. */
|
|
128
|
+
export function describeStateLock(path, staleMs, now) {
|
|
129
|
+
const inspection = inspectStateLock(path, now);
|
|
130
|
+
switch (inspection.status) {
|
|
131
|
+
case "free":
|
|
132
|
+
return "free";
|
|
133
|
+
case "held-live":
|
|
134
|
+
return `held by a live process (${ageText(inspection.ageMs ?? 0)})`;
|
|
135
|
+
case "held-dead":
|
|
136
|
+
return `left by a dead process (${ageText(inspection.ageMs ?? 0)}; recoverable after ${ageText(staleMs)})`;
|
|
137
|
+
case "owner-unknown":
|
|
138
|
+
return `owner unknown (${ageText(inspection.ageMs ?? 0)}; recoverable after ${ageText(staleMs)})`;
|
|
139
|
+
case "invalid":
|
|
140
|
+
return "invalid (not a regular lock file)";
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=state-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-lock.js","sourceRoot":"","sources":["../src/state-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { JouzuPaths } from "./paths.js";
|
|
2
|
+
declare const UPDATE_POLICIES: readonly ["auto-restart", "notify", "off"];
|
|
3
|
+
declare const UPDATE_RESULTS: readonly ["never", "current", "available", "updated", "failed"];
|
|
4
|
+
export type UpdatePolicy = (typeof UPDATE_POLICIES)[number];
|
|
5
|
+
export type UpdateResult = (typeof UPDATE_RESULTS)[number];
|
|
6
|
+
export type UpdateInstallChannel = "global-npm" | "local-npm" | "ephemeral-npx" | "source" | "other";
|
|
7
|
+
export interface UpdateState {
|
|
8
|
+
schemaVersion: 1;
|
|
9
|
+
policy: UpdatePolicy;
|
|
10
|
+
channel: "latest";
|
|
11
|
+
lastCheckedAt: string | null;
|
|
12
|
+
nextCheckAt: string | null;
|
|
13
|
+
lastResult: UpdateResult;
|
|
14
|
+
installedVersion: string;
|
|
15
|
+
latestVersion: string | null;
|
|
16
|
+
latestIntegrity: string | null;
|
|
17
|
+
previousVersion: string | null;
|
|
18
|
+
lastUpdatedAt: string | null;
|
|
19
|
+
lastErrorCode: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface RegistryRelease {
|
|
22
|
+
version: string;
|
|
23
|
+
integrity: string;
|
|
24
|
+
}
|
|
25
|
+
export interface UpdateCheckResult extends RegistryRelease {
|
|
26
|
+
status: "current" | "available";
|
|
27
|
+
installedVersion: string;
|
|
28
|
+
}
|
|
29
|
+
export interface UpdateStatus {
|
|
30
|
+
policy: UpdatePolicy;
|
|
31
|
+
installChannel: UpdateInstallChannel;
|
|
32
|
+
startupEligible: boolean;
|
|
33
|
+
state: UpdateState;
|
|
34
|
+
}
|
|
35
|
+
export interface NpmRunResult {
|
|
36
|
+
status: number | null;
|
|
37
|
+
stdout: string;
|
|
38
|
+
stderr: string;
|
|
39
|
+
error?: Error;
|
|
40
|
+
}
|
|
41
|
+
export type NpmRunner = (args: string[], timeoutMs: number) => NpmRunResult;
|
|
42
|
+
export interface UpdaterOptions {
|
|
43
|
+
paths: JouzuPaths;
|
|
44
|
+
currentVersion: string;
|
|
45
|
+
executable: string;
|
|
46
|
+
packageRoot?: string;
|
|
47
|
+
env?: NodeJS.ProcessEnv;
|
|
48
|
+
platform?: NodeJS.Platform;
|
|
49
|
+
now?: () => Date;
|
|
50
|
+
runNpm?: NpmRunner;
|
|
51
|
+
verifyInstalled?: (expectedVersion: string) => void;
|
|
52
|
+
report?: (message: string) => void;
|
|
53
|
+
}
|
|
54
|
+
export interface StartupUpdateResult {
|
|
55
|
+
action: "continue" | "restart";
|
|
56
|
+
version?: string;
|
|
57
|
+
message?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare class UpdateError extends Error {
|
|
60
|
+
readonly code: string;
|
|
61
|
+
readonly exitCode: number;
|
|
62
|
+
readonly fatal: boolean;
|
|
63
|
+
constructor(message: string, code: string, options?: {
|
|
64
|
+
exitCode?: number;
|
|
65
|
+
fatal?: boolean;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export declare function compareSemver(left: string, right: string): number;
|
|
69
|
+
export declare function updateStatePath(paths: JouzuPaths): string;
|
|
70
|
+
export declare function readUpdateState(path: string, currentVersion: string): UpdateState;
|
|
71
|
+
export declare function classifyInstallChannel(options: {
|
|
72
|
+
packageRoot: string;
|
|
73
|
+
globalNpmRoot?: string;
|
|
74
|
+
platform?: NodeJS.Platform;
|
|
75
|
+
}): UpdateInstallChannel;
|
|
76
|
+
export declare class JouzuUpdater {
|
|
77
|
+
private readonly paths;
|
|
78
|
+
private readonly currentVersion;
|
|
79
|
+
private readonly executable;
|
|
80
|
+
private readonly packageRoot;
|
|
81
|
+
private readonly env;
|
|
82
|
+
private readonly platform;
|
|
83
|
+
private readonly now;
|
|
84
|
+
private readonly runNpm;
|
|
85
|
+
private readonly verifyInstalled;
|
|
86
|
+
private readonly report;
|
|
87
|
+
private cachedInstallChannel;
|
|
88
|
+
constructor(options: UpdaterOptions);
|
|
89
|
+
private readState;
|
|
90
|
+
private writeState;
|
|
91
|
+
private recordFailure;
|
|
92
|
+
private globalNpmRoot;
|
|
93
|
+
installChannel(): UpdateInstallChannel;
|
|
94
|
+
status(): UpdateStatus;
|
|
95
|
+
setPolicy(policy: UpdatePolicy): UpdateState;
|
|
96
|
+
check(): UpdateCheckResult;
|
|
97
|
+
private createDownloadDirectory;
|
|
98
|
+
private pack;
|
|
99
|
+
private installTarball;
|
|
100
|
+
apply(checkResult?: UpdateCheckResult): {
|
|
101
|
+
changed: boolean;
|
|
102
|
+
version: string;
|
|
103
|
+
};
|
|
104
|
+
startup(): StartupUpdateResult;
|
|
105
|
+
}
|
|
106
|
+
export declare function relaunchUpdatedJouzu(options: {
|
|
107
|
+
executable: string;
|
|
108
|
+
args: string[];
|
|
109
|
+
env?: NodeJS.ProcessEnv;
|
|
110
|
+
}): number;
|
|
111
|
+
export declare function formatUpdateStatus(status: UpdateStatus): string;
|
|
112
|
+
export {};
|
|
113
|
+
//# sourceMappingURL=updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
|