@nklisch/pi-enhanced 0.1.0 → 0.1.2
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/node_modules/@nklisch/pi-conveniences/package.json +5 -2
- package/node_modules/@nklisch/pi-fff-compat/package.json +5 -2
- package/node_modules/@nklisch/pi-plugins/README.md +16 -13
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-trust-continuity.d.ts +34 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-trust-continuity.js +310 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-trust-continuity.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-coordinator.d.ts +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-coordinator.js +30 -17
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-coordinator.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-eligibility.d.ts +0 -3
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-eligibility.js +0 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-eligibility.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/hook-visibility-contract.d.ts +40 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/hook-visibility-contract.js +28 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/hook-visibility-contract.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/hook-visibility-service.d.ts +24 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/hook-visibility-service.js +67 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/hook-visibility-service.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/installed-trust-grant-service.d.ts +110 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/installed-trust-grant-service.js +186 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/installed-trust-grant-service.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/lifecycle-transition-reconciler.d.ts +3 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/lifecycle-transition-reconciler.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-plugin-probe.d.ts +0 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-plugin-probe.js +38 -11
- package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-plugin-probe.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-refresh-service.d.ts +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-refresh-service.js +22 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-refresh-service.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-automatic-run-presenter.d.ts +11 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-automatic-run-presenter.js +58 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-automatic-run-presenter.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-contract.d.ts +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-dispatcher.js +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-dispatcher.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-help.d.ts +5 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-mutation-dispatch.js +47 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-mutation-dispatch.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-operation.d.ts +2505 -2439
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-parser.d.ts +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-parser.js +3 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-parser.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-progress.d.ts +4 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-registry.d.ts +46 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-registry.js +7 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/native-control-registry.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-registry.d.ts +12 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-registry.js +2 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-registry.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-failure-presenter.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-failure-presenter.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-contract.d.ts +5 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-installed-inspection.js +7 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/native-installed-inspection.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-contract.d.ts +464 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-contract.js +3 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-contract.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-session.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-session.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation.d.ts +77 -11
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-result.js +3 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-result.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-update-contract.d.ts +11 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-update-contract.js +9 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/native-update-contract.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-service.d.ts +22 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-service.js +21 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-service.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/automatic-update-lifecycle.d.ts +4 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-runtime.d.ts +0 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-runtime.js +2 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-runtime.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-applications.d.ts +4 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/state-contract.d.ts +28 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-contract.d.ts +15 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-contract.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-contract.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-service.js +4 -0
- package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-service.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/automatic-update-lifecycle-adapter.js +88 -80
- package/node_modules/@nklisch/pi-plugins/dist/composition/automatic-update-lifecycle-adapter.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/complete-plugin-reload.js +32 -4
- package/node_modules/@nklisch/pi-plugins/dist/composition/complete-plugin-reload.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-update-management-service.d.ts +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-update-management-service.js +9 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-update-management-service.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-packaged-plugin-host.js +49 -10
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-packaged-plugin-host.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-skill-hook-runtime.d.ts +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-skill-hook-runtime.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/create-skill-hook-runtime.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-host-startup.js +4 -3
- package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-host-startup.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-plugin-host-contract.d.ts +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-desired-state.js +21 -7
- package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-desired-state.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/domain/hook-output-contract.d.ts +7 -1
- package/node_modules/@nklisch/pi-plugins/dist/domain/hook-output-contract.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/domain/hook-visibility.d.ts +16 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/hook-visibility.js +12 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/hook-visibility.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-session-environment.d.ts +23 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-session-environment.js +30 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-session-environment.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/state/codec.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/domain/state/codec.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/domain/state/config-state.d.ts +15 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/state/config-state.js +7 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/state/config-state.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/domain/state/registry.d.ts +7 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/update-policy.js +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/domain/update-policy.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/index.d.ts +2 -1
- package/node_modules/@nklisch/pi-plugins/dist/index.js +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/index.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-root-resolver.js +8 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-root-resolver.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/local-recovery-filesystem.d.ts +0 -2
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/local-recovery-filesystem.js +3 -52
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/local-recovery-filesystem.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/process-revision-leases.js +6 -8
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/process-revision-leases.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-revision-retention.js +6 -6
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-revision-retention.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-transition-journal.js +4 -49
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-transition-journal.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-lifecycle-state-store.js +9 -18
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-lifecycle-state-store.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-open.d.ts +23 -0
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-open.js +80 -0
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-open.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-scope-lock.d.ts +1 -11
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-scope-lock.js +59 -593
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-scope-lock.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/extension.js +2 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/extension.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-context-renderer.d.ts +18 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-context-renderer.js +47 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-context-renderer.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-decision-adapter.d.ts +3 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-decision-adapter.js +28 -11
- package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-decision-adapter.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-component.js +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-component.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-actions.d.ts +7 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-actions.js +26 -2
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-actions.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-commands.d.ts +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-commands.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-commands.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-component.d.ts +4 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-component.js +25 -3
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-component.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-controller.js +9 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-controller.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-model.d.ts +4 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-model.js +5 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-model.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-render.d.ts +3 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-render.js +20 -12
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-render.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-session.js +43 -14
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-session.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-operation-view.js +13 -8
- package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-operation-view.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/native-control-human.js +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/pi/native-control-human.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/pi-reload-broker.d.ts +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/pi/pi-trust-review.d.ts +8 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/pi-trust-review.js +93 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/pi-trust-review.js.map +1 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-command.js +3 -3
- package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-command.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-manager-lifecycle.d.ts +2 -0
- package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-manager-lifecycle.js +8 -2
- package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-manager-lifecycle.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-decision-aggregator.js +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-decision-aggregator.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-value-provider.js +24 -0
- package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-value-provider.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-package.js +1 -7
- package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-package.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-runtime.js +1 -2
- package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-runtime.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/published-package-receipt.d.ts +10 -13
- package/node_modules/@nklisch/pi-plugins/dist/runtime/published-package-receipt.js +7 -92
- package/node_modules/@nklisch/pi-plugins/dist/runtime/published-package-receipt.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-lifecycle.js +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-package.js +1 -7
- package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-package.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-coordinator.js +2 -2
- package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-coordinator.js.map +1 -1
- package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/package.json +5 -2
- package/node_modules/@nklisch/pi-plugins/package.json +3 -3
- package/package.json +7 -7
- package/node_modules/@nklisch/pi-conveniences/extensions/agents-context.test.ts +0 -140
- package/node_modules/@nklisch/pi-conveniences/extensions/context-window-footer.test.ts +0 -30
- package/node_modules/@nklisch/pi-conveniences/extensions/exit.test.ts +0 -44
- package/node_modules/@nklisch/pi-conveniences/extensions/model-list.test.ts +0 -34
- package/node_modules/@nklisch/pi-fff-compat/extensions/fff-compat-search.test.ts +0 -76
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-activation-context.d.ts +0 -4
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-activation-context.js +0 -2
- package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-activation-context.js.map +0 -1
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/identity-bound-sqlite.d.ts +0 -22
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/identity-bound-sqlite.js +0 -256
- package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/identity-bound-sqlite.js.map +0 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { chmodSync, lstatSync } from "node:fs";
|
|
2
|
+
import { DatabaseSync } from "node:sqlite";
|
|
3
|
+
import { LOCAL_LOCK_DATABASE_MODE } from "./local-lock-filesystem.js";
|
|
4
|
+
const SQLITE_BUSY = 5;
|
|
5
|
+
// Waiting out a busy database must tolerate loaded hosts (parallel test
|
|
6
|
+
// runners, several Pi sessions on one agent dir); the budget below totals
|
|
7
|
+
// roughly five seconds while staying sub-second locally.
|
|
8
|
+
const MAX_RETRIES = 24;
|
|
9
|
+
function isBusy(error) {
|
|
10
|
+
return typeof error === "object" && error !== null && error.errcode === SQLITE_BUSY;
|
|
11
|
+
}
|
|
12
|
+
async function wait(signal, attempt) {
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
const delay = Math.min(250, 2 ** Math.min(attempt, 8));
|
|
15
|
+
await new Promise((resolve, reject) => {
|
|
16
|
+
const timer = setTimeout(() => { signal.removeEventListener("abort", onAbort); resolve(); }, delay);
|
|
17
|
+
const onAbort = () => { clearTimeout(timer); signal.removeEventListener("abort", onAbort); reject(signal.reason); };
|
|
18
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function assertRegularFile(path) {
|
|
22
|
+
const stats = lstatSync(path);
|
|
23
|
+
if (!stats.isFile() || stats.isSymbolicLink())
|
|
24
|
+
throw new Error("SQLite database path is not a regular file");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Open (creating when absent) a SQLite database and validate its schema.
|
|
28
|
+
* Schema inspection, first-use initialization, and validation run inside one
|
|
29
|
+
* exclusive transaction so concurrent first-use processes serialize on the
|
|
30
|
+
* database itself; no sidecar marker or claim files exist to drift, go stale,
|
|
31
|
+
* or strand a later process. Busy contention retries with backoff until the
|
|
32
|
+
* caller's signal aborts or the budget is exhausted.
|
|
33
|
+
*/
|
|
34
|
+
export async function openSqliteDatabase(input) {
|
|
35
|
+
const busyTimeoutMs = input.busyTimeoutMs ?? 0;
|
|
36
|
+
if (!Number.isInteger(busyTimeoutMs) || busyTimeoutMs < 0 || busyTimeoutMs > 60_000)
|
|
37
|
+
throw new TypeError("SQLite busy timeout is invalid");
|
|
38
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {
|
|
39
|
+
input.signal.throwIfAborted();
|
|
40
|
+
const database = new DatabaseSync(input.path, { allowExtension: false, defensive: true, enableForeignKeyConstraints: true, timeout: busyTimeoutMs });
|
|
41
|
+
try {
|
|
42
|
+
input.configure?.(database);
|
|
43
|
+
assertRegularFile(input.path);
|
|
44
|
+
chmodSync(input.path, LOCAL_LOCK_DATABASE_MODE);
|
|
45
|
+
database.exec("BEGIN EXCLUSIVE");
|
|
46
|
+
try {
|
|
47
|
+
const objects = database.prepare("SELECT name FROM sqlite_master WHERE name NOT LIKE 'sqlite_%'").all();
|
|
48
|
+
if (objects.length === 0)
|
|
49
|
+
input.initialize(database);
|
|
50
|
+
input.validate(database);
|
|
51
|
+
database.exec("COMMIT");
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
try {
|
|
55
|
+
if (database.isTransaction)
|
|
56
|
+
database.exec("ROLLBACK");
|
|
57
|
+
}
|
|
58
|
+
catch { /* preserve primary failure */ }
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
let closed = false;
|
|
62
|
+
return Object.freeze({
|
|
63
|
+
database,
|
|
64
|
+
close() { if (closed)
|
|
65
|
+
return; closed = true; database.close(); },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
try {
|
|
70
|
+
database.close();
|
|
71
|
+
}
|
|
72
|
+
catch { /* preserve primary failure */ }
|
|
73
|
+
if (!isBusy(error) || attempt === MAX_RETRIES)
|
|
74
|
+
throw error;
|
|
75
|
+
await wait(input.signal, attempt);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
throw new Error("SQLite database open retry budget exhausted");
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=sqlite-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-open.js","sourceRoot":"","sources":["../../../src/infrastructure/state/sqlite-open.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { type ScopeReference } from "../../domain/state/scope.js";
|
|
2
2
|
import type { ScopeLockManager } from "../../application/ports/scope-lock.js";
|
|
3
|
-
type InitializationMarkerReadHook = (context: Readonly<{
|
|
4
|
-
path: string;
|
|
5
|
-
databaseName: string;
|
|
6
|
-
markerState: "absent" | "initializing" | "ready";
|
|
7
|
-
}>) => Promise<void> | void;
|
|
8
3
|
export type SqliteScopeLockOptions = Readonly<{
|
|
9
4
|
lockRoot: string;
|
|
10
5
|
retryDelayMs: Readonly<{
|
|
@@ -13,13 +8,8 @@ export type SqliteScopeLockOptions = Readonly<{
|
|
|
13
8
|
}>;
|
|
14
9
|
random?: () => number;
|
|
15
10
|
verifyLocalFilesystem?: (root: string) => Promise<void>;
|
|
16
|
-
/** Test seam for forcing a cross-process marker/path interleaving. */
|
|
17
|
-
initializationMarkerRead?: InitializationMarkerReadHook;
|
|
18
11
|
}>;
|
|
19
12
|
declare function scopeDatabaseName(scope: ScopeReference): string;
|
|
20
|
-
/**
|
|
21
|
-
* Create a scope lock manager after proving the configured root has the
|
|
22
|
-
* capabilities this safety boundary needs. No process-local fallback exists.
|
|
23
|
-
*/
|
|
13
|
+
/** Create a scope lock manager rooted at a private, local-filesystem directory. */
|
|
24
14
|
export declare function createSqliteScopeLockManager(options: SqliteScopeLockOptions): Promise<ScopeLockManager>;
|
|
25
15
|
export { scopeDatabaseName };
|