@rizzmyrobot/mochi-cli 0.0.4 → 0.0.5
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/README.md +17 -14
- package/dist/index.js +12074 -753
- package/migrations/0001_decision_traces.sql +36 -0
- package/migrations/0001_gateway_runs.sql +75 -0
- package/migrations/0001_memory_records.sql +23 -0
- package/migrations/0001_telegram_callback_state.sql +18 -0
- package/migrations/0001_wake_events.sql +50 -0
- package/migrations/0002_gateway_tool_invocations.sql +96 -0
- package/migrations/0002_telegram_delivery_records.sql +26 -0
- package/migrations/0002_wake_job_leases.sql +19 -0
- package/migrations/0003_contract_trust.sql +44 -0
- package/migrations/0003_telegram_bot_runtime_offsets.sql +5 -0
- package/migrations/0004_update_ledger.sql +46 -0
- package/package.json +2 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS decision_traces (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
trace_id TEXT NOT NULL UNIQUE,
|
|
4
|
+
game_id TEXT NOT NULL,
|
|
5
|
+
agent_id TEXT NOT NULL,
|
|
6
|
+
wake_event_ref TEXT,
|
|
7
|
+
wake_idempotency_key TEXT,
|
|
8
|
+
policy_route TEXT NOT NULL,
|
|
9
|
+
model_route TEXT NOT NULL,
|
|
10
|
+
submission_kind TEXT NOT NULL,
|
|
11
|
+
outcome_status TEXT NOT NULL,
|
|
12
|
+
bug_signature_id TEXT,
|
|
13
|
+
bug_signature_json TEXT,
|
|
14
|
+
bug_error_class TEXT,
|
|
15
|
+
bug_adapter_id TEXT,
|
|
16
|
+
bug_contract_version TEXT,
|
|
17
|
+
bug_action_id TEXT,
|
|
18
|
+
bug_observation_hash TEXT,
|
|
19
|
+
bug_result_hash TEXT,
|
|
20
|
+
bug_symptom_hash TEXT,
|
|
21
|
+
trace_json TEXT NOT NULL,
|
|
22
|
+
created_at TEXT NOT NULL,
|
|
23
|
+
updated_at TEXT NOT NULL
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_decision_traces_game_created
|
|
27
|
+
ON decision_traces (game_id, created_at);
|
|
28
|
+
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_decision_traces_wake_event_ref
|
|
30
|
+
ON decision_traces (wake_event_ref);
|
|
31
|
+
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_decision_traces_bug_signature
|
|
33
|
+
ON decision_traces (bug_signature_id, created_at);
|
|
34
|
+
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_decision_traces_bug_game_signature
|
|
36
|
+
ON decision_traces (game_id, bug_signature_id, created_at);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS mochi_gateway_migrations (
|
|
2
|
+
version INTEGER PRIMARY KEY,
|
|
3
|
+
name TEXT NOT NULL,
|
|
4
|
+
applied_at TEXT NOT NULL
|
|
5
|
+
);
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS gateway_runs (
|
|
8
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
run_id TEXT NOT NULL UNIQUE,
|
|
10
|
+
gateway_id TEXT NOT NULL,
|
|
11
|
+
game_id TEXT NOT NULL,
|
|
12
|
+
agent_id TEXT NOT NULL,
|
|
13
|
+
session_id TEXT NOT NULL,
|
|
14
|
+
wake_event_id INTEGER,
|
|
15
|
+
wake_idempotency_key TEXT,
|
|
16
|
+
lock_target TEXT NOT NULL,
|
|
17
|
+
current_state TEXT NOT NULL CHECK (
|
|
18
|
+
current_state IN (
|
|
19
|
+
'queued',
|
|
20
|
+
'loading_context',
|
|
21
|
+
'policy_check',
|
|
22
|
+
'awaiting_human',
|
|
23
|
+
'ready_to_submit',
|
|
24
|
+
'submitted',
|
|
25
|
+
'completed',
|
|
26
|
+
'no_op',
|
|
27
|
+
'blocked',
|
|
28
|
+
'failed',
|
|
29
|
+
'cancelled'
|
|
30
|
+
)
|
|
31
|
+
),
|
|
32
|
+
trace_ref TEXT,
|
|
33
|
+
created_at TEXT NOT NULL,
|
|
34
|
+
updated_at TEXT NOT NULL,
|
|
35
|
+
completed_at TEXT
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CREATE INDEX IF NOT EXISTS gateway_runs_game_updated_idx
|
|
39
|
+
ON gateway_runs(game_id, updated_at);
|
|
40
|
+
|
|
41
|
+
CREATE INDEX IF NOT EXISTS gateway_runs_session_updated_idx
|
|
42
|
+
ON gateway_runs(session_id, updated_at);
|
|
43
|
+
|
|
44
|
+
CREATE INDEX IF NOT EXISTS gateway_runs_state_updated_idx
|
|
45
|
+
ON gateway_runs(current_state, updated_at);
|
|
46
|
+
|
|
47
|
+
CREATE UNIQUE INDEX IF NOT EXISTS gateway_runs_active_lock_idx
|
|
48
|
+
ON gateway_runs(lock_target)
|
|
49
|
+
WHERE current_state NOT IN ('completed', 'no_op', 'blocked', 'failed', 'cancelled');
|
|
50
|
+
|
|
51
|
+
CREATE TABLE IF NOT EXISTS gateway_run_events (
|
|
52
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
53
|
+
gateway_run_id INTEGER NOT NULL REFERENCES gateway_runs(id) ON DELETE RESTRICT,
|
|
54
|
+
event_name TEXT NOT NULL,
|
|
55
|
+
from_state TEXT,
|
|
56
|
+
to_state TEXT NOT NULL,
|
|
57
|
+
mapped_run_event_type TEXT NOT NULL,
|
|
58
|
+
summary TEXT NOT NULL,
|
|
59
|
+
redacted_payload_json TEXT NOT NULL,
|
|
60
|
+
trace_ref TEXT,
|
|
61
|
+
public_safe INTEGER NOT NULL CHECK (public_safe = 1),
|
|
62
|
+
hidden_mechanics_included INTEGER NOT NULL CHECK (hidden_mechanics_included = 0),
|
|
63
|
+
plaintext_credentials_included INTEGER NOT NULL CHECK (plaintext_credentials_included = 0),
|
|
64
|
+
duplicate_trace_store INTEGER NOT NULL CHECK (duplicate_trace_store = 0),
|
|
65
|
+
created_at TEXT NOT NULL
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE INDEX IF NOT EXISTS gateway_run_events_run_idx
|
|
69
|
+
ON gateway_run_events(gateway_run_id, id);
|
|
70
|
+
|
|
71
|
+
CREATE INDEX IF NOT EXISTS gateway_run_events_created_idx
|
|
72
|
+
ON gateway_run_events(created_at);
|
|
73
|
+
|
|
74
|
+
INSERT OR IGNORE INTO mochi_gateway_migrations(version, name, applied_at)
|
|
75
|
+
VALUES (1, 'gateway_runs', strftime('%Y-%m-%dT%H:%M:%fZ', 'now'));
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS memory_records (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
memory_id TEXT NOT NULL UNIQUE,
|
|
4
|
+
scope TEXT NOT NULL CHECK (scope IN ('global', 'game')),
|
|
5
|
+
game_id TEXT,
|
|
6
|
+
category TEXT NOT NULL CHECK (
|
|
7
|
+
category IN ('reflections', 'decisions', 'relationships', 'lessons')
|
|
8
|
+
),
|
|
9
|
+
title TEXT NOT NULL,
|
|
10
|
+
body TEXT NOT NULL,
|
|
11
|
+
source TEXT NOT NULL CHECK (source IN ('manual', 'coaching', 'debrief', 'import', 'system')),
|
|
12
|
+
game_truth INTEGER NOT NULL DEFAULT 0 CHECK (game_truth = 0),
|
|
13
|
+
created_at TEXT NOT NULL,
|
|
14
|
+
updated_at TEXT NOT NULL,
|
|
15
|
+
archived_at TEXT,
|
|
16
|
+
CHECK ((scope = 'game' AND game_id IS NOT NULL) OR (scope = 'global' AND game_id IS NULL))
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_memory_records_category
|
|
20
|
+
ON memory_records (category, archived_at);
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_memory_records_scope
|
|
23
|
+
ON memory_records (scope, game_id);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS telegram_callback_states (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
callback_id TEXT NOT NULL UNIQUE,
|
|
4
|
+
owner_id TEXT NOT NULL,
|
|
5
|
+
telegram_user_id TEXT NOT NULL,
|
|
6
|
+
prompt_id TEXT NOT NULL,
|
|
7
|
+
action TEXT NOT NULL CHECK (action IN ('approve', 'deny', 'noop', 'takeover')),
|
|
8
|
+
status TEXT NOT NULL CHECK (status IN ('pending', 'consumed', 'expired')),
|
|
9
|
+
created_at TEXT NOT NULL,
|
|
10
|
+
expires_at TEXT NOT NULL,
|
|
11
|
+
consumed_at TEXT
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
CREATE INDEX IF NOT EXISTS idx_telegram_callback_states_owner
|
|
15
|
+
ON telegram_callback_states (owner_id, telegram_user_id, status);
|
|
16
|
+
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_telegram_callback_states_expiry
|
|
18
|
+
ON telegram_callback_states (status, expires_at);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS mochi_storage_migrations (
|
|
2
|
+
version INTEGER PRIMARY KEY,
|
|
3
|
+
name TEXT NOT NULL,
|
|
4
|
+
applied_at TEXT NOT NULL
|
|
5
|
+
);
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS wake_events (
|
|
8
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
game_id TEXT NOT NULL,
|
|
10
|
+
agent_id TEXT NOT NULL,
|
|
11
|
+
reason_id TEXT NOT NULL,
|
|
12
|
+
scope_type TEXT NOT NULL,
|
|
13
|
+
scope_id TEXT,
|
|
14
|
+
deadline TEXT NOT NULL,
|
|
15
|
+
nonce TEXT NOT NULL,
|
|
16
|
+
idempotency_key TEXT NOT NULL,
|
|
17
|
+
key_id TEXT NOT NULL,
|
|
18
|
+
signed_at TEXT NOT NULL,
|
|
19
|
+
body_digest TEXT NOT NULL,
|
|
20
|
+
event_json TEXT NOT NULL,
|
|
21
|
+
received_at TEXT NOT NULL
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
CREATE UNIQUE INDEX IF NOT EXISTS wake_events_game_nonce_idx
|
|
25
|
+
ON wake_events(game_id, nonce);
|
|
26
|
+
|
|
27
|
+
CREATE UNIQUE INDEX IF NOT EXISTS wake_events_game_idempotency_idx
|
|
28
|
+
ON wake_events(game_id, idempotency_key);
|
|
29
|
+
|
|
30
|
+
CREATE INDEX IF NOT EXISTS wake_events_deadline_idx
|
|
31
|
+
ON wake_events(deadline);
|
|
32
|
+
|
|
33
|
+
CREATE TABLE IF NOT EXISTS wake_event_status_transitions (
|
|
34
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
35
|
+
wake_event_id INTEGER NOT NULL REFERENCES wake_events(id) ON DELETE RESTRICT,
|
|
36
|
+
from_status TEXT CHECK (
|
|
37
|
+
from_status IS NULL OR from_status IN ('pending', 'processing', 'completed', 'failed', 'cancelled')
|
|
38
|
+
),
|
|
39
|
+
to_status TEXT NOT NULL CHECK (
|
|
40
|
+
to_status IN ('pending', 'processing', 'completed', 'failed', 'cancelled')
|
|
41
|
+
),
|
|
42
|
+
reason TEXT,
|
|
43
|
+
created_at TEXT NOT NULL
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE INDEX IF NOT EXISTS wake_event_status_transitions_event_idx
|
|
47
|
+
ON wake_event_status_transitions(wake_event_id, id);
|
|
48
|
+
|
|
49
|
+
INSERT OR IGNORE INTO mochi_storage_migrations(version, name, applied_at)
|
|
50
|
+
VALUES (1, 'wake_events', strftime('%Y-%m-%dT%H:%M:%fZ', 'now'));
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS mochi_gateway_migrations (
|
|
2
|
+
version INTEGER PRIMARY KEY,
|
|
3
|
+
name TEXT NOT NULL,
|
|
4
|
+
applied_at TEXT NOT NULL
|
|
5
|
+
);
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS gateway_tool_invocations (
|
|
8
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
invocation_id TEXT NOT NULL UNIQUE,
|
|
10
|
+
tool_call_id TEXT NOT NULL,
|
|
11
|
+
run_id TEXT NOT NULL,
|
|
12
|
+
game_id TEXT NOT NULL,
|
|
13
|
+
session_id TEXT NOT NULL,
|
|
14
|
+
caller TEXT NOT NULL CHECK (
|
|
15
|
+
caller IN ('model', 'cli', 'dashboard', 'telegram', 'test')
|
|
16
|
+
),
|
|
17
|
+
tool_id TEXT NOT NULL,
|
|
18
|
+
adapter_id TEXT,
|
|
19
|
+
tool_name TEXT,
|
|
20
|
+
tool_class TEXT NOT NULL CHECK (
|
|
21
|
+
tool_class IN (
|
|
22
|
+
'official_game_read',
|
|
23
|
+
'official_game_submit',
|
|
24
|
+
'issue_report',
|
|
25
|
+
'maintenance',
|
|
26
|
+
'skill_strategy_proposal',
|
|
27
|
+
'batch_readonly',
|
|
28
|
+
'forbidden'
|
|
29
|
+
)
|
|
30
|
+
),
|
|
31
|
+
effect TEXT,
|
|
32
|
+
public_risk TEXT,
|
|
33
|
+
game_risk_json TEXT NOT NULL,
|
|
34
|
+
schema_digest TEXT,
|
|
35
|
+
schema_ref TEXT,
|
|
36
|
+
contract_ref TEXT NOT NULL,
|
|
37
|
+
affordance_refs_json TEXT NOT NULL,
|
|
38
|
+
approval_state TEXT NOT NULL CHECK (
|
|
39
|
+
approval_state IN (
|
|
40
|
+
'not_required',
|
|
41
|
+
'approval_required',
|
|
42
|
+
'blocked',
|
|
43
|
+
'pending',
|
|
44
|
+
'approved',
|
|
45
|
+
'rejected'
|
|
46
|
+
)
|
|
47
|
+
),
|
|
48
|
+
guard_decisions_json TEXT NOT NULL,
|
|
49
|
+
result_status TEXT NOT NULL CHECK (
|
|
50
|
+
result_status IN (
|
|
51
|
+
'described',
|
|
52
|
+
'prepared',
|
|
53
|
+
'blocked',
|
|
54
|
+
'approval_requested',
|
|
55
|
+
'approved',
|
|
56
|
+
'executed_read',
|
|
57
|
+
'proposed_intent',
|
|
58
|
+
'submitted_intent',
|
|
59
|
+
'submitted_no_op',
|
|
60
|
+
'receipt_accepted',
|
|
61
|
+
'receipt_rejected',
|
|
62
|
+
'timed_out',
|
|
63
|
+
'cancelled',
|
|
64
|
+
'loop_blocked',
|
|
65
|
+
'failed'
|
|
66
|
+
)
|
|
67
|
+
),
|
|
68
|
+
result_ref TEXT,
|
|
69
|
+
trace_ref TEXT,
|
|
70
|
+
public_summary TEXT NOT NULL,
|
|
71
|
+
redacted_payload_json TEXT NOT NULL,
|
|
72
|
+
public_safe INTEGER NOT NULL CHECK (public_safe = 1),
|
|
73
|
+
hidden_mechanics_disclosed INTEGER NOT NULL CHECK (hidden_mechanics_disclosed = 0),
|
|
74
|
+
pii_disclosed INTEGER NOT NULL CHECK (pii_disclosed = 0),
|
|
75
|
+
plaintext_credentials_included INTEGER NOT NULL CHECK (plaintext_credentials_included = 0),
|
|
76
|
+
raw_payload_stored INTEGER NOT NULL CHECK (raw_payload_stored = 0),
|
|
77
|
+
created_at TEXT NOT NULL
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
CREATE INDEX IF NOT EXISTS gateway_tool_invocations_run_idx
|
|
81
|
+
ON gateway_tool_invocations(run_id, id);
|
|
82
|
+
|
|
83
|
+
CREATE INDEX IF NOT EXISTS gateway_tool_invocations_game_session_idx
|
|
84
|
+
ON gateway_tool_invocations(game_id, session_id, created_at);
|
|
85
|
+
|
|
86
|
+
CREATE INDEX IF NOT EXISTS gateway_tool_invocations_tool_call_idx
|
|
87
|
+
ON gateway_tool_invocations(tool_call_id, id);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS gateway_tool_invocations_trace_idx
|
|
90
|
+
ON gateway_tool_invocations(trace_ref, id);
|
|
91
|
+
|
|
92
|
+
CREATE INDEX IF NOT EXISTS gateway_tool_invocations_status_idx
|
|
93
|
+
ON gateway_tool_invocations(result_status, created_at);
|
|
94
|
+
|
|
95
|
+
INSERT OR IGNORE INTO mochi_gateway_migrations(version, name, applied_at)
|
|
96
|
+
VALUES (2, 'gateway_tool_invocations', strftime('%Y-%m-%dT%H:%M:%fZ', 'now'));
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS telegram_delivery_records (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
delivery_id TEXT NOT NULL UNIQUE,
|
|
4
|
+
idempotency_key TEXT NOT NULL UNIQUE,
|
|
5
|
+
owner_id TEXT NOT NULL,
|
|
6
|
+
telegram_user_id TEXT NOT NULL,
|
|
7
|
+
chat_id TEXT NOT NULL,
|
|
8
|
+
message_kind TEXT NOT NULL,
|
|
9
|
+
sender_mode TEXT NOT NULL CHECK (sender_mode IN ('fake', 'live')),
|
|
10
|
+
status TEXT NOT NULL CHECK (status IN ('sent', 'failed')),
|
|
11
|
+
text_preview TEXT NOT NULL,
|
|
12
|
+
text_digest TEXT NOT NULL,
|
|
13
|
+
provider_message_id TEXT,
|
|
14
|
+
error_code TEXT,
|
|
15
|
+
error_message TEXT,
|
|
16
|
+
metadata_json TEXT,
|
|
17
|
+
created_at TEXT NOT NULL,
|
|
18
|
+
updated_at TEXT NOT NULL,
|
|
19
|
+
completed_at TEXT
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_telegram_delivery_records_owner
|
|
23
|
+
ON telegram_delivery_records (owner_id, telegram_user_id, created_at);
|
|
24
|
+
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_telegram_delivery_records_status
|
|
26
|
+
ON telegram_delivery_records (sender_mode, status, created_at);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS wake_event_job_leases (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
wake_event_id INTEGER NOT NULL REFERENCES wake_events(id) ON DELETE RESTRICT,
|
|
4
|
+
worker_id TEXT NOT NULL,
|
|
5
|
+
attempt INTEGER NOT NULL,
|
|
6
|
+
leased_at TEXT NOT NULL,
|
|
7
|
+
lease_expires_at TEXT NOT NULL,
|
|
8
|
+
completed_at TEXT,
|
|
9
|
+
result TEXT CHECK (result IS NULL OR result IN ('completed', 'retry', 'failed'))
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
CREATE INDEX IF NOT EXISTS wake_event_job_leases_event_idx
|
|
13
|
+
ON wake_event_job_leases(wake_event_id, id);
|
|
14
|
+
|
|
15
|
+
CREATE INDEX IF NOT EXISTS wake_event_job_leases_expiry_idx
|
|
16
|
+
ON wake_event_job_leases(lease_expires_at);
|
|
17
|
+
|
|
18
|
+
INSERT OR IGNORE INTO mochi_storage_migrations(version, name, applied_at)
|
|
19
|
+
VALUES (2, 'wake_job_leases', strftime('%Y-%m-%dT%H:%M:%fZ', 'now'));
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS trusted_contract_snapshots (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
game_id TEXT NOT NULL,
|
|
4
|
+
source_kind TEXT NOT NULL CHECK (source_kind IN ('file', 'url')),
|
|
5
|
+
source_location TEXT NOT NULL,
|
|
6
|
+
fetched_at TEXT NOT NULL,
|
|
7
|
+
contract_digest TEXT NOT NULL,
|
|
8
|
+
contract_json TEXT NOT NULL,
|
|
9
|
+
signature_json TEXT NOT NULL,
|
|
10
|
+
created_at TEXT NOT NULL
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
CREATE INDEX IF NOT EXISTS idx_trusted_contract_snapshots_game_created
|
|
14
|
+
ON trusted_contract_snapshots (game_id, id DESC);
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS contract_quarantine_events (
|
|
17
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
18
|
+
game_id TEXT NOT NULL,
|
|
19
|
+
trusted_snapshot_id INTEGER NOT NULL REFERENCES trusted_contract_snapshots(id),
|
|
20
|
+
source_kind TEXT NOT NULL CHECK (source_kind IN ('file', 'url')),
|
|
21
|
+
source_location TEXT NOT NULL,
|
|
22
|
+
observed_digest TEXT NOT NULL,
|
|
23
|
+
trusted_digest TEXT NOT NULL,
|
|
24
|
+
reason TEXT NOT NULL CHECK (reason = 'local_override_quarantined'),
|
|
25
|
+
contract_json TEXT NOT NULL,
|
|
26
|
+
quarantined_at TEXT NOT NULL
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_contract_quarantine_events_game_created
|
|
30
|
+
ON contract_quarantine_events (game_id, id DESC);
|
|
31
|
+
|
|
32
|
+
CREATE TABLE IF NOT EXISTS contract_trust_rollback_events (
|
|
33
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
34
|
+
game_id TEXT NOT NULL,
|
|
35
|
+
trusted_snapshot_id INTEGER NOT NULL REFERENCES trusted_contract_snapshots(id),
|
|
36
|
+
target_path TEXT NOT NULL,
|
|
37
|
+
previous_digest TEXT,
|
|
38
|
+
restored_digest TEXT NOT NULL,
|
|
39
|
+
restored_at TEXT NOT NULL,
|
|
40
|
+
restored_by TEXT NOT NULL
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_contract_trust_rollback_events_game_created
|
|
44
|
+
ON contract_trust_rollback_events (game_id, id DESC);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS update_ledger_events (
|
|
2
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
update_id TEXT NOT NULL,
|
|
4
|
+
from_version TEXT NOT NULL,
|
|
5
|
+
to_version TEXT NOT NULL,
|
|
6
|
+
stage TEXT NOT NULL CHECK (
|
|
7
|
+
stage IN (
|
|
8
|
+
'check',
|
|
9
|
+
'plan',
|
|
10
|
+
'checkpoint',
|
|
11
|
+
'drain',
|
|
12
|
+
'migrate',
|
|
13
|
+
'apply',
|
|
14
|
+
'smoke',
|
|
15
|
+
'rollback',
|
|
16
|
+
'complete'
|
|
17
|
+
)
|
|
18
|
+
),
|
|
19
|
+
checkpoint_refs_json TEXT NOT NULL,
|
|
20
|
+
db_snapshot_refs_json TEXT NOT NULL,
|
|
21
|
+
package_refs_json TEXT NOT NULL,
|
|
22
|
+
outcome TEXT NOT NULL CHECK (
|
|
23
|
+
outcome IN (
|
|
24
|
+
'planned',
|
|
25
|
+
'blocked',
|
|
26
|
+
'manual_review',
|
|
27
|
+
'failed',
|
|
28
|
+
'succeeded'
|
|
29
|
+
)
|
|
30
|
+
),
|
|
31
|
+
summary TEXT NOT NULL,
|
|
32
|
+
redacted_warnings_json TEXT NOT NULL,
|
|
33
|
+
public_safe INTEGER NOT NULL CHECK (public_safe = 1),
|
|
34
|
+
hidden_mechanics_included INTEGER NOT NULL CHECK (hidden_mechanics_included = 0),
|
|
35
|
+
plaintext_credentials_included INTEGER NOT NULL CHECK (plaintext_credentials_included = 0),
|
|
36
|
+
created_at TEXT NOT NULL
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
CREATE INDEX IF NOT EXISTS update_ledger_events_update_idx
|
|
40
|
+
ON update_ledger_events(update_id, id);
|
|
41
|
+
|
|
42
|
+
CREATE INDEX IF NOT EXISTS update_ledger_events_stage_idx
|
|
43
|
+
ON update_ledger_events(stage, created_at);
|
|
44
|
+
|
|
45
|
+
INSERT OR IGNORE INTO mochi_storage_migrations(version, name, applied_at)
|
|
46
|
+
VALUES (4, 'update_ledger', strftime('%Y-%m-%dT%H:%M:%fZ', 'now'));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rizzmyrobot/mochi-cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"files": [
|
|
17
17
|
"bin/",
|
|
18
18
|
"dist/",
|
|
19
|
+
"migrations/",
|
|
19
20
|
"README.md",
|
|
20
21
|
"LICENSE"
|
|
21
22
|
]
|