pi-para 0.7.9 → 0.8.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/CHANGELOG.md +13 -0
- package/dist/scheduler/leases.d.ts +6 -6
- package/dist/scheduler/leases.d.ts.map +1 -1
- package/dist/scheduler/leases.js +1 -1
- package/dist/scheduler/leases.js.map +1 -1
- package/dist/scheduler/state.d.ts +2 -2
- package/dist/scheduler/state.d.ts.map +1 -1
- package/dist/scheduler/state.js +2 -2
- package/dist/scheduler/state.js.map +1 -1
- package/dist/sqlite.d.ts +25 -0
- package/dist/sqlite.d.ts.map +1 -0
- package/dist/sqlite.js +42 -0
- package/dist/sqlite.js.map +1 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -2
- package/dist/state.js.map +1 -1
- package/dist/status.js +2 -2
- package/dist/status.js.map +1 -1
- package/package.json +2 -2
- package/src/scheduler/leases.ts +6 -6
- package/src/scheduler/state.ts +3 -3
- package/src/sqlite.ts +67 -0
- package/src/state.ts +3 -3
- package/src/status.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## [0.8.0] — 2026-10-17
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Runs without native addons: with `QMD_SQLITE_DRIVER=node`, pi-para's own SQLite files (state, scheduler queue and leases, status probes) use Node.js's own `node:sqlite`, as qmd-engine 2.7.0 does for its index, and better-sqlite3 is never imported. For platforms better-sqlite3 has no build for, such as Android (pi-phone). The default stays better-sqlite3.
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- qmd-engine 2.7.0 (its `node:sqlite` driver and `QMD_SQLITE_VEC_PATH`).
|
|
12
|
+
|
|
13
|
+
## [0.7.10] — 2026-08-23
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Made the cross-platform native-bundle gate invoke npm through `process.execPath` and `npm_execpath` instead of spawning `npm.cmd` directly, which Node 22 rejects with `EINVAL` on Windows. No runtime change from 0.7.9; this release provides a fully green Windows-attested delivery of the bundled N-API fix.
|
|
17
|
+
|
|
5
18
|
## [0.7.9] — 2026-08-23
|
|
6
19
|
|
|
7
20
|
### Fixed
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type SqliteDatabase } from "../sqlite.js";
|
|
2
2
|
export interface LeaseRecord {
|
|
3
3
|
leaseKey: string;
|
|
4
4
|
holderId: string;
|
|
@@ -6,17 +6,17 @@ export interface LeaseRecord {
|
|
|
6
6
|
heartbeatAt: string;
|
|
7
7
|
metadataJson: string | null;
|
|
8
8
|
}
|
|
9
|
-
export declare function ensureLeaseSchema(db:
|
|
9
|
+
export declare function ensureLeaseSchema(db: SqliteDatabase): void;
|
|
10
10
|
export declare function createLeaseHolder(prefix?: string): string;
|
|
11
|
-
export declare function acquireLease(db:
|
|
11
|
+
export declare function acquireLease(db: SqliteDatabase, leaseKey: string, holderId: string, opts?: {
|
|
12
12
|
ttlMs?: number;
|
|
13
13
|
now?: Date;
|
|
14
14
|
metadata?: unknown;
|
|
15
15
|
}): boolean;
|
|
16
|
-
export declare function renewLease(db:
|
|
16
|
+
export declare function renewLease(db: SqliteDatabase, leaseKey: string, holderId: string, opts?: {
|
|
17
17
|
ttlMs?: number;
|
|
18
18
|
now?: Date;
|
|
19
19
|
}): boolean;
|
|
20
|
-
export declare function releaseLease(db:
|
|
21
|
-
export declare function getLease(db:
|
|
20
|
+
export declare function releaseLease(db: SqliteDatabase, leaseKey: string, holderId: string): boolean;
|
|
21
|
+
export declare function getLease(db: SqliteDatabase, leaseKey: string): LeaseRecord | null;
|
|
22
22
|
//# sourceMappingURL=leases.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leases.d.ts","sourceRoot":"","sources":["../../src/scheduler/leases.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"leases.d.ts","sourceRoot":"","sources":["../../src/scheduler/leases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAU1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,SAAY,GAAG,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D,OAAO,CAgCT;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GACxC,OAAO,CAUT;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI5F;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQjF"}
|
package/dist/scheduler/leases.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leases.js","sourceRoot":"","sources":["../../src/scheduler/leases.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"leases.js","sourceRoot":"","sources":["../../src/scheduler/leases.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type SqliteDatabase } from "../sqlite.js";
|
|
2
2
|
export type QueueStatus = "queued" | "running" | "done" | "failed";
|
|
3
3
|
export interface QueueItem<T = unknown> {
|
|
4
4
|
id: number;
|
|
@@ -29,7 +29,7 @@ export interface SchedulerHistoryItem<T = unknown> {
|
|
|
29
29
|
error: string | null;
|
|
30
30
|
}
|
|
31
31
|
export declare class SchedulerStateDB {
|
|
32
|
-
readonly db:
|
|
32
|
+
readonly db: SqliteDatabase;
|
|
33
33
|
constructor(dbPath?: string);
|
|
34
34
|
migrate(): void;
|
|
35
35
|
getValue(key: string): string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"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"}
|
package/dist/scheduler/state.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { openSqlite } from "../sqlite.js";
|
|
2
2
|
import { mkdirSync } from "node:fs";
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
4
|
import { getParaPaths } from "../paths.js";
|
|
@@ -7,7 +7,7 @@ export class SchedulerStateDB {
|
|
|
7
7
|
db;
|
|
8
8
|
constructor(dbPath = getParaPaths().schedulerDbPath) {
|
|
9
9
|
mkdirSync(dirname(dbPath), { recursive: true });
|
|
10
|
-
this.db =
|
|
10
|
+
this.db = openSqlite(dbPath);
|
|
11
11
|
this.db.pragma("journal_mode = WAL");
|
|
12
12
|
this.migrate();
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/scheduler/state.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface SqliteStatement {
|
|
2
|
+
run(...params: unknown[]): {
|
|
3
|
+
changes: number;
|
|
4
|
+
lastInsertRowid: number | bigint;
|
|
5
|
+
};
|
|
6
|
+
get(...params: unknown[]): unknown;
|
|
7
|
+
all(...params: unknown[]): unknown[];
|
|
8
|
+
}
|
|
9
|
+
/** What pi-para uses of a database, on either driver. */
|
|
10
|
+
export interface SqliteDatabase {
|
|
11
|
+
exec(sql: string): void;
|
|
12
|
+
prepare(sql: string): SqliteStatement;
|
|
13
|
+
/** `PRAGMA <text>`, its rows. */
|
|
14
|
+
pragma(text: string): unknown[];
|
|
15
|
+
close(): void;
|
|
16
|
+
}
|
|
17
|
+
export type SqliteDriver = "better-sqlite3" | "node";
|
|
18
|
+
export declare function resolveSqliteDriver(value?: string | undefined): SqliteDriver;
|
|
19
|
+
export declare const sqliteDriver: SqliteDriver;
|
|
20
|
+
/** Open a database file; `fileMustExist` refuses to make one, as better-sqlite3's option does. */
|
|
21
|
+
export declare function openSqlite(path: string, options?: {
|
|
22
|
+
readonly?: boolean;
|
|
23
|
+
fileMustExist?: boolean;
|
|
24
|
+
}): SqliteDatabase;
|
|
25
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACjF,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACnC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;CACtC;AAED,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IACtC,iCAAiC;IACjC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IAChC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAErD,wBAAgB,mBAAmB,CAAC,KAAK,qBAAgC,GAAG,YAAY,CAOvF;AAED,eAAO,MAAM,YAAY,EAAE,YAAoC,CAAC;AAKhE,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CAyBtH"}
|
package/dist/sqlite.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-para's own SQLite files (state, scheduler queue and leases, status probes), through the driver qmd-engine uses:
|
|
3
|
+
* better-sqlite3 by default, or Node.js's own node:sqlite with `QMD_SQLITE_DRIVER=node` (Node 22.13 or later), for
|
|
4
|
+
* platforms better-sqlite3 has no build for, such as Android (pi-phone). One switch for both, read once when this module
|
|
5
|
+
* loads; better-sqlite3 is not even imported under node:sqlite.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
export function resolveSqliteDriver(value = process.env.QMD_SQLITE_DRIVER) {
|
|
9
|
+
if (value === undefined || value.trim() === "")
|
|
10
|
+
return "better-sqlite3";
|
|
11
|
+
const driver = value.trim();
|
|
12
|
+
if (driver !== "better-sqlite3" && driver !== "node") {
|
|
13
|
+
throw new Error(`QMD_SQLITE_DRIVER must be better-sqlite3 or node for pi-para; got ${JSON.stringify(value)}`);
|
|
14
|
+
}
|
|
15
|
+
return driver;
|
|
16
|
+
}
|
|
17
|
+
export const sqliteDriver = resolveSqliteDriver();
|
|
18
|
+
const Better = sqliteDriver === "better-sqlite3" ? (await import("better-sqlite3")).default : undefined;
|
|
19
|
+
/** Open a database file; `fileMustExist` refuses to make one, as better-sqlite3's option does. */
|
|
20
|
+
export function openSqlite(path, options = {}) {
|
|
21
|
+
if (Better !== undefined) {
|
|
22
|
+
const db = new Better(path, options);
|
|
23
|
+
return {
|
|
24
|
+
exec: (sql) => void db.exec(sql),
|
|
25
|
+
prepare: (sql) => db.prepare(sql),
|
|
26
|
+
pragma: (text) => db.pragma(text),
|
|
27
|
+
close: () => void db.close(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (options.fileMustExist === true && !existsSync(path)) {
|
|
31
|
+
throw new Error(`unable to open database file: ${path} does not exist`);
|
|
32
|
+
}
|
|
33
|
+
const { DatabaseSync } = process.getBuiltinModule("node:sqlite");
|
|
34
|
+
const db = new DatabaseSync(path, { readOnly: options.readonly === true });
|
|
35
|
+
return {
|
|
36
|
+
exec: (sql) => db.exec(sql),
|
|
37
|
+
prepare: (sql) => db.prepare(sql),
|
|
38
|
+
pragma: (text) => db.prepare(`PRAGMA ${text}`).all(),
|
|
39
|
+
close: () => db.close(),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAoBrC,MAAM,UAAU,mBAAmB,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;IACvE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,gBAAgB,CAAC;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,qEAAqE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAiB,mBAAmB,EAAE,CAAC;AAEhE,MAAM,MAAM,GACV,YAAY,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAE3F,kGAAkG;AAClG,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,UAA2D,EAAE;IACpG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAErC,OAAO;YACL,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAA+B;YAC/D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAc;YAC9C,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,iBAAiB,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAiC,CAAC;IACjG,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC,CAAC;IAE3E,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAA+B;QAC/D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE;QACpD,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACxB,CAAC;AACJ,CAAC"}
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,EAAE,CAAiB;gBAEf,OAAO,EAAE,MAAM;IAO3B,OAAO,CAAC,OAAO;IAmCf;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IA2BzC,oEAAoE;IACpE,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO3C,+CAA+C;IAC/C,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,GACrB,IAAI;IAqBP,0CAA0C;IAC1C,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAatE,yCAAyC;IACzC,SAAS,IAAI,gBAAgB,EAAE;IAe/B,4DAA4D;IAC5D,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE;IAiBlE,mCAAmC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1C,0CAA0C;IAC1C,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,EAAE,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,IAAI;IAiBP,4DAA4D;IAC5D,gBAAgB,CAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,WAAW,EAAE;IAoC/F,4CAA4C;IAC5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMrC,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/state.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Tracks which sessions have been processed, their content hash,
|
|
4
4
|
* and what pages were created/updated.
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import { openSqlite } from "./sqlite.js";
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
8
|
import { readFileSync, statSync } from "node:fs";
|
|
9
9
|
import { join } from "node:path";
|
|
@@ -11,7 +11,7 @@ export class StateDB {
|
|
|
11
11
|
db;
|
|
12
12
|
constructor(wikiDir) {
|
|
13
13
|
const dbPath = join(wikiDir, ".daemon.sqlite");
|
|
14
|
-
this.db =
|
|
14
|
+
this.db = openSqlite(dbPath);
|
|
15
15
|
this.db.pragma("journal_mode = WAL");
|
|
16
16
|
this.migrate();
|
|
17
17
|
}
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
package/dist/status.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
|
-
import
|
|
2
|
+
import { openSqlite } from "./sqlite.js";
|
|
3
3
|
import { loadParaConfig } from "./config.js";
|
|
4
4
|
import { getParaPaths } from "./paths.js";
|
|
5
5
|
import { listPages } from "./wiki.js";
|
|
@@ -101,7 +101,7 @@ function getQmdEmbeddingStats(dbPath, warnings) {
|
|
|
101
101
|
if (!existsSync(dbPath))
|
|
102
102
|
return null;
|
|
103
103
|
try {
|
|
104
|
-
const db =
|
|
104
|
+
const db = openSqlite(dbPath, { readonly: true, fileMustExist: true });
|
|
105
105
|
try {
|
|
106
106
|
const tables = new Set(db.prepare("SELECT name FROM sqlite_master WHERE type IN ('table','view')").all()
|
|
107
107
|
.map((row) => row.name));
|
package/dist/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-para",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "PARA Knowledge Base Extension for pi — persistent, LLM-curated personal wiki",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"dependencies": {
|
|
157
157
|
"@types/better-sqlite3": "^7.6.13",
|
|
158
158
|
"better-sqlite3": "13.0.3",
|
|
159
|
-
"qmd-engine": "2.
|
|
159
|
+
"qmd-engine": "2.7.0",
|
|
160
160
|
"yaml": "^2.8.2"
|
|
161
161
|
},
|
|
162
162
|
"engines": {
|
package/src/scheduler/leases.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { openSqlite, type SqliteDatabase } from "../sqlite.js";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
|
|
4
4
|
export interface LeaseRecord {
|
|
@@ -9,7 +9,7 @@ export interface LeaseRecord {
|
|
|
9
9
|
metadataJson: string | null;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export function ensureLeaseSchema(db:
|
|
12
|
+
export function ensureLeaseSchema(db: SqliteDatabase): void {
|
|
13
13
|
db.exec(`
|
|
14
14
|
CREATE TABLE IF NOT EXISTS scheduler_leases (
|
|
15
15
|
lease_key TEXT PRIMARY KEY,
|
|
@@ -26,7 +26,7 @@ export function createLeaseHolder(prefix = "pi-para"): string {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export function acquireLease(
|
|
29
|
-
db:
|
|
29
|
+
db: SqliteDatabase,
|
|
30
30
|
leaseKey: string,
|
|
31
31
|
holderId: string,
|
|
32
32
|
opts: { ttlMs?: number; now?: Date; metadata?: unknown } = {},
|
|
@@ -65,7 +65,7 @@ export function acquireLease(
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
export function renewLease(
|
|
68
|
-
db:
|
|
68
|
+
db: SqliteDatabase,
|
|
69
69
|
leaseKey: string,
|
|
70
70
|
holderId: string,
|
|
71
71
|
opts: { ttlMs?: number; now?: Date } = {},
|
|
@@ -81,13 +81,13 @@ export function renewLease(
|
|
|
81
81
|
return result.changes === 1;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
export function releaseLease(db:
|
|
84
|
+
export function releaseLease(db: SqliteDatabase, leaseKey: string, holderId: string): boolean {
|
|
85
85
|
ensureLeaseSchema(db);
|
|
86
86
|
const result = db.prepare("DELETE FROM scheduler_leases WHERE lease_key = ? AND holder_id = ?").run(leaseKey, holderId);
|
|
87
87
|
return result.changes === 1;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
export function getLease(db:
|
|
90
|
+
export function getLease(db: SqliteDatabase, leaseKey: string): LeaseRecord | null {
|
|
91
91
|
ensureLeaseSchema(db);
|
|
92
92
|
const row = db.prepare(`
|
|
93
93
|
SELECT lease_key as leaseKey, holder_id as holderId, expires_at as expiresAt,
|
package/src/scheduler/state.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { openSqlite, type SqliteDatabase } from "../sqlite.js";
|
|
2
2
|
import { mkdirSync } from "node:fs";
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
4
|
import { getParaPaths } from "../paths.js";
|
|
@@ -38,11 +38,11 @@ export interface SchedulerHistoryItem<T = unknown> {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export class SchedulerStateDB {
|
|
41
|
-
readonly db:
|
|
41
|
+
readonly db: SqliteDatabase;
|
|
42
42
|
|
|
43
43
|
constructor(dbPath = getParaPaths().schedulerDbPath) {
|
|
44
44
|
mkdirSync(dirname(dbPath), { recursive: true });
|
|
45
|
-
this.db =
|
|
45
|
+
this.db = openSqlite(dbPath);
|
|
46
46
|
this.db.pragma("journal_mode = WAL");
|
|
47
47
|
this.migrate();
|
|
48
48
|
}
|
package/src/sqlite.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-para's own SQLite files (state, scheduler queue and leases, status probes), through the driver qmd-engine uses:
|
|
3
|
+
* better-sqlite3 by default, or Node.js's own node:sqlite with `QMD_SQLITE_DRIVER=node` (Node 22.13 or later), for
|
|
4
|
+
* platforms better-sqlite3 has no build for, such as Android (pi-phone). One switch for both, read once when this module
|
|
5
|
+
* loads; better-sqlite3 is not even imported under node:sqlite.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
import type BetterSqlite3 from "better-sqlite3";
|
|
9
|
+
|
|
10
|
+
export interface SqliteStatement {
|
|
11
|
+
run(...params: unknown[]): { changes: number; lastInsertRowid: number | bigint };
|
|
12
|
+
get(...params: unknown[]): unknown;
|
|
13
|
+
all(...params: unknown[]): unknown[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** What pi-para uses of a database, on either driver. */
|
|
17
|
+
export interface SqliteDatabase {
|
|
18
|
+
exec(sql: string): void;
|
|
19
|
+
prepare(sql: string): SqliteStatement;
|
|
20
|
+
/** `PRAGMA <text>`, its rows. */
|
|
21
|
+
pragma(text: string): unknown[];
|
|
22
|
+
close(): void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type SqliteDriver = "better-sqlite3" | "node";
|
|
26
|
+
|
|
27
|
+
export function resolveSqliteDriver(value = process.env.QMD_SQLITE_DRIVER): SqliteDriver {
|
|
28
|
+
if (value === undefined || value.trim() === "") return "better-sqlite3";
|
|
29
|
+
const driver = value.trim();
|
|
30
|
+
if (driver !== "better-sqlite3" && driver !== "node") {
|
|
31
|
+
throw new Error(`QMD_SQLITE_DRIVER must be better-sqlite3 or node for pi-para; got ${JSON.stringify(value)}`);
|
|
32
|
+
}
|
|
33
|
+
return driver;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const sqliteDriver: SqliteDriver = resolveSqliteDriver();
|
|
37
|
+
|
|
38
|
+
const Better: typeof BetterSqlite3 | undefined =
|
|
39
|
+
sqliteDriver === "better-sqlite3" ? (await import("better-sqlite3")).default : undefined;
|
|
40
|
+
|
|
41
|
+
/** Open a database file; `fileMustExist` refuses to make one, as better-sqlite3's option does. */
|
|
42
|
+
export function openSqlite(path: string, options: { readonly?: boolean; fileMustExist?: boolean } = {}): SqliteDatabase {
|
|
43
|
+
if (Better !== undefined) {
|
|
44
|
+
const db = new Better(path, options);
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
exec: (sql) => void db.exec(sql),
|
|
48
|
+
prepare: (sql) => db.prepare(sql) as unknown as SqliteStatement,
|
|
49
|
+
pragma: (text) => db.pragma(text) as unknown[],
|
|
50
|
+
close: () => void db.close(),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (options.fileMustExist === true && !existsSync(path)) {
|
|
55
|
+
throw new Error(`unable to open database file: ${path} does not exist`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const { DatabaseSync } = process.getBuiltinModule("node:sqlite") as typeof import("node:sqlite");
|
|
59
|
+
const db = new DatabaseSync(path, { readOnly: options.readonly === true });
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
exec: (sql) => db.exec(sql),
|
|
63
|
+
prepare: (sql) => db.prepare(sql) as unknown as SqliteStatement,
|
|
64
|
+
pragma: (text) => db.prepare(`PRAGMA ${text}`).all(),
|
|
65
|
+
close: () => db.close(),
|
|
66
|
+
};
|
|
67
|
+
}
|
package/src/state.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* and what pages were created/updated.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import
|
|
7
|
+
import { openSqlite, type SqliteDatabase } from "./sqlite.js";
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
import { readFileSync, statSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
@@ -29,11 +29,11 @@ export interface ProcessedSession {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export class StateDB {
|
|
32
|
-
private db:
|
|
32
|
+
private db: SqliteDatabase;
|
|
33
33
|
|
|
34
34
|
constructor(wikiDir: string) {
|
|
35
35
|
const dbPath = join(wikiDir, ".daemon.sqlite");
|
|
36
|
-
this.db =
|
|
36
|
+
this.db = openSqlite(dbPath);
|
|
37
37
|
this.db.pragma("journal_mode = WAL");
|
|
38
38
|
this.migrate();
|
|
39
39
|
}
|
package/src/status.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
|
-
import
|
|
2
|
+
import { openSqlite, type SqliteDatabase } from "./sqlite.js";
|
|
3
3
|
import { loadParaConfig } from "./config.js";
|
|
4
4
|
import { getParaPaths } from "./paths.js";
|
|
5
5
|
import { listPages, type ParaCategory } from "./wiki.js";
|
|
@@ -128,7 +128,7 @@ function getQmdEmbeddingStats(
|
|
|
128
128
|
): { hasVectorIndex: boolean; needsEmbedding: number } | null {
|
|
129
129
|
if (!existsSync(dbPath)) return null;
|
|
130
130
|
try {
|
|
131
|
-
const db =
|
|
131
|
+
const db = openSqlite(dbPath, { readonly: true, fileMustExist: true });
|
|
132
132
|
try {
|
|
133
133
|
const tables = new Set(
|
|
134
134
|
(db.prepare("SELECT name FROM sqlite_master WHERE type IN ('table','view')").all() as Array<{ name: string }>)
|