@useorgx/openclaw-plugin 0.3.2 → 0.4.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.
@@ -0,0 +1,63 @@
1
+ export type RuntimeSourceClient = "openclaw" | "codex" | "claude-code" | "api" | "unknown";
2
+ export type RuntimeInstanceState = "active" | "stale" | "stopped" | "error";
3
+ export type RuntimeHookEvent = "session_start" | "heartbeat" | "progress" | "task_update" | "session_stop" | "error";
4
+ export type RuntimeHookPayload = {
5
+ source_client?: string | null;
6
+ event?: string | null;
7
+ run_id?: string | null;
8
+ correlation_id?: string | null;
9
+ initiative_id?: string | null;
10
+ workstream_id?: string | null;
11
+ task_id?: string | null;
12
+ agent_id?: string | null;
13
+ agent_name?: string | null;
14
+ phase?: string | null;
15
+ progress_pct?: number | null;
16
+ message?: string | null;
17
+ metadata?: Record<string, unknown> | null;
18
+ timestamp?: string | null;
19
+ };
20
+ export type RuntimeInstanceRecord = {
21
+ id: string;
22
+ sourceClient: RuntimeSourceClient;
23
+ displayName: string;
24
+ providerLogo: "openai" | "anthropic" | "openclaw" | "orgx" | "unknown";
25
+ state: RuntimeInstanceState;
26
+ event: RuntimeHookEvent;
27
+ runId: string | null;
28
+ correlationId: string | null;
29
+ initiativeId: string | null;
30
+ workstreamId: string | null;
31
+ taskId: string | null;
32
+ agentId: string | null;
33
+ agentName: string | null;
34
+ phase: string | null;
35
+ progressPct: number | null;
36
+ currentTask: string | null;
37
+ lastHeartbeatAt: string | null;
38
+ lastEventAt: string;
39
+ lastMessage: string | null;
40
+ metadata: Record<string, unknown> | null;
41
+ createdAt: string;
42
+ updatedAt: string;
43
+ };
44
+ type PersistedRuntimeInstances = {
45
+ updatedAt: string;
46
+ instances: Record<string, RuntimeInstanceRecord>;
47
+ };
48
+ export declare const DEFAULT_RUNTIME_HEARTBEAT_TIMEOUT_MS = 90000;
49
+ export declare function readRuntimeInstances(): PersistedRuntimeInstances;
50
+ export declare function upsertRuntimeInstanceFromHook(payload: RuntimeHookPayload): RuntimeInstanceRecord;
51
+ export declare function applyRuntimeInstanceStaleness(options?: {
52
+ timeoutMs?: number;
53
+ nowMs?: number;
54
+ }): PersistedRuntimeInstances;
55
+ export declare function listRuntimeInstances(options?: {
56
+ limit?: number;
57
+ timeoutMs?: number;
58
+ nowMs?: number;
59
+ }): RuntimeInstanceRecord[];
60
+ export declare function clearRuntimeInstances(): void;
61
+ export declare function resolveRuntimeHookToken(): string;
62
+ export {};
63
+ //# sourceMappingURL=runtime-instance-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-instance-store.d.ts","sourceRoot":"","sources":["../src/runtime-instance-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,363 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { getOrgxPluginConfigDir, getOrgxPluginConfigPath } from "./paths.js";
4
+ import { backupCorruptFileSync, writeJsonFileAtomicSync } from "./fs-utils.js";
5
+ const MAX_INSTANCES = 600;
6
+ export const DEFAULT_RUNTIME_HEARTBEAT_TIMEOUT_MS = 90_000;
7
+ function runtimeDir() {
8
+ return getOrgxPluginConfigDir();
9
+ }
10
+ function runtimeFile() {
11
+ return getOrgxPluginConfigPath("runtime-instances.json");
12
+ }
13
+ function hookTokenFile() {
14
+ return getOrgxPluginConfigPath("runtime-hook-token.txt");
15
+ }
16
+ function ensureRuntimeDir() {
17
+ const dir = runtimeDir();
18
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
19
+ try {
20
+ chmodSync(dir, 0o700);
21
+ }
22
+ catch {
23
+ // best effort
24
+ }
25
+ }
26
+ function writeHookTokenFile(token) {
27
+ ensureRuntimeDir();
28
+ const file = hookTokenFile();
29
+ writeFileSync(file, `${token}\n`, { encoding: "utf8", mode: 0o600 });
30
+ try {
31
+ chmodSync(file, 0o600);
32
+ }
33
+ catch {
34
+ // best effort
35
+ }
36
+ }
37
+ function parseJson(value) {
38
+ try {
39
+ return JSON.parse(value);
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ function normalizeNullableString(value) {
46
+ if (typeof value !== "string")
47
+ return null;
48
+ const trimmed = value.trim();
49
+ return trimmed.length > 0 ? trimmed : null;
50
+ }
51
+ function normalizeObject(value) {
52
+ if (!value || typeof value !== "object" || Array.isArray(value))
53
+ return null;
54
+ return value;
55
+ }
56
+ function normalizeSourceClient(value) {
57
+ const normalized = normalizeNullableString(value)?.toLowerCase();
58
+ if (!normalized)
59
+ return "unknown";
60
+ if (normalized === "openclaw")
61
+ return "openclaw";
62
+ if (normalized === "codex")
63
+ return "codex";
64
+ if (normalized === "claude-code")
65
+ return "claude-code";
66
+ if (normalized === "api")
67
+ return "api";
68
+ return "unknown";
69
+ }
70
+ function normalizeHookEvent(value) {
71
+ const normalized = normalizeNullableString(value)?.toLowerCase();
72
+ if (normalized === "session_start")
73
+ return "session_start";
74
+ if (normalized === "heartbeat")
75
+ return "heartbeat";
76
+ if (normalized === "progress")
77
+ return "progress";
78
+ if (normalized === "task_update")
79
+ return "task_update";
80
+ if (normalized === "session_stop")
81
+ return "session_stop";
82
+ if (normalized === "error")
83
+ return "error";
84
+ return "heartbeat";
85
+ }
86
+ function toProviderLogo(sourceClient) {
87
+ if (sourceClient === "codex")
88
+ return "openai";
89
+ if (sourceClient === "claude-code")
90
+ return "anthropic";
91
+ if (sourceClient === "openclaw")
92
+ return "openclaw";
93
+ if (sourceClient === "api")
94
+ return "orgx";
95
+ return "unknown";
96
+ }
97
+ function toDisplayName(sourceClient) {
98
+ if (sourceClient === "codex")
99
+ return "Codex";
100
+ if (sourceClient === "claude-code")
101
+ return "Claude Code";
102
+ if (sourceClient === "openclaw")
103
+ return "OpenClaw";
104
+ if (sourceClient === "api")
105
+ return "OrgX API";
106
+ return "Runtime";
107
+ }
108
+ function normalizeState(value) {
109
+ const normalized = normalizeNullableString(value)?.toLowerCase();
110
+ if (normalized === "active")
111
+ return "active";
112
+ if (normalized === "stale")
113
+ return "stale";
114
+ if (normalized === "stopped")
115
+ return "stopped";
116
+ if (normalized === "error")
117
+ return "error";
118
+ return "active";
119
+ }
120
+ function normalizeIsoTimestamp(value, fallbackIso) {
121
+ const text = normalizeNullableString(value);
122
+ if (!text)
123
+ return fallbackIso;
124
+ const parsed = Date.parse(text);
125
+ if (!Number.isFinite(parsed))
126
+ return fallbackIso;
127
+ return new Date(parsed).toISOString();
128
+ }
129
+ function sanitizeIdPart(value) {
130
+ return value.toLowerCase().replace(/[^a-z0-9:_-]+/g, "-");
131
+ }
132
+ function deriveInstanceId(input) {
133
+ const source = sanitizeIdPart(input.sourceClient);
134
+ const runId = normalizeNullableString(input.runId);
135
+ if (runId)
136
+ return `runtime:${source}:run:${sanitizeIdPart(runId)}`;
137
+ const correlationId = normalizeNullableString(input.correlationId);
138
+ if (correlationId)
139
+ return `runtime:${source}:corr:${sanitizeIdPart(correlationId)}`;
140
+ const agentId = normalizeNullableString(input.agentId);
141
+ const initiativeId = normalizeNullableString(input.initiativeId);
142
+ if (agentId && initiativeId) {
143
+ return `runtime:${source}:agent:${sanitizeIdPart(agentId)}:initiative:${sanitizeIdPart(initiativeId)}`;
144
+ }
145
+ if (agentId)
146
+ return `runtime:${source}:agent:${sanitizeIdPart(agentId)}`;
147
+ return `runtime:${source}:default`;
148
+ }
149
+ function normalizeProgress(value) {
150
+ if (typeof value !== "number" || !Number.isFinite(value))
151
+ return null;
152
+ return Math.max(0, Math.min(100, Math.round(value)));
153
+ }
154
+ function normalizeRecord(input) {
155
+ return {
156
+ id: normalizeNullableString(input.id) ?? input.id,
157
+ sourceClient: normalizeSourceClient(input.sourceClient),
158
+ displayName: normalizeNullableString(input.displayName) ?? "Runtime",
159
+ providerLogo: input.providerLogo,
160
+ state: normalizeState(input.state),
161
+ event: normalizeHookEvent(input.event),
162
+ runId: normalizeNullableString(input.runId),
163
+ correlationId: normalizeNullableString(input.correlationId),
164
+ initiativeId: normalizeNullableString(input.initiativeId),
165
+ workstreamId: normalizeNullableString(input.workstreamId),
166
+ taskId: normalizeNullableString(input.taskId),
167
+ agentId: normalizeNullableString(input.agentId),
168
+ agentName: normalizeNullableString(input.agentName),
169
+ phase: normalizeNullableString(input.phase),
170
+ progressPct: normalizeProgress(input.progressPct),
171
+ currentTask: normalizeNullableString(input.currentTask),
172
+ lastHeartbeatAt: normalizeNullableString(input.lastHeartbeatAt),
173
+ lastEventAt: input.lastEventAt,
174
+ lastMessage: normalizeNullableString(input.lastMessage),
175
+ metadata: normalizeObject(input.metadata),
176
+ createdAt: input.createdAt,
177
+ updatedAt: input.updatedAt,
178
+ };
179
+ }
180
+ export function readRuntimeInstances() {
181
+ const file = runtimeFile();
182
+ try {
183
+ if (!existsSync(file)) {
184
+ return { updatedAt: new Date().toISOString(), instances: {} };
185
+ }
186
+ const raw = readFileSync(file, "utf8");
187
+ const parsed = parseJson(raw);
188
+ if (!parsed || typeof parsed !== "object") {
189
+ backupCorruptFileSync(file);
190
+ return { updatedAt: new Date().toISOString(), instances: {} };
191
+ }
192
+ const instances = parsed.instances && typeof parsed.instances === "object"
193
+ ? parsed.instances
194
+ : {};
195
+ return {
196
+ updatedAt: typeof parsed.updatedAt === "string"
197
+ ? parsed.updatedAt
198
+ : new Date().toISOString(),
199
+ instances: instances,
200
+ };
201
+ }
202
+ catch {
203
+ return { updatedAt: new Date().toISOString(), instances: {} };
204
+ }
205
+ }
206
+ function pruneStore(store) {
207
+ const values = Object.values(store.instances);
208
+ if (values.length <= MAX_INSTANCES)
209
+ return;
210
+ values.sort((a, b) => Date.parse(b.lastEventAt) - Date.parse(a.lastEventAt));
211
+ const keep = new Set(values.slice(0, MAX_INSTANCES).map((record) => record.id));
212
+ for (const key of Object.keys(store.instances)) {
213
+ if (!keep.has(key)) {
214
+ delete store.instances[key];
215
+ }
216
+ }
217
+ }
218
+ function writeRuntimeInstances(next) {
219
+ ensureRuntimeDir();
220
+ const file = runtimeFile();
221
+ writeJsonFileAtomicSync(file, next, 0o600);
222
+ }
223
+ export function upsertRuntimeInstanceFromHook(payload) {
224
+ const sourceClient = normalizeSourceClient(payload.source_client);
225
+ const event = normalizeHookEvent(payload.event);
226
+ const nowIso = new Date().toISOString();
227
+ const eventAt = normalizeIsoTimestamp(payload.timestamp, nowIso);
228
+ const runId = normalizeNullableString(payload.run_id);
229
+ const correlationId = normalizeNullableString(payload.correlation_id);
230
+ const initiativeId = normalizeNullableString(payload.initiative_id);
231
+ const workstreamId = normalizeNullableString(payload.workstream_id);
232
+ const taskId = normalizeNullableString(payload.task_id);
233
+ const agentId = normalizeNullableString(payload.agent_id);
234
+ const agentName = normalizeNullableString(payload.agent_name);
235
+ const phase = normalizeNullableString(payload.phase);
236
+ const progressPct = normalizeProgress(payload.progress_pct);
237
+ const message = normalizeNullableString(payload.message);
238
+ const metadata = normalizeObject(payload.metadata);
239
+ const id = deriveInstanceId({
240
+ sourceClient,
241
+ runId,
242
+ correlationId,
243
+ agentId,
244
+ initiativeId,
245
+ });
246
+ const store = readRuntimeInstances();
247
+ const existing = store.instances[id] ? normalizeRecord(store.instances[id]) : null;
248
+ let state = existing?.state ?? "active";
249
+ if (event === "session_stop")
250
+ state = "stopped";
251
+ else if (event === "error")
252
+ state = "error";
253
+ else
254
+ state = "active";
255
+ const shouldRefreshHeartbeat = event === "session_start" ||
256
+ event === "heartbeat" ||
257
+ event === "progress" ||
258
+ event === "task_update";
259
+ const record = {
260
+ id,
261
+ sourceClient,
262
+ displayName: toDisplayName(sourceClient),
263
+ providerLogo: toProviderLogo(sourceClient),
264
+ state,
265
+ event,
266
+ runId: runId ?? existing?.runId ?? null,
267
+ correlationId: correlationId ?? existing?.correlationId ?? null,
268
+ initiativeId: initiativeId ?? existing?.initiativeId ?? null,
269
+ workstreamId: workstreamId ?? existing?.workstreamId ?? null,
270
+ taskId: taskId ?? existing?.taskId ?? null,
271
+ agentId: agentId ?? existing?.agentId ?? null,
272
+ agentName: agentName ?? existing?.agentName ?? null,
273
+ phase: phase ?? existing?.phase ?? null,
274
+ progressPct: progressPct ?? existing?.progressPct ?? null,
275
+ currentTask: taskId ?? existing?.currentTask ?? null,
276
+ lastHeartbeatAt: shouldRefreshHeartbeat
277
+ ? eventAt
278
+ : existing?.lastHeartbeatAt ?? null,
279
+ lastEventAt: eventAt,
280
+ lastMessage: message ?? existing?.lastMessage ?? null,
281
+ metadata: metadata ?? existing?.metadata ?? null,
282
+ createdAt: existing?.createdAt ?? eventAt,
283
+ updatedAt: nowIso,
284
+ };
285
+ store.instances[id] = record;
286
+ store.updatedAt = nowIso;
287
+ pruneStore(store);
288
+ writeRuntimeInstances(store);
289
+ return record;
290
+ }
291
+ export function applyRuntimeInstanceStaleness(options) {
292
+ const timeoutMs = Math.max(10_000, options?.timeoutMs ?? DEFAULT_RUNTIME_HEARTBEAT_TIMEOUT_MS);
293
+ const nowMs = options?.nowMs ?? Date.now();
294
+ const store = readRuntimeInstances();
295
+ let changed = false;
296
+ for (const [id, rawRecord] of Object.entries(store.instances)) {
297
+ const record = normalizeRecord(rawRecord);
298
+ if (record.state !== "active") {
299
+ if (rawRecord !== record) {
300
+ store.instances[id] = record;
301
+ changed = true;
302
+ }
303
+ continue;
304
+ }
305
+ const heartbeatAt = record.lastHeartbeatAt ?? record.lastEventAt;
306
+ const heartbeatEpoch = Date.parse(heartbeatAt);
307
+ if (!Number.isFinite(heartbeatEpoch))
308
+ continue;
309
+ if (nowMs - heartbeatEpoch <= timeoutMs)
310
+ continue;
311
+ store.instances[id] = {
312
+ ...record,
313
+ state: "stale",
314
+ updatedAt: new Date(nowMs).toISOString(),
315
+ };
316
+ changed = true;
317
+ }
318
+ if (changed) {
319
+ store.updatedAt = new Date(nowMs).toISOString();
320
+ writeRuntimeInstances(store);
321
+ }
322
+ return store;
323
+ }
324
+ export function listRuntimeInstances(options) {
325
+ const timeoutMs = options?.timeoutMs ?? DEFAULT_RUNTIME_HEARTBEAT_TIMEOUT_MS;
326
+ const nowMs = options?.nowMs ?? Date.now();
327
+ const store = applyRuntimeInstanceStaleness({ timeoutMs, nowMs });
328
+ const limit = Math.max(1, options?.limit ?? MAX_INSTANCES);
329
+ return Object.values(store.instances)
330
+ .map((record) => normalizeRecord(record))
331
+ .sort((a, b) => Date.parse(b.lastEventAt) - Date.parse(a.lastEventAt))
332
+ .slice(0, limit);
333
+ }
334
+ export function clearRuntimeInstances() {
335
+ const file = runtimeFile();
336
+ try {
337
+ rmSync(file, { force: true });
338
+ }
339
+ catch {
340
+ // best effort
341
+ }
342
+ }
343
+ export function resolveRuntimeHookToken() {
344
+ const envToken = normalizeNullableString(process.env.ORGX_HOOK_TOKEN);
345
+ if (envToken)
346
+ return envToken;
347
+ const file = hookTokenFile();
348
+ try {
349
+ if (existsSync(file)) {
350
+ const raw = readFileSync(file, "utf8");
351
+ const token = normalizeNullableString(raw);
352
+ if (token)
353
+ return token;
354
+ }
355
+ }
356
+ catch {
357
+ // fallback to generated token
358
+ }
359
+ const generated = `orgx_hook_${randomUUID().replace(/-/g, "")}`;
360
+ writeHookTokenFile(generated);
361
+ return generated;
362
+ }
363
+ //# sourceMappingURL=runtime-instance-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-instance-store.js","sourceRoot":"","sources":["../src/runtime-instance-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useorgx/openclaw-plugin",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "OrgX plugin for OpenClaw — agent orchestration, quality gates, model routing, and live dashboard",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",