@useorgx/openclaw-plugin 0.3.0 → 0.3.1

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 (62) hide show
  1. package/README.md +48 -1
  2. package/dashboard/dist/assets/index-BjqNjHpY.css +1 -0
  3. package/dashboard/dist/assets/index-DCLkU4AM.js +57 -0
  4. package/dashboard/dist/index.html +2 -2
  5. package/dist/adapters/outbox.d.ts +8 -0
  6. package/dist/adapters/outbox.d.ts.map +1 -0
  7. package/dist/adapters/outbox.js +6 -0
  8. package/dist/adapters/outbox.js.map +1 -0
  9. package/dist/agent-context-store.d.ts +24 -0
  10. package/dist/agent-context-store.d.ts.map +1 -0
  11. package/dist/agent-context-store.js +110 -0
  12. package/dist/agent-context-store.js.map +1 -0
  13. package/dist/agent-run-store.d.ts +31 -0
  14. package/dist/agent-run-store.d.ts.map +1 -0
  15. package/dist/agent-run-store.js +158 -0
  16. package/dist/agent-run-store.js.map +1 -0
  17. package/dist/api.d.ts +4 -139
  18. package/dist/api.d.ts.map +1 -1
  19. package/dist/api.js +4 -347
  20. package/dist/api.js.map +1 -1
  21. package/dist/auth-store.d.ts.map +1 -1
  22. package/dist/auth-store.js +27 -1
  23. package/dist/auth-store.js.map +1 -1
  24. package/dist/byok-store.d.ts +11 -0
  25. package/dist/byok-store.d.ts.map +1 -0
  26. package/dist/byok-store.js +94 -0
  27. package/dist/byok-store.js.map +1 -0
  28. package/dist/contracts/client.d.ts +154 -0
  29. package/dist/contracts/client.d.ts.map +1 -0
  30. package/dist/contracts/client.js +422 -0
  31. package/dist/contracts/client.js.map +1 -0
  32. package/dist/contracts/types.d.ts +430 -0
  33. package/dist/contracts/types.d.ts.map +1 -0
  34. package/dist/contracts/types.js +8 -0
  35. package/dist/contracts/types.js.map +1 -0
  36. package/dist/http-handler.d.ts +10 -1
  37. package/dist/http-handler.d.ts.map +1 -1
  38. package/dist/http-handler.js +2256 -98
  39. package/dist/http-handler.js.map +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +348 -24
  42. package/dist/index.js.map +1 -1
  43. package/dist/local-openclaw.d.ts.map +1 -1
  44. package/dist/local-openclaw.js +57 -15
  45. package/dist/local-openclaw.js.map +1 -1
  46. package/dist/openclaw.plugin.json +3 -3
  47. package/dist/outbox.d.ts +7 -0
  48. package/dist/outbox.d.ts.map +1 -1
  49. package/dist/outbox.js +94 -6
  50. package/dist/outbox.js.map +1 -1
  51. package/dist/snapshot-store.d.ts +10 -0
  52. package/dist/snapshot-store.d.ts.map +1 -0
  53. package/dist/snapshot-store.js +64 -0
  54. package/dist/snapshot-store.js.map +1 -0
  55. package/dist/types.d.ts +5 -410
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/types.js +5 -4
  58. package/dist/types.js.map +1 -1
  59. package/openclaw.plugin.json +3 -3
  60. package/package.json +13 -3
  61. package/dashboard/dist/assets/index-BrAP-X_H.css +0 -1
  62. package/dashboard/dist/assets/index-cOk6qwh-.js +0 -56
package/dist/outbox.d.ts CHANGED
@@ -12,9 +12,16 @@ export interface OutboxEvent {
12
12
  /** Converted to a LiveActivityItem for dashboard display. */
13
13
  activityItem: LiveActivityItem;
14
14
  }
15
+ export interface OutboxSummary {
16
+ pendingTotal: number;
17
+ pendingByQueue: Record<string, number>;
18
+ oldestEventAt: string | null;
19
+ newestEventAt: string | null;
20
+ }
15
21
  export declare function readOutbox(sessionId: string): Promise<OutboxEvent[]>;
16
22
  export declare function appendToOutbox(sessionId: string, event: OutboxEvent): Promise<void>;
17
23
  export declare function replaceOutbox(sessionId: string, events: OutboxEvent[]): Promise<void>;
18
24
  export declare function readAllOutboxItems(): Promise<LiveActivityItem[]>;
25
+ export declare function readOutboxSummary(): Promise<OutboxSummary>;
19
26
  export declare function clearOutbox(sessionId: string): Promise<void>;
20
27
  //# sourceMappingURL=outbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,6DAA6D;IAC7D,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAcD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAO1E;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwBtE;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlE"}
1
+ {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA8BnD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,6DAA6D;IAC7D,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAeD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAO1E;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwBtE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAgDhE;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlE"}
package/dist/outbox.js CHANGED
@@ -5,18 +5,45 @@
5
5
  */
6
6
  import { homedir } from "node:os";
7
7
  import { join } from "node:path";
8
- import { readFile, writeFile, mkdir } from "node:fs/promises";
8
+ import { readFile, writeFile, mkdir, chmod } from "node:fs/promises";
9
9
  const OUTBOX_DIR = join(homedir(), ".openclaw", "orgx-outbox");
10
+ function isSafeOutboxSessionId(value) {
11
+ const normalized = value.trim();
12
+ if (!normalized || normalized === "." || normalized === "..")
13
+ return false;
14
+ if (normalized.includes("/") || normalized.includes("\\") || normalized.includes("\0")) {
15
+ return false;
16
+ }
17
+ if (normalized.includes(".."))
18
+ return false;
19
+ return true;
20
+ }
21
+ function normalizeSessionId(sessionId) {
22
+ const normalized = sessionId.trim();
23
+ if (!isSafeOutboxSessionId(normalized)) {
24
+ throw new Error("Invalid outbox session identifier");
25
+ }
26
+ return normalized;
27
+ }
28
+ async function hardenPath(path, mode) {
29
+ try {
30
+ await chmod(path, mode);
31
+ }
32
+ catch {
33
+ // best effort
34
+ }
35
+ }
10
36
  async function ensureDir() {
11
37
  try {
12
- await mkdir(OUTBOX_DIR, { recursive: true });
38
+ await mkdir(OUTBOX_DIR, { recursive: true, mode: 0o700 });
39
+ await hardenPath(OUTBOX_DIR, 0o700);
13
40
  }
14
41
  catch {
15
42
  // Directory may already exist
16
43
  }
17
44
  }
18
45
  function outboxPath(sessionId) {
19
- return join(OUTBOX_DIR, `${sessionId}.json`);
46
+ return join(OUTBOX_DIR, `${normalizeSessionId(sessionId)}.json`);
20
47
  }
21
48
  export async function readOutbox(sessionId) {
22
49
  try {
@@ -29,16 +56,22 @@ export async function readOutbox(sessionId) {
29
56
  }
30
57
  export async function appendToOutbox(sessionId, event) {
31
58
  await ensureDir();
59
+ const targetPath = outboxPath(sessionId);
32
60
  const existing = await readOutbox(sessionId);
33
61
  existing.push(event);
34
- await writeFile(outboxPath(sessionId), JSON.stringify(existing, null, 2), "utf8");
62
+ await writeFile(targetPath, JSON.stringify(existing, null, 2), {
63
+ encoding: "utf8",
64
+ mode: 0o600,
65
+ });
66
+ await hardenPath(targetPath, 0o600);
35
67
  }
36
68
  export async function replaceOutbox(sessionId, events) {
37
69
  await ensureDir();
70
+ const targetPath = outboxPath(sessionId);
38
71
  if (events.length === 0) {
39
72
  try {
40
73
  const { unlink } = await import("node:fs/promises");
41
- await unlink(outboxPath(sessionId));
74
+ await unlink(targetPath);
42
75
  return;
43
76
  }
44
77
  catch {
@@ -46,7 +79,11 @@ export async function replaceOutbox(sessionId, events) {
46
79
  return;
47
80
  }
48
81
  }
49
- await writeFile(outboxPath(sessionId), JSON.stringify(events, null, 2), "utf8");
82
+ await writeFile(targetPath, JSON.stringify(events, null, 2), {
83
+ encoding: "utf8",
84
+ mode: 0o600,
85
+ });
86
+ await hardenPath(targetPath, 0o600);
50
87
  }
51
88
  export async function readAllOutboxItems() {
52
89
  try {
@@ -74,6 +111,57 @@ export async function readAllOutboxItems() {
74
111
  return [];
75
112
  }
76
113
  }
114
+ export async function readOutboxSummary() {
115
+ try {
116
+ await ensureDir();
117
+ const { readdir } = await import("node:fs/promises");
118
+ const files = await readdir(OUTBOX_DIR);
119
+ const pendingByQueue = {};
120
+ let pendingTotal = 0;
121
+ let oldestEpoch = Number.POSITIVE_INFINITY;
122
+ let newestEpoch = Number.NEGATIVE_INFINITY;
123
+ for (const file of files) {
124
+ if (!file.endsWith(".json"))
125
+ continue;
126
+ const queueId = file.slice(0, -5);
127
+ try {
128
+ const raw = await readFile(join(OUTBOX_DIR, file), "utf8");
129
+ const events = JSON.parse(raw);
130
+ const count = Array.isArray(events) ? events.length : 0;
131
+ pendingByQueue[queueId] = count;
132
+ pendingTotal += count;
133
+ for (const event of events) {
134
+ const epoch = Date.parse(event.timestamp);
135
+ if (!Number.isFinite(epoch))
136
+ continue;
137
+ oldestEpoch = Math.min(oldestEpoch, epoch);
138
+ newestEpoch = Math.max(newestEpoch, epoch);
139
+ }
140
+ }
141
+ catch {
142
+ pendingByQueue[queueId] = pendingByQueue[queueId] ?? 0;
143
+ }
144
+ }
145
+ return {
146
+ pendingTotal,
147
+ pendingByQueue,
148
+ oldestEventAt: Number.isFinite(oldestEpoch)
149
+ ? new Date(oldestEpoch).toISOString()
150
+ : null,
151
+ newestEventAt: Number.isFinite(newestEpoch)
152
+ ? new Date(newestEpoch).toISOString()
153
+ : null,
154
+ };
155
+ }
156
+ catch {
157
+ return {
158
+ pendingTotal: 0,
159
+ pendingByQueue: {},
160
+ oldestEventAt: null,
161
+ newestEventAt: null,
162
+ };
163
+ }
164
+ }
77
165
  export async function clearOutbox(sessionId) {
78
166
  try {
79
167
  const { unlink } = await import("node:fs/promises");
@@ -1 +1 @@
1
- {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AAW/D,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB;IACnC,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,KAAkB;IAElB,MAAM,SAAS,EAAE,CAAC;IAClB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,MAAqB;IAErB,MAAM,SAAS,EAAE,CAAC;IAClB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACpD,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;YACrB,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;gBAChD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAC5D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { OrgSnapshot } from './types.js';
2
+ interface PersistedSnapshot {
3
+ snapshot: OrgSnapshot;
4
+ updatedAt: string;
5
+ }
6
+ export declare function readPersistedSnapshot(): PersistedSnapshot | null;
7
+ export declare function writePersistedSnapshot(snapshot: OrgSnapshot): PersistedSnapshot;
8
+ export declare function clearPersistedSnapshot(): void;
9
+ export {};
10
+ //# sourceMappingURL=snapshot-store.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,64 @@
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');
6
+ function ensureSnapshotDir() {
7
+ mkdirSync(SNAPSHOT_DIR, { recursive: true, mode: 0o700 });
8
+ try {
9
+ chmodSync(SNAPSHOT_DIR, 0o700);
10
+ }
11
+ catch {
12
+ // best effort
13
+ }
14
+ }
15
+ function parseJson(value) {
16
+ try {
17
+ return JSON.parse(value);
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ export function readPersistedSnapshot() {
24
+ try {
25
+ if (!existsSync(SNAPSHOT_FILE))
26
+ return null;
27
+ const parsed = parseJson(readFileSync(SNAPSHOT_FILE, 'utf8'));
28
+ if (!parsed || typeof parsed.updatedAt !== 'string')
29
+ return null;
30
+ if (!parsed.snapshot || typeof parsed.snapshot !== 'object')
31
+ return null;
32
+ return parsed;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ export function writePersistedSnapshot(snapshot) {
39
+ ensureSnapshotDir();
40
+ const record = {
41
+ snapshot,
42
+ updatedAt: new Date().toISOString(),
43
+ };
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
+ }
54
+ return record;
55
+ }
56
+ export function clearPersistedSnapshot() {
57
+ try {
58
+ rmSync(SNAPSHOT_FILE, { force: true });
59
+ }
60
+ catch {
61
+ // best effort
62
+ }
63
+ }
64
+ //# sourceMappingURL=snapshot-store.js.map
@@ -0,0 +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"}
package/dist/types.d.ts CHANGED
@@ -1,414 +1,9 @@
1
1
  /**
2
- * OrgX Clawdbot Plugin — Shared Types
2
+ * Public types entrypoint.
3
3
  *
4
- * Types for the plugin's API client and tool interfaces.
5
- * Mirrors the server-side types in orgx/lib/client-integration/types.ts
4
+ * Kept stable because consumers import `@useorgx/openclaw-plugin/types`.
5
+ * The actual definitions live under `src/contracts/types.ts` so we can
6
+ * share contracts across codebases without tangling with runtime modules.
6
7
  */
7
- export interface OrgXConfig {
8
- /** OrgX API key */
9
- apiKey: string;
10
- /** OrgX user ID for X-Orgx-User-Id header */
11
- userId: string;
12
- /** OrgX API base URL */
13
- baseUrl: string;
14
- /** Background sync interval in ms */
15
- syncIntervalMs: number;
16
- /** Plugin enabled */
17
- enabled: boolean;
18
- }
19
- export type OnboardingStatus = 'idle' | 'starting' | 'awaiting_browser_auth' | 'pairing' | 'connected' | 'error' | 'manual_key';
20
- export type OnboardingNextAction = 'connect' | 'wait_for_browser' | 'open_dashboard' | 'enter_manual_key' | 'retry' | 'reconnect';
21
- export interface OnboardingState {
22
- status: OnboardingStatus;
23
- hasApiKey: boolean;
24
- connectionVerified: boolean;
25
- workspaceName: string | null;
26
- lastError: string | null;
27
- nextAction: OnboardingNextAction;
28
- docsUrl: string;
29
- keySource: 'config' | 'environment' | 'persisted' | 'openclaw-config-file' | 'legacy-dev' | 'none';
30
- installationId: string | null;
31
- connectUrl: string | null;
32
- pairingId: string | null;
33
- expiresAt: string | null;
34
- pollIntervalMs: number | null;
35
- }
36
- export interface OrgSnapshot {
37
- /** Active initiatives */
38
- initiatives: Initiative[];
39
- /** Agent states */
40
- agents: AgentState[];
41
- /** Active tasks across workstreams */
42
- activeTasks: TaskSummary[];
43
- /** Pending decisions needing attention */
44
- pendingDecisions: Decision[];
45
- /** Last sync timestamp */
46
- syncedAt: string;
47
- }
48
- export interface Initiative {
49
- id: string;
50
- title: string;
51
- status: string;
52
- progress?: number;
53
- workstreams?: string[];
54
- }
55
- export interface AgentState {
56
- id: string;
57
- name: string;
58
- domain: string;
59
- status: "active" | "idle" | "throttled";
60
- currentTask?: string;
61
- lastActive?: string;
62
- }
63
- export interface TaskSummary {
64
- id: string;
65
- title: string;
66
- status: string;
67
- domain?: string;
68
- modelTier?: ModelTier;
69
- assignee?: string;
70
- }
71
- export interface Decision {
72
- id: string;
73
- title: string;
74
- urgency: "low" | "medium" | "high";
75
- context?: string;
76
- }
77
- export interface SyncPayload {
78
- /** Client-side memory snapshot */
79
- memory?: string;
80
- /** Today's session log */
81
- dailyLog?: string;
82
- /** Workspace state for local↔cloud handoff continuity */
83
- workspaceState?: HandoffWorkspaceState;
84
- /** Decisions made this session */
85
- decisions?: Array<{
86
- id: string;
87
- action: "approved" | "rejected";
88
- note?: string;
89
- }>;
90
- /** Optional sync cursor from client */
91
- memoryCursor?: {
92
- lastSyncEventId?: string;
93
- lastAppliedHandoffId?: string;
94
- };
95
- }
96
- export interface SyncResponse {
97
- /** Active initiatives summary */
98
- initiatives: Array<{
99
- id: string;
100
- title: string;
101
- status: string;
102
- }>;
103
- /** In-progress tasks */
104
- activeTasks: Array<{
105
- id: string;
106
- title: string;
107
- status: string;
108
- domain?: string;
109
- modelTier: ModelTier;
110
- }>;
111
- /** Pending decisions needing attention */
112
- pendingDecisions: Array<{
113
- id: string;
114
- title: string;
115
- urgency: "low" | "medium" | "high";
116
- }>;
117
- /** Quality stats per domain */
118
- qualityStats: QualityStats[];
119
- /** Model routing policy */
120
- modelPolicy: ModelRoutingPolicy;
121
- /** Workspace state echo and server-side handoff status */
122
- workspaceState: HandoffWorkspaceState;
123
- /** Sync cursor for incremental sync */
124
- memoryCursor: {
125
- lastSyncEventId: string | null;
126
- lastAppliedHandoffId: string | null;
127
- };
128
- /** Server timestamp */
129
- syncedAt: string;
130
- }
131
- export type RunPhase = 'intent' | 'execution' | 'blocked' | 'review' | 'handoff' | 'completed';
132
- export interface HandoffWorkspaceState {
133
- git?: {
134
- branch?: string | null;
135
- headSha?: string | null;
136
- dirtyFiles?: string[];
137
- untrackedFilesCount?: number;
138
- };
139
- handoff?: {
140
- pendingHandoffIds?: string[];
141
- lastAppliedHandoffId?: string | null;
142
- };
143
- memoryCursor?: {
144
- lastSyncEventId?: string | null;
145
- };
146
- }
147
- export interface CheckpointSummary {
148
- id: string;
149
- runId: string;
150
- createdAt: string;
151
- tokenCount: number;
152
- stepId?: string | null;
153
- summary?: string | null;
154
- payload: Record<string, unknown>;
155
- }
156
- export interface RestoreRequest {
157
- checkpointId: string;
158
- reason?: string;
159
- }
160
- export interface DelegationPreflightResult {
161
- scope_quality: 'strong' | 'workable' | 'ambiguous';
162
- ambiguities: string[];
163
- eta_range: {
164
- min_minutes: number;
165
- max_minutes: number;
166
- confidence: number;
167
- };
168
- cost_estimate: {
169
- min_usd: number;
170
- max_usd: number;
171
- basis: 'heuristic';
172
- };
173
- recommended_split: Array<{
174
- id: string;
175
- title: string;
176
- owner_domain: string;
177
- acceptance_criteria: string[];
178
- }>;
179
- }
180
- export type ModelTier = "opus" | "sonnet" | "local";
181
- export type TaskComplexity = "planning" | "execution" | "routine";
182
- export interface ModelRouting {
183
- tier: ModelTier;
184
- reason: string;
185
- complexity: TaskComplexity;
186
- estimatedTokens: number;
187
- }
188
- export interface ModelRoutingPolicy {
189
- planningPatterns: string[];
190
- executionPatterns: string[];
191
- routinePatterns: string[];
192
- domainOverrides: Record<string, ModelTier>;
193
- budget: {
194
- dailyUsd: number;
195
- opusMaxPercentage: number;
196
- localMinPercentage: number;
197
- };
198
- }
199
- export interface QualityScore {
200
- taskId: string;
201
- domain: string;
202
- score: number;
203
- notes?: string;
204
- scoredBy?: "human" | "auto" | "peer";
205
- }
206
- export interface QualityStats {
207
- domain: string;
208
- totalTasks: number;
209
- avgScore: number;
210
- recentTrend: "improving" | "stable" | "declining";
211
- isThrottled: boolean;
212
- throttleReason?: string;
213
- }
214
- export interface SpawnGuardResult {
215
- allowed: boolean;
216
- modelTier: ModelTier;
217
- checks: {
218
- rateLimit: {
219
- passed: boolean;
220
- current: number;
221
- max: number;
222
- };
223
- qualityGate: {
224
- passed: boolean;
225
- score: number;
226
- threshold: number;
227
- };
228
- taskAssigned: {
229
- passed: boolean;
230
- taskId?: string;
231
- status?: string;
232
- };
233
- };
234
- blockedReason?: string;
235
- }
236
- export interface Entity {
237
- id: string;
238
- type: string;
239
- title: string;
240
- summary?: string;
241
- status?: string;
242
- parentId?: string;
243
- createdAt?: string;
244
- updatedAt?: string;
245
- [key: string]: unknown;
246
- }
247
- export interface EntityCreatePayload {
248
- title: string;
249
- summary?: string;
250
- status?: string;
251
- parentId?: string;
252
- [key: string]: unknown;
253
- }
254
- export interface EntityUpdatePayload {
255
- [key: string]: unknown;
256
- }
257
- export interface EntityListFilters {
258
- status?: string;
259
- limit?: number;
260
- [key: string]: unknown;
261
- }
262
- export type ReportingSourceClient = 'openclaw' | 'codex' | 'claude-code' | 'api';
263
- export type ReportingPhase = 'intent' | 'execution' | 'blocked' | 'review' | 'handoff' | 'completed';
264
- export type ReportingLevel = 'info' | 'warn' | 'error';
265
- export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'blocked';
266
- export type MilestoneStatus = 'planned' | 'in_progress' | 'completed' | 'at_risk' | 'cancelled';
267
- export type DecisionUrgency = 'low' | 'medium' | 'high' | 'urgent';
268
- export interface EmitActivityRequest {
269
- initiative_id: string;
270
- message: string;
271
- run_id?: string;
272
- correlation_id?: string;
273
- source_client?: ReportingSourceClient;
274
- phase?: ReportingPhase;
275
- progress_pct?: number;
276
- level?: ReportingLevel;
277
- next_step?: string;
278
- metadata?: Record<string, unknown>;
279
- }
280
- export interface EmitActivityResponse {
281
- ok: true;
282
- run_id: string;
283
- event_id: string | null;
284
- reused_run: boolean;
285
- auth_mode?: 'service' | 'api_key';
286
- }
287
- export type ChangesetOperation = {
288
- op: 'task.create';
289
- title: string;
290
- milestone_id?: string;
291
- workstream_id?: string;
292
- description?: string;
293
- priority?: 'low' | 'medium' | 'high';
294
- due_date?: string;
295
- } | {
296
- op: 'task.update';
297
- task_id: string;
298
- status?: TaskStatus;
299
- title?: string;
300
- description?: string;
301
- priority?: 'low' | 'medium' | 'high';
302
- due_date?: string;
303
- } | {
304
- op: 'milestone.update';
305
- milestone_id: string;
306
- status?: MilestoneStatus;
307
- due_date?: string;
308
- description?: string;
309
- } | {
310
- op: 'decision.create';
311
- title: string;
312
- summary?: string;
313
- urgency?: DecisionUrgency;
314
- options?: string[];
315
- blocking?: boolean;
316
- };
317
- export interface ApplyChangesetRequest {
318
- initiative_id: string;
319
- idempotency_key: string;
320
- operations: ChangesetOperation[];
321
- run_id?: string;
322
- correlation_id?: string;
323
- source_client?: ReportingSourceClient;
324
- }
325
- export interface ApplyChangesetResponse {
326
- ok: boolean;
327
- changeset_id: string;
328
- replayed: boolean;
329
- run_id: string;
330
- applied_count: number;
331
- results: Record<string, unknown>[];
332
- event_id: string | null;
333
- auth_mode?: 'service' | 'api_key';
334
- }
335
- export type LiveActivityType = 'run_started' | 'run_completed' | 'run_failed' | 'artifact_created' | 'decision_requested' | 'decision_resolved' | 'handoff_requested' | 'handoff_claimed' | 'handoff_fulfilled' | 'blocker_created' | 'milestone_completed' | 'delegation';
336
- export interface LiveActivityItem {
337
- id: string;
338
- type: LiveActivityType;
339
- title: string;
340
- description: string | null;
341
- agentId: string | null;
342
- agentName: string | null;
343
- runId: string | null;
344
- initiativeId: string | null;
345
- timestamp: string;
346
- phase?: RunPhase | null;
347
- state?: string | null;
348
- kind?: string | null;
349
- summary?: string | null;
350
- decisionRequired?: boolean;
351
- costDelta?: number | null;
352
- metadata?: Record<string, unknown>;
353
- }
354
- export interface SessionTreeNode {
355
- id: string;
356
- parentId: string | null;
357
- runId: string;
358
- title: string;
359
- agentId: string | null;
360
- agentName: string | null;
361
- status: string;
362
- progress: number | null;
363
- initiativeId: string | null;
364
- workstreamId: string | null;
365
- groupId: string;
366
- groupLabel: string;
367
- startedAt: string | null;
368
- updatedAt: string | null;
369
- lastEventAt: string | null;
370
- lastEventSummary: string | null;
371
- blockers: string[];
372
- phase?: RunPhase | null;
373
- state?: string | null;
374
- eta?: string | null;
375
- cost?: number | null;
376
- checkpointCount?: number | null;
377
- blockerReason?: string | null;
378
- }
379
- export interface SessionTreeEdge {
380
- parentId: string;
381
- childId: string;
382
- }
383
- export interface SessionTreeGroup {
384
- id: string;
385
- label: string;
386
- status: string | null;
387
- }
388
- export interface SessionTreeResponse {
389
- nodes: SessionTreeNode[];
390
- edges: SessionTreeEdge[];
391
- groups: SessionTreeGroup[];
392
- }
393
- export interface HandoffEvent {
394
- id: string;
395
- handoffId: string;
396
- eventType: string;
397
- actorType: string | null;
398
- actorId: string | null;
399
- payload: Record<string, unknown> | null;
400
- createdAt: string;
401
- }
402
- export interface HandoffSummary {
403
- id: string;
404
- title: string;
405
- status: string;
406
- priority: string | null;
407
- summary: string | null;
408
- currentActorType: string | null;
409
- currentActorId: string | null;
410
- createdAt: string;
411
- updatedAt: string;
412
- events: HandoffEvent[];
413
- }
8
+ export * from "./contracts/types.js";
414
9
  //# sourceMappingURL=types.d.ts.map