instar 0.28.83 → 0.28.85
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/dashboard/index.html +239 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/intent.d.ts.map +1 -1
- package/dist/commands/intent.js +29 -2
- package/dist/commands/intent.js.map +1 -1
- package/dist/commands/memoryBackfillEvidence.d.ts +69 -0
- package/dist/commands/memoryBackfillEvidence.d.ts.map +1 -0
- package/dist/commands/memoryBackfillEvidence.js +220 -0
- package/dist/commands/memoryBackfillEvidence.js.map +1 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +86 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/core/DecisionJournal.d.ts +66 -3
- package/dist/core/DecisionJournal.d.ts.map +1 -1
- package/dist/core/DecisionJournal.js +116 -3
- package/dist/core/DecisionJournal.js.map +1 -1
- package/dist/core/DispatchExecutor.d.ts +74 -1
- package/dist/core/DispatchExecutor.d.ts.map +1 -1
- package/dist/core/DispatchExecutor.js +120 -1
- package/dist/core/DispatchExecutor.js.map +1 -1
- package/dist/core/EvolutionManager.d.ts +133 -0
- package/dist/core/EvolutionManager.d.ts.map +1 -1
- package/dist/core/EvolutionManager.js +494 -0
- package/dist/core/EvolutionManager.js.map +1 -1
- package/dist/core/InitiativeTracker.d.ts +82 -15
- package/dist/core/InitiativeTracker.d.ts.map +1 -1
- package/dist/core/InitiativeTracker.js +502 -31
- package/dist/core/InitiativeTracker.js.map +1 -1
- package/dist/core/LearnSkillBridge.d.ts +119 -0
- package/dist/core/LearnSkillBridge.d.ts.map +1 -0
- package/dist/core/LearnSkillBridge.js +160 -0
- package/dist/core/LearnSkillBridge.js.map +1 -0
- package/dist/core/SharedStateLedger.d.ts.map +1 -1
- package/dist/core/SharedStateLedger.js +4 -0
- package/dist/core/SharedStateLedger.js.map +1 -1
- package/dist/core/types.d.ts +124 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -1
- package/dist/memory/EvidenceRenderer.d.ts +64 -0
- package/dist/memory/EvidenceRenderer.d.ts.map +1 -0
- package/dist/memory/EvidenceRenderer.js +119 -0
- package/dist/memory/EvidenceRenderer.js.map +1 -0
- package/dist/memory/SemanticMemory.d.ts +61 -1
- package/dist/memory/SemanticMemory.d.ts.map +1 -1
- package/dist/memory/SemanticMemory.js +381 -11
- package/dist/memory/SemanticMemory.js.map +1 -1
- package/dist/server/AgentServer.d.ts +4 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +2 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +8 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +500 -14
- package/dist/server/routes.js.map +1 -1
- package/dist/tasks/DivergenceChecker.d.ts +89 -0
- package/dist/tasks/DivergenceChecker.d.ts.map +1 -0
- package/dist/tasks/DivergenceChecker.js +255 -0
- package/dist/tasks/DivergenceChecker.js.map +1 -0
- package/dist/tasks/LruCache.d.ts +33 -0
- package/dist/tasks/LruCache.d.ts.map +1 -0
- package/dist/tasks/LruCache.js +88 -0
- package/dist/tasks/LruCache.js.map +1 -0
- package/dist/tasks/RateLimiter.d.ts +61 -0
- package/dist/tasks/RateLimiter.d.ts.map +1 -0
- package/dist/tasks/RateLimiter.js +108 -0
- package/dist/tasks/RateLimiter.js.map +1 -0
- package/dist/tasks/TaskFlowDueWaker.d.ts +29 -0
- package/dist/tasks/TaskFlowDueWaker.d.ts.map +1 -0
- package/dist/tasks/TaskFlowDueWaker.js +73 -0
- package/dist/tasks/TaskFlowDueWaker.js.map +1 -0
- package/dist/tasks/TaskFlowMaintenanceSweeper.d.ts +40 -0
- package/dist/tasks/TaskFlowMaintenanceSweeper.d.ts.map +1 -0
- package/dist/tasks/TaskFlowMaintenanceSweeper.js +131 -0
- package/dist/tasks/TaskFlowMaintenanceSweeper.js.map +1 -0
- package/dist/tasks/TaskFlowRegistry.d.ts +180 -0
- package/dist/tasks/TaskFlowRegistry.d.ts.map +1 -0
- package/dist/tasks/TaskFlowRegistry.js +791 -0
- package/dist/tasks/TaskFlowRegistry.js.map +1 -0
- package/dist/tasks/ThreadlineFlowBridge.d.ts +54 -0
- package/dist/tasks/ThreadlineFlowBridge.d.ts.map +1 -0
- package/dist/tasks/ThreadlineFlowBridge.js +129 -0
- package/dist/tasks/ThreadlineFlowBridge.js.map +1 -0
- package/dist/tasks/task-flow-registry.store.sqlite.d.ts +77 -0
- package/dist/tasks/task-flow-registry.store.sqlite.d.ts.map +1 -0
- package/dist/tasks/task-flow-registry.store.sqlite.js +350 -0
- package/dist/tasks/task-flow-registry.store.sqlite.js.map +1 -0
- package/dist/tasks/task-flow-types.d.ts +229 -0
- package/dist/tasks/task-flow-types.d.ts.map +1 -0
- package/dist/tasks/task-flow-types.js +128 -0
- package/dist/tasks/task-flow-types.js.map +1 -0
- package/dist/threadline/ThreadlineMCPServer.d.ts +32 -0
- package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.js +82 -5
- package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
- package/dist/threadline/mcp-stdio-entry.js +56 -0
- package/dist/threadline/mcp-stdio-entry.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +78 -78
- package/upgrades/0.28.84.md +89 -0
- package/upgrades/0.28.85.md +64 -0
- package/upgrades/side-effects/0.28.83.md +27 -0
- package/upgrades/side-effects/taskflow-phase1.md +130 -0
- package/upgrades/side-effects/taskflow-phase2.md +110 -0
- package/upgrades/side-effects/taskflow-phase3a.md +138 -0
- package/upgrades/side-effects/taskflow-phase4.md +377 -0
- package/upgrades/side-effects/taskflow-phase5.md +234 -0
- package/upgrades/side-effects/threadline-discover-relay-and-trust.md +122 -0
- package/upgrades/side-effects/wikiclaim-evidence-phase1.md +138 -0
- package/upgrades/side-effects/wikiclaim-evidence-phase2.md +148 -0
- package/upgrades/side-effects/wikiclaim-evidence-phase3.md +125 -0
- package/upgrades/side-effects/wikiclaim-evidence-phase4.md +129 -0
- package/upgrades/side-effects/wikiclaim-evidence-phase5.md +285 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskFlow SQLite store.
|
|
3
|
+
*
|
|
4
|
+
* Single-writer (the instar server process). Wraps mutations in
|
|
5
|
+
* `BEGIN IMMEDIATE` so the read-then-write check-and-discriminate sequence
|
|
6
|
+
* inside each operation is consistent.
|
|
7
|
+
*
|
|
8
|
+
* No JSONL dual-write — SQLite WAL is the durability journal (see spec §
|
|
9
|
+
* Storage and Concurrency, "DR and audit trail").
|
|
10
|
+
*/
|
|
11
|
+
import fs from 'node:fs';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { MAX_BUSY_RETRIES, BUSY_BASE_DELAY_MS, BUSY_CAP_DELAY_MS, } from './task-flow-types.js';
|
|
14
|
+
const SCHEMA_SQL = `
|
|
15
|
+
CREATE TABLE IF NOT EXISTS flows (
|
|
16
|
+
flow_id TEXT PRIMARY KEY,
|
|
17
|
+
owner_key TEXT NOT NULL,
|
|
18
|
+
controller_id TEXT NOT NULL,
|
|
19
|
+
controller_instance_id TEXT NOT NULL,
|
|
20
|
+
controller_heartbeat_at INTEGER NOT NULL,
|
|
21
|
+
revision INTEGER NOT NULL,
|
|
22
|
+
status TEXT NOT NULL,
|
|
23
|
+
notify_policy TEXT NOT NULL,
|
|
24
|
+
goal TEXT NOT NULL,
|
|
25
|
+
current_step TEXT,
|
|
26
|
+
state_json TEXT,
|
|
27
|
+
wait_json TEXT,
|
|
28
|
+
wait_instance_id TEXT,
|
|
29
|
+
wait_started_at INTEGER,
|
|
30
|
+
wait_kind TEXT,
|
|
31
|
+
cancel_requested_at INTEGER,
|
|
32
|
+
cancel_requested_by TEXT,
|
|
33
|
+
created_at INTEGER NOT NULL,
|
|
34
|
+
updated_at INTEGER NOT NULL,
|
|
35
|
+
ended_at INTEGER,
|
|
36
|
+
superseded_by TEXT,
|
|
37
|
+
privacy_scope TEXT,
|
|
38
|
+
requester_origin TEXT
|
|
39
|
+
);
|
|
40
|
+
CREATE INDEX IF NOT EXISTS flows_status_updated_at ON flows (status, updated_at);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS flows_controller_status ON flows (controller_id, status);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS flows_owner_key ON flows (owner_key);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS flows_wait_instance_id ON flows (wait_instance_id) WHERE wait_instance_id IS NOT NULL;
|
|
44
|
+
CREATE INDEX IF NOT EXISTS flows_wait_kind_started ON flows (wait_kind, wait_started_at) WHERE status='waiting';
|
|
45
|
+
CREATE INDEX IF NOT EXISTS flows_running_heartbeat ON flows (controller_heartbeat_at) WHERE status='running';
|
|
46
|
+
|
|
47
|
+
CREATE TABLE IF NOT EXISTS flow_create_idem (
|
|
48
|
+
controller_id TEXT NOT NULL,
|
|
49
|
+
owner_key TEXT NOT NULL,
|
|
50
|
+
idempotency_key TEXT NOT NULL,
|
|
51
|
+
flow_id TEXT NOT NULL,
|
|
52
|
+
PRIMARY KEY (controller_id, owner_key, idempotency_key)
|
|
53
|
+
);
|
|
54
|
+
`;
|
|
55
|
+
export class TaskFlowStore {
|
|
56
|
+
opts;
|
|
57
|
+
db;
|
|
58
|
+
opened = false;
|
|
59
|
+
constructor(opts) {
|
|
60
|
+
this.opts = opts;
|
|
61
|
+
}
|
|
62
|
+
async open() {
|
|
63
|
+
if (this.opened)
|
|
64
|
+
return;
|
|
65
|
+
let BetterSqlite3;
|
|
66
|
+
try {
|
|
67
|
+
BetterSqlite3 = await import('better-sqlite3');
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
throw new Error('TaskFlowStore requires better-sqlite3. Run: npm install better-sqlite3');
|
|
71
|
+
}
|
|
72
|
+
const Constructor = BetterSqlite3.default || BetterSqlite3;
|
|
73
|
+
const dbDir = path.dirname(this.opts.dbPath);
|
|
74
|
+
if (!fs.existsSync(dbDir))
|
|
75
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
76
|
+
this.db = Constructor(this.opts.dbPath);
|
|
77
|
+
this.db.pragma('journal_mode = WAL');
|
|
78
|
+
this.db.pragma('busy_timeout = 30000');
|
|
79
|
+
this.db.pragma('synchronous = NORMAL');
|
|
80
|
+
this.db.pragma('foreign_keys = ON');
|
|
81
|
+
this.db.exec(SCHEMA_SQL);
|
|
82
|
+
this.opened = true;
|
|
83
|
+
}
|
|
84
|
+
close() {
|
|
85
|
+
if (this.opened) {
|
|
86
|
+
this.db.close();
|
|
87
|
+
this.opened = false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
rawDb() {
|
|
91
|
+
return this.db;
|
|
92
|
+
}
|
|
93
|
+
// ───────────── helpers ─────────────
|
|
94
|
+
rowToRecord(r) {
|
|
95
|
+
const rec = {
|
|
96
|
+
flowId: r.flow_id,
|
|
97
|
+
ownerKey: r.owner_key,
|
|
98
|
+
controllerId: r.controller_id,
|
|
99
|
+
controllerInstanceId: r.controller_instance_id,
|
|
100
|
+
controllerHeartbeatAt: r.controller_heartbeat_at,
|
|
101
|
+
revision: r.revision,
|
|
102
|
+
status: r.status,
|
|
103
|
+
notifyPolicy: JSON.parse(r.notify_policy),
|
|
104
|
+
goal: r.goal,
|
|
105
|
+
createdAt: r.created_at,
|
|
106
|
+
updatedAt: r.updated_at,
|
|
107
|
+
};
|
|
108
|
+
if (r.current_step !== null)
|
|
109
|
+
rec.currentStep = r.current_step;
|
|
110
|
+
if (r.state_json !== null)
|
|
111
|
+
rec.stateJson = JSON.parse(r.state_json);
|
|
112
|
+
if (r.wait_json !== null)
|
|
113
|
+
rec.waitJson = JSON.parse(r.wait_json);
|
|
114
|
+
if (r.wait_instance_id !== null)
|
|
115
|
+
rec.waitInstanceId = r.wait_instance_id;
|
|
116
|
+
if (r.wait_started_at !== null)
|
|
117
|
+
rec.waitStartedAt = r.wait_started_at;
|
|
118
|
+
if (r.cancel_requested_at !== null)
|
|
119
|
+
rec.cancelRequestedAt = r.cancel_requested_at;
|
|
120
|
+
if (r.cancel_requested_by !== null)
|
|
121
|
+
rec.cancelRequestedBy = JSON.parse(r.cancel_requested_by);
|
|
122
|
+
if (r.ended_at !== null)
|
|
123
|
+
rec.endedAt = r.ended_at;
|
|
124
|
+
if (r.superseded_by !== null)
|
|
125
|
+
rec.supersededBy = JSON.parse(r.superseded_by);
|
|
126
|
+
if (r.privacy_scope !== null)
|
|
127
|
+
rec.privacyScope = r.privacy_scope;
|
|
128
|
+
if (r.requester_origin !== null)
|
|
129
|
+
rec.requesterOrigin = JSON.parse(r.requester_origin);
|
|
130
|
+
return rec;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Run a write closure inside `BEGIN IMMEDIATE` with retry-on-busy.
|
|
134
|
+
* Returns the closure's result.
|
|
135
|
+
*/
|
|
136
|
+
async withWriteTransaction(fn) {
|
|
137
|
+
let attempt = 0;
|
|
138
|
+
let lastErr;
|
|
139
|
+
while (attempt <= MAX_BUSY_RETRIES) {
|
|
140
|
+
try {
|
|
141
|
+
const txn = this.db.transaction(fn);
|
|
142
|
+
// exclusive=false, immediate=true matches BEGIN IMMEDIATE behavior.
|
|
143
|
+
return txn.immediate();
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
lastErr = err;
|
|
147
|
+
if (err?.code === 'SQLITE_BUSY' && attempt < MAX_BUSY_RETRIES) {
|
|
148
|
+
const delay = Math.min(BUSY_BASE_DELAY_MS * Math.pow(2, attempt), BUSY_CAP_DELAY_MS);
|
|
149
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
150
|
+
attempt++;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
throw lastErr;
|
|
157
|
+
}
|
|
158
|
+
// ───────────── reads ─────────────
|
|
159
|
+
getFlow(flowId) {
|
|
160
|
+
const row = this.db
|
|
161
|
+
.prepare('SELECT * FROM flows WHERE flow_id = ?')
|
|
162
|
+
.get(flowId);
|
|
163
|
+
return row ? this.rowToRecord(row) : null;
|
|
164
|
+
}
|
|
165
|
+
getFlowMeta(flowId) {
|
|
166
|
+
const row = this.db
|
|
167
|
+
.prepare('SELECT revision, status, ended_at FROM flows WHERE flow_id = ?')
|
|
168
|
+
.get(flowId);
|
|
169
|
+
if (!row)
|
|
170
|
+
return null;
|
|
171
|
+
return { revision: row.revision, status: row.status, endedAt: row.ended_at };
|
|
172
|
+
}
|
|
173
|
+
findIdempotent(controllerId, ownerKey, idempotencyKey) {
|
|
174
|
+
const row = this.db
|
|
175
|
+
.prepare(`SELECT f.* FROM flows f
|
|
176
|
+
JOIN flow_create_idem i ON i.flow_id = f.flow_id
|
|
177
|
+
WHERE i.controller_id = ? AND i.owner_key = ? AND i.idempotency_key = ?`)
|
|
178
|
+
.get(controllerId, ownerKey, idempotencyKey);
|
|
179
|
+
return row ? this.rowToRecord(row) : null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Find a waiting `reply` flow for a (controllerId, channel, threadId, peer)
|
|
183
|
+
* tuple — used by setFlowWaiting collision detection AND by MessageRouter.
|
|
184
|
+
*/
|
|
185
|
+
findWaitingReplyByTarget(args) {
|
|
186
|
+
const params = [args.channel, args.threadId, args.peer];
|
|
187
|
+
let sql = `SELECT * FROM flows WHERE status='waiting' AND wait_kind='reply'
|
|
188
|
+
AND json_extract(wait_json, '$.channel') = ?
|
|
189
|
+
AND json_extract(wait_json, '$.threadId') = ?
|
|
190
|
+
AND json_extract(wait_json, '$.peer') = ?`;
|
|
191
|
+
if (args.controllerId) {
|
|
192
|
+
sql += ' AND controller_id = ?';
|
|
193
|
+
params.push(args.controllerId);
|
|
194
|
+
}
|
|
195
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
196
|
+
return rows.map((r) => this.rowToRecord(r));
|
|
197
|
+
}
|
|
198
|
+
findWaitingByCorrelation(args) {
|
|
199
|
+
const rows = this.db
|
|
200
|
+
.prepare(`SELECT * FROM flows WHERE status='waiting' AND wait_kind = ?
|
|
201
|
+
AND json_extract(wait_json, '$.correlationId') = ?`)
|
|
202
|
+
.all(args.waitKind, args.correlationId);
|
|
203
|
+
return rows.map((r) => this.rowToRecord(r));
|
|
204
|
+
}
|
|
205
|
+
findWaitingDue(nowMs) {
|
|
206
|
+
const rows = this.db
|
|
207
|
+
.prepare(`SELECT * FROM flows WHERE status='waiting' AND wait_kind='scheduled-tick'
|
|
208
|
+
AND CAST(json_extract(wait_json, '$.dueAt') AS INTEGER) <= ?`)
|
|
209
|
+
.all(nowMs);
|
|
210
|
+
return rows.map((r) => this.rowToRecord(r));
|
|
211
|
+
}
|
|
212
|
+
findSweeperCandidates() {
|
|
213
|
+
const rows = this.db
|
|
214
|
+
.prepare(`SELECT * FROM flows
|
|
215
|
+
WHERE status='running' OR (status='waiting' AND wait_kind != 'scheduled-tick')`)
|
|
216
|
+
.all();
|
|
217
|
+
return rows.map((r) => this.rowToRecord(r));
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Find all flows owned by a controller. Optional status filter.
|
|
221
|
+
* Used by DivergenceChecker to compare TaskFlow records against JSON state.
|
|
222
|
+
*/
|
|
223
|
+
findByControllerId(controllerId, opts = {}) {
|
|
224
|
+
const params = [controllerId];
|
|
225
|
+
let sql = `SELECT * FROM flows WHERE controller_id = ?`;
|
|
226
|
+
if (opts.status) {
|
|
227
|
+
sql += ` AND status = ?`;
|
|
228
|
+
params.push(opts.status);
|
|
229
|
+
}
|
|
230
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
231
|
+
return rows.map((r) => this.rowToRecord(r));
|
|
232
|
+
}
|
|
233
|
+
// ───────────── writes ─────────────
|
|
234
|
+
insertFlow(rec, idempotencyKey) {
|
|
235
|
+
const stmt = this.db.prepare(`INSERT INTO flows (
|
|
236
|
+
flow_id, owner_key, controller_id, controller_instance_id, controller_heartbeat_at,
|
|
237
|
+
revision, status, notify_policy, goal, current_step, state_json, wait_json,
|
|
238
|
+
wait_instance_id, wait_started_at, wait_kind, cancel_requested_at, cancel_requested_by,
|
|
239
|
+
created_at, updated_at, ended_at, superseded_by, privacy_scope, requester_origin
|
|
240
|
+
) VALUES (
|
|
241
|
+
@flow_id, @owner_key, @controller_id, @controller_instance_id, @controller_heartbeat_at,
|
|
242
|
+
@revision, @status, @notify_policy, @goal, @current_step, @state_json, @wait_json,
|
|
243
|
+
@wait_instance_id, @wait_started_at, @wait_kind, @cancel_requested_at, @cancel_requested_by,
|
|
244
|
+
@created_at, @updated_at, @ended_at, @superseded_by, @privacy_scope, @requester_origin
|
|
245
|
+
)`);
|
|
246
|
+
stmt.run({
|
|
247
|
+
flow_id: rec.flowId,
|
|
248
|
+
owner_key: rec.ownerKey,
|
|
249
|
+
controller_id: rec.controllerId,
|
|
250
|
+
controller_instance_id: rec.controllerInstanceId,
|
|
251
|
+
controller_heartbeat_at: rec.controllerHeartbeatAt,
|
|
252
|
+
revision: rec.revision,
|
|
253
|
+
status: rec.status,
|
|
254
|
+
notify_policy: JSON.stringify(rec.notifyPolicy),
|
|
255
|
+
goal: rec.goal,
|
|
256
|
+
current_step: rec.currentStep ?? null,
|
|
257
|
+
state_json: rec.stateJson === undefined ? null : JSON.stringify(rec.stateJson),
|
|
258
|
+
wait_json: rec.waitJson ? JSON.stringify(rec.waitJson) : null,
|
|
259
|
+
wait_instance_id: rec.waitInstanceId ?? null,
|
|
260
|
+
wait_started_at: rec.waitStartedAt ?? null,
|
|
261
|
+
wait_kind: rec.waitJson?.kind ?? null,
|
|
262
|
+
cancel_requested_at: rec.cancelRequestedAt ?? null,
|
|
263
|
+
cancel_requested_by: rec.cancelRequestedBy
|
|
264
|
+
? JSON.stringify(rec.cancelRequestedBy)
|
|
265
|
+
: null,
|
|
266
|
+
created_at: rec.createdAt,
|
|
267
|
+
updated_at: rec.updatedAt,
|
|
268
|
+
ended_at: rec.endedAt ?? null,
|
|
269
|
+
superseded_by: rec.supersededBy ? JSON.stringify(rec.supersededBy) : null,
|
|
270
|
+
privacy_scope: rec.privacyScope ?? null,
|
|
271
|
+
requester_origin: rec.requesterOrigin ? JSON.stringify(rec.requesterOrigin) : null,
|
|
272
|
+
});
|
|
273
|
+
this.db
|
|
274
|
+
.prepare(`INSERT INTO flow_create_idem (controller_id, owner_key, idempotency_key, flow_id)
|
|
275
|
+
VALUES (?, ?, ?, ?)`)
|
|
276
|
+
.run(rec.controllerId, rec.ownerKey, idempotencyKey, rec.flowId);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* OCC patch: sets every column on the row to match `next`, gated on
|
|
280
|
+
* `expectedRevision`. Returns the number of rows updated.
|
|
281
|
+
*/
|
|
282
|
+
patchFlowOcc(next, expectedRevision) {
|
|
283
|
+
const result = this.db
|
|
284
|
+
.prepare(`UPDATE flows SET
|
|
285
|
+
controller_instance_id = @controller_instance_id,
|
|
286
|
+
controller_heartbeat_at = @controller_heartbeat_at,
|
|
287
|
+
revision = @revision,
|
|
288
|
+
status = @status,
|
|
289
|
+
notify_policy = @notify_policy,
|
|
290
|
+
goal = @goal,
|
|
291
|
+
current_step = @current_step,
|
|
292
|
+
state_json = @state_json,
|
|
293
|
+
wait_json = @wait_json,
|
|
294
|
+
wait_instance_id = @wait_instance_id,
|
|
295
|
+
wait_started_at = @wait_started_at,
|
|
296
|
+
wait_kind = @wait_kind,
|
|
297
|
+
cancel_requested_at = @cancel_requested_at,
|
|
298
|
+
cancel_requested_by = @cancel_requested_by,
|
|
299
|
+
updated_at = @updated_at,
|
|
300
|
+
ended_at = @ended_at,
|
|
301
|
+
superseded_by = @superseded_by,
|
|
302
|
+
privacy_scope = @privacy_scope,
|
|
303
|
+
requester_origin = @requester_origin
|
|
304
|
+
WHERE flow_id = @flow_id AND revision = @expected_revision`)
|
|
305
|
+
.run({
|
|
306
|
+
flow_id: next.flowId,
|
|
307
|
+
expected_revision: expectedRevision,
|
|
308
|
+
controller_instance_id: next.controllerInstanceId,
|
|
309
|
+
controller_heartbeat_at: next.controllerHeartbeatAt,
|
|
310
|
+
revision: next.revision,
|
|
311
|
+
status: next.status,
|
|
312
|
+
notify_policy: JSON.stringify(next.notifyPolicy),
|
|
313
|
+
goal: next.goal,
|
|
314
|
+
current_step: next.currentStep ?? null,
|
|
315
|
+
state_json: next.stateJson === undefined ? null : JSON.stringify(next.stateJson),
|
|
316
|
+
wait_json: next.waitJson ? JSON.stringify(next.waitJson) : null,
|
|
317
|
+
wait_instance_id: next.waitInstanceId ?? null,
|
|
318
|
+
wait_started_at: next.waitStartedAt ?? null,
|
|
319
|
+
wait_kind: next.waitJson?.kind ?? null,
|
|
320
|
+
cancel_requested_at: next.cancelRequestedAt ?? null,
|
|
321
|
+
cancel_requested_by: next.cancelRequestedBy
|
|
322
|
+
? JSON.stringify(next.cancelRequestedBy)
|
|
323
|
+
: null,
|
|
324
|
+
updated_at: next.updatedAt,
|
|
325
|
+
ended_at: next.endedAt ?? null,
|
|
326
|
+
superseded_by: next.supersededBy ? JSON.stringify(next.supersededBy) : null,
|
|
327
|
+
privacy_scope: next.privacyScope ?? null,
|
|
328
|
+
requester_origin: next.requesterOrigin ? JSON.stringify(next.requesterOrigin) : null,
|
|
329
|
+
});
|
|
330
|
+
return result.changes;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Cheap pingFlow update — does NOT bump revision. Returns rows updated (0 or 1).
|
|
334
|
+
*/
|
|
335
|
+
pingFlowRow(args) {
|
|
336
|
+
return this.db
|
|
337
|
+
.prepare(`UPDATE flows SET
|
|
338
|
+
controller_instance_id = @cii,
|
|
339
|
+
controller_heartbeat_at = @hb,
|
|
340
|
+
updated_at = @ua
|
|
341
|
+
WHERE flow_id = @flow_id AND status = 'running'`)
|
|
342
|
+
.run({
|
|
343
|
+
flow_id: args.flowId,
|
|
344
|
+
cii: args.controllerInstanceId,
|
|
345
|
+
hb: args.controllerHeartbeatAt,
|
|
346
|
+
ua: args.updatedAt,
|
|
347
|
+
}).changes;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=task-flow-registry.store.sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-flow-registry.store.sqlite.js","sourceRoot":"","sources":["../../src/tasks/task-flow-registry.store.sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskFlow — types and constants.
|
|
3
|
+
*
|
|
4
|
+
* Imported from OpenClaw's task-flow-registry shape, trimmed for Instar v1
|
|
5
|
+
* (single-writer; managed-only; no `blocked` status).
|
|
6
|
+
*
|
|
7
|
+
* See docs/specs/OPENCLAW-IMPORT-TASKFLOW-SPEC.md for full design.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import type { PrivacyScopeType } from '../core/types.js';
|
|
11
|
+
export type TaskFlowStatus = 'queued' | 'running' | 'waiting' | 'succeeded' | 'failed' | 'cancelled' | 'lost';
|
|
12
|
+
export declare const TERMINAL_STATUSES: ReadonlySet<TaskFlowStatus>;
|
|
13
|
+
export type WaitKind = 'reply' | 'human-review' | 'external-call' | 'scheduled-tick' | 'cross-agent-callback';
|
|
14
|
+
export type WaitJson = {
|
|
15
|
+
kind: 'reply';
|
|
16
|
+
channel: string;
|
|
17
|
+
threadId: string;
|
|
18
|
+
peer: string;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'human-review';
|
|
21
|
+
question: string;
|
|
22
|
+
topicId?: number;
|
|
23
|
+
reviewerId?: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'external-call';
|
|
26
|
+
serviceId: string;
|
|
27
|
+
correlationId: string;
|
|
28
|
+
deadline?: number;
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'scheduled-tick';
|
|
31
|
+
dueAt: number;
|
|
32
|
+
jobSlug?: string;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'cross-agent-callback';
|
|
35
|
+
threadId: string;
|
|
36
|
+
correlationId: string;
|
|
37
|
+
expectedAgentId: string;
|
|
38
|
+
};
|
|
39
|
+
export type RequesterOrigin = {
|
|
40
|
+
kind: 'user' | 'agent' | 'system' | 'job';
|
|
41
|
+
id: string;
|
|
42
|
+
channel?: string;
|
|
43
|
+
};
|
|
44
|
+
export type SupersededRef = {
|
|
45
|
+
kind: 'ledger-note';
|
|
46
|
+
ledgerEntryId: string;
|
|
47
|
+
reason: 'lost' | 'stranded' | 'manual-supersede';
|
|
48
|
+
};
|
|
49
|
+
export type TaskNotifyPolicy = {
|
|
50
|
+
kind: 'silent';
|
|
51
|
+
} | {
|
|
52
|
+
kind: 'on-wait';
|
|
53
|
+
topicId: number;
|
|
54
|
+
} | {
|
|
55
|
+
kind: 'on-terminal';
|
|
56
|
+
topicId: number;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'on-wait-and-terminal';
|
|
59
|
+
topicId: number;
|
|
60
|
+
};
|
|
61
|
+
export interface TaskFlowRecord {
|
|
62
|
+
flowId: string;
|
|
63
|
+
ownerKey: string;
|
|
64
|
+
requesterOrigin?: RequesterOrigin;
|
|
65
|
+
controllerId: string;
|
|
66
|
+
controllerInstanceId: string;
|
|
67
|
+
controllerHeartbeatAt: number;
|
|
68
|
+
revision: number;
|
|
69
|
+
status: TaskFlowStatus;
|
|
70
|
+
notifyPolicy: TaskNotifyPolicy;
|
|
71
|
+
goal: string;
|
|
72
|
+
currentStep?: string;
|
|
73
|
+
stateJson?: unknown;
|
|
74
|
+
waitJson?: WaitJson;
|
|
75
|
+
waitInstanceId?: string;
|
|
76
|
+
waitStartedAt?: number;
|
|
77
|
+
cancelRequestedAt?: number;
|
|
78
|
+
cancelRequestedBy?: RequesterOrigin;
|
|
79
|
+
createdAt: number;
|
|
80
|
+
updatedAt: number;
|
|
81
|
+
endedAt?: number;
|
|
82
|
+
supersededBy?: SupersededRef;
|
|
83
|
+
privacyScope?: PrivacyScopeType;
|
|
84
|
+
}
|
|
85
|
+
export declare const MAX_OWNER_KEY_CHARS = 256;
|
|
86
|
+
export declare const MAX_GOAL_CHARS = 1024;
|
|
87
|
+
export declare const MAX_CURRENT_STEP_CHARS = 128;
|
|
88
|
+
export declare const MAX_STATE_JSON_BYTES: number;
|
|
89
|
+
export declare const MAX_WAIT_JSON_BYTES: number;
|
|
90
|
+
export declare const DEFAULT_THRESHOLDS: {
|
|
91
|
+
readonly RUNNING_LOST_MS: number;
|
|
92
|
+
readonly REPLY_LOST_MS: number;
|
|
93
|
+
readonly HUMAN_REVIEW_LOST_MS: number;
|
|
94
|
+
readonly EXTERNAL_LOST_MS: number;
|
|
95
|
+
readonly EXTERNAL_GRACE_MS: number;
|
|
96
|
+
readonly XAGENT_LOST_MS: number;
|
|
97
|
+
};
|
|
98
|
+
export declare const HEARTBEAT_INTERVAL_MS: number;
|
|
99
|
+
export declare const SWEEPER_INTERVAL_MS: number;
|
|
100
|
+
export declare const DUE_WAKER_INTERVAL_MS: number;
|
|
101
|
+
export declare const MAX_CACHE_ENTRIES = 1000;
|
|
102
|
+
export declare const MAX_BUSY_RETRIES = 5;
|
|
103
|
+
export declare const BUSY_BASE_DELAY_MS = 50;
|
|
104
|
+
export declare const BUSY_CAP_DELAY_MS = 5000;
|
|
105
|
+
export declare const RESERVED_MAINTENANCE_CONTROLLER = "TaskFlowMaintenance";
|
|
106
|
+
export declare const DEFAULT_CREATE_PER_SEC_PER_CONTROLLER = 10;
|
|
107
|
+
export declare const DEFAULT_MAX_ACTIVE_PER_CONTROLLER = 50;
|
|
108
|
+
export declare const DEFAULT_PING_PER_MIN_PER_FLOW = 60;
|
|
109
|
+
export declare const DEFAULT_CACHE_MAX_ENTRIES = 1000;
|
|
110
|
+
export interface RateLimitConfig {
|
|
111
|
+
/** Max createFlow calls per second per controllerId. Default 10. Set Infinity to disable. */
|
|
112
|
+
createPerSecPerController: number;
|
|
113
|
+
/** Max non-terminal flows per controllerId. Default 50. Set Infinity to disable. */
|
|
114
|
+
maxActivePerController: number;
|
|
115
|
+
/** Max pingFlow calls per minute per flowId. Default 60. Set Infinity to disable. */
|
|
116
|
+
pingPerMinPerFlow: number;
|
|
117
|
+
}
|
|
118
|
+
export interface CacheConfig {
|
|
119
|
+
/** Cache cap; on overflow LRU eviction. Default 1000. */
|
|
120
|
+
maxEntries: number;
|
|
121
|
+
}
|
|
122
|
+
export declare const DEFAULT_RATE_LIMITS: RateLimitConfig;
|
|
123
|
+
export declare const DEFAULT_CACHE_CONFIG: CacheConfig;
|
|
124
|
+
/** Active (non-terminal) flow statuses for max-active-per-controller bookkeeping. */
|
|
125
|
+
export declare const ACTIVE_STATUSES: ReadonlyArray<TaskFlowStatus>;
|
|
126
|
+
export type TaskFlowErrorCode = 'not_found' | 'revision_conflict' | 'already_terminal' | 'invalid_transition' | 'invalid_argument' | 'unauthorized_controller' | 'already_consumed' | 'wait_collision' | 'quota_exceeded';
|
|
127
|
+
export declare class TaskFlowError extends Error {
|
|
128
|
+
code: TaskFlowErrorCode;
|
|
129
|
+
detail: Record<string, unknown>;
|
|
130
|
+
constructor(code: TaskFlowErrorCode, message: string, detail?: Record<string, unknown>);
|
|
131
|
+
}
|
|
132
|
+
export type TaskFlowPrincipal = {
|
|
133
|
+
scope: 'controller';
|
|
134
|
+
controllerId: string;
|
|
135
|
+
controllerInstanceId: string;
|
|
136
|
+
} | {
|
|
137
|
+
scope: 'system-waker';
|
|
138
|
+
wakerId: string;
|
|
139
|
+
} | {
|
|
140
|
+
scope: 'admin';
|
|
141
|
+
};
|
|
142
|
+
export declare const waitJsonSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
143
|
+
kind: z.ZodLiteral<"reply">;
|
|
144
|
+
channel: z.ZodString;
|
|
145
|
+
threadId: z.ZodString;
|
|
146
|
+
peer: z.ZodString;
|
|
147
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
148
|
+
kind: z.ZodLiteral<"human-review">;
|
|
149
|
+
question: z.ZodString;
|
|
150
|
+
topicId: z.ZodOptional<z.ZodNumber>;
|
|
151
|
+
reviewerId: z.ZodOptional<z.ZodString>;
|
|
152
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
153
|
+
kind: z.ZodLiteral<"external-call">;
|
|
154
|
+
serviceId: z.ZodString;
|
|
155
|
+
correlationId: z.ZodString;
|
|
156
|
+
deadline: z.ZodOptional<z.ZodNumber>;
|
|
157
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
158
|
+
kind: z.ZodLiteral<"scheduled-tick">;
|
|
159
|
+
dueAt: z.ZodNumber;
|
|
160
|
+
jobSlug: z.ZodOptional<z.ZodString>;
|
|
161
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
162
|
+
kind: z.ZodLiteral<"cross-agent-callback">;
|
|
163
|
+
threadId: z.ZodString;
|
|
164
|
+
correlationId: z.ZodString;
|
|
165
|
+
expectedAgentId: z.ZodString;
|
|
166
|
+
}, z.core.$strip>], "kind">;
|
|
167
|
+
export declare const createFlowInputSchema: z.ZodObject<{
|
|
168
|
+
ownerKey: z.ZodString;
|
|
169
|
+
controllerId: z.ZodString;
|
|
170
|
+
controllerInstanceId: z.ZodString;
|
|
171
|
+
idempotencyKey: z.ZodString;
|
|
172
|
+
goal: z.ZodString;
|
|
173
|
+
currentStep: z.ZodOptional<z.ZodString>;
|
|
174
|
+
stateJson: z.ZodOptional<z.ZodUnknown>;
|
|
175
|
+
notifyPolicy: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
176
|
+
kind: z.ZodLiteral<"silent">;
|
|
177
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
178
|
+
kind: z.ZodLiteral<"on-wait">;
|
|
179
|
+
topicId: z.ZodNumber;
|
|
180
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
181
|
+
kind: z.ZodLiteral<"on-terminal">;
|
|
182
|
+
topicId: z.ZodNumber;
|
|
183
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
184
|
+
kind: z.ZodLiteral<"on-wait-and-terminal">;
|
|
185
|
+
topicId: z.ZodNumber;
|
|
186
|
+
}, z.core.$strip>], "kind">>;
|
|
187
|
+
requesterOrigin: z.ZodOptional<z.ZodObject<{
|
|
188
|
+
kind: z.ZodEnum<{
|
|
189
|
+
job: "job";
|
|
190
|
+
agent: "agent";
|
|
191
|
+
user: "user";
|
|
192
|
+
system: "system";
|
|
193
|
+
}>;
|
|
194
|
+
id: z.ZodString;
|
|
195
|
+
channel: z.ZodOptional<z.ZodString>;
|
|
196
|
+
}, z.core.$strip>>;
|
|
197
|
+
privacyScope: z.ZodOptional<z.ZodEnum<{
|
|
198
|
+
private: "private";
|
|
199
|
+
"shared-topic": "shared-topic";
|
|
200
|
+
"shared-project": "shared-project";
|
|
201
|
+
}>>;
|
|
202
|
+
}, z.core.$strip>;
|
|
203
|
+
export type CreateFlowInput = z.infer<typeof createFlowInputSchema>;
|
|
204
|
+
export interface ApplyResult {
|
|
205
|
+
applied: boolean;
|
|
206
|
+
flow: TaskFlowRecord;
|
|
207
|
+
}
|
|
208
|
+
export interface WaitMatch {
|
|
209
|
+
flowId: string;
|
|
210
|
+
revision: number;
|
|
211
|
+
waitInstanceId: string;
|
|
212
|
+
controllerId: string;
|
|
213
|
+
waitJson: WaitJson;
|
|
214
|
+
}
|
|
215
|
+
export interface SweeperEvalCounts {
|
|
216
|
+
scanned: number;
|
|
217
|
+
marked: number;
|
|
218
|
+
}
|
|
219
|
+
export interface TaskFlowThresholds {
|
|
220
|
+
RUNNING_LOST_MS: number;
|
|
221
|
+
REPLY_LOST_MS: number;
|
|
222
|
+
HUMAN_REVIEW_LOST_MS: number;
|
|
223
|
+
EXTERNAL_LOST_MS: number;
|
|
224
|
+
EXTERNAL_GRACE_MS: number;
|
|
225
|
+
XAGENT_LOST_MS: number;
|
|
226
|
+
}
|
|
227
|
+
export declare function jsonByteLength(value: unknown): number;
|
|
228
|
+
export declare function isTerminalStatus(status: TaskFlowStatus): boolean;
|
|
229
|
+
//# sourceMappingURL=task-flow-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-flow-types.d.ts","sourceRoot":"","sources":["../../src/tasks/task-flow-types.ts"],"names":[],"mappings":"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"}
|