@useorgx/openclaw-plugin 0.3.1 → 0.3.2

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.
Files changed (56) hide show
  1. package/dashboard/dist/assets/MissionControlView-CthHdl6R.js +1 -0
  2. package/dashboard/dist/assets/SessionInspector-Dq0Z5WMo.js +1 -0
  3. package/dashboard/dist/assets/index-CoLgC4zE.js +11 -0
  4. package/dashboard/dist/assets/index-jfEYE0kO.css +1 -0
  5. package/dashboard/dist/assets/motion-CVDprFZg.js +9 -0
  6. package/dashboard/dist/assets/orgx-logo-Fm0FhtnV.png +0 -0
  7. package/dashboard/dist/assets/react-vendor-C2t2w4r2.js +32 -0
  8. package/dashboard/dist/assets/tanstack-C-KIc3Wc.js +1 -0
  9. package/dashboard/dist/assets/vendor-C-AHK0Ly.js +9 -0
  10. package/dashboard/dist/index.html +6 -2
  11. package/dist/agent-context-store.d.ts.map +1 -1
  12. package/dist/agent-context-store.js +21 -20
  13. package/dist/agent-context-store.js.map +1 -1
  14. package/dist/agent-run-store.d.ts.map +1 -1
  15. package/dist/agent-run-store.js +21 -20
  16. package/dist/agent-run-store.js.map +1 -1
  17. package/dist/auth-store.d.ts.map +1 -1
  18. package/dist/auth-store.js +39 -44
  19. package/dist/auth-store.js.map +1 -1
  20. package/dist/byok-store.d.ts.map +1 -1
  21. package/dist/byok-store.js +24 -20
  22. package/dist/byok-store.js.map +1 -1
  23. package/dist/fs-utils.d.ts +7 -0
  24. package/dist/fs-utils.d.ts.map +1 -0
  25. package/dist/fs-utils.js +63 -0
  26. package/dist/fs-utils.js.map +1 -0
  27. package/dist/http-handler.d.ts +17 -0
  28. package/dist/http-handler.d.ts.map +1 -1
  29. package/dist/http-handler.js +281 -11
  30. package/dist/http-handler.js.map +1 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -3
  33. package/dist/index.js.map +1 -1
  34. package/dist/mcp-apps/orgx-live.html +690 -0
  35. package/dist/outbox.d.ts.map +1 -1
  36. package/dist/outbox.js +74 -29
  37. package/dist/outbox.js.map +1 -1
  38. package/dist/paths.d.ts +23 -0
  39. package/dist/paths.d.ts.map +1 -0
  40. package/dist/paths.js +50 -0
  41. package/dist/paths.js.map +1 -0
  42. package/dist/reporting/outbox-replay.d.ts +2 -0
  43. package/dist/reporting/outbox-replay.d.ts.map +1 -0
  44. package/dist/reporting/outbox-replay.js +17 -0
  45. package/dist/reporting/outbox-replay.js.map +1 -0
  46. package/dist/reporting/rollups.d.ts +21 -0
  47. package/dist/reporting/rollups.d.ts.map +1 -0
  48. package/dist/reporting/rollups.js +85 -0
  49. package/dist/reporting/rollups.js.map +1 -0
  50. package/dist/snapshot-store.d.ts.map +1 -1
  51. package/dist/snapshot-store.js +24 -20
  52. package/dist/snapshot-store.js.map +1 -1
  53. package/package.json +2 -2
  54. package/dashboard/dist/assets/index-BjqNjHpY.css +0 -1
  55. package/dashboard/dist/assets/index-DCLkU4AM.js +0 -57
  56. package/dashboard/dist/assets/orgx-logo-QSE5QWy4.png +0 -0
package/dist/outbox.js CHANGED
@@ -3,10 +3,13 @@
3
3
  * Buffers structured OrgX events when cloud API is unreachable.
4
4
  * Events are flushed on next successful sync.
5
5
  */
6
- import { homedir } from "node:os";
7
6
  import { join } from "node:path";
8
- import { readFile, writeFile, mkdir, chmod } from "node:fs/promises";
9
- const OUTBOX_DIR = join(homedir(), ".openclaw", "orgx-outbox");
7
+ import { readFile, writeFile, mkdir, chmod, rename, unlink, readdir, } from "node:fs/promises";
8
+ import { randomUUID } from "node:crypto";
9
+ import { getOrgxOutboxDir } from "./paths.js";
10
+ function outboxDir() {
11
+ return getOrgxOutboxDir();
12
+ }
10
13
  function isSafeOutboxSessionId(value) {
11
14
  const normalized = value.trim();
12
15
  if (!normalized || normalized === "." || normalized === "..")
@@ -34,21 +37,70 @@ async function hardenPath(path, mode) {
34
37
  }
35
38
  }
36
39
  async function ensureDir() {
40
+ const dir = outboxDir();
37
41
  try {
38
- await mkdir(OUTBOX_DIR, { recursive: true, mode: 0o700 });
39
- await hardenPath(OUTBOX_DIR, 0o700);
42
+ await mkdir(dir, { recursive: true, mode: 0o700 });
43
+ await hardenPath(dir, 0o700);
40
44
  }
41
45
  catch {
42
46
  // Directory may already exist
43
47
  }
44
48
  }
45
49
  function outboxPath(sessionId) {
46
- return join(OUTBOX_DIR, `${normalizeSessionId(sessionId)}.json`);
50
+ return join(outboxDir(), `${normalizeSessionId(sessionId)}.json`);
51
+ }
52
+ async function backupCorruptOutboxFile(targetPath) {
53
+ // Preserve the corrupted file for debugging, but move it out of the hot path.
54
+ const suffix = `${Date.now()}-${randomUUID().slice(0, 8)}`;
55
+ const backupPath = `${targetPath}.corrupt.${suffix}`;
56
+ try {
57
+ await rename(targetPath, backupPath);
58
+ await hardenPath(backupPath, 0o600);
59
+ }
60
+ catch {
61
+ // best effort
62
+ }
63
+ }
64
+ async function writeFileAtomic(targetPath, content, mode) {
65
+ // Atomic write to avoid partial JSON files if we crash mid-write.
66
+ const tmpPath = `${targetPath}.tmp.${process.pid}.${randomUUID().slice(0, 8)}`;
67
+ await writeFile(tmpPath, content, { encoding: "utf8", mode });
68
+ await hardenPath(tmpPath, mode);
69
+ try {
70
+ await rename(tmpPath, targetPath);
71
+ }
72
+ catch (err) {
73
+ // On Windows, rename can fail if the destination exists. Best-effort fallback:
74
+ // remove the destination and retry. This is not strictly atomic, but avoids
75
+ // leaving the outbox unreadable.
76
+ const code = err && typeof err === "object" ? err.code : null;
77
+ if (code === "EEXIST" || code === "EPERM" || code === "EACCES") {
78
+ try {
79
+ await unlink(targetPath);
80
+ }
81
+ catch {
82
+ // ignore
83
+ }
84
+ await rename(tmpPath, targetPath);
85
+ }
86
+ else {
87
+ throw err;
88
+ }
89
+ }
90
+ await hardenPath(targetPath, mode);
47
91
  }
48
92
  export async function readOutbox(sessionId) {
93
+ const targetPath = outboxPath(sessionId);
49
94
  try {
50
- const raw = await readFile(outboxPath(sessionId), "utf8");
51
- return JSON.parse(raw);
95
+ const raw = await readFile(targetPath, "utf8");
96
+ try {
97
+ const parsed = JSON.parse(raw);
98
+ return Array.isArray(parsed) ? parsed : [];
99
+ }
100
+ catch {
101
+ await backupCorruptOutboxFile(targetPath);
102
+ return [];
103
+ }
52
104
  }
53
105
  catch {
54
106
  return [];
@@ -58,19 +110,20 @@ export async function appendToOutbox(sessionId, event) {
58
110
  await ensureDir();
59
111
  const targetPath = outboxPath(sessionId);
60
112
  const existing = await readOutbox(sessionId);
61
- existing.push(event);
62
- await writeFile(targetPath, JSON.stringify(existing, null, 2), {
63
- encoding: "utf8",
64
- mode: 0o600,
65
- });
66
- await hardenPath(targetPath, 0o600);
113
+ const idx = existing.findIndex((item) => item.id === event.id);
114
+ if (idx >= 0) {
115
+ existing[idx] = event;
116
+ }
117
+ else {
118
+ existing.push(event);
119
+ }
120
+ await writeFileAtomic(targetPath, JSON.stringify(existing, null, 2), 0o600);
67
121
  }
68
122
  export async function replaceOutbox(sessionId, events) {
69
123
  await ensureDir();
70
124
  const targetPath = outboxPath(sessionId);
71
125
  if (events.length === 0) {
72
126
  try {
73
- const { unlink } = await import("node:fs/promises");
74
127
  await unlink(targetPath);
75
128
  return;
76
129
  }
@@ -79,24 +132,19 @@ export async function replaceOutbox(sessionId, events) {
79
132
  return;
80
133
  }
81
134
  }
82
- await writeFile(targetPath, JSON.stringify(events, null, 2), {
83
- encoding: "utf8",
84
- mode: 0o600,
85
- });
86
- await hardenPath(targetPath, 0o600);
135
+ await writeFileAtomic(targetPath, JSON.stringify(events, null, 2), 0o600);
87
136
  }
88
137
  export async function readAllOutboxItems() {
89
138
  try {
90
139
  await ensureDir();
91
- const { readdir } = await import("node:fs/promises");
92
- const files = await readdir(OUTBOX_DIR);
140
+ const files = await readdir(outboxDir());
93
141
  const items = [];
94
142
  for (const file of files) {
95
143
  if (!file.endsWith(".json"))
96
144
  continue;
145
+ const sessionId = file.slice(0, -5);
97
146
  try {
98
- const raw = await readFile(join(OUTBOX_DIR, file), "utf8");
99
- const events = JSON.parse(raw);
147
+ const events = await readOutbox(sessionId);
100
148
  for (const evt of events) {
101
149
  items.push(evt.activityItem);
102
150
  }
@@ -114,8 +162,7 @@ export async function readAllOutboxItems() {
114
162
  export async function readOutboxSummary() {
115
163
  try {
116
164
  await ensureDir();
117
- const { readdir } = await import("node:fs/promises");
118
- const files = await readdir(OUTBOX_DIR);
165
+ const files = await readdir(outboxDir());
119
166
  const pendingByQueue = {};
120
167
  let pendingTotal = 0;
121
168
  let oldestEpoch = Number.POSITIVE_INFINITY;
@@ -125,8 +172,7 @@ export async function readOutboxSummary() {
125
172
  continue;
126
173
  const queueId = file.slice(0, -5);
127
174
  try {
128
- const raw = await readFile(join(OUTBOX_DIR, file), "utf8");
129
- const events = JSON.parse(raw);
175
+ const events = await readOutbox(queueId);
130
176
  const count = Array.isArray(events) ? events.length : 0;
131
177
  pendingByQueue[queueId] = count;
132
178
  pendingTotal += count;
@@ -164,7 +210,6 @@ export async function readOutboxSummary() {
164
210
  }
165
211
  export async function clearOutbox(sessionId) {
166
212
  try {
167
- const { unlink } = await import("node:fs/promises");
168
213
  await unlink(outboxPath(sessionId));
169
214
  }
170
215
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Root directory for persistent OrgX plugin files.
3
+ *
4
+ * Default: `~/.config/useorgx/openclaw-plugin`
5
+ * Override: `ORGX_OPENCLAW_PLUGIN_CONFIG_DIR`
6
+ */
7
+ export declare function getOrgxPluginConfigDir(): string;
8
+ export declare function getOrgxPluginConfigPath(filename: string): string;
9
+ /**
10
+ * Root directory for OpenClaw local files.
11
+ *
12
+ * Default: `~/.openclaw`
13
+ * Override: `OPENCLAW_HOME`
14
+ */
15
+ export declare function getOpenClawDir(): string;
16
+ /**
17
+ * Root directory for the OrgX outbox queue.
18
+ *
19
+ * Default: `~/.openclaw/orgx-outbox`
20
+ * Override: `ORGX_OUTBOX_DIR`
21
+ */
22
+ export declare function getOrgxOutboxDir(): string;
23
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC"}
package/dist/paths.js ADDED
@@ -0,0 +1,50 @@
1
+ import { homedir } from "node:os";
2
+ import { join, resolve } from "node:path";
3
+ function normalizeDirOverride(value) {
4
+ const trimmed = (value ?? "").trim();
5
+ if (!trimmed)
6
+ return null;
7
+ if (trimmed.includes("\0"))
8
+ return null;
9
+ return trimmed;
10
+ }
11
+ /**
12
+ * Root directory for persistent OrgX plugin files.
13
+ *
14
+ * Default: `~/.config/useorgx/openclaw-plugin`
15
+ * Override: `ORGX_OPENCLAW_PLUGIN_CONFIG_DIR`
16
+ */
17
+ export function getOrgxPluginConfigDir() {
18
+ const override = normalizeDirOverride(process.env.ORGX_OPENCLAW_PLUGIN_CONFIG_DIR);
19
+ if (override)
20
+ return resolve(override);
21
+ return join(homedir(), ".config", "useorgx", "openclaw-plugin");
22
+ }
23
+ export function getOrgxPluginConfigPath(filename) {
24
+ return join(getOrgxPluginConfigDir(), filename);
25
+ }
26
+ /**
27
+ * Root directory for OpenClaw local files.
28
+ *
29
+ * Default: `~/.openclaw`
30
+ * Override: `OPENCLAW_HOME`
31
+ */
32
+ export function getOpenClawDir() {
33
+ const override = normalizeDirOverride(process.env.OPENCLAW_HOME);
34
+ if (override)
35
+ return resolve(override);
36
+ return join(homedir(), ".openclaw");
37
+ }
38
+ /**
39
+ * Root directory for the OrgX outbox queue.
40
+ *
41
+ * Default: `~/.openclaw/orgx-outbox`
42
+ * Override: `ORGX_OUTBOX_DIR`
43
+ */
44
+ export function getOrgxOutboxDir() {
45
+ const override = normalizeDirOverride(process.env.ORGX_OUTBOX_DIR);
46
+ if (override)
47
+ return resolve(override);
48
+ return join(getOpenClawDir(), "orgx-outbox");
49
+ }
50
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,SAAS,oBAAoB,CAAC,KAAyB;IACrD,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACnF,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjE,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnE,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function extractProgressOutboxMessage(payload: Record<string, unknown>): string | null;
2
+ //# sourceMappingURL=outbox-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox-replay.d.ts","sourceRoot":"","sources":["../../src/reporting/outbox-replay.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,GAAG,IAAI,CAef"}
@@ -0,0 +1,17 @@
1
+ export function extractProgressOutboxMessage(payload) {
2
+ const messageRaw = payload.message;
3
+ if (typeof messageRaw === "string") {
4
+ const trimmed = messageRaw.trim();
5
+ if (trimmed.length > 0)
6
+ return trimmed;
7
+ }
8
+ // Backward compatibility: some older outbox payloads used `summary`.
9
+ const summaryRaw = payload.summary;
10
+ if (typeof summaryRaw === "string") {
11
+ const trimmed = summaryRaw.trim();
12
+ if (trimmed.length > 0)
13
+ return trimmed;
14
+ }
15
+ return null;
16
+ }
17
+ //# sourceMappingURL=outbox-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbox-replay.js","sourceRoot":"","sources":["../../src/reporting/outbox-replay.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,4BAA4B,CAC1C,OAAgC;IAEhC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IAED,qEAAqE;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type TaskStateBucket = "done" | "blocked" | "active" | "todo";
2
+ export declare function classifyTaskState(status: unknown): TaskStateBucket;
3
+ export type TaskStatusCounts = {
4
+ total: number;
5
+ done: number;
6
+ blocked: number;
7
+ active: number;
8
+ todo: number;
9
+ };
10
+ export declare function summarizeTaskStatuses(taskStatuses?: unknown[]): TaskStatusCounts;
11
+ export type MilestoneRollupStatus = "planned" | "in_progress" | "at_risk" | "completed";
12
+ export type WorkstreamRollupStatus = "not_started" | "active" | "blocked" | "done";
13
+ export declare function computeMilestoneRollup(taskStatuses?: unknown[]): TaskStatusCounts & {
14
+ status: MilestoneRollupStatus;
15
+ progressPct: number;
16
+ };
17
+ export declare function computeWorkstreamRollup(taskStatuses?: unknown[]): TaskStatusCounts & {
18
+ status: WorkstreamRollupStatus;
19
+ progressPct: number;
20
+ };
21
+ //# sourceMappingURL=rollups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollups.d.ts","sourceRoot":"","sources":["../../src/reporting/rollups.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAwBlE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,YAAY,GAAE,OAAO,EAAO,GAAG,gBAAgB,CAepF;AAOD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AACxF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnF,wBAAgB,sBAAsB,CAAC,YAAY,GAAE,OAAO,EAAO,GAAG,gBAAgB,GAAG;IACvF,MAAM,EAAE,qBAAqB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,CAoBA;AAED,wBAAgB,uBAAuB,CAAC,YAAY,GAAE,OAAO,EAAO,GAAG,gBAAgB,GAAG;IACxF,MAAM,EAAE,sBAAsB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB,CAoBA"}
@@ -0,0 +1,85 @@
1
+ export function classifyTaskState(status) {
2
+ const normalized = String(status ?? "").trim().toLowerCase();
3
+ if (normalized === "done" ||
4
+ normalized === "completed" ||
5
+ normalized === "cancelled" ||
6
+ normalized === "archived" ||
7
+ normalized === "deleted") {
8
+ return "done";
9
+ }
10
+ if (normalized === "blocked" || normalized === "at_risk") {
11
+ return "blocked";
12
+ }
13
+ if (normalized === "in_progress" ||
14
+ normalized === "active" ||
15
+ normalized === "running" ||
16
+ normalized === "queued" ||
17
+ normalized === "retry_pending") {
18
+ return "active";
19
+ }
20
+ return "todo";
21
+ }
22
+ export function summarizeTaskStatuses(taskStatuses = []) {
23
+ const counts = {
24
+ total: taskStatuses.length,
25
+ done: 0,
26
+ blocked: 0,
27
+ active: 0,
28
+ todo: 0,
29
+ };
30
+ for (const status of taskStatuses) {
31
+ const bucket = classifyTaskState(status);
32
+ counts[bucket] += 1;
33
+ }
34
+ return counts;
35
+ }
36
+ function toPercent(numerator, denominator) {
37
+ if (!Number.isFinite(numerator) || !Number.isFinite(denominator) || denominator <= 0)
38
+ return 0;
39
+ return Math.max(0, Math.min(100, Math.round((numerator / denominator) * 100)));
40
+ }
41
+ export function computeMilestoneRollup(taskStatuses = []) {
42
+ const counts = summarizeTaskStatuses(taskStatuses);
43
+ const progressPct = toPercent(counts.done, counts.total);
44
+ let status = "planned";
45
+ if (counts.total <= 0) {
46
+ status = "planned";
47
+ }
48
+ else if (counts.done >= counts.total) {
49
+ status = "completed";
50
+ }
51
+ else if (counts.blocked > 0 && counts.active === 0) {
52
+ status = "at_risk";
53
+ }
54
+ else if (counts.active > 0 || counts.done > 0) {
55
+ status = "in_progress";
56
+ }
57
+ return {
58
+ ...counts,
59
+ status,
60
+ progressPct,
61
+ };
62
+ }
63
+ export function computeWorkstreamRollup(taskStatuses = []) {
64
+ const counts = summarizeTaskStatuses(taskStatuses);
65
+ const progressPct = toPercent(counts.done, counts.total);
66
+ let status = "not_started";
67
+ if (counts.total <= 0) {
68
+ status = "not_started";
69
+ }
70
+ else if (counts.done >= counts.total) {
71
+ status = "done";
72
+ }
73
+ else if (counts.blocked > 0 && counts.active === 0) {
74
+ status = "blocked";
75
+ }
76
+ else if (counts.active > 0 || counts.done > 0) {
77
+ status = "active";
78
+ }
79
+ return {
80
+ ...counts,
81
+ status,
82
+ progressPct,
83
+ };
84
+ }
85
+ //# sourceMappingURL=rollups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollups.js","sourceRoot":"","sources":["../../src/reporting/rollups.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-store.d.ts","sourceRoot":"","sources":["../src/snapshot-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,UAAU,iBAAiB;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAmBD,wBAAgB,qBAAqB,IAAI,iBAAiB,GAAG,IAAI,CAUhE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,GAAG,iBAAiB,CAkB/E;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAM7C"}
1
+ {"version":3,"file":"snapshot-store.d.ts","sourceRoot":"","sources":["../src/snapshot-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAa9C,UAAU,iBAAiB;IACzB,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoBD,wBAAgB,qBAAqB,IAAI,iBAAiB,GAAG,IAAI,CAgBhE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,GAAG,iBAAiB,CAW/E;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAO7C"}
@@ -1,12 +1,17 @@
1
- import { mkdirSync, readFileSync, writeFileSync, chmodSync, existsSync, rmSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { homedir } from 'node:os';
4
- const SNAPSHOT_DIR = join(homedir(), '.config', 'useorgx', 'openclaw-plugin');
5
- const SNAPSHOT_FILE = join(SNAPSHOT_DIR, 'snapshot.json');
1
+ import { mkdirSync, readFileSync, chmodSync, existsSync, rmSync } from 'node:fs';
2
+ import { getOrgxPluginConfigDir, getOrgxPluginConfigPath } from './paths.js';
3
+ import { backupCorruptFileSync, writeJsonFileAtomicSync } from './fs-utils.js';
4
+ function snapshotDir() {
5
+ return getOrgxPluginConfigDir();
6
+ }
7
+ function snapshotFile() {
8
+ return getOrgxPluginConfigPath('snapshot.json');
9
+ }
6
10
  function ensureSnapshotDir() {
7
- mkdirSync(SNAPSHOT_DIR, { recursive: true, mode: 0o700 });
11
+ const dir = snapshotDir();
12
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
8
13
  try {
9
- chmodSync(SNAPSHOT_DIR, 0o700);
14
+ chmodSync(dir, 0o700);
10
15
  }
11
16
  catch {
12
17
  // best effort
@@ -21,10 +26,16 @@ function parseJson(value) {
21
26
  }
22
27
  }
23
28
  export function readPersistedSnapshot() {
29
+ const file = snapshotFile();
24
30
  try {
25
- if (!existsSync(SNAPSHOT_FILE))
31
+ if (!existsSync(file))
26
32
  return null;
27
- const parsed = parseJson(readFileSync(SNAPSHOT_FILE, 'utf8'));
33
+ const raw = readFileSync(file, 'utf8');
34
+ const parsed = parseJson(raw);
35
+ if (!parsed) {
36
+ backupCorruptFileSync(file);
37
+ return null;
38
+ }
28
39
  if (!parsed || typeof parsed.updatedAt !== 'string')
29
40
  return null;
30
41
  if (!parsed.snapshot || typeof parsed.snapshot !== 'object')
@@ -41,21 +52,14 @@ export function writePersistedSnapshot(snapshot) {
41
52
  snapshot,
42
53
  updatedAt: new Date().toISOString(),
43
54
  };
44
- writeFileSync(SNAPSHOT_FILE, JSON.stringify(record, null, 2), {
45
- mode: 0o600,
46
- encoding: 'utf8',
47
- });
48
- try {
49
- chmodSync(SNAPSHOT_FILE, 0o600);
50
- }
51
- catch {
52
- // best effort
53
- }
55
+ const file = snapshotFile();
56
+ writeJsonFileAtomicSync(file, record, 0o600);
54
57
  return record;
55
58
  }
56
59
  export function clearPersistedSnapshot() {
60
+ const file = snapshotFile();
57
61
  try {
58
- rmSync(SNAPSHOT_FILE, { force: true });
62
+ rmSync(file, { force: true });
59
63
  }
60
64
  catch {
61
65
  // best effort
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../src/snapshot-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC9E,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAO1D,SAAS,iBAAiB;IACxB,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAI,KAAa;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAoB,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAqB;IAC1D,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAsB;QAChC,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC5D,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC;QACH,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../src/snapshot-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAIjF,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE/E,SAAS,WAAW;IAClB,OAAO,sBAAsB,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,uBAAuB,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC;AAOD,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAI,KAAa;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,SAAS,CAAoB,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAqB;IAC1D,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAsB;QAChC,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useorgx/openclaw-plugin",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
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",
@@ -33,7 +33,7 @@
33
33
  ],
34
34
  "scripts": {
35
35
  "typecheck": "tsc --noEmit",
36
- "test:hooks": "npm run build:core && node --test tests/**/*.test.mjs",
36
+ "test:hooks": "npm run build:core && node --test --test-concurrency=1 tests/*.test.mjs tests/**/*.test.mjs",
37
37
  "job:dispatch": "npm run build:core && node ./scripts/run-codex-dispatch-job.mjs",
38
38
  "verify:clean-install": "node ./scripts/verify-clean-install.mjs",
39
39
  "verify:billing": "npm run build:core && node ./scripts/verify-billing-scenarios.mjs",