@moxt-ai/mobius 0.0.427 → 0.0.428
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/dist/{chunk-5IQGZH4R.js → chunk-6BCVMXHM.js} +2 -2
- package/dist/{chunk-5TGOLSLS.js → chunk-HFF7ZGCS.js} +2 -2
- package/dist/{chunk-5TGOLSLS.js.map → chunk-HFF7ZGCS.js.map} +1 -1
- package/dist/{cli-GY4TLFHG.js → cli-4WZ5S3YB.js} +23 -9
- package/dist/{cli-GY4TLFHG.js.map → cli-4WZ5S3YB.js.map} +3 -3
- package/dist/cli.js +2 -2
- package/dist/engine.js +2 -2
- package/dist/storage/daemon/daemon-lock.d.ts.map +1 -1
- package/dist/storage/daemon/daemon-lock.js +24 -4
- package/dist/storage/daemon/daemon-lock.js.map +1 -1
- package/package.json +1 -1
- /package/dist/{chunk-5IQGZH4R.js.map → chunk-6BCVMXHM.js.map} +0 -0
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
__commonJS,
|
|
4
4
|
__toESM,
|
|
5
5
|
package_default
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HFF7ZGCS.js";
|
|
7
7
|
|
|
8
8
|
// ../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js
|
|
9
9
|
var require_constants = __commonJS({
|
|
@@ -2008,7 +2008,7 @@ if (!(0, import_semver.satisfies)(process.versions.node, package_default.engines
|
|
|
2008
2008
|
);
|
|
2009
2009
|
process.exitCode = 1;
|
|
2010
2010
|
} else {
|
|
2011
|
-
const { runCLI } = await import("./cli-
|
|
2011
|
+
const { runCLI } = await import("./cli-4WZ5S3YB.js");
|
|
2012
2012
|
await runCLI();
|
|
2013
2013
|
}
|
|
2014
2014
|
//# sourceMappingURL=cli.js.map
|
package/dist/engine.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-lock.d.ts","sourceRoot":"","sources":["../../../src/storage/daemon/daemon-lock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"daemon-lock.d.ts","sourceRoot":"","sources":["../../../src/storage/daemon/daemon-lock.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,qBAAqB,EAC7B,MAAM,yDAAyD,CAAC;AA0HjE,oHAAoH;AACpH,wBAAsB,iBAAiB,CACnC,cAAc,EAAE,qBAAqB,EACrC,QAAQ,GAAE,cAAc,GAAG,aAA8B,GAC1D,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAsBvC;AAED,oFAAoF;AACpF,wBAAsB,gBAAgB,CAClC,cAAc,EAAE,qBAAqB,EACrC,QAAQ,GAAE,cAAc,GAAG,aAA8B,GAC1D,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
|
|
@@ -2,9 +2,11 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { readFile, rename, unlink } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { DatabaseSync } from "node:sqlite";
|
|
5
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
5
6
|
import { createInstallationFile, } from "../../engine/storage/installation/installation-files.js";
|
|
6
7
|
import { isNodeError } from "../../engine/util/node-error.js";
|
|
7
8
|
const SQLITE_BUSY = 5;
|
|
9
|
+
// How long contenders that start together keep retrying while none of them has become the daemon yet.
|
|
8
10
|
const OWNERSHIP_CONTENTION_MILLISECONDS = 2_000;
|
|
9
11
|
/**
|
|
10
12
|
* Frees the lock name in one step. On Windows a file that is being unlinked stays
|
|
@@ -31,9 +33,6 @@ async function removeLockFile(path) {
|
|
|
31
33
|
function holdDaemonOwnership(path) {
|
|
32
34
|
const database = new DatabaseSync(path);
|
|
33
35
|
try {
|
|
34
|
-
// Contenders starting together briefly hold the file's other locks; waiting out that moment lets one of them
|
|
35
|
-
// win instead of all of them failing. A held daemon lock outlasts the wait, so later contenders give up.
|
|
36
|
-
database.exec(`PRAGMA busy_timeout = ${OWNERSHIP_CONTENTION_MILLISECONDS.toString()}`);
|
|
37
36
|
database.exec("BEGIN EXCLUSIVE");
|
|
38
37
|
// Only the winner keeps its locks: the exclusive locking mode retains the lock after the transaction commits,
|
|
39
38
|
// until the connection closes. Set before winning, it would also keep a loser's read lock and block the winner.
|
|
@@ -97,10 +96,31 @@ async function takeLockFile(path, previousOwner) {
|
|
|
97
96
|
}
|
|
98
97
|
return null;
|
|
99
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Takes the ownership lock, or gives up once another process is the daemon. Contenders that start together briefly
|
|
101
|
+
* hold the lock file's database for each other, so while no daemon holds the lock file yet they retry for a moment
|
|
102
|
+
* and one of them wins. A contender that finds a daemon gives up at once, so it never waits long enough to take over
|
|
103
|
+
* when that daemon stops: a stop then leaves no daemon behind, rather than one the stopping client did not start.
|
|
104
|
+
*/
|
|
105
|
+
async function contendForDaemonOwnership(stateDirectory, filename) {
|
|
106
|
+
const path = join(stateDirectory, filename);
|
|
107
|
+
const deadline = Date.now() + OWNERSHIP_CONTENTION_MILLISECONDS;
|
|
108
|
+
for (;;) {
|
|
109
|
+
const ownership = holdDaemonOwnership(`${path}.sqlite`);
|
|
110
|
+
if (ownership !== null) {
|
|
111
|
+
return ownership;
|
|
112
|
+
}
|
|
113
|
+
if ((await daemonLockExists(stateDirectory, filename)) || Date.now() >= deadline) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
// Jitter keeps contenders that collided from colliding again in step.
|
|
117
|
+
await delay(20 + Math.random() * 30);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
100
120
|
/** Makes this process the only daemon. Returns the release function, or null when another daemon holds the lock. */
|
|
101
121
|
export async function acquireDaemonLock(stateDirectory, filename = "manager.lock") {
|
|
102
122
|
const path = join(stateDirectory, filename);
|
|
103
|
-
const ownership =
|
|
123
|
+
const ownership = await contendForDaemonOwnership(stateDirectory, filename);
|
|
104
124
|
if (ownership === null) {
|
|
105
125
|
return null;
|
|
106
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-lock.js","sourceRoot":"","sources":["../../../src/storage/daemon/daemon-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACH,sBAAsB,GAEzB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,iCAAiC,GAAG,KAAK,CAAC;AAEhD;;;;;;GAMG;AACH,KAAK,UAAU,cAAc,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,WAAW,CAAC;IACpD,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;IACX,CAAC;IACD,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CACxB,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"daemon-lock.js","sourceRoot":"","sources":["../../../src/storage/daemon/daemon-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACH,sBAAsB,GAEzB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,sGAAsG;AACtG,MAAM,iCAAiC,GAAG,KAAK,CAAC;AAEhD;;;;;;GAMG;AACH,KAAK,UAAU,cAAc,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,WAAW,CAAC;IACpD,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;IACX,CAAC;IACD,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CACxB,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,8GAA8G;QAC9G,gHAAgH;QAChH,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,KAAK,YAAY,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACD,QAAQ,CAAC,IAAI,CACT,qHAAqH,CACxH,CAAC;QACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,GAAG,EAAE,CAAC;QACxE,QAAQ,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO;YACH,aAAa,EAAE,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;YAC7E,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;SAClC,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,aAA4B;IAClE,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC;YACD,oFAAoF;YACpF,MAAM,sBAAsB,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClE,OAAO,KAAK,IAAI,EAAE,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YAChB,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,2GAA2G;YAC3G,uGAAuG;YACvG,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBAChE,IAAI,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACrB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;wBACpC,OAAO,IAAI,CAAC;oBAChB,CAAC;gBACL,CAAC;YACL,CAAC;YACD,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,yBAAyB,CACpC,cAAqC,EACrC,QAAwC;IAExC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iCAAiC,CAAC;IAChE,SAAS,CAAC;QACN,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;QACxD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,sEAAsE;QACtE,MAAM,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;AACL,CAAC;AAED,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,cAAqC,EACrC,QAAQ,GAAmC,cAAc;IAEzD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAC5E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,eAAe,GAAiC,IAAI,CAAC;IACzD,IAAI,CAAC;QACD,eAAe,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACP,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC3B,SAAS,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IACD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAG,eAAe,CAAC;IAChC,OAAO,KAAK,IAAI,EAAE;QACd,MAAM,OAAO,EAAE,CAAC;QAChB,SAAS,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC;AACN,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,cAAqC,EACrC,QAAQ,GAAmC,cAAc;IAEzD,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,uFAAuF;QACvF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC;YAChB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,2EAA2E;QAC3E,+DAA+D;QAC/D,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
File without changes
|