@haaaiawd/second-nature 0.1.17 → 0.1.18
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 +58 -54
- package/runtime/cli/ops/heartbeat-surface.d.ts +38 -35
- package/runtime/cli/ops/heartbeat-surface.js +73 -71
- package/runtime/cli/ops/ops-router.d.ts +19 -16
- package/runtime/cli/ops/ops-router.js +89 -87
- 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 +19 -10
- package/runtime/cli/ops/workspace-heartbeat-runner.js +39 -26
- package/runtime/cli/read-models/index.d.ts +29 -29
- package/runtime/cli/read-models/index.js +256 -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 +79 -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 +139 -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 +124 -124
- 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 -19
- package/runtime/observability/index.js +19 -18
- 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 -0
- package/runtime/observability/services/runtime-decision-recorder.js +94 -0
- 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 +154 -154
- 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 -80
|
@@ -1,154 +1,154 @@
|
|
|
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
|
-
const STATE_SCHEMA_SQL = `
|
|
10
|
-
CREATE TABLE IF NOT EXISTS credential_records (
|
|
11
|
-
platform_id TEXT PRIMARY KEY,
|
|
12
|
-
credential_type TEXT NOT NULL,
|
|
13
|
-
encrypted_value TEXT NOT NULL,
|
|
14
|
-
status TEXT NOT NULL,
|
|
15
|
-
verification_code TEXT,
|
|
16
|
-
challenge_text TEXT,
|
|
17
|
-
expires_at TEXT,
|
|
18
|
-
attempts_remaining INTEGER,
|
|
19
|
-
updated_at TEXT NOT NULL
|
|
20
|
-
);
|
|
21
|
-
CREATE TABLE IF NOT EXISTS policy_records (
|
|
22
|
-
platform_id TEXT PRIMARY KEY,
|
|
23
|
-
social_daily_limit INTEGER NOT NULL,
|
|
24
|
-
quiet_enabled INTEGER NOT NULL,
|
|
25
|
-
outreach_daily_budget INTEGER NOT NULL DEFAULT 2,
|
|
26
|
-
updated_at TEXT NOT NULL
|
|
27
|
-
);
|
|
28
|
-
CREATE TABLE IF NOT EXISTS life_evidence_index (
|
|
29
|
-
id TEXT PRIMARY KEY,
|
|
30
|
-
timestamp TEXT NOT NULL,
|
|
31
|
-
evidence_type TEXT NOT NULL,
|
|
32
|
-
sensitivity TEXT NOT NULL,
|
|
33
|
-
producer TEXT NOT NULL,
|
|
34
|
-
artifact_path TEXT NOT NULL,
|
|
35
|
-
platform_id TEXT,
|
|
36
|
-
source_refs_json TEXT NOT NULL
|
|
37
|
-
);
|
|
38
|
-
CREATE TABLE IF NOT EXISTS asset_registry (
|
|
39
|
-
id TEXT PRIMARY KEY,
|
|
40
|
-
kind TEXT NOT NULL,
|
|
41
|
-
path TEXT NOT NULL,
|
|
42
|
-
hash TEXT NOT NULL,
|
|
43
|
-
version INTEGER NOT NULL DEFAULT 1,
|
|
44
|
-
layer TEXT NOT NULL,
|
|
45
|
-
last_indexed_at TEXT NOT NULL
|
|
46
|
-
);
|
|
47
|
-
CREATE UNIQUE INDEX IF NOT EXISTS asset_registry_path_idx ON asset_registry(path);
|
|
48
|
-
CREATE TABLE IF NOT EXISTS intent_commit_records (
|
|
49
|
-
id TEXT PRIMARY KEY,
|
|
50
|
-
intent_id TEXT NOT NULL,
|
|
51
|
-
decision_id TEXT NOT NULL,
|
|
52
|
-
checkpoint_id TEXT,
|
|
53
|
-
state TEXT NOT NULL,
|
|
54
|
-
outcome_ref TEXT,
|
|
55
|
-
metadata_json TEXT,
|
|
56
|
-
updated_at TEXT NOT NULL
|
|
57
|
-
);
|
|
58
|
-
CREATE TABLE IF NOT EXISTS proposal_records (
|
|
59
|
-
id TEXT PRIMARY KEY,
|
|
60
|
-
target_asset_id TEXT NOT NULL,
|
|
61
|
-
before_hash TEXT,
|
|
62
|
-
after_hash TEXT,
|
|
63
|
-
status TEXT NOT NULL,
|
|
64
|
-
proposed_diff TEXT NOT NULL,
|
|
65
|
-
reason TEXT NOT NULL,
|
|
66
|
-
supporting_sources TEXT NOT NULL,
|
|
67
|
-
confidence REAL NOT NULL,
|
|
68
|
-
created_at TEXT NOT NULL,
|
|
69
|
-
applied_at TEXT
|
|
70
|
-
);
|
|
71
|
-
CREATE TABLE IF NOT EXISTS provenance_edges (
|
|
72
|
-
id TEXT PRIMARY KEY,
|
|
73
|
-
from_id TEXT NOT NULL,
|
|
74
|
-
to_id TEXT NOT NULL,
|
|
75
|
-
kind TEXT NOT NULL,
|
|
76
|
-
created_at TEXT NOT NULL
|
|
77
|
-
);
|
|
78
|
-
CREATE TABLE IF NOT EXISTS delivery_attempts (
|
|
79
|
-
attempt_id TEXT PRIMARY KEY,
|
|
80
|
-
decision_id TEXT NOT NULL,
|
|
81
|
-
target TEXT,
|
|
82
|
-
channel TEXT,
|
|
83
|
-
status TEXT NOT NULL,
|
|
84
|
-
message_id TEXT,
|
|
85
|
-
host_proof_ref_json TEXT,
|
|
86
|
-
error_class TEXT,
|
|
87
|
-
fallback_ref TEXT,
|
|
88
|
-
created_at TEXT NOT NULL
|
|
89
|
-
);
|
|
90
|
-
CREATE INDEX IF NOT EXISTS delivery_attempt_decision_idx ON delivery_attempts(decision_id);
|
|
91
|
-
CREATE TABLE IF NOT EXISTS operator_fallback_artifacts (
|
|
92
|
-
fallback_ref TEXT PRIMARY KEY,
|
|
93
|
-
decision_id TEXT NOT NULL,
|
|
94
|
-
status TEXT NOT NULL,
|
|
95
|
-
reason TEXT NOT NULL,
|
|
96
|
-
source_refs_json TEXT NOT NULL,
|
|
97
|
-
candidate_message TEXT,
|
|
98
|
-
next_step TEXT NOT NULL,
|
|
99
|
-
created_at TEXT NOT NULL
|
|
100
|
-
);
|
|
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
|
-
}
|
|
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
|
+
const STATE_SCHEMA_SQL = `
|
|
10
|
+
CREATE TABLE IF NOT EXISTS credential_records (
|
|
11
|
+
platform_id TEXT PRIMARY KEY,
|
|
12
|
+
credential_type TEXT NOT NULL,
|
|
13
|
+
encrypted_value TEXT NOT NULL,
|
|
14
|
+
status TEXT NOT NULL,
|
|
15
|
+
verification_code TEXT,
|
|
16
|
+
challenge_text TEXT,
|
|
17
|
+
expires_at TEXT,
|
|
18
|
+
attempts_remaining INTEGER,
|
|
19
|
+
updated_at TEXT NOT NULL
|
|
20
|
+
);
|
|
21
|
+
CREATE TABLE IF NOT EXISTS policy_records (
|
|
22
|
+
platform_id TEXT PRIMARY KEY,
|
|
23
|
+
social_daily_limit INTEGER NOT NULL,
|
|
24
|
+
quiet_enabled INTEGER NOT NULL,
|
|
25
|
+
outreach_daily_budget INTEGER NOT NULL DEFAULT 2,
|
|
26
|
+
updated_at TEXT NOT NULL
|
|
27
|
+
);
|
|
28
|
+
CREATE TABLE IF NOT EXISTS life_evidence_index (
|
|
29
|
+
id TEXT PRIMARY KEY,
|
|
30
|
+
timestamp TEXT NOT NULL,
|
|
31
|
+
evidence_type TEXT NOT NULL,
|
|
32
|
+
sensitivity TEXT NOT NULL,
|
|
33
|
+
producer TEXT NOT NULL,
|
|
34
|
+
artifact_path TEXT NOT NULL,
|
|
35
|
+
platform_id TEXT,
|
|
36
|
+
source_refs_json TEXT NOT NULL
|
|
37
|
+
);
|
|
38
|
+
CREATE TABLE IF NOT EXISTS asset_registry (
|
|
39
|
+
id TEXT PRIMARY KEY,
|
|
40
|
+
kind TEXT NOT NULL,
|
|
41
|
+
path TEXT NOT NULL,
|
|
42
|
+
hash TEXT NOT NULL,
|
|
43
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
44
|
+
layer TEXT NOT NULL,
|
|
45
|
+
last_indexed_at TEXT NOT NULL
|
|
46
|
+
);
|
|
47
|
+
CREATE UNIQUE INDEX IF NOT EXISTS asset_registry_path_idx ON asset_registry(path);
|
|
48
|
+
CREATE TABLE IF NOT EXISTS intent_commit_records (
|
|
49
|
+
id TEXT PRIMARY KEY,
|
|
50
|
+
intent_id TEXT NOT NULL,
|
|
51
|
+
decision_id TEXT NOT NULL,
|
|
52
|
+
checkpoint_id TEXT,
|
|
53
|
+
state TEXT NOT NULL,
|
|
54
|
+
outcome_ref TEXT,
|
|
55
|
+
metadata_json TEXT,
|
|
56
|
+
updated_at TEXT NOT NULL
|
|
57
|
+
);
|
|
58
|
+
CREATE TABLE IF NOT EXISTS proposal_records (
|
|
59
|
+
id TEXT PRIMARY KEY,
|
|
60
|
+
target_asset_id TEXT NOT NULL,
|
|
61
|
+
before_hash TEXT,
|
|
62
|
+
after_hash TEXT,
|
|
63
|
+
status TEXT NOT NULL,
|
|
64
|
+
proposed_diff TEXT NOT NULL,
|
|
65
|
+
reason TEXT NOT NULL,
|
|
66
|
+
supporting_sources TEXT NOT NULL,
|
|
67
|
+
confidence REAL NOT NULL,
|
|
68
|
+
created_at TEXT NOT NULL,
|
|
69
|
+
applied_at TEXT
|
|
70
|
+
);
|
|
71
|
+
CREATE TABLE IF NOT EXISTS provenance_edges (
|
|
72
|
+
id TEXT PRIMARY KEY,
|
|
73
|
+
from_id TEXT NOT NULL,
|
|
74
|
+
to_id TEXT NOT NULL,
|
|
75
|
+
kind TEXT NOT NULL,
|
|
76
|
+
created_at TEXT NOT NULL
|
|
77
|
+
);
|
|
78
|
+
CREATE TABLE IF NOT EXISTS delivery_attempts (
|
|
79
|
+
attempt_id TEXT PRIMARY KEY,
|
|
80
|
+
decision_id TEXT NOT NULL,
|
|
81
|
+
target TEXT,
|
|
82
|
+
channel TEXT,
|
|
83
|
+
status TEXT NOT NULL,
|
|
84
|
+
message_id TEXT,
|
|
85
|
+
host_proof_ref_json TEXT,
|
|
86
|
+
error_class TEXT,
|
|
87
|
+
fallback_ref TEXT,
|
|
88
|
+
created_at TEXT NOT NULL
|
|
89
|
+
);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS delivery_attempt_decision_idx ON delivery_attempts(decision_id);
|
|
91
|
+
CREATE TABLE IF NOT EXISTS operator_fallback_artifacts (
|
|
92
|
+
fallback_ref TEXT PRIMARY KEY,
|
|
93
|
+
decision_id TEXT NOT NULL,
|
|
94
|
+
status TEXT NOT NULL,
|
|
95
|
+
reason TEXT NOT NULL,
|
|
96
|
+
source_refs_json TEXT NOT NULL,
|
|
97
|
+
candidate_message TEXT,
|
|
98
|
+
next_step TEXT NOT NULL,
|
|
99
|
+
created_at TEXT NOT NULL
|
|
100
|
+
);
|
|
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
|
+
}
|