@jungjaehoon/mama-os 0.22.1 → 0.23.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/CHANGELOG.md +22 -0
- package/README.md +3 -1
- package/dist/agent/agent-loop.d.ts +0 -3
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +49 -34
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/gateway-tool-executor.d.ts +18 -0
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
- package/dist/agent/gateway-tool-executor.js +185 -6
- package/dist/agent/gateway-tool-executor.js.map +1 -1
- package/dist/agent/gateway-tools.md +10 -5
- package/dist/agent/role-manager.d.ts +22 -1
- package/dist/agent/role-manager.d.ts.map +1 -1
- package/dist/agent/role-manager.js +39 -2
- package/dist/agent/role-manager.js.map +1 -1
- package/dist/agent/tool-registry.d.ts.map +1 -1
- package/dist/agent/tool-registry.js +35 -5
- package/dist/agent/tool-registry.js.map +1 -1
- package/dist/agent/types.d.ts +9 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/graph-api.d.ts.map +1 -1
- package/dist/api/graph-api.js +43 -33
- package/dist/api/graph-api.js.map +1 -1
- package/dist/api/operator-tasks-handler.d.ts.map +1 -1
- package/dist/api/operator-tasks-handler.js +6 -2
- package/dist/api/operator-tasks-handler.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +185 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/config/config-manager.d.ts +0 -5
- package/dist/cli/config/config-manager.d.ts.map +1 -1
- package/dist/cli/config/config-manager.js +57 -2
- package/dist/cli/config/config-manager.js.map +1 -1
- package/dist/cli/config/types.d.ts.map +1 -1
- package/dist/cli/config/types.js +35 -0
- package/dist/cli/config/types.js.map +1 -1
- package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
- package/dist/cli/runtime/agent-loop-init.js +96 -51
- package/dist/cli/runtime/agent-loop-init.js.map +1 -1
- package/dist/cli/runtime/api-routes-init.d.ts +3 -0
- package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-routes-init.js +226 -51
- package/dist/cli/runtime/api-routes-init.js.map +1 -1
- package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
- package/dist/cli/runtime/gateway-init.js +5 -0
- package/dist/cli/runtime/gateway-init.js.map +1 -1
- package/dist/envelope/reactive-config.d.ts.map +1 -1
- package/dist/envelope/reactive-config.js +26 -1
- package/dist/envelope/reactive-config.js.map +1 -1
- package/dist/gateways/message-router.d.ts +18 -1
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +155 -22
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +13 -0
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/gateways/types.d.ts +3 -0
- package/dist/gateways/types.d.ts.map +1 -1
- package/dist/memory/history-extractor.d.ts +0 -24
- package/dist/memory/history-extractor.d.ts.map +1 -1
- package/dist/memory/history-extractor.js +0 -132
- package/dist/memory/history-extractor.js.map +1 -1
- package/dist/memory/save-candidate-extractor.d.ts +3 -0
- package/dist/memory/save-candidate-extractor.d.ts.map +1 -1
- package/dist/memory/save-candidate-extractor.js +12 -1
- package/dist/memory/save-candidate-extractor.js.map +1 -1
- package/dist/memory/secret-filter.d.ts +22 -0
- package/dist/memory/secret-filter.d.ts.map +1 -0
- package/dist/memory/secret-filter.js +77 -0
- package/dist/memory/secret-filter.js.map +1 -0
- package/dist/observability/code-audit.d.ts +4 -0
- package/dist/observability/code-audit.d.ts.map +1 -1
- package/dist/observability/code-audit.js +69 -0
- package/dist/observability/code-audit.js.map +1 -1
- package/dist/operator/briefs.d.ts +26 -0
- package/dist/operator/briefs.d.ts.map +1 -0
- package/dist/operator/briefs.js +128 -0
- package/dist/operator/briefs.js.map +1 -0
- package/dist/operator/operator-trigger-loop.d.ts +24 -0
- package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
- package/dist/operator/operator-trigger-loop.js +71 -12
- package/dist/operator/operator-trigger-loop.js.map +1 -1
- package/dist/operator/report-carry.d.ts +29 -0
- package/dist/operator/report-carry.d.ts.map +1 -0
- package/dist/operator/report-carry.js +81 -0
- package/dist/operator/report-carry.js.map +1 -0
- package/dist/operator/shadow-capture.d.ts +20 -0
- package/dist/operator/shadow-capture.d.ts.map +1 -0
- package/dist/operator/shadow-capture.js +34 -0
- package/dist/operator/shadow-capture.js.map +1 -0
- package/dist/operator/situation-report.d.ts +6 -0
- package/dist/operator/situation-report.d.ts.map +1 -1
- package/dist/operator/situation-report.js +13 -0
- package/dist/operator/situation-report.js.map +1 -1
- package/dist/operator/task-ledger.d.ts +90 -2
- package/dist/operator/task-ledger.d.ts.map +1 -1
- package/dist/operator/task-ledger.js +359 -23
- package/dist/operator/task-ledger.js.map +1 -1
- package/dist/operator/worker-run.d.ts +59 -0
- package/dist/operator/worker-run.d.ts.map +1 -0
- package/dist/operator/worker-run.js +64 -0
- package/dist/operator/worker-run.js.map +1 -0
- package/dist/operator/workorder-consumer.d.ts +118 -0
- package/dist/operator/workorder-consumer.d.ts.map +1 -0
- package/dist/operator/workorder-consumer.js +248 -0
- package/dist/operator/workorder-consumer.js.map +1 -0
- package/dist/operator/workorder-hooks.d.ts +30 -0
- package/dist/operator/workorder-hooks.d.ts.map +1 -0
- package/dist/operator/workorder-hooks.js +70 -0
- package/dist/operator/workorder-hooks.js.map +1 -0
- package/dist/operator/workorder-publishers.d.ts +68 -0
- package/dist/operator/workorder-publishers.d.ts.map +1 -0
- package/dist/operator/workorder-publishers.js +150 -0
- package/dist/operator/workorder-publishers.js.map +1 -0
- package/dist/security/security-monitor.d.ts +7 -0
- package/dist/security/security-monitor.d.ts.map +1 -1
- package/dist/security/security-monitor.js +17 -0
- package/dist/security/security-monitor.js.map +1 -1
- package/dist/utils/untrusted-content.d.ts +13 -0
- package/dist/utils/untrusted-content.d.ts.map +1 -1
- package/dist/utils/untrusted-content.js +43 -0
- package/dist/utils/untrusted-content.js.map +1 -1
- package/package.json +2 -2
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* (start.ts opens and closes it once) - deliberately no close() here.
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.TaskLedger = exports.TASK_PRIORITIES = exports.TASK_STATUSES = void 0;
|
|
23
|
+
exports.TaskLedger = exports.WORKORDER_CHANNEL_PREFIX = exports.WORKORDER_KINDS = exports.TASK_KINDS = exports.TASK_PRIORITIES = exports.TASK_STATUSES = void 0;
|
|
24
24
|
const node_crypto_1 = require("node:crypto");
|
|
25
25
|
exports.TASK_STATUSES = [
|
|
26
26
|
'pending',
|
|
@@ -29,8 +29,15 @@ exports.TASK_STATUSES = [
|
|
|
29
29
|
'blocked',
|
|
30
30
|
'done',
|
|
31
31
|
'cancelled',
|
|
32
|
+
// System-only terminal for workorder rows. Owner rows can never reach it:
|
|
33
|
+
// external create/update guards reject it, so it stays out of owner surfaces.
|
|
34
|
+
'failed',
|
|
32
35
|
];
|
|
33
36
|
exports.TASK_PRIORITIES = ['high', 'normal', 'low'];
|
|
37
|
+
exports.TASK_KINDS = ['owner', 'system'];
|
|
38
|
+
exports.WORKORDER_KINDS = ['board', 'wiki', 'memory-curation'];
|
|
39
|
+
/** source_channel namespace for workorder rows: 'workorder:<workKind>'. */
|
|
40
|
+
exports.WORKORDER_CHANNEL_PREFIX = 'workorder:';
|
|
34
41
|
const ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
35
42
|
function isoToEpochMs(iso) {
|
|
36
43
|
if (!iso)
|
|
@@ -61,6 +68,7 @@ function rowToRecord(row) {
|
|
|
61
68
|
title: row.title,
|
|
62
69
|
status: row.status,
|
|
63
70
|
priority: row.priority,
|
|
71
|
+
kind: (row.kind ?? 'owner'),
|
|
64
72
|
deadline: isoToEpochMs(row.deadline),
|
|
65
73
|
deadlineIso: row.deadline,
|
|
66
74
|
assignee: row.assignee,
|
|
@@ -80,13 +88,33 @@ class TaskLedger {
|
|
|
80
88
|
this.runMigration();
|
|
81
89
|
}
|
|
82
90
|
runMigration() {
|
|
91
|
+
// Both construction sites (start.ts boot + operator-handler lazy) run this;
|
|
92
|
+
// busy_timeout here covers BOTH connections against the rebuild race.
|
|
93
|
+
this.db.pragma('busy_timeout = 5000');
|
|
83
94
|
this.db.exec(`
|
|
84
|
-
CREATE TABLE IF NOT EXISTS operator_tasks (
|
|
95
|
+
CREATE TABLE IF NOT EXISTS operator_tasks (${TaskLedger.TABLE_COLUMNS_SQL});
|
|
96
|
+
${TaskLedger.INDEXES_SQL}
|
|
97
|
+
|
|
98
|
+
CREATE TABLE IF NOT EXISTS operator_no_update_notes (
|
|
99
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
100
|
+
scope TEXT NOT NULL,
|
|
101
|
+
reason TEXT NOT NULL,
|
|
102
|
+
created_at INTEGER NOT NULL
|
|
103
|
+
);
|
|
104
|
+
CREATE INDEX IF NOT EXISTS idx_operator_no_update_scope
|
|
105
|
+
ON operator_no_update_notes(scope, id);
|
|
106
|
+
`);
|
|
107
|
+
this.upgradeSchema();
|
|
108
|
+
}
|
|
109
|
+
/** Full current column set - single source for CREATE and the rebuild copy. */
|
|
110
|
+
static TABLE_COLUMNS_SQL = `
|
|
85
111
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
86
112
|
title TEXT NOT NULL,
|
|
87
113
|
status TEXT NOT NULL DEFAULT 'pending'
|
|
88
|
-
CHECK (status IN ('pending','in_progress','review','blocked','done','cancelled')),
|
|
114
|
+
CHECK (status IN ('pending','in_progress','review','blocked','done','cancelled','failed')),
|
|
89
115
|
priority TEXT NOT NULL DEFAULT 'normal' CHECK (priority IN ('high','normal','low')),
|
|
116
|
+
kind TEXT NOT NULL DEFAULT 'owner' CHECK (kind IN ('owner','system')),
|
|
117
|
+
payload TEXT,
|
|
90
118
|
assignee TEXT,
|
|
91
119
|
deadline TEXT,
|
|
92
120
|
source_channel TEXT,
|
|
@@ -95,23 +123,82 @@ class TaskLedger {
|
|
|
95
123
|
auto_created INTEGER NOT NULL DEFAULT 1,
|
|
96
124
|
confirmed INTEGER NOT NULL DEFAULT 0,
|
|
97
125
|
created_at INTEGER NOT NULL,
|
|
98
|
-
updated_at INTEGER NOT NULL
|
|
99
|
-
|
|
126
|
+
updated_at INTEGER NOT NULL`;
|
|
127
|
+
// Unique-index predicate excludes terminal rows so a terminal keyed workorder
|
|
128
|
+
// frees its idempotency slot for a fresh insert (plan M1); owner upsert is a
|
|
129
|
+
// SELECT probe, unaffected.
|
|
130
|
+
static INDEXES_SQL = `
|
|
100
131
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_operator_tasks_source
|
|
101
132
|
ON operator_tasks(source_channel, source_event_id)
|
|
102
|
-
WHERE source_event_id IS NOT NULL
|
|
133
|
+
WHERE source_event_id IS NOT NULL
|
|
134
|
+
AND status NOT IN ('done','failed','cancelled');
|
|
103
135
|
CREATE INDEX IF NOT EXISTS idx_operator_tasks_status ON operator_tasks(status);
|
|
104
|
-
CREATE INDEX IF NOT EXISTS idx_operator_tasks_deadline ON operator_tasks(deadline)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
136
|
+
CREATE INDEX IF NOT EXISTS idx_operator_tasks_deadline ON operator_tasks(deadline);`;
|
|
137
|
+
/**
|
|
138
|
+
* Stage-2 in-place upgrade for pre-existing tables. Guards are re-checked
|
|
139
|
+
* INSIDE `BEGIN IMMEDIATE`: two connections construct TaskLedger (boot +
|
|
140
|
+
* lazy API handler) and both run this - the loser must see the winner's
|
|
141
|
+
* finished work, not rebuild an already-migrated table.
|
|
142
|
+
*/
|
|
143
|
+
upgradeSchema() {
|
|
144
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
145
|
+
try {
|
|
146
|
+
const cols = this.db.prepare(`PRAGMA table_info(operator_tasks)`).all();
|
|
147
|
+
if (!cols.some((c) => c.name === 'kind')) {
|
|
148
|
+
this.db.exec(`ALTER TABLE operator_tasks ADD COLUMN kind TEXT NOT NULL DEFAULT 'owner'
|
|
149
|
+
CHECK (kind IN ('owner','system'))`);
|
|
150
|
+
}
|
|
151
|
+
if (!cols.some((c) => c.name === 'payload')) {
|
|
152
|
+
this.db.exec(`ALTER TABLE operator_tasks ADD COLUMN payload TEXT`);
|
|
153
|
+
}
|
|
154
|
+
// 'failed' lives in an inline CHECK -> table rebuild (copy-swap) required.
|
|
155
|
+
const tableSql = this.db
|
|
156
|
+
.prepare(`SELECT sql FROM sqlite_master WHERE type='table' AND name='operator_tasks'`)
|
|
157
|
+
.get().sql;
|
|
158
|
+
if (!tableSql.includes(`'failed'`)) {
|
|
159
|
+
const seqRow = this.db
|
|
160
|
+
.prepare(`SELECT seq FROM sqlite_sequence WHERE name='operator_tasks'`)
|
|
161
|
+
.get();
|
|
162
|
+
this.db.exec(`
|
|
163
|
+
CREATE TABLE operator_tasks_new (${TaskLedger.TABLE_COLUMNS_SQL});
|
|
164
|
+
INSERT INTO operator_tasks_new
|
|
165
|
+
(id, title, status, priority, kind, payload, assignee, deadline, source_channel,
|
|
166
|
+
source_event_id, latest_event, auto_created, confirmed, created_at, updated_at)
|
|
167
|
+
SELECT id, title, status, priority, kind, payload, assignee, deadline,
|
|
168
|
+
source_channel, source_event_id, latest_event, auto_created, confirmed,
|
|
169
|
+
created_at, updated_at
|
|
170
|
+
FROM operator_tasks;
|
|
171
|
+
DROP TABLE operator_tasks;
|
|
172
|
+
ALTER TABLE operator_tasks_new RENAME TO operator_tasks;
|
|
173
|
+
`);
|
|
174
|
+
if (seqRow) {
|
|
175
|
+
// sqlite_sequence has NO unique key on name - INSERT OR REPLACE
|
|
176
|
+
// would APPEND a duplicate row (review m2). UPDATE first; insert
|
|
177
|
+
// only when the rename left no row behind.
|
|
178
|
+
const updated = this.db
|
|
179
|
+
.prepare(`UPDATE sqlite_sequence SET seq = ? WHERE name = 'operator_tasks'`)
|
|
180
|
+
.run(seqRow.seq);
|
|
181
|
+
if (updated.changes === 0) {
|
|
182
|
+
this.db
|
|
183
|
+
.prepare(`INSERT INTO sqlite_sequence (name, seq) VALUES ('operator_tasks', ?)`)
|
|
184
|
+
.run(seqRow.seq);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Old-predicate unique index (no terminal exclusion) -> swap in place.
|
|
189
|
+
const idxRow = this.db
|
|
190
|
+
.prepare(`SELECT sql FROM sqlite_master WHERE type='index' AND name='idx_operator_tasks_source'`)
|
|
191
|
+
.get();
|
|
192
|
+
if (!idxRow || !idxRow.sql.includes('status NOT IN')) {
|
|
193
|
+
this.db.exec(`DROP INDEX IF EXISTS idx_operator_tasks_source;`);
|
|
194
|
+
}
|
|
195
|
+
this.db.exec(TaskLedger.INDEXES_SQL);
|
|
196
|
+
this.db.exec('COMMIT');
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
this.db.exec('ROLLBACK');
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
115
202
|
}
|
|
116
203
|
/** TaskSource conformance: open items in canonical board order. */
|
|
117
204
|
getTasks() {
|
|
@@ -121,14 +208,17 @@ class TaskLedger {
|
|
|
121
208
|
const row = this.db
|
|
122
209
|
.prepare(`SELECT COUNT(*) AS count
|
|
123
210
|
FROM operator_tasks
|
|
124
|
-
WHERE
|
|
211
|
+
WHERE kind = 'owner'
|
|
212
|
+
AND auto_created = 1
|
|
125
213
|
AND confirmed = 0
|
|
126
214
|
AND status NOT IN ('done', 'cancelled')`)
|
|
127
215
|
.get();
|
|
128
216
|
return row.count;
|
|
129
217
|
}
|
|
130
218
|
list(filter = {}) {
|
|
131
|
-
|
|
219
|
+
// Owner surface only - system workorder rows never appear in board/REST/
|
|
220
|
+
// gateway listings (Stage-2 kind filter; workorders have dedicated readers).
|
|
221
|
+
const where = [`kind = 'owner'`];
|
|
132
222
|
const params = [];
|
|
133
223
|
if (filter.status) {
|
|
134
224
|
where.push('status = ?');
|
|
@@ -159,7 +249,13 @@ class TaskLedger {
|
|
|
159
249
|
.all(...params, limit);
|
|
160
250
|
return rows.map(rowToRecord);
|
|
161
251
|
}
|
|
252
|
+
/** Owner rows only - system workorder rows are invisible to external reads. */
|
|
162
253
|
getById(id) {
|
|
254
|
+
const record = this.getRowById(id);
|
|
255
|
+
return record && record.kind === 'owner' ? record : null;
|
|
256
|
+
}
|
|
257
|
+
/** Internal fetch without the kind filter (guards and workorder paths). */
|
|
258
|
+
getRowById(id) {
|
|
163
259
|
const row = this.db.prepare(`SELECT * FROM operator_tasks WHERE id = ?`).get(id);
|
|
164
260
|
return row ? rowToRecord(row) : null;
|
|
165
261
|
}
|
|
@@ -174,14 +270,27 @@ class TaskLedger {
|
|
|
174
270
|
}
|
|
175
271
|
if (input.status !== undefined)
|
|
176
272
|
assertEnum(input.status, exports.TASK_STATUSES, 'status');
|
|
273
|
+
if (input.status === 'failed') {
|
|
274
|
+
throw new Error(`task_create: 'failed' is a system-only status`);
|
|
275
|
+
}
|
|
276
|
+
// Namespace reservation (review m3): the occurrence keys are deterministic
|
|
277
|
+
// (epoch slots, readable from OSS source) - an agent-created owner row on
|
|
278
|
+
// a 'workorder:' (channel,event) pair would collide with the system
|
|
279
|
+
// INSERT via the shared unique index and DoS that schedule slot.
|
|
280
|
+
if (input.source_channel?.startsWith(exports.WORKORDER_CHANNEL_PREFIX)) {
|
|
281
|
+
throw new Error(`task_create: source_channel namespace '${exports.WORKORDER_CHANNEL_PREFIX}*' is reserved for system workorders`);
|
|
282
|
+
}
|
|
177
283
|
if (input.priority !== undefined)
|
|
178
284
|
assertEnum(input.priority, exports.TASK_PRIORITIES, 'priority');
|
|
179
285
|
if (input.deadline !== undefined)
|
|
180
286
|
assertIsoDate(input.deadline, 'deadline');
|
|
181
287
|
const now = Date.now();
|
|
182
288
|
if (input.source_channel && input.source_event_id) {
|
|
289
|
+
// kind='owner' probe: an agent-supplied (channel, event) pair can never
|
|
290
|
+
// reach a system workorder row (Stage-2 tamper guard).
|
|
183
291
|
const existing = this.db
|
|
184
|
-
.prepare(`SELECT * FROM operator_tasks
|
|
292
|
+
.prepare(`SELECT * FROM operator_tasks
|
|
293
|
+
WHERE source_channel = ? AND source_event_id = ? AND kind = 'owner'`)
|
|
185
294
|
.get(input.source_channel, input.source_event_id);
|
|
186
295
|
if (existing) {
|
|
187
296
|
// Upsert carries every provided field EXCEPT title (the original naming
|
|
@@ -208,9 +317,19 @@ class TaskLedger {
|
|
|
208
317
|
return created;
|
|
209
318
|
}
|
|
210
319
|
update(id, patch) {
|
|
211
|
-
const existing = this.
|
|
320
|
+
const existing = this.getRowById(id);
|
|
212
321
|
if (!existing)
|
|
213
322
|
throw new Error(`task_update: no task with id ${id}`);
|
|
323
|
+
// Stage-2 tamper guards: system workorder rows are host-managed (their
|
|
324
|
+
// transitions go through the workorder API only), and 'failed' can never
|
|
325
|
+
// be set on an owner task from any external surface (REST PATCH + gateway
|
|
326
|
+
// task_update both land here).
|
|
327
|
+
if (existing.kind === 'system') {
|
|
328
|
+
throw new Error(`task_update: task ${id} is a system workorder row (host-managed)`);
|
|
329
|
+
}
|
|
330
|
+
if (patch.status === 'failed') {
|
|
331
|
+
throw new Error(`task_update: 'failed' is a system-only status`);
|
|
332
|
+
}
|
|
214
333
|
if (patch.status !== undefined)
|
|
215
334
|
assertEnum(patch.status, exports.TASK_STATUSES, 'status');
|
|
216
335
|
if (patch.priority !== undefined)
|
|
@@ -244,15 +363,232 @@ class TaskLedger {
|
|
|
244
363
|
this.db.prepare(`UPDATE operator_tasks SET ${sets.join(', ')} WHERE id = ?`).run(...params, id);
|
|
245
364
|
return this.getById(id);
|
|
246
365
|
}
|
|
247
|
-
/**
|
|
366
|
+
/**
|
|
367
|
+
* Stable hash over ordered OWNER rows - the Phase-2 verifier's ledger
|
|
368
|
+
* snapshot. kind filter keeps concurrent system enqueues from shaking the
|
|
369
|
+
* hash mid-bracket (evidence-only signal, but noise is noise).
|
|
370
|
+
*/
|
|
248
371
|
payloadHash() {
|
|
249
372
|
const rows = this.db
|
|
250
373
|
.prepare(`SELECT id, title, status, priority, assignee, deadline, latest_event, confirmed,
|
|
251
374
|
updated_at
|
|
252
|
-
FROM operator_tasks ORDER BY id ASC`)
|
|
375
|
+
FROM operator_tasks WHERE kind = 'owner' ORDER BY id ASC`)
|
|
253
376
|
.all();
|
|
254
377
|
return (0, node_crypto_1.createHash)('sha256').update(JSON.stringify(rows)).digest('hex');
|
|
255
378
|
}
|
|
379
|
+
// ── Workorder API (Stage 2) ─────────────────────────────────────────────
|
|
380
|
+
// System rows only. These are the ONLY paths that create or transition
|
|
381
|
+
// kind='system' rows; external create/update guards reject everything else.
|
|
382
|
+
/**
|
|
383
|
+
* Enqueue a workorder. Idempotent per occurrence key: an open (pending or
|
|
384
|
+
* in_progress) keyed row dedups; a terminal keyed row frees the slot (the
|
|
385
|
+
* unique index excludes terminal statuses) and a fresh row is inserted.
|
|
386
|
+
*/
|
|
387
|
+
enqueueWorkOrder(order) {
|
|
388
|
+
assertEnum(order.workKind, exports.WORKORDER_KINDS, 'workKind');
|
|
389
|
+
if (order.priority !== undefined) {
|
|
390
|
+
assertEnum(order.priority, exports.TASK_PRIORITIES, 'priority');
|
|
391
|
+
}
|
|
392
|
+
if (!order.idempotencyKey || order.idempotencyKey.trim() === '') {
|
|
393
|
+
throw new Error('enqueueWorkOrder: idempotencyKey must be non-empty');
|
|
394
|
+
}
|
|
395
|
+
const channel = `${exports.WORKORDER_CHANNEL_PREFIX}${order.workKind}`;
|
|
396
|
+
const open = this.db
|
|
397
|
+
.prepare(`SELECT * FROM operator_tasks
|
|
398
|
+
WHERE kind = 'system' AND source_channel = ? AND source_event_id = ?
|
|
399
|
+
AND status IN ('pending','in_progress')`)
|
|
400
|
+
.get(channel, order.idempotencyKey);
|
|
401
|
+
if (open) {
|
|
402
|
+
return this.rowToWorkOrder(open);
|
|
403
|
+
}
|
|
404
|
+
const attempts = typeof order.input.attempts === 'number' && order.input.attempts >= 1
|
|
405
|
+
? order.input.attempts
|
|
406
|
+
: 1;
|
|
407
|
+
const payload = JSON.stringify({ ...order.input, attempts });
|
|
408
|
+
const now = Date.now();
|
|
409
|
+
const result = this.db
|
|
410
|
+
.prepare(`INSERT INTO operator_tasks
|
|
411
|
+
(title, status, priority, kind, payload, source_channel, source_event_id,
|
|
412
|
+
auto_created, confirmed, created_at, updated_at)
|
|
413
|
+
VALUES (?, 'pending', ?, 'system', ?, ?, ?, 1, 0, ?, ?)`)
|
|
414
|
+
.run(`workorder:${order.workKind}`, order.priority ?? 'normal', payload, channel, order.idempotencyKey, now, now);
|
|
415
|
+
return this.getWorkOrderById(Number(result.lastInsertRowid));
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Claim the next pending workorder: priority high>normal>low, then id ASC
|
|
419
|
+
* (plan D2/E2 - CASE mapping, never lexicographic on the TEXT enum).
|
|
420
|
+
* pending -> in_progress. Single serial consumer; transaction for atomicity.
|
|
421
|
+
*/
|
|
422
|
+
claimNextWorkOrder() {
|
|
423
|
+
let claimedId = null;
|
|
424
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
425
|
+
try {
|
|
426
|
+
const row = this.db
|
|
427
|
+
.prepare(`SELECT * FROM operator_tasks
|
|
428
|
+
WHERE kind = 'system' AND status = 'pending'
|
|
429
|
+
ORDER BY CASE priority WHEN 'high' THEN 0 WHEN 'normal' THEN 1 ELSE 2 END ASC,
|
|
430
|
+
id ASC
|
|
431
|
+
LIMIT 1`)
|
|
432
|
+
.get();
|
|
433
|
+
if (row) {
|
|
434
|
+
this.db
|
|
435
|
+
.prepare(`UPDATE operator_tasks SET status = 'in_progress', updated_at = ? WHERE id = ?`)
|
|
436
|
+
.run(Date.now(), row.id);
|
|
437
|
+
claimedId = row.id;
|
|
438
|
+
}
|
|
439
|
+
this.db.exec('COMMIT');
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
this.db.exec('ROLLBACK');
|
|
443
|
+
throw error;
|
|
444
|
+
}
|
|
445
|
+
// Read-back OUTSIDE the try: a throw here (corrupt payload) must not
|
|
446
|
+
// trigger ROLLBACK after COMMIT (PR bot round - masked error class).
|
|
447
|
+
return claimedId === null ? null : this.getWorkOrderById(claimedId);
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Atomic fail-and-requeue (PR bot round): the failure mark and the
|
|
451
|
+
* replacement row commit together - a crash between the two would lose
|
|
452
|
+
* the retry (the old row terminal, the new one never inserted). The
|
|
453
|
+
* replacement can only be inserted AFTER the old row leaves the partial
|
|
454
|
+
* unique index, hence one transaction, not two calls.
|
|
455
|
+
*/
|
|
456
|
+
requeueWorkOrder(wo, reason) {
|
|
457
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
458
|
+
try {
|
|
459
|
+
this.transitionWorkOrder(wo.id, 'failed', reason);
|
|
460
|
+
const replacement = this.enqueueWorkOrder({
|
|
461
|
+
workKind: wo.workKind,
|
|
462
|
+
idempotencyKey: wo.idempotencyKey,
|
|
463
|
+
input: { ...wo.payload, attempts: wo.payload.attempts + 1 },
|
|
464
|
+
priority: wo.priority,
|
|
465
|
+
});
|
|
466
|
+
this.db.exec('COMMIT');
|
|
467
|
+
return replacement;
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
this.db.exec('ROLLBACK');
|
|
471
|
+
throw error;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
completeWorkOrder(id) {
|
|
475
|
+
this.transitionWorkOrder(id, 'done', null);
|
|
476
|
+
}
|
|
477
|
+
failWorkOrder(id, reason) {
|
|
478
|
+
this.transitionWorkOrder(id, 'failed', reason);
|
|
479
|
+
}
|
|
480
|
+
countPendingWorkOrders() {
|
|
481
|
+
const row = this.db
|
|
482
|
+
.prepare(`SELECT COUNT(*) AS count FROM operator_tasks WHERE kind = 'system' AND status = 'pending'`)
|
|
483
|
+
.get();
|
|
484
|
+
return row.count;
|
|
485
|
+
}
|
|
486
|
+
/** In-progress system rows at boot = crash artifacts (single serial consumer). */
|
|
487
|
+
listStaleClaims() {
|
|
488
|
+
const rows = this.db
|
|
489
|
+
.prepare(`SELECT * FROM operator_tasks WHERE kind = 'system' AND status = 'in_progress'`)
|
|
490
|
+
.all();
|
|
491
|
+
return rows.map((row) => this.rowToWorkOrder(row));
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Boot cleanup (plan D3 + review N4): open system rows -> cancelled. A
|
|
495
|
+
* rollback is not a failure - excluded from failed counters/alarms; caller
|
|
496
|
+
* logs ONE summary line with the returned count. `onlyKinds` scopes the
|
|
497
|
+
* cancellation (shadow rollback cancels non-board orders only).
|
|
498
|
+
*/
|
|
499
|
+
cancelOpenWorkOrders(reason, onlyKinds) {
|
|
500
|
+
// An explicit empty scope means "cancel nothing", never "cancel all"
|
|
501
|
+
// (review F2 - the fall-through would silently widen a scoped call).
|
|
502
|
+
if (onlyKinds !== undefined && onlyKinds.length === 0) {
|
|
503
|
+
return 0;
|
|
504
|
+
}
|
|
505
|
+
const kindFilter = onlyKinds && onlyKinds.length > 0
|
|
506
|
+
? ` AND source_channel IN (${onlyKinds.map(() => '?').join(',')})`
|
|
507
|
+
: '';
|
|
508
|
+
const kindParams = (onlyKinds ?? []).map((kind) => `${exports.WORKORDER_CHANNEL_PREFIX}${kind}`);
|
|
509
|
+
const result = this.db
|
|
510
|
+
.prepare(`UPDATE operator_tasks
|
|
511
|
+
SET status = 'cancelled', latest_event = ?, updated_at = ?
|
|
512
|
+
WHERE kind = 'system' AND status IN ('pending','in_progress')${kindFilter}`)
|
|
513
|
+
.run(reason, Date.now(), ...kindParams);
|
|
514
|
+
return result.changes;
|
|
515
|
+
}
|
|
516
|
+
/** Per-kind stats for the workorder_status surface. */
|
|
517
|
+
workOrderStats() {
|
|
518
|
+
return exports.WORKORDER_KINDS.map((workKind) => {
|
|
519
|
+
const channel = `${exports.WORKORDER_CHANNEL_PREFIX}${workKind}`;
|
|
520
|
+
const last = this.db
|
|
521
|
+
.prepare(`SELECT status, updated_at FROM operator_tasks
|
|
522
|
+
WHERE kind = 'system' AND source_channel = ?
|
|
523
|
+
ORDER BY updated_at DESC, id DESC LIMIT 1`)
|
|
524
|
+
.get(channel);
|
|
525
|
+
const failed = this.db
|
|
526
|
+
.prepare(`SELECT COUNT(*) AS count FROM operator_tasks
|
|
527
|
+
WHERE kind = 'system' AND source_channel = ? AND status = 'failed'`)
|
|
528
|
+
.get(channel);
|
|
529
|
+
const lastFailure = this.db
|
|
530
|
+
.prepare(`SELECT latest_event FROM operator_tasks
|
|
531
|
+
WHERE kind = 'system' AND source_channel = ? AND status = 'failed'
|
|
532
|
+
ORDER BY updated_at DESC, id DESC LIMIT 1`)
|
|
533
|
+
.get(channel);
|
|
534
|
+
return {
|
|
535
|
+
workKind,
|
|
536
|
+
lastRunAt: last?.updated_at ?? null,
|
|
537
|
+
lastStatus: last?.status ?? null,
|
|
538
|
+
failedCount: failed.count,
|
|
539
|
+
lastFailureReason: lastFailure?.latest_event ?? null,
|
|
540
|
+
};
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
getWorkOrderById(id) {
|
|
544
|
+
const row = this.db
|
|
545
|
+
.prepare(`SELECT * FROM operator_tasks WHERE id = ? AND kind = 'system'`)
|
|
546
|
+
.get(id);
|
|
547
|
+
return row ? this.rowToWorkOrder(row) : null;
|
|
548
|
+
}
|
|
549
|
+
transitionWorkOrder(id, status, reason) {
|
|
550
|
+
const row = this.getWorkOrderById(id);
|
|
551
|
+
if (!row)
|
|
552
|
+
throw new Error(`workorder transition: no system row with id ${id}`);
|
|
553
|
+
if (row.status !== 'in_progress') {
|
|
554
|
+
throw new Error(`workorder transition: row ${id} is '${row.status}', expected in_progress`);
|
|
555
|
+
}
|
|
556
|
+
this.db
|
|
557
|
+
.prepare(`UPDATE operator_tasks SET status = ?, latest_event = COALESCE(?, latest_event),
|
|
558
|
+
updated_at = ? WHERE id = ?`)
|
|
559
|
+
.run(status, reason, Date.now(), id);
|
|
560
|
+
}
|
|
561
|
+
rowToWorkOrder(row) {
|
|
562
|
+
const workKind = (row.source_channel ?? '').slice(exports.WORKORDER_CHANNEL_PREFIX.length);
|
|
563
|
+
assertEnum(workKind, exports.WORKORDER_KINDS, 'workKind');
|
|
564
|
+
let payload;
|
|
565
|
+
try {
|
|
566
|
+
payload = row.payload ? JSON.parse(row.payload) : {};
|
|
567
|
+
}
|
|
568
|
+
catch (error) {
|
|
569
|
+
// No-fallback: a corrupt payload is a real fault, surface it loudly.
|
|
570
|
+
throw new Error(`workorder ${row.id}: corrupt payload JSON (${error instanceof Error ? error.message : String(error)})`);
|
|
571
|
+
}
|
|
572
|
+
// Strict reads (PR bot round): silently normalizing corrupt ownership or
|
|
573
|
+
// retry metadata would mask a real fault - every row here was written by
|
|
574
|
+
// enqueueWorkOrder, which guarantees both fields.
|
|
575
|
+
if (typeof payload.attempts !== 'number' || payload.attempts < 1) {
|
|
576
|
+
throw new Error(`workorder ${row.id}: invalid attempts in payload (${String(payload.attempts)})`);
|
|
577
|
+
}
|
|
578
|
+
if (!row.source_event_id) {
|
|
579
|
+
throw new Error(`workorder ${row.id}: missing idempotency key (source_event_id)`);
|
|
580
|
+
}
|
|
581
|
+
return {
|
|
582
|
+
id: row.id,
|
|
583
|
+
workKind: workKind,
|
|
584
|
+
status: row.status,
|
|
585
|
+
priority: row.priority,
|
|
586
|
+
idempotencyKey: row.source_event_id,
|
|
587
|
+
payload: { ...payload, attempts: payload.attempts },
|
|
588
|
+
createdAt: row.created_at,
|
|
589
|
+
updatedAt: row.updated_at,
|
|
590
|
+
};
|
|
591
|
+
}
|
|
256
592
|
/** contract_no_update: silence as a verifiable judgment, scoped to one reconcile run. */
|
|
257
593
|
recordNoUpdate(scope, reason) {
|
|
258
594
|
if (!scope || !reason) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-ledger.js","sourceRoot":"","sources":["../../src/operator/task-ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task-ledger.js","sourceRoot":"","sources":["../../src/operator/task-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workerRun - the operator's worker primitive (plan: owner-console v6 S0-T1).
|
|
3
|
+
*
|
|
4
|
+
* A worker is NOT a standing agent identity and NOT a delegate/native-Task
|
|
5
|
+
* subagent: it is a briefed, FRESH-session lane run - the same substrate the
|
|
6
|
+
* report lane already uses (LaneManager serialization, loud failure, result
|
|
7
|
+
* returned to the caller, gateway calls audited).
|
|
8
|
+
*
|
|
9
|
+
* CALLER CONTRACT (deadlock seal):
|
|
10
|
+
* - Callers must be HOST CODE running OUTSIDE any lane (scheduler ticks,
|
|
11
|
+
* work-order consumers, forwarder hooks).
|
|
12
|
+
* - NEVER call workerRun from inside an active lane run (an LLM run's tool
|
|
13
|
+
* handler, a report run, another worker): the parent holds its global lane
|
|
14
|
+
* slot for its whole duration, so a nested awaited lane run can queue
|
|
15
|
+
* behind its own parent forever.
|
|
16
|
+
*
|
|
17
|
+
* Concurrency: same-kind runs serialize on the `operator:worker:<kind>`
|
|
18
|
+
* session lane; ALL operator work (reports + workers) serializes on the
|
|
19
|
+
* 'operator' global lane, which is separate from chat 'main' so long worker
|
|
20
|
+
* runs never block owner replies.
|
|
21
|
+
*/
|
|
22
|
+
import type { ContentBlock } from '../agent/types.js';
|
|
23
|
+
/** Identity fields workerRun owns - never overridable by callers (plan E7/G3). */
|
|
24
|
+
export interface WorkerIdentityOptions {
|
|
25
|
+
sessionKey: string;
|
|
26
|
+
source: string;
|
|
27
|
+
channelId: string;
|
|
28
|
+
freshSession: boolean;
|
|
29
|
+
}
|
|
30
|
+
export type WorkerRunnerOptions = WorkerIdentityOptions & Record<string, unknown>;
|
|
31
|
+
/** Minimal surface of AgentLoop.runWithContent that workerRun needs (DI seam). */
|
|
32
|
+
export interface WorkerRunner {
|
|
33
|
+
runWithContent(content: ContentBlock[], options: WorkerRunnerOptions): Promise<{
|
|
34
|
+
response: string;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
export interface WorkerRunInput {
|
|
38
|
+
/** Worker kind (kebab-case, e.g. 'board', 'wiki', 'memory-curation'). */
|
|
39
|
+
kind: string;
|
|
40
|
+
/** Procedural brief (skill text) injected ahead of the work order. */
|
|
41
|
+
brief: string;
|
|
42
|
+
/** The work order payload the worker acts on. */
|
|
43
|
+
input: string;
|
|
44
|
+
/**
|
|
45
|
+
* Extra run options (e.g. the Stage-2 shadow capture-publisher override).
|
|
46
|
+
* Applied BEFORE the identity fields - identity always wins (plan E7/G3:
|
|
47
|
+
* an override must never move a worker onto another lane or reset another
|
|
48
|
+
* lane's fresh-session pool).
|
|
49
|
+
*/
|
|
50
|
+
runOptions?: Record<string, unknown>;
|
|
51
|
+
}
|
|
52
|
+
export declare function buildWorkerSessionKey(kind: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Run a briefed worker on its own operator lane and return its output.
|
|
55
|
+
* Throws loudly on invalid input, runner failure, or an empty response -
|
|
56
|
+
* a worker never ends silently.
|
|
57
|
+
*/
|
|
58
|
+
export declare function workerRun(runner: WorkerRunner, { kind, brief, input, runOptions }: WorkerRunInput): Promise<string>;
|
|
59
|
+
//# sourceMappingURL=worker-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-run.d.ts","sourceRoot":"","sources":["../../src/operator/worker-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElF,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,cAAc,CACZ,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,cAAc,GACjD,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
|