@possumtech/rummy 0.2.7 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +12 -3
- package/EXCEPTIONS.md +46 -0
- package/PLUGINS.md +454 -197
- package/SPEC.md +284 -93
- package/migrations/001_initial_schema.sql +57 -70
- package/package.json +16 -10
- package/service.js +1 -1
- package/src/agent/AgentLoop.js +254 -70
- package/src/agent/ContextAssembler.js +18 -4
- package/src/agent/KnownStore.js +156 -23
- package/src/agent/ProjectAgent.js +5 -4
- package/src/agent/ResponseHealer.js +21 -1
- package/src/agent/TurnExecutor.js +393 -115
- package/src/agent/XmlParser.js +92 -39
- package/src/agent/known_checks.sql +5 -4
- package/src/agent/known_queries.sql +4 -3
- package/src/agent/known_store.sql +45 -15
- package/src/agent/loops.sql +63 -0
- package/src/agent/runs.sql +7 -7
- package/src/agent/schemes.sql +5 -2
- package/src/agent/tokens.js +6 -21
- package/src/agent/turns.sql +13 -4
- package/src/hooks/Hooks.js +18 -0
- package/src/hooks/PluginContext.js +14 -10
- package/src/hooks/RummyContext.js +30 -10
- package/src/hooks/ToolRegistry.js +83 -19
- package/src/llm/LlmProvider.js +27 -8
- package/src/llm/OpenAiClient.js +20 -0
- package/src/llm/OpenRouterClient.js +24 -2
- package/src/llm/XaiClient.js +47 -2
- package/src/plugins/ask_user/README.md +4 -4
- package/src/plugins/ask_user/ask_user.js +8 -7
- package/src/plugins/ask_user/ask_userDoc.js +29 -0
- package/src/plugins/budget/BudgetGuard.js +74 -0
- package/src/plugins/budget/README.md +43 -0
- package/src/plugins/budget/budget.js +79 -0
- package/src/plugins/cp/README.md +5 -4
- package/src/plugins/cp/cp.js +16 -12
- package/src/plugins/cp/cpDoc.js +29 -0
- package/src/plugins/current/README.md +4 -4
- package/src/plugins/current/current.js +12 -10
- package/src/plugins/engine/engine.sql +5 -10
- package/src/plugins/engine/turn_context.sql +13 -13
- package/src/plugins/env/README.md +3 -4
- package/src/plugins/env/env.js +8 -7
- package/src/plugins/env/envDoc.js +29 -0
- package/src/plugins/file/README.md +9 -12
- package/src/plugins/file/file.js +34 -45
- package/src/plugins/get/README.md +2 -2
- package/src/plugins/get/get.js +28 -11
- package/src/plugins/get/getDoc.js +41 -0
- package/src/plugins/hedberg/docs.md +0 -9
- package/src/plugins/hedberg/hedberg.js +4 -6
- package/src/plugins/hedberg/matcher.js +1 -1
- package/src/plugins/hedberg/normalize.js +28 -0
- package/src/plugins/hedberg/patterns.js +31 -33
- package/src/plugins/hedberg/sed.js +17 -10
- package/src/plugins/helpers.js +2 -2
- package/src/plugins/index.js +93 -28
- package/src/plugins/instructions/README.md +6 -2
- package/src/plugins/instructions/instructions.js +21 -5
- package/src/plugins/instructions/preamble.md +9 -5
- package/src/plugins/known/README.md +10 -7
- package/src/plugins/known/known.js +33 -23
- package/src/plugins/known/knownDoc.js +33 -0
- package/src/plugins/mv/README.md +5 -4
- package/src/plugins/mv/mv.js +16 -12
- package/src/plugins/mv/mvDoc.js +31 -0
- package/src/plugins/persona/persona.js +78 -0
- package/src/plugins/previous/README.md +2 -2
- package/src/plugins/previous/previous.js +12 -8
- package/src/plugins/progress/progress.js +44 -12
- package/src/plugins/prompt/README.md +5 -5
- package/src/plugins/prompt/prompt.js +23 -19
- package/src/plugins/rm/README.md +4 -4
- package/src/plugins/rm/rm.js +29 -12
- package/src/plugins/rm/rmDoc.js +30 -0
- package/src/plugins/rpc/README.md +15 -28
- package/src/plugins/rpc/rpc.js +63 -107
- package/src/plugins/set/README.md +13 -12
- package/src/plugins/set/set.js +82 -21
- package/src/plugins/set/setDoc.js +45 -0
- package/src/plugins/sh/README.md +4 -4
- package/src/plugins/sh/sh.js +8 -7
- package/src/plugins/sh/shDoc.js +29 -0
- package/src/plugins/{skills/skills.js → skill/skill.js} +12 -54
- package/src/plugins/summarize/README.md +6 -5
- package/src/plugins/summarize/summarize.js +7 -6
- package/src/plugins/summarize/summarizeDoc.js +33 -0
- package/src/plugins/telemetry/telemetry.js +20 -8
- package/src/plugins/think/README.md +20 -0
- package/src/plugins/think/think.js +5 -0
- package/src/plugins/unknown/README.md +5 -5
- package/src/plugins/unknown/unknown.js +11 -8
- package/src/plugins/unknown/unknownDoc.js +31 -0
- package/src/plugins/update/README.md +3 -8
- package/src/plugins/update/update.js +7 -6
- package/src/plugins/update/updateDoc.js +33 -0
- package/src/server/ClientConnection.js +3 -5
- package/src/server/RpcRegistry.js +52 -4
- package/src/sql/v_model_context.sql +31 -39
- package/src/sql/v_run_log.sql +3 -3
- package/src/agent/prompt_queue.sql +0 -39
- package/src/plugins/ask_user/docs.md +0 -2
- package/src/plugins/cp/docs.md +0 -2
- package/src/plugins/env/docs.md +0 -2
- package/src/plugins/get/docs.md +0 -6
- package/src/plugins/known/docs.md +0 -3
- package/src/plugins/mv/docs.md +0 -2
- package/src/plugins/rm/docs.md +0 -4
- package/src/plugins/set/docs.md +0 -4
- package/src/plugins/sh/docs.md +0 -2
- package/src/plugins/skills/README.md +0 -25
- package/src/plugins/store/README.md +0 -20
- package/src/plugins/store/docs.md +0 -5
- package/src/plugins/store/store.js +0 -52
- package/src/plugins/summarize/docs.md +0 -4
- package/src/plugins/unknown/docs.md +0 -5
- package/src/plugins/update/docs.md +0 -4
|
@@ -4,13 +4,12 @@ PRAGMA mmap_size = $mmap_size;
|
|
|
4
4
|
-- INIT: initial_schema
|
|
5
5
|
|
|
6
6
|
-- Scheme registry: single source of truth for all scheme metadata.
|
|
7
|
-
--
|
|
8
|
-
-- valid_states
|
|
7
|
+
-- Status codes are HTTP: 2xx success, 3xx redirect, 4xx model error, 5xx system error.
|
|
8
|
+
-- No valid_states — HTTP semantics are universal.
|
|
9
|
+
-- No fidelity — entries don't decide their own importance.
|
|
9
10
|
CREATE TABLE IF NOT EXISTS schemes (
|
|
10
11
|
name TEXT PRIMARY KEY
|
|
11
|
-
, fidelity TEXT NOT NULL CHECK (fidelity IN ('full', 'turn', 'null'))
|
|
12
12
|
, model_visible BOOLEAN NOT NULL DEFAULT 1
|
|
13
|
-
, valid_states TEXT NOT NULL
|
|
14
13
|
, category TEXT
|
|
15
14
|
);
|
|
16
15
|
|
|
@@ -37,15 +36,14 @@ CREATE TABLE IF NOT EXISTS models (
|
|
|
37
36
|
);
|
|
38
37
|
|
|
39
38
|
-- Runs: execution units belonging to a project.
|
|
40
|
-
--
|
|
39
|
+
-- Status uses HTTP codes: 100=queued, 102=running, 200=completed,
|
|
40
|
+
-- 202=proposed, 500=failed, 499=aborted.
|
|
41
41
|
CREATE TABLE IF NOT EXISTS runs (
|
|
42
42
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
43
43
|
, project_id INTEGER NOT NULL REFERENCES projects (id) ON DELETE CASCADE
|
|
44
44
|
, parent_run_id INTEGER REFERENCES runs (id) ON DELETE SET NULL
|
|
45
45
|
, model TEXT
|
|
46
|
-
, status
|
|
47
|
-
status IN ('queued', 'running', 'proposed', 'completed', 'failed', 'aborted')
|
|
48
|
-
)
|
|
46
|
+
, status INTEGER NOT NULL DEFAULT 100 CHECK (status BETWEEN 100 AND 599)
|
|
49
47
|
, alias TEXT NOT NULL UNIQUE
|
|
50
48
|
, temperature REAL CHECK (
|
|
51
49
|
temperature IS NULL OR (temperature >= 0 AND temperature <= 2)
|
|
@@ -53,17 +51,42 @@ CREATE TABLE IF NOT EXISTS runs (
|
|
|
53
51
|
, persona TEXT
|
|
54
52
|
, context_limit INTEGER CHECK (context_limit IS NULL OR context_limit >= 1024)
|
|
55
53
|
, next_turn INTEGER NOT NULL DEFAULT 1 CHECK (next_turn >= 1)
|
|
54
|
+
, next_loop INTEGER NOT NULL DEFAULT 1 CHECK (next_loop >= 1)
|
|
56
55
|
, created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
57
56
|
);
|
|
58
57
|
|
|
59
58
|
CREATE INDEX IF NOT EXISTS idx_runs_alias ON runs (alias);
|
|
60
59
|
CREATE INDEX IF NOT EXISTS idx_runs_project ON runs (project_id);
|
|
61
60
|
|
|
61
|
+
-- Loops: execution units within a run. Each ask/act call creates a loop.
|
|
62
|
+
-- Status: 100=pending, 102=running, 200=completed, 202=proposed,
|
|
63
|
+
-- 500=failed, 499=aborted.
|
|
64
|
+
CREATE TABLE IF NOT EXISTS loops (
|
|
65
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
66
|
+
, run_id INTEGER NOT NULL REFERENCES runs (id) ON DELETE CASCADE
|
|
67
|
+
, sequence INTEGER NOT NULL CHECK (sequence >= 1)
|
|
68
|
+
, mode TEXT NOT NULL CHECK (mode IN ('ask', 'act', 'panic'))
|
|
69
|
+
, model TEXT
|
|
70
|
+
, prompt TEXT NOT NULL DEFAULT ''
|
|
71
|
+
, status INTEGER NOT NULL DEFAULT 100 CHECK (status BETWEEN 100 AND 599)
|
|
72
|
+
, config JSON
|
|
73
|
+
, result JSON
|
|
74
|
+
, created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
75
|
+
, UNIQUE (run_id, sequence)
|
|
76
|
+
);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_loops_run ON loops (run_id);
|
|
78
|
+
-- Enforce at most one running loop per run.
|
|
79
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_loops_one_active
|
|
80
|
+
ON loops (run_id) WHERE status = 102;
|
|
81
|
+
|
|
62
82
|
-- Turns: usage stats and sequencing (operational, not model-facing)
|
|
63
83
|
CREATE TABLE IF NOT EXISTS turns (
|
|
64
84
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
65
85
|
, run_id INTEGER NOT NULL REFERENCES runs (id) ON DELETE CASCADE
|
|
86
|
+
, loop_id INTEGER NOT NULL REFERENCES loops (id) ON DELETE CASCADE
|
|
66
87
|
, sequence INTEGER NOT NULL CHECK (sequence >= 1)
|
|
88
|
+
, context_tokens INTEGER NOT NULL DEFAULT 0 CHECK (context_tokens >= 0)
|
|
89
|
+
, reasoning_content TEXT
|
|
67
90
|
, prompt_tokens INTEGER NOT NULL DEFAULT 0 CHECK (prompt_tokens >= 0)
|
|
68
91
|
, cached_tokens INTEGER NOT NULL DEFAULT 0 CHECK (cached_tokens >= 0)
|
|
69
92
|
, completion_tokens INTEGER NOT NULL DEFAULT 0 CHECK (completion_tokens >= 0)
|
|
@@ -90,15 +113,20 @@ ON file_constraints (project_id);
|
|
|
90
113
|
-- Known K/V Store: the unified state machine.
|
|
91
114
|
-- Files, knowledge, tool results, audit — everything is a keyed entry.
|
|
92
115
|
-- scheme: derived from path via schemeOf(). Generated column.
|
|
93
|
-
--
|
|
116
|
+
-- status: HTTP status code (2xx success, 4xx model error, 5xx system error).
|
|
117
|
+
-- fidelity: visibility level, independently managed by relevance engine.
|
|
94
118
|
CREATE TABLE IF NOT EXISTS known_entries (
|
|
95
119
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
96
120
|
, run_id INTEGER NOT NULL REFERENCES runs (id) ON DELETE CASCADE
|
|
121
|
+
, loop_id INTEGER REFERENCES loops (id) ON DELETE CASCADE
|
|
97
122
|
, turn INTEGER NOT NULL DEFAULT 0 CHECK (turn >= 0)
|
|
98
|
-
, path TEXT NOT NULL
|
|
123
|
+
, path TEXT NOT NULL CHECK (length(path) <= 2048)
|
|
99
124
|
, body TEXT NOT NULL DEFAULT ''
|
|
100
125
|
, scheme TEXT GENERATED ALWAYS AS (schemeOf(path)) STORED
|
|
101
|
-
,
|
|
126
|
+
, status INTEGER NOT NULL DEFAULT 200 CHECK (status BETWEEN 100 AND 599)
|
|
127
|
+
, fidelity TEXT NOT NULL DEFAULT 'full' CHECK (
|
|
128
|
+
fidelity IN ('full', 'summary', 'index', 'archive')
|
|
129
|
+
)
|
|
102
130
|
, hash TEXT
|
|
103
131
|
, attributes JSON NOT NULL DEFAULT '{}' CHECK (json_valid(attributes))
|
|
104
132
|
, tokens INTEGER NOT NULL DEFAULT 0 CHECK (tokens >= 0)
|
|
@@ -110,43 +138,14 @@ CREATE TABLE IF NOT EXISTS known_entries (
|
|
|
110
138
|
);
|
|
111
139
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_known_entries_run_path
|
|
112
140
|
ON known_entries (run_id, path);
|
|
113
|
-
CREATE INDEX IF NOT EXISTS
|
|
114
|
-
ON known_entries (run_id, scheme,
|
|
141
|
+
CREATE INDEX IF NOT EXISTS idx_known_entries_scheme_status
|
|
142
|
+
ON known_entries (run_id, scheme, status);
|
|
115
143
|
CREATE INDEX IF NOT EXISTS idx_known_entries_turn
|
|
116
144
|
ON known_entries (run_id, turn);
|
|
117
145
|
|
|
118
|
-
--
|
|
119
|
-
CREATE TRIGGER IF NOT EXISTS trg_known_entry_state_insert
|
|
120
|
-
BEFORE INSERT ON known_entries
|
|
121
|
-
FOR EACH ROW
|
|
122
|
-
BEGIN
|
|
123
|
-
SELECT RAISE(ABORT, 'invalid state for scheme')
|
|
124
|
-
WHERE NOT EXISTS (
|
|
125
|
-
SELECT 1
|
|
126
|
-
FROM schemes AS s, json_each(s.valid_states) AS j
|
|
127
|
-
WHERE
|
|
128
|
-
s.name = COALESCE(schemeOf(NEW.path), 'file')
|
|
129
|
-
AND j.value = NEW.state
|
|
130
|
-
);
|
|
131
|
-
END;
|
|
146
|
+
-- No state validation triggers — HTTP status codes are universal.
|
|
132
147
|
|
|
133
|
-
--
|
|
134
|
-
CREATE TRIGGER IF NOT EXISTS trg_known_entry_state_update
|
|
135
|
-
BEFORE UPDATE OF state ON known_entries
|
|
136
|
-
FOR EACH ROW
|
|
137
|
-
WHEN OLD.state != NEW.state
|
|
138
|
-
BEGIN
|
|
139
|
-
SELECT RAISE(ABORT, 'invalid state for scheme')
|
|
140
|
-
WHERE NOT EXISTS (
|
|
141
|
-
SELECT 1
|
|
142
|
-
FROM schemes AS s, json_each(s.valid_states) AS j
|
|
143
|
-
WHERE
|
|
144
|
-
s.name = COALESCE(schemeOf(NEW.path), 'file')
|
|
145
|
-
AND j.value = NEW.state
|
|
146
|
-
);
|
|
147
|
-
END;
|
|
148
|
-
|
|
149
|
-
-- UNRESOLVED VIEW: all entries awaiting user action
|
|
148
|
+
-- UNRESOLVED VIEW: all entries awaiting user action (202 Accepted)
|
|
150
149
|
CREATE VIEW IF NOT EXISTS v_unresolved AS
|
|
151
150
|
SELECT
|
|
152
151
|
run_id
|
|
@@ -155,30 +154,31 @@ SELECT
|
|
|
155
154
|
, attributes
|
|
156
155
|
, turn
|
|
157
156
|
FROM known_entries
|
|
158
|
-
WHERE
|
|
157
|
+
WHERE status = 202;
|
|
159
158
|
|
|
160
159
|
-- Turn context: materialized snapshot of what the model sees each turn.
|
|
161
160
|
-- known_entries is the warehouse. turn_context is the shipment.
|
|
162
161
|
CREATE TABLE IF NOT EXISTS turn_context (
|
|
163
162
|
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
164
163
|
, run_id INTEGER NOT NULL REFERENCES runs (id) ON DELETE CASCADE
|
|
164
|
+
, loop_id INTEGER REFERENCES loops (id) ON DELETE CASCADE
|
|
165
165
|
, turn INTEGER NOT NULL CHECK (turn >= 1)
|
|
166
166
|
, ordinal INTEGER NOT NULL CHECK (ordinal >= 0)
|
|
167
167
|
, path TEXT NOT NULL
|
|
168
168
|
, scheme TEXT GENERATED ALWAYS AS (schemeOf(path)) STORED
|
|
169
|
+
, status INTEGER NOT NULL DEFAULT 200 CHECK (status BETWEEN 100 AND 599)
|
|
169
170
|
, fidelity TEXT NOT NULL CHECK (fidelity IN ('full', 'summary', 'index'))
|
|
170
|
-
, state TEXT NOT NULL DEFAULT 'full'
|
|
171
171
|
, body TEXT NOT NULL DEFAULT ''
|
|
172
172
|
, tokens INTEGER NOT NULL DEFAULT 0 CHECK (tokens >= 0)
|
|
173
173
|
, attributes JSON NOT NULL DEFAULT '{}' CHECK (json_valid(attributes))
|
|
174
|
-
, category TEXT NOT NULL DEFAULT '
|
|
174
|
+
, category TEXT NOT NULL DEFAULT 'logging'
|
|
175
175
|
, source_turn INTEGER DEFAULT 0
|
|
176
176
|
);
|
|
177
177
|
CREATE INDEX IF NOT EXISTS idx_turn_context_run_turn
|
|
178
178
|
ON turn_context (run_id, turn);
|
|
179
179
|
|
|
180
|
-
-- Enforce valid run state transitions.
|
|
181
|
-
--
|
|
180
|
+
-- Enforce valid run state transitions (HTTP status codes).
|
|
181
|
+
-- 100=queued, 102=running, 200=completed, 202=proposed, 499=aborted, 500=failed.
|
|
182
182
|
CREATE TRIGGER IF NOT EXISTS trg_run_state_transition
|
|
183
183
|
BEFORE UPDATE OF status ON runs
|
|
184
184
|
FOR EACH ROW
|
|
@@ -186,30 +186,17 @@ WHEN OLD.status != NEW.status
|
|
|
186
186
|
BEGIN
|
|
187
187
|
SELECT RAISE(ABORT, 'invalid run state transition')
|
|
188
188
|
WHERE NOT (
|
|
189
|
-
(OLD.status =
|
|
190
|
-
OR (OLD.status =
|
|
191
|
-
OR (OLD.status =
|
|
192
|
-
OR (OLD.status =
|
|
193
|
-
OR (OLD.status =
|
|
194
|
-
OR (OLD.status =
|
|
189
|
+
(OLD.status = 100 AND NEW.status IN (102, 499))
|
|
190
|
+
OR (OLD.status = 102 AND NEW.status IN (200, 202, 500, 499))
|
|
191
|
+
OR (OLD.status = 202 AND NEW.status IN (102, 200, 499))
|
|
192
|
+
OR (OLD.status = 200 AND NEW.status IN (102, 499))
|
|
193
|
+
OR (OLD.status = 500 AND NEW.status IN (102, 499))
|
|
194
|
+
OR (OLD.status = 499 AND NEW.status IN (102))
|
|
195
195
|
);
|
|
196
196
|
END;
|
|
197
197
|
|
|
198
|
-
-- Prompt queue
|
|
199
|
-
|
|
200
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
201
|
-
, run_id INTEGER NOT NULL REFERENCES runs (id) ON DELETE CASCADE
|
|
202
|
-
, mode TEXT NOT NULL CHECK (mode IN ('ask', 'act'))
|
|
203
|
-
, model TEXT
|
|
204
|
-
, prompt TEXT NOT NULL
|
|
205
|
-
, config JSON
|
|
206
|
-
, status TEXT NOT NULL DEFAULT 'pending'
|
|
207
|
-
CHECK (status IN ('pending', 'active', 'completed', 'aborted'))
|
|
208
|
-
, result JSON
|
|
209
|
-
, created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
CREATE INDEX IF NOT EXISTS idx_prompt_queue_run ON prompt_queue (run_id, status);
|
|
198
|
+
-- Prompt queue is the loops table (defined above).
|
|
199
|
+
-- Each ask/act enqueues a loop (status=pending). Worker claims FIFO per run.
|
|
213
200
|
|
|
214
201
|
-- RPC audit log. Every call recorded unconditionally.
|
|
215
202
|
CREATE TABLE IF NOT EXISTS rpc_log (
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@possumtech/rummy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Relational Unknowns Memory Management Yoke",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"llm"
|
|
@@ -37,22 +37,28 @@
|
|
|
37
37
|
"fix:sql": ". .venv/bin/activate && sqlfluff fix . --force",
|
|
38
38
|
"test": "npm run lint && npm run test:unit && npm run test:intg",
|
|
39
39
|
"test:all": "npm run lint && npm run test:unit && npm run test:intg && npm run test:e2e",
|
|
40
|
-
"test:unit": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --experimental-test-coverage --test-coverage-lines=
|
|
40
|
+
"test:unit": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --experimental-test-coverage --test-coverage-lines=50 --test-coverage-branches=50 --test-coverage-functions=50 --test-concurrency=1 --test-force-exit --test $(find src -name '*.test.js')",
|
|
41
41
|
"test:intg": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test-concurrency=1 --test $(find test/integration -name '*.test.js')",
|
|
42
|
-
"test:e2e": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test-concurrency=1 --test-force-exit --test-reporter=spec --test $(find test/e2e -name '*.test.js')",
|
|
43
|
-
"test:live": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test-concurrency=1 --test-force-exit --test-reporter=spec --test $(find test/live -name '*.test.js')"
|
|
42
|
+
"test:e2e": "mkdir -p /tmp/rummy_test_diag && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test-concurrency=1 --test-force-exit --test-reporter=spec --test $(find test/e2e -name '*.test.js') 2>&1 | tee /tmp/rummy_test_diag/e2e_$(date +%Y%m%dT%H%M%S).log",
|
|
43
|
+
"test:live": "mkdir -p /tmp/rummy_test_diag && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test --test-concurrency=1 --test-force-exit --test-reporter=spec --test $(find test/live -name '*.test.js') 2>&1 | tee /tmp/rummy_test_diag/live_$(date +%Y%m%dT%H%M%S).log",
|
|
44
|
+
"test:clean": "rm -rf test/lme/results test/mab/results test/tmp /tmp/rummy_test_diag /tmp/rummy_test_*.db /tmp/rummy_test_*.db-shm /tmp/rummy_test_*.db-wal && echo 'Test artifacts cleaned.'",
|
|
45
|
+
"test:mab:get": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test test/mab/download.js",
|
|
46
|
+
"test:mab": "mkdir -p /tmp/rummy_test_diag && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test test/mab/runner.js 2>&1 | tee /tmp/rummy_test_diag/mab_$(date +%Y%m%dT%H%M%S).log",
|
|
47
|
+
"test:lme:get": "node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test test/lme/download.js",
|
|
48
|
+
"test:lme": "mkdir -p /tmp/rummy_test_diag && node --env-file-if-exists=.env.example --env-file-if-exists=.env --env-file-if-exists=.env.test test/lme/runner.js 2>&1 | tee /tmp/rummy_test_diag/lme_$(date +%Y%m%dT%H%M%S).log",
|
|
49
|
+
"test:mab:clean": "rm -rf test/mab/results/*/",
|
|
50
|
+
"test:lme:clean": "rm -rf test/lme/results/*/",
|
|
51
|
+
"test:clear": "rm -rf /tmp/rummy_test_diag /tmp/rummy_test_*.db /tmp/rummy_test_*.db-shm /tmp/rummy_test_*.db-wal /tmp/rummy-stories-*"
|
|
44
52
|
},
|
|
45
53
|
"devDependencies": {
|
|
46
54
|
"@biomejs/biome": "^2.4.6"
|
|
47
55
|
},
|
|
48
56
|
"dependencies": {
|
|
49
57
|
"@possumtech/sqlrite": "^3.1.0",
|
|
58
|
+
"@xmldom/xmldom": "^0.9.9",
|
|
50
59
|
"htmlparser2": "^12.0.0",
|
|
51
|
-
"
|
|
52
|
-
"ws": "^8.19.0"
|
|
53
|
-
|
|
54
|
-
"optionalDependencies": {
|
|
55
|
-
"@possumtech/rummy.repo": "^0.0.4",
|
|
56
|
-
"@possumtech/rummy.web": "^0.0.7"
|
|
60
|
+
"picomatch": "^4.0.4",
|
|
61
|
+
"ws": "^8.19.0",
|
|
62
|
+
"xpath": "^0.0.34"
|
|
57
63
|
}
|
|
58
64
|
}
|
package/service.js
CHANGED
|
@@ -115,7 +115,7 @@ async function main() {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
// 6b. Abort stuck runs (can't be running if the server just started)
|
|
118
|
-
await db.
|
|
118
|
+
await db.reset_active_loops.run({});
|
|
119
119
|
const aborted = await db.abort_stuck_runs.run({});
|
|
120
120
|
if (aborted.changes > 0) {
|
|
121
121
|
console.log(`[RUMMY] Recovered ${aborted.changes} stuck run(s)`);
|