@moxt-ai/mobius 0.0.379 → 0.0.381
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-MEZTLMQ6.js → chunk-HJN27I4Y.js} +99 -107
- package/dist/{chunk-MEZTLMQ6.js.map → chunk-HJN27I4Y.js.map} +4 -4
- package/dist/{chunk-EXX2ITJH.js → chunk-ICRGF5ZU.js} +2 -2
- package/dist/{chunk-EXX2ITJH.js.map → chunk-ICRGF5ZU.js.map} +1 -1
- package/dist/{chunk-IIQARL5V.js → chunk-VKU6W3IQ.js} +2 -2
- package/dist/cli/handler/version/index.d.ts.map +1 -1
- package/dist/cli/handler/version/index.js +0 -6
- package/dist/cli/handler/version/index.js.map +1 -1
- package/dist/{cli-4MLX72A4.js → cli-BI5CRENK.js} +34 -71
- package/dist/cli-BI5CRENK.js.map +7 -0
- package/dist/cli.js +3 -3
- package/dist/daemon/lifecycle/manager-client.d.ts.map +1 -1
- package/dist/daemon/lifecycle/manager-client.js +1 -4
- package/dist/daemon/lifecycle/manager-client.js.map +1 -1
- package/dist/daemon/lifecycle/worker.js +2 -2
- package/dist/daemon/lifecycle/worker.js.map +1 -1
- package/dist/daemon/upgrades/data.d.ts +1 -3
- package/dist/daemon/upgrades/data.d.ts.map +1 -1
- package/dist/daemon/upgrades/data.js +11 -30
- package/dist/daemon/upgrades/data.js.map +1 -1
- package/dist/engine/acp/harness/codex/app-server-protocol.d.ts +3 -0
- package/dist/engine/acp/harness/codex/app-server-protocol.d.ts.map +1 -1
- package/dist/engine/acp/harness/codex/app-server-protocol.js +1 -0
- package/dist/engine/acp/harness/codex/app-server-protocol.js.map +1 -1
- package/dist/engine/acp/harness/codex/borrowed-agent.d.ts.map +1 -1
- package/dist/engine/acp/harness/codex/borrowed-agent.js +26 -4
- package/dist/engine/acp/harness/codex/borrowed-agent.js.map +1 -1
- package/dist/engine/generated/acp-session-store-migrations.d.ts +6 -0
- package/dist/engine/generated/acp-session-store-migrations.d.ts.map +1 -1
- package/dist/engine/generated/acp-session-store-migrations.js +9 -1
- package/dist/engine/generated/acp-session-store-migrations.js.map +1 -1
- package/dist/engine/runtime/catalog/publish-agent-catalog.d.ts.map +1 -1
- package/dist/engine/runtime/catalog/publish-agent-catalog.js +0 -2
- package/dist/engine/runtime/catalog/publish-agent-catalog.js.map +1 -1
- package/dist/engine/runtime/command/registry/session.d.ts.map +1 -1
- package/dist/engine/runtime/command/registry/session.js +2 -3
- package/dist/engine/runtime/command/registry/session.js.map +1 -1
- package/dist/engine/runtime/connection/runtime-installation-store.d.ts.map +1 -1
- package/dist/engine/runtime/connection/runtime-installation-store.js +1 -9
- package/dist/engine/runtime/connection/runtime-installation-store.js.map +1 -1
- package/dist/engine/runtime/pairing.d.ts.map +1 -1
- package/dist/engine/runtime/pairing.js +0 -2
- package/dist/engine/runtime/pairing.js.map +1 -1
- package/dist/engine/runtime/relay/liveness.js +5 -5
- package/dist/engine/runtime/relay/liveness.js.map +1 -1
- package/dist/engine/runtime/relay/run-relay-connection.d.ts.map +1 -1
- package/dist/engine/runtime/relay/run-relay-connection.js +0 -1
- package/dist/engine/runtime/relay/run-relay-connection.js.map +1 -1
- package/dist/engine/schema/acp-session-store/execution-receipt.d.ts +1 -17
- package/dist/engine/schema/acp-session-store/execution-receipt.d.ts.map +1 -1
- package/dist/engine/schema/acp-session-store/execution-receipt.js +1 -4
- package/dist/engine/schema/acp-session-store/execution-receipt.js.map +1 -1
- package/dist/engine/session/api/session-api.d.ts +2 -1
- package/dist/engine/session/api/session-api.d.ts.map +1 -1
- package/dist/engine/session/api/session-api.js.map +1 -1
- package/dist/engine/session/live/agent-session.js +2 -2
- package/dist/engine/session/live/agent-session.js.map +1 -1
- package/dist/engine/session/manager/session-manager.d.ts.map +1 -1
- package/dist/engine/session/manager/session-manager.js +3 -0
- package/dist/engine/session/manager/session-manager.js.map +1 -1
- package/dist/engine/session/native/native-session-browser.d.ts.map +1 -1
- package/dist/engine/session/native/native-session-browser.js +1 -0
- package/dist/engine/session/native/native-session-browser.js.map +1 -1
- package/dist/engine/session/prompt/apply-session-configuration.d.ts.map +1 -1
- package/dist/engine/session/prompt/apply-session-configuration.js +1 -0
- package/dist/engine/session/prompt/apply-session-configuration.js.map +1 -1
- package/dist/engine/storage/session/execution-receipt-table.d.ts.map +1 -1
- package/dist/engine/storage/session/execution-receipt-table.js +8 -43
- package/dist/engine/storage/session/execution-receipt-table.js.map +1 -1
- package/dist/engine/storage/sqlite/local-databases.d.ts.map +1 -1
- package/dist/engine/storage/sqlite/local-databases.js +27 -5
- package/dist/engine/storage/sqlite/local-databases.js.map +1 -1
- package/dist/engine/storage/sqlite/local-sqlite-database.d.ts +0 -5
- package/dist/engine/storage/sqlite/local-sqlite-database.d.ts.map +1 -1
- package/dist/engine/storage/sqlite/local-sqlite-database.js +0 -9
- package/dist/engine/storage/sqlite/local-sqlite-database.js.map +1 -1
- package/dist/engine.js +2 -2
- package/dist/storage/daemon/version-data.d.ts +2 -6
- package/dist/storage/daemon/version-data.d.ts.map +1 -1
- package/dist/storage/daemon/version-data.js +4 -26
- package/dist/storage/daemon/version-data.js.map +1 -1
- package/dist/storage/state-root-layout.d.ts +1 -5
- package/dist/storage/state-root-layout.d.ts.map +1 -1
- package/dist/storage/state-root-layout.js +1 -5
- package/dist/storage/state-root-layout.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli-4MLX72A4.js.map +0 -7
- /package/dist/{chunk-IIQARL5V.js.map → chunk-VKU6W3IQ.js.map} +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
2
3
|
import { join } from "node:path";
|
|
4
|
+
import { DatabaseSync } from "node:sqlite";
|
|
3
5
|
import { acpSessionStoreMigrations } from "../../generated/acp-session-store-migrations.js";
|
|
4
6
|
import { sessionEventCacheMigrations } from "../../generated/session-event-cache-migrations.js";
|
|
5
7
|
import { LocalSqliteDatabase } from "./local-sqlite-database.js";
|
|
@@ -11,12 +13,32 @@ export function channelSessionDatabasePaths(stateDirectory, channelId) {
|
|
|
11
13
|
sessions: join(stateDirectory, "sessions", `${channelHash}.sqlite`),
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* CLI 0.0.350 and later releases before this repair applied migration 0009 without recording it in `user_version`,
|
|
18
|
+
* so their databases report 9 while already holding `admission_order`. Record it so 0009 does not run again.
|
|
19
|
+
*/
|
|
20
|
+
function recordAppliedAdmissionOrder(path) {
|
|
21
|
+
if (!existsSync(path)) {
|
|
22
|
+
return;
|
|
18
23
|
}
|
|
19
|
-
|
|
24
|
+
const database = new DatabaseSync(path);
|
|
25
|
+
try {
|
|
26
|
+
const version = database.prepare("PRAGMA user_version").get()?.["user_version"];
|
|
27
|
+
const column = database
|
|
28
|
+
.prepare("SELECT name FROM pragma_table_info('execution_receipt') WHERE name = 'admission_order'")
|
|
29
|
+
.get();
|
|
30
|
+
if (version === 9 && column !== undefined) {
|
|
31
|
+
database.exec("PRAGMA user_version = 10");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
database.close();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export const openAcpSessionDatabase = (path) => {
|
|
39
|
+
recordAppliedAdmissionOrder(path);
|
|
40
|
+
return new LocalSqliteDatabase(path, "ACP Session database", acpSessionStoreMigrations);
|
|
41
|
+
};
|
|
20
42
|
export const openSessionEventCacheDatabase = (path) => new LocalSqliteDatabase(path, "V2 Session event cache", sessionEventCacheMigrations, [
|
|
21
43
|
"PRAGMA journal_mode = WAL",
|
|
22
44
|
"PRAGMA synchronous = OFF",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-databases.js","sourceRoot":"","sources":["../../../../src/engine/storage/sqlite/local-databases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"local-databases.js","sourceRoot":"","sources":["../../../../src/engine/storage/sqlite/local-databases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOjE,mGAAmG;AACnG,MAAM,UAAU,2BAA2B,CAAC,cAAsB,EAAE,SAAiB;IACjF,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO;QACH,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,WAAW,gBAAgB,CAAC;QACxE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,WAAW,SAAS,CAAC;KACtE,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,IAAY;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,QAAQ;aAClB,OAAO,CAAC,wFAAwF,CAAC;aACjG,GAAG,EAAE,CAAC;QACX,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;YAAS,CAAC;QACP,QAAQ,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAuB,EAAE;IACxE,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,IAAI,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAY,EAAuB,EAAE,CAC/E,IAAI,mBAAmB,CAAC,IAAI,EAAE,wBAAwB,EAAE,2BAA2B,EAAE;IACjF,2BAA2B;IAC3B,0BAA0B;IAC1B,2BAA2B;CAC9B,CAAC,CAAC"}
|
|
@@ -2,11 +2,6 @@ import { type NodeSQLiteDatabase } from "drizzle-orm/node-sqlite";
|
|
|
2
2
|
export interface LocalSqliteMigration {
|
|
3
3
|
readonly name: string;
|
|
4
4
|
readonly sql: string;
|
|
5
|
-
/** A single optional column that old readers can ignore, without raising their version floor. */
|
|
6
|
-
readonly compatibleColumn?: {
|
|
7
|
-
readonly table: string;
|
|
8
|
-
readonly column: string;
|
|
9
|
-
};
|
|
10
5
|
}
|
|
11
6
|
export declare class LocalSqliteDatabase {
|
|
12
7
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-sqlite-database.d.ts","sourceRoot":"","sources":["../../../../src/engine/storage/sqlite/local-sqlite-database.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG3E,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"local-sqlite-database.d.ts","sourceRoot":"","sources":["../../../../src/engine/storage/sqlite/local-sqlite-database.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG3E,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,mBAAmB;;IAC5B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IAGjC,YACI,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,oBAAoB,EAAE,EAC3C,OAAO,GAAE,SAAS,MAAM,EAAO,EAelC;IAqBD,QAAQ,CAAC,WAAW,GAAI,MAAM,aAAa,MAAM,MAAM,KAAG,MAAM,CAU9D;IAEF;;;OAGG;IACH,QAAQ,CAAC,IAAI,QAAS,MAAM,KAAG,IAAI,CAEjC;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAAyB;CACrD"}
|
|
@@ -35,15 +35,6 @@ export class LocalSqliteDatabase {
|
|
|
35
35
|
throw new Error(`The ${label} migration is unavailable`);
|
|
36
36
|
}
|
|
37
37
|
this.transaction(() => {
|
|
38
|
-
if (migration.compatibleColumn !== undefined) {
|
|
39
|
-
const { table, column } = migration.compatibleColumn;
|
|
40
|
-
if (this.#sqlite
|
|
41
|
-
.prepare("SELECT name FROM pragma_table_info(?) WHERE name = ?")
|
|
42
|
-
.get(table, column) === undefined) {
|
|
43
|
-
this.#sqlite.exec(migration.sql);
|
|
44
|
-
}
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
38
|
this.#sqlite.exec(migration.sql);
|
|
48
39
|
this.#sqlite.exec(`PRAGMA user_version = ${index + 1}`);
|
|
49
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-sqlite-database.js","sourceRoot":"","sources":["../../../../src/engine/storage/sqlite/local-sqlite-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAA2B,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"local-sqlite-database.js","sourceRoot":"","sources":["../../../../src/engine/storage/sqlite/local-sqlite-database.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.js
CHANGED
|
@@ -6,12 +6,8 @@ export declare class DataInheritanceError extends Error {
|
|
|
6
6
|
export declare function prepareVersionDataDirectory(root: StateRoot, version: string, signal: AbortSignal): Promise<string>;
|
|
7
7
|
/** The version the current data pointer names, or null when there is no pointer. */
|
|
8
8
|
export declare function readCurrentDataVersion(root: StateRoot, signal: AbortSignal): Promise<string | null>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* Copies one version's data into a new version's directory and returns the nested state root entries it left
|
|
12
|
-
* behind. Any other symbolic link is rejected.
|
|
13
|
-
*/
|
|
14
|
-
export declare function copyVersionData(root: StateRoot, sourceVersion: string, targetVersion: string, signal: AbortSignal): Promise<readonly string[]>;
|
|
9
|
+
/** Copies one version's data into a new version's directory. A symbolic link is rejected. */
|
|
10
|
+
export declare function copyVersionData(root: StateRoot, sourceVersion: string, targetVersion: string, signal: AbortSignal): Promise<void>;
|
|
15
11
|
/**
|
|
16
12
|
* Removes a version's data unless the current data pointer names it. The directory leaves in one rename, so a
|
|
17
13
|
* concurrent first use either finds it whole or inherits the current data.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-data.d.ts","sourceRoot":"","sources":["../../../src/storage/daemon/version-data.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,qBAAa,oBAAqB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,6BAA6B;CAC7C;AAED,wFAAwF;AACxF,wBAAsB,2BAA2B,CAC7C,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,oFAAoF;AACpF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBzG;
|
|
1
|
+
{"version":3,"file":"version-data.d.ts","sourceRoot":"","sources":["../../../src/storage/daemon/version-data.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,qBAAa,oBAAqB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,6BAA6B;CAC7C;AAED,wFAAwF;AACxF,wBAAsB,2BAA2B,CAC7C,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,oFAAoF;AACpF,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBzG;AAcD,6FAA6F;AAC7F,wBAAsB,eAAe,CACjC,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7G;AAED,gFAAgF;AAChF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlH"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { cp, lstat, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
3
|
-
import { join
|
|
3
|
+
import { join } from "node:path";
|
|
4
4
|
import { decodeRuntimeUpgradeVersion } from "@moxt-ai/mobius-sdk/protocol";
|
|
5
5
|
import { ensurePrivateDirectory } from "../../engine/storage/files/local-files.js";
|
|
6
6
|
import { validateLocalPath } from "../../engine/util/filesystem/private-path.js";
|
|
7
7
|
import { isNodeError } from "../../engine/util/node-error.js";
|
|
8
|
-
import {
|
|
8
|
+
import { STATE_ROOT_LAYOUT } from "../state-root-layout.js";
|
|
9
9
|
// Each daemon version keeps its data in `versions/<version>/` under the state root, and
|
|
10
10
|
// `current-data.txt` names the version whose data is current.
|
|
11
11
|
export class DataInheritanceError extends Error {
|
|
@@ -44,7 +44,7 @@ export async function readCurrentDataVersion(root, signal) {
|
|
|
44
44
|
throw cause;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
async function versionDataExists(root, version, signal) {
|
|
48
48
|
try {
|
|
49
49
|
await validateLocalPath(join(root, STATE_ROOT_LAYOUT.versions, version), true, true, signal);
|
|
50
50
|
return true;
|
|
@@ -56,22 +56,8 @@ export async function versionDataExists(root, version, signal) {
|
|
|
56
56
|
return false;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Whether a path in a version's data is a state root entry inside an installation, as `installations/<application>/
|
|
61
|
-
* <installation>/npm`. An earlier Mobius that ran with that installation as its root left it; it is not the
|
|
62
|
-
* installation's data, and its release links would otherwise block every later version from starting.
|
|
63
|
-
*/
|
|
64
|
-
function nestedRootEntry(segments) {
|
|
65
|
-
return (segments.length >= 4 &&
|
|
66
|
-
segments[0] === STATE_ROOT_LAYOUT.installations &&
|
|
67
|
-
STATE_ROOT_ENTRY_NAMES.has(segments[3] ?? ""));
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Copies one version's data into a new version's directory and returns the nested state root entries it left
|
|
71
|
-
* behind. Any other symbolic link is rejected.
|
|
72
|
-
*/
|
|
59
|
+
/** Copies one version's data into a new version's directory. A symbolic link is rejected. */
|
|
73
60
|
export async function copyVersionData(root, sourceVersion, targetVersion, signal) {
|
|
74
|
-
const leftBehind = [];
|
|
75
61
|
const versions = join(root, STATE_ROOT_LAYOUT.versions);
|
|
76
62
|
const source = join(versions, sourceVersion);
|
|
77
63
|
const target = join(versions, targetVersion);
|
|
@@ -84,13 +70,6 @@ export async function copyVersionData(root, sourceVersion, targetVersion, signal
|
|
|
84
70
|
recursive: true,
|
|
85
71
|
filter: async (path) => {
|
|
86
72
|
signal.throwIfAborted();
|
|
87
|
-
const segments = relative(source, path).split(sep);
|
|
88
|
-
if (nestedRootEntry(segments)) {
|
|
89
|
-
if (segments.length === 4) {
|
|
90
|
-
leftBehind.push(segments.join("/"));
|
|
91
|
-
}
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
73
|
if ((await lstat(path)).isSymbolicLink()) {
|
|
95
74
|
throw new DataInheritanceError("The inherited data contains a symbolic link");
|
|
96
75
|
}
|
|
@@ -108,7 +87,6 @@ export async function copyVersionData(root, sourceVersion, targetVersion, signal
|
|
|
108
87
|
}
|
|
109
88
|
await validateLocalPath(target, true, true, signal);
|
|
110
89
|
}
|
|
111
|
-
return leftBehind;
|
|
112
90
|
}
|
|
113
91
|
finally {
|
|
114
92
|
await rm(staging, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-data.js","sourceRoot":"","sources":["../../../src/storage/daemon/version-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"version-data.js","sourceRoot":"","sources":["../../../src/storage/daemon/version-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The entries a Mobius state root owns at its top level. Installation data never uses these names, so finding one
|
|
3
|
-
* inside an installation means an earlier Mobius ran with that installation as its root.
|
|
4
|
-
*/
|
|
1
|
+
/** The entries a Mobius state root owns at its top level. */
|
|
5
2
|
export declare const STATE_ROOT_LAYOUT: Readonly<{
|
|
6
3
|
/** Names the version whose data is current. */
|
|
7
4
|
currentData: "current-data.txt";
|
|
@@ -12,5 +9,4 @@ export declare const STATE_ROOT_LAYOUT: Readonly<{
|
|
|
12
9
|
/** Each CLI version's data: `versions/<version>`. */
|
|
13
10
|
versions: "versions";
|
|
14
11
|
}>;
|
|
15
|
-
export declare const STATE_ROOT_ENTRY_NAMES: ReadonlySet<string>;
|
|
16
12
|
//# sourceMappingURL=state-root-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-root-layout.d.ts","sourceRoot":"","sources":["../../src/storage/state-root-layout.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"state-root-layout.d.ts","sourceRoot":"","sources":["../../src/storage/state-root-layout.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB;IAC1B,+CAA+C;;IAE/C,iFAAiF;;IAEjF,6CAA6C;;IAE7C,qDAAqD;;EAEvD,CAAC"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The entries a Mobius state root owns at its top level. Installation data never uses these names, so finding one
|
|
3
|
-
* inside an installation means an earlier Mobius ran with that installation as its root.
|
|
4
|
-
*/
|
|
1
|
+
/** The entries a Mobius state root owns at its top level. */
|
|
5
2
|
export const STATE_ROOT_LAYOUT = Object.freeze({
|
|
6
3
|
/** Names the version whose data is current. */
|
|
7
4
|
currentData: "current-data.txt",
|
|
@@ -12,5 +9,4 @@ export const STATE_ROOT_LAYOUT = Object.freeze({
|
|
|
12
9
|
/** Each CLI version's data: `versions/<version>`. */
|
|
13
10
|
versions: "versions",
|
|
14
11
|
});
|
|
15
|
-
export const STATE_ROOT_ENTRY_NAMES = new Set(Object.values(STATE_ROOT_LAYOUT));
|
|
16
12
|
//# sourceMappingURL=state-root-layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-root-layout.js","sourceRoot":"","sources":["../../src/storage/state-root-layout.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"state-root-layout.js","sourceRoot":"","sources":["../../src/storage/state-root-layout.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,+CAA+C;IAC/C,WAAW,EAAE,kBAAkB;IAC/B,iFAAiF;IACjF,aAAa,EAAE,eAAe;IAC9B,6CAA6C;IAC7C,QAAQ,EAAE,KAAK;IACf,qDAAqD;IACrD,QAAQ,EAAE,UAAU;CACvB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxt-ai/mobius",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.381",
|
|
4
4
|
"description": "Mobius CLI for pairing and running local AI agent services.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@anthropic-ai/sdk": "0.122.0",
|
|
42
|
-
"@moxt-ai/mobius-sdk": "0.0.
|
|
42
|
+
"@moxt-ai/mobius-sdk": "0.0.157",
|
|
43
43
|
"@moxt-ai/mobius-test": "0.0.1",
|
|
44
44
|
"@types/node": "^24.13.5",
|
|
45
45
|
"@types/semver": "^7.8.0",
|