@haaaiawd/second-nature 0.1.18 → 0.1.19
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/index.js +855 -855
- package/openclaw.plugin.json +29 -29
- package/package.json +52 -52
- package/runtime/cli/commands/index.d.ts +14 -14
- package/runtime/cli/commands/index.js +193 -193
- package/runtime/cli/explain/explain-surface-subject.d.ts +8 -8
- package/runtime/cli/explain/explain-surface-subject.js +9 -9
- package/runtime/cli/explain/format-explanation.d.ts +12 -12
- package/runtime/cli/explain/format-explanation.js +12 -12
- package/runtime/cli/explain/resolve-subject.js +41 -41
- package/runtime/cli/host-capability/classify-delivery.d.ts +14 -14
- package/runtime/cli/host-capability/classify-delivery.js +20 -20
- package/runtime/cli/host-capability/probe-host-capability.d.ts +2 -2
- package/runtime/cli/host-capability/probe-host-capability.js +58 -58
- package/runtime/cli/host-capability/record-host-capability.d.ts +6 -6
- package/runtime/cli/host-capability/record-host-capability.js +14 -14
- package/runtime/cli/host-capability/types.d.ts +71 -71
- package/runtime/cli/host-capability/types.js +6 -6
- package/runtime/cli/host-smoke/run-host-smoke.d.ts +2 -2
- package/runtime/cli/host-smoke/run-host-smoke.js +40 -40
- package/runtime/cli/host-smoke/types.d.ts +35 -35
- package/runtime/cli/host-smoke/types.js +6 -6
- package/runtime/cli/index.js +65 -58
- package/runtime/cli/ops/heartbeat-surface.d.ts +45 -38
- package/runtime/cli/ops/heartbeat-surface.js +79 -73
- package/runtime/cli/ops/ops-router.d.ts +26 -19
- package/runtime/cli/ops/ops-router.js +102 -89
- package/runtime/cli/ops/show-operator-fallback.d.ts +13 -13
- package/runtime/cli/ops/show-operator-fallback.js +22 -22
- package/runtime/cli/ops/workspace-heartbeat-runner.d.ts +40 -19
- package/runtime/cli/ops/workspace-heartbeat-runner.js +93 -39
- package/runtime/cli/read-models/index.d.ts +35 -29
- package/runtime/cli/read-models/index.js +365 -256
- package/runtime/cli/read-models/operator-explain-map.d.ts +6 -6
- package/runtime/cli/read-models/operator-explain-map.js +10 -10
- package/runtime/cli/read-models/types.d.ts +112 -79
- package/runtime/cli/runtime/runtime-artifact-boundary.d.ts +28 -28
- package/runtime/cli/runtime/runtime-artifact-boundary.js +94 -94
- package/runtime/connectors/base/contract.d.ts +87 -87
- package/runtime/connectors/base/execution-policy.d.ts +47 -47
- package/runtime/connectors/base/execution-policy.js +82 -82
- package/runtime/connectors/base/index.d.ts +8 -8
- package/runtime/connectors/base/index.js +8 -8
- package/runtime/connectors/base/manifest.d.ts +64 -64
- package/runtime/connectors/base/manifest.js +86 -86
- package/runtime/connectors/base/map-life-evidence.d.ts +16 -16
- package/runtime/connectors/base/map-life-evidence.js +79 -79
- package/runtime/connectors/base/policy-layer.d.ts +29 -29
- package/runtime/connectors/base/policy-layer.js +198 -198
- package/runtime/connectors/base/route-planner.js +99 -99
- package/runtime/connectors/index.d.ts +5 -5
- package/runtime/connectors/index.js +5 -5
- package/runtime/connectors/near-real/near-real-connector-smoke.d.ts +19 -19
- package/runtime/connectors/near-real/near-real-connector-smoke.js +152 -152
- package/runtime/core/second-nature/heartbeat/heartbeat-executor.js +114 -114
- package/runtime/core/second-nature/heartbeat/heartbeat-loop.d.ts +63 -63
- package/runtime/core/second-nature/heartbeat/heartbeat-loop.js +162 -139
- package/runtime/core/second-nature/heartbeat/index.d.ts +8 -8
- package/runtime/core/second-nature/heartbeat/index.js +7 -7
- package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.d.ts +21 -21
- package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.js +35 -35
- package/runtime/core/second-nature/heartbeat/runtime-snapshot.d.ts +28 -28
- package/runtime/core/second-nature/heartbeat/runtime-snapshot.js +35 -35
- package/runtime/core/second-nature/heartbeat/signal.d.ts +42 -42
- package/runtime/core/second-nature/heartbeat/snapshot-builder.d.ts +51 -51
- package/runtime/core/second-nature/index.d.ts +22 -22
- package/runtime/core/second-nature/index.js +22 -22
- package/runtime/core/second-nature/orchestrator/effect-dispatcher.d.ts +100 -100
- package/runtime/core/second-nature/orchestrator/effect-dispatcher.js +144 -144
- package/runtime/core/second-nature/orchestrator/guard-layer.d.ts +8 -8
- package/runtime/core/second-nature/orchestrator/guard-layer.js +110 -110
- package/runtime/core/second-nature/orchestrator/intent-planner.d.ts +13 -13
- package/runtime/core/second-nature/orchestrator/intent-planner.js +199 -199
- package/runtime/core/second-nature/orchestrator/lease-manager.d.ts +14 -14
- package/runtime/core/second-nature/orchestrator/lease-manager.js +58 -58
- package/runtime/core/second-nature/outreach/build-outreach-draft-request.d.ts +6 -6
- package/runtime/core/second-nature/outreach/build-outreach-draft-request.js +63 -63
- package/runtime/core/second-nature/outreach/delivery-target.d.ts +26 -26
- package/runtime/core/second-nature/outreach/delivery-target.js +70 -70
- package/runtime/core/second-nature/outreach/dispatch-user-outreach.d.ts +38 -38
- package/runtime/core/second-nature/outreach/dispatch-user-outreach.js +119 -119
- package/runtime/core/second-nature/outreach/judge-input-from-snapshot.d.ts +7 -7
- package/runtime/core/second-nature/outreach/judge-input-from-snapshot.js +45 -45
- package/runtime/core/second-nature/outreach/judge-outreach.d.ts +40 -40
- package/runtime/core/second-nature/outreach/judge-outreach.js +121 -121
- package/runtime/core/second-nature/quiet/run-source-backed-quiet.d.ts +21 -21
- package/runtime/core/second-nature/quiet/run-source-backed-quiet.js +123 -123
- package/runtime/core/second-nature/rhythm/planner-rhythm-window.d.ts +15 -15
- package/runtime/core/second-nature/rhythm/planner-rhythm-window.js +52 -52
- package/runtime/core/second-nature/rhythm/policy-bridge.d.ts +19 -19
- package/runtime/core/second-nature/rhythm/policy-bridge.js +34 -34
- package/runtime/core/second-nature/runtime/service-entry.js +45 -45
- package/runtime/core/second-nature/types.d.ts +51 -51
- package/runtime/guidance/draft-outreach-message.d.ts +7 -7
- package/runtime/guidance/draft-outreach-message.js +42 -42
- package/runtime/guidance/evidence-guidance.d.ts +40 -40
- package/runtime/guidance/evidence-guidance.js +52 -52
- package/runtime/guidance/index.d.ts +11 -11
- package/runtime/guidance/index.js +11 -11
- package/runtime/guidance/outreach-draft-schema.d.ts +228 -228
- package/runtime/guidance/outreach-draft-schema.js +80 -80
- package/runtime/observability/audit/append-only-audit-store.d.ts +14 -14
- package/runtime/observability/audit/append-only-audit-store.js +21 -21
- package/runtime/observability/audit/audit-envelope.d.ts +51 -51
- package/runtime/observability/audit/audit-envelope.js +130 -130
- package/runtime/observability/audit/verify-audit-hash-chain.d.ts +23 -23
- package/runtime/observability/audit/verify-audit-hash-chain.js +83 -83
- package/runtime/observability/db/index.js +47 -47
- package/runtime/observability/db/schema/host-capability-reports.d.ts +180 -180
- package/runtime/observability/db/schema/host-capability-reports.js +12 -12
- package/runtime/observability/db/schema/index.d.ts +947 -947
- package/runtime/observability/db/schema/index.js +71 -71
- package/runtime/observability/index.d.ts +20 -20
- package/runtime/observability/index.js +19 -19
- package/runtime/observability/query/explain-query.d.ts +48 -48
- package/runtime/observability/query/explain-query.js +114 -114
- package/runtime/observability/query/export-audit-bundle.d.ts +22 -22
- package/runtime/observability/query/export-audit-bundle.js +27 -27
- package/runtime/observability/services/decision-ledger.d.ts +46 -46
- package/runtime/observability/services/decision-ledger.js +161 -161
- package/runtime/observability/services/governance-audit.d.ts +41 -41
- package/runtime/observability/services/governance-audit.js +163 -163
- package/runtime/observability/services/governance-plane-recorder.d.ts +47 -47
- package/runtime/observability/services/governance-plane-recorder.js +55 -55
- package/runtime/observability/services/lived-experience-audit.d.ts +97 -97
- package/runtime/observability/services/lived-experience-audit.js +162 -162
- package/runtime/observability/services/runtime-decision-recorder.d.ts +29 -29
- package/runtime/observability/services/runtime-decision-recorder.js +94 -94
- package/runtime/storage/bootstrap/native-sqlite-probe.d.ts +7 -7
- package/runtime/storage/bootstrap/native-sqlite-probe.js +28 -28
- package/runtime/storage/bootstrap/repair-gate.d.ts +17 -17
- package/runtime/storage/bootstrap/repair-gate.js +71 -71
- package/runtime/storage/bootstrap/storage-mode-smoke.d.ts +38 -38
- package/runtime/storage/bootstrap/storage-mode-smoke.js +85 -85
- package/runtime/storage/db/index.js +61 -61
- package/runtime/storage/db/schema/delivery-attempts.d.ts +199 -199
- package/runtime/storage/db/schema/delivery-attempts.js +13 -13
- package/runtime/storage/db/schema/index.d.ts +9 -9
- package/runtime/storage/db/schema/index.js +9 -9
- package/runtime/storage/db/schema/life-evidence-index.d.ts +161 -161
- package/runtime/storage/db/schema/life-evidence-index.js +11 -11
- package/runtime/storage/db/schema/operator-fallback-artifacts.d.ts +161 -161
- package/runtime/storage/db/schema/operator-fallback-artifacts.js +11 -11
- package/runtime/storage/db/schema/policies.d.ts +98 -98
- package/runtime/storage/db/schema/policies.js +8 -8
- package/runtime/storage/delivery/query-delivery-attempts.d.ts +3 -3
- package/runtime/storage/delivery/query-delivery-attempts.js +32 -32
- package/runtime/storage/delivery/types.d.ts +27 -27
- package/runtime/storage/delivery/types.js +1 -1
- package/runtime/storage/delivery/write-delivery-attempt.d.ts +6 -6
- package/runtime/storage/delivery/write-delivery-attempt.js +36 -36
- package/runtime/storage/fallback/load-operator-fallback.d.ts +14 -14
- package/runtime/storage/fallback/load-operator-fallback.js +47 -47
- package/runtime/storage/fallback/operator-fallback-types.d.ts +9 -9
- package/runtime/storage/fallback/operator-fallback-types.js +1 -1
- package/runtime/storage/fallback/operator-fallback-view.d.ts +11 -11
- package/runtime/storage/fallback/operator-fallback-view.js +1 -1
- package/runtime/storage/fallback/write-operator-fallback.d.ts +6 -6
- package/runtime/storage/fallback/write-operator-fallback.js +21 -21
- package/runtime/storage/index.d.ts +37 -37
- package/runtime/storage/index.js +30 -30
- package/runtime/storage/life-evidence/append-life-evidence.d.ts +7 -7
- package/runtime/storage/life-evidence/append-life-evidence.js +64 -64
- package/runtime/storage/life-evidence/types.d.ts +45 -45
- package/runtime/storage/life-evidence/types.js +6 -6
- package/runtime/storage/quiet/persist-quiet-artifact.d.ts +7 -7
- package/runtime/storage/quiet/persist-quiet-artifact.js +22 -22
- package/runtime/storage/quiet/quiet-artifact-types.d.ts +18 -18
- package/runtime/storage/quiet/quiet-artifact-types.js +1 -1
- package/runtime/storage/quiet/quiet-artifact-writer.d.ts +15 -15
- package/runtime/storage/quiet/quiet-artifact-writer.js +56 -56
- package/runtime/storage/repositories/credential-repository.js +30 -30
- package/runtime/storage/rhythm/rhythm-policy-snapshot.d.ts +10 -10
- package/runtime/storage/rhythm/rhythm-policy-snapshot.js +34 -34
- package/runtime/storage/services/credential-vault.d.ts +13 -13
- package/runtime/storage/services/credential-vault.js +116 -116
- package/runtime/storage/snapshots/continuity-snapshot.d.ts +9 -9
- package/runtime/storage/snapshots/continuity-snapshot.js +41 -41
- package/runtime/storage/snapshots/life-evidence-snapshot.d.ts +6 -6
- package/runtime/storage/snapshots/life-evidence-snapshot.js +114 -114
- package/runtime/storage/snapshots/types.d.ts +58 -58
- package/runtime/storage/snapshots/types.js +1 -1
- package/runtime/storage/state-api.js +104 -104
- package/runtime/storage/user-interest/load-user-interest-snapshot.d.ts +2 -2
- package/runtime/storage/user-interest/load-user-interest-snapshot.js +150 -150
- package/runtime/storage/user-interest/types.d.ts +25 -25
- package/runtime/storage/user-interest/types.js +1 -1
- package/workspace-ops-bridge.js +81 -81
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Storage driver mode smoke report (T4.1.4 / state-system §12.1.1).
|
|
3
|
-
*
|
|
4
|
-
* Actual runtime: `createStateDatabase` uses sql.js — no WAL; persistence via export + explicit flush on close.
|
|
5
|
-
* Native SQLite (better-sqlite3) is probed separately; switching drivers is out of scope — report stays honest.
|
|
6
|
-
*/
|
|
7
|
-
import fs from "node:fs";
|
|
8
|
-
import os from "node:os";
|
|
9
|
-
import path from "node:path";
|
|
10
|
-
import { eq } from "drizzle-orm";
|
|
11
|
-
import { appendLifeEvidence } from "../life-evidence/append-life-evidence.js";
|
|
12
|
-
import { createStateDatabase } from "../db/index.js";
|
|
13
|
-
import { lifeEvidenceIndex } from "../db/schema/life-evidence-index.js";
|
|
14
|
-
import { repairStateIndexes } from "./repair-gate.js";
|
|
15
|
-
import { probeNativeSqliteLoad } from "./native-sqlite-probe.js";
|
|
16
|
-
const SEMANTICS = {
|
|
17
|
-
sqlJs: {
|
|
18
|
-
walAssumed: false,
|
|
19
|
-
journalConcurrencyNotes: "sql.js (WASM) has no host SQLite WAL; treat writes as a single-writer/single connection path with explicit export() flush on close (design: single-writer queue + atomic artifact write + explicit flush) — do not assume POSIX WAL or multi-writer journal semantics.",
|
|
20
|
-
backupNotes: "Backup for sql.js mode: export DB binary via sqlite.export(), pair with workspace artifact manifest; avoid copying a live in-memory DB without explicit flush/export.",
|
|
21
|
-
repairNotes: "Index rebuild uses canonical filesystem evidence artifacts under .second-nature/evidence — repairStateIndexes can repopulate life_evidence_index without WAL replay.",
|
|
22
|
-
},
|
|
23
|
-
nativeSqliteWhenAvailable: {
|
|
24
|
-
journalConcurrencyNotes: "Native better-sqlite3 may enable WAL where supported + busy timeout — applicable only if a future native-backed StateDatabase is wired.",
|
|
25
|
-
backupNotes: "Preferred: SQLite Backup API / VACUUM INTO plus artifact manifest — only when native driver owns the DB file.",
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
async function runRepairFixture(workspaceRoot) {
|
|
29
|
-
const state = createStateDatabase(":memory:");
|
|
30
|
-
await appendLifeEvidence(state, workspaceRoot, {
|
|
31
|
-
timestamp: new Date().toISOString(),
|
|
32
|
-
evidenceType: "platform_browse",
|
|
33
|
-
summary: "storage-mode-smoke fixture",
|
|
34
|
-
sourceRefs: [{ id: "smoke-ref", kind: "platform_item", uri: "platform://storage-smoke" }],
|
|
35
|
-
sensitivity: "public",
|
|
36
|
-
producer: "state-system",
|
|
37
|
-
});
|
|
38
|
-
const rows = await state.db.select().from(lifeEvidenceIndex);
|
|
39
|
-
const evidenceId = rows[0]?.id;
|
|
40
|
-
if (!evidenceId) {
|
|
41
|
-
state.close();
|
|
42
|
-
return {
|
|
43
|
-
ran: true,
|
|
44
|
-
workspaceRoot,
|
|
45
|
-
repairStatus: "repair_required",
|
|
46
|
-
repairNotes: ["fixture_failed_no_index_after_append"],
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
await state.db.delete(lifeEvidenceIndex).where(eq(lifeEvidenceIndex.id, evidenceId));
|
|
50
|
-
const repair = await repairStateIndexes(state, { startupGate: true, workspaceRoot });
|
|
51
|
-
state.close();
|
|
52
|
-
return {
|
|
53
|
-
ran: true,
|
|
54
|
-
workspaceRoot,
|
|
55
|
-
repairStatus: repair.status,
|
|
56
|
-
repairedEvidenceIndexRows: repair.repairedEvidenceIndexRows,
|
|
57
|
-
repairNotes: repair.repairNotes,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
export async function runStorageModeSmoke(options = {}) {
|
|
61
|
-
const nativeSqliteProbe = probeNativeSqliteLoad();
|
|
62
|
-
let repairFromArtifactsFixture;
|
|
63
|
-
if (options.runRepairFixture) {
|
|
64
|
-
const ws = options.workspaceRoot ??
|
|
65
|
-
fs.mkdtempSync(path.join(os.tmpdir(), "sn-storage-smoke-"));
|
|
66
|
-
try {
|
|
67
|
-
repairFromArtifactsFixture = await runRepairFixture(ws);
|
|
68
|
-
}
|
|
69
|
-
finally {
|
|
70
|
-
if (!options.workspaceRoot) {
|
|
71
|
-
fs.rmSync(ws, { recursive: true, force: true });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
generatedAt: new Date().toISOString(),
|
|
77
|
-
runtimeIndexDriver: "sql_js",
|
|
78
|
-
nativeSqliteProbe: {
|
|
79
|
-
...nativeSqliteProbe,
|
|
80
|
-
runtimeUsesNativeDriver: false,
|
|
81
|
-
},
|
|
82
|
-
semantics: SEMANTICS,
|
|
83
|
-
repairFromArtifactsFixture,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Storage driver mode smoke report (T4.1.4 / state-system §12.1.1).
|
|
3
|
+
*
|
|
4
|
+
* Actual runtime: `createStateDatabase` uses sql.js — no WAL; persistence via export + explicit flush on close.
|
|
5
|
+
* Native SQLite (better-sqlite3) is probed separately; switching drivers is out of scope — report stays honest.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { eq } from "drizzle-orm";
|
|
11
|
+
import { appendLifeEvidence } from "../life-evidence/append-life-evidence.js";
|
|
12
|
+
import { createStateDatabase } from "../db/index.js";
|
|
13
|
+
import { lifeEvidenceIndex } from "../db/schema/life-evidence-index.js";
|
|
14
|
+
import { repairStateIndexes } from "./repair-gate.js";
|
|
15
|
+
import { probeNativeSqliteLoad } from "./native-sqlite-probe.js";
|
|
16
|
+
const SEMANTICS = {
|
|
17
|
+
sqlJs: {
|
|
18
|
+
walAssumed: false,
|
|
19
|
+
journalConcurrencyNotes: "sql.js (WASM) has no host SQLite WAL; treat writes as a single-writer/single connection path with explicit export() flush on close (design: single-writer queue + atomic artifact write + explicit flush) — do not assume POSIX WAL or multi-writer journal semantics.",
|
|
20
|
+
backupNotes: "Backup for sql.js mode: export DB binary via sqlite.export(), pair with workspace artifact manifest; avoid copying a live in-memory DB without explicit flush/export.",
|
|
21
|
+
repairNotes: "Index rebuild uses canonical filesystem evidence artifacts under .second-nature/evidence — repairStateIndexes can repopulate life_evidence_index without WAL replay.",
|
|
22
|
+
},
|
|
23
|
+
nativeSqliteWhenAvailable: {
|
|
24
|
+
journalConcurrencyNotes: "Native better-sqlite3 may enable WAL where supported + busy timeout — applicable only if a future native-backed StateDatabase is wired.",
|
|
25
|
+
backupNotes: "Preferred: SQLite Backup API / VACUUM INTO plus artifact manifest — only when native driver owns the DB file.",
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
async function runRepairFixture(workspaceRoot) {
|
|
29
|
+
const state = createStateDatabase(":memory:");
|
|
30
|
+
await appendLifeEvidence(state, workspaceRoot, {
|
|
31
|
+
timestamp: new Date().toISOString(),
|
|
32
|
+
evidenceType: "platform_browse",
|
|
33
|
+
summary: "storage-mode-smoke fixture",
|
|
34
|
+
sourceRefs: [{ id: "smoke-ref", kind: "platform_item", uri: "platform://storage-smoke" }],
|
|
35
|
+
sensitivity: "public",
|
|
36
|
+
producer: "state-system",
|
|
37
|
+
});
|
|
38
|
+
const rows = await state.db.select().from(lifeEvidenceIndex);
|
|
39
|
+
const evidenceId = rows[0]?.id;
|
|
40
|
+
if (!evidenceId) {
|
|
41
|
+
state.close();
|
|
42
|
+
return {
|
|
43
|
+
ran: true,
|
|
44
|
+
workspaceRoot,
|
|
45
|
+
repairStatus: "repair_required",
|
|
46
|
+
repairNotes: ["fixture_failed_no_index_after_append"],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
await state.db.delete(lifeEvidenceIndex).where(eq(lifeEvidenceIndex.id, evidenceId));
|
|
50
|
+
const repair = await repairStateIndexes(state, { startupGate: true, workspaceRoot });
|
|
51
|
+
state.close();
|
|
52
|
+
return {
|
|
53
|
+
ran: true,
|
|
54
|
+
workspaceRoot,
|
|
55
|
+
repairStatus: repair.status,
|
|
56
|
+
repairedEvidenceIndexRows: repair.repairedEvidenceIndexRows,
|
|
57
|
+
repairNotes: repair.repairNotes,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export async function runStorageModeSmoke(options = {}) {
|
|
61
|
+
const nativeSqliteProbe = probeNativeSqliteLoad();
|
|
62
|
+
let repairFromArtifactsFixture;
|
|
63
|
+
if (options.runRepairFixture) {
|
|
64
|
+
const ws = options.workspaceRoot ??
|
|
65
|
+
fs.mkdtempSync(path.join(os.tmpdir(), "sn-storage-smoke-"));
|
|
66
|
+
try {
|
|
67
|
+
repairFromArtifactsFixture = await runRepairFixture(ws);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
if (!options.workspaceRoot) {
|
|
71
|
+
fs.rmSync(ws, { recursive: true, force: true });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
generatedAt: new Date().toISOString(),
|
|
77
|
+
runtimeIndexDriver: "sql_js",
|
|
78
|
+
nativeSqliteProbe: {
|
|
79
|
+
...nativeSqliteProbe,
|
|
80
|
+
runtimeUsesNativeDriver: false,
|
|
81
|
+
},
|
|
82
|
+
semantics: SEMANTICS,
|
|
83
|
+
repairFromArtifactsFixture,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import initSqlJs from "sql.js";
|
|
2
|
-
import { drizzle } from "drizzle-orm/sql-js";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import fs from "node:fs";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
-
import * as schema from "./schema/index.js";
|
|
7
|
-
// Pre-initialize sql.js WASM at module load time
|
|
8
|
-
const SQL = await initSqlJs();
|
|
1
|
+
import initSqlJs from "sql.js";
|
|
2
|
+
import { drizzle } from "drizzle-orm/sql-js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import * as schema from "./schema/index.js";
|
|
7
|
+
// Pre-initialize sql.js WASM at module load time
|
|
8
|
+
const SQL = await initSqlJs();
|
|
9
9
|
const STATE_SCHEMA_SQL = `
|
|
10
10
|
CREATE TABLE IF NOT EXISTS credential_records (
|
|
11
11
|
platform_id TEXT PRIMARY KEY,
|
|
@@ -99,56 +99,56 @@ const STATE_SCHEMA_SQL = `
|
|
|
99
99
|
created_at TEXT NOT NULL
|
|
100
100
|
);
|
|
101
101
|
CREATE INDEX IF NOT EXISTS operator_fallback_decision_idx ON operator_fallback_artifacts(decision_id);
|
|
102
|
-
`;
|
|
103
|
-
function resolveDbPath(filename) {
|
|
104
|
-
if (path.isAbsolute(filename) || filename === ":memory:") {
|
|
105
|
-
return filename;
|
|
106
|
-
}
|
|
107
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
108
|
-
const pluginRoot = path.resolve(__dirname, "..", "..", "..");
|
|
109
|
-
const dataDir = path.join(pluginRoot, "data");
|
|
110
|
-
if (!fs.existsSync(dataDir)) {
|
|
111
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
112
|
-
}
|
|
113
|
-
return path.join(dataDir, filename);
|
|
114
|
-
}
|
|
115
|
-
function bootstrapStateSchema(sqlite) {
|
|
116
|
-
sqlite.exec(STATE_SCHEMA_SQL);
|
|
117
|
-
applyStateSchemaMigrations(sqlite);
|
|
118
|
-
}
|
|
119
|
-
function applyStateSchemaMigrations(sqlite) {
|
|
120
|
-
const migrations = [
|
|
121
|
-
"ALTER TABLE policy_records ADD COLUMN outreach_daily_budget INTEGER NOT NULL DEFAULT 2",
|
|
122
|
-
];
|
|
123
|
-
for (const sql of migrations) {
|
|
124
|
-
try {
|
|
125
|
-
sqlite.exec(sql);
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
/* duplicate column / already migrated */
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
export function createStateDatabase(filename = "state.db") {
|
|
133
|
-
const dbPath = resolveDbPath(filename);
|
|
134
|
-
const isMemory = filename === ":memory:";
|
|
135
|
-
let dbBuffer;
|
|
136
|
-
if (!isMemory && fs.existsSync(dbPath)) {
|
|
137
|
-
dbBuffer = fs.readFileSync(dbPath);
|
|
138
|
-
}
|
|
139
|
-
const sqlite = new SQL.Database(dbBuffer);
|
|
140
|
-
bootstrapStateSchema(sqlite);
|
|
141
|
-
const db = drizzle(sqlite, { schema });
|
|
142
|
-
return {
|
|
143
|
-
sqlite,
|
|
144
|
-
db,
|
|
145
|
-
schema,
|
|
146
|
-
close() {
|
|
147
|
-
if (!isMemory) {
|
|
148
|
-
const data = sqlite.export();
|
|
149
|
-
fs.writeFileSync(dbPath, Buffer.from(data));
|
|
150
|
-
}
|
|
151
|
-
sqlite.close();
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
}
|
|
102
|
+
`;
|
|
103
|
+
function resolveDbPath(filename) {
|
|
104
|
+
if (path.isAbsolute(filename) || filename === ":memory:") {
|
|
105
|
+
return filename;
|
|
106
|
+
}
|
|
107
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
108
|
+
const pluginRoot = path.resolve(__dirname, "..", "..", "..");
|
|
109
|
+
const dataDir = path.join(pluginRoot, "data");
|
|
110
|
+
if (!fs.existsSync(dataDir)) {
|
|
111
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
return path.join(dataDir, filename);
|
|
114
|
+
}
|
|
115
|
+
function bootstrapStateSchema(sqlite) {
|
|
116
|
+
sqlite.exec(STATE_SCHEMA_SQL);
|
|
117
|
+
applyStateSchemaMigrations(sqlite);
|
|
118
|
+
}
|
|
119
|
+
function applyStateSchemaMigrations(sqlite) {
|
|
120
|
+
const migrations = [
|
|
121
|
+
"ALTER TABLE policy_records ADD COLUMN outreach_daily_budget INTEGER NOT NULL DEFAULT 2",
|
|
122
|
+
];
|
|
123
|
+
for (const sql of migrations) {
|
|
124
|
+
try {
|
|
125
|
+
sqlite.exec(sql);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
/* duplicate column / already migrated */
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
export function createStateDatabase(filename = "state.db") {
|
|
133
|
+
const dbPath = resolveDbPath(filename);
|
|
134
|
+
const isMemory = filename === ":memory:";
|
|
135
|
+
let dbBuffer;
|
|
136
|
+
if (!isMemory && fs.existsSync(dbPath)) {
|
|
137
|
+
dbBuffer = fs.readFileSync(dbPath);
|
|
138
|
+
}
|
|
139
|
+
const sqlite = new SQL.Database(dbBuffer);
|
|
140
|
+
bootstrapStateSchema(sqlite);
|
|
141
|
+
const db = drizzle(sqlite, { schema });
|
|
142
|
+
return {
|
|
143
|
+
sqlite,
|
|
144
|
+
db,
|
|
145
|
+
schema,
|
|
146
|
+
close() {
|
|
147
|
+
if (!isMemory) {
|
|
148
|
+
const data = sqlite.export();
|
|
149
|
+
fs.writeFileSync(dbPath, Buffer.from(data));
|
|
150
|
+
}
|
|
151
|
+
sqlite.close();
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|