agentcorp-broker 0.1.0-alpha.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 (71) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/CONTRIBUTING.md +20 -0
  3. package/LICENSE +201 -0
  4. package/README.md +250 -0
  5. package/SECURITY.md +23 -0
  6. package/dist/audit.d.ts +25 -0
  7. package/dist/audit.js +203 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/broker.d.ts +103 -0
  10. package/dist/broker.js +805 -0
  11. package/dist/broker.js.map +1 -0
  12. package/dist/cli.d.ts +2 -0
  13. package/dist/cli.js +712 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +3 -0
  16. package/dist/config.js +41 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/console/console.css +794 -0
  19. package/dist/console/console.js +802 -0
  20. package/dist/console/index.html +309 -0
  21. package/dist/credentials.d.ts +16 -0
  22. package/dist/credentials.js +72 -0
  23. package/dist/credentials.js.map +1 -0
  24. package/dist/database.d.ts +119 -0
  25. package/dist/database.js +1356 -0
  26. package/dist/database.js.map +1 -0
  27. package/dist/diagnostics.d.ts +44 -0
  28. package/dist/diagnostics.js +357 -0
  29. package/dist/diagnostics.js.map +1 -0
  30. package/dist/errors.d.ts +5 -0
  31. package/dist/errors.js +14 -0
  32. package/dist/errors.js.map +1 -0
  33. package/dist/index.d.ts +23 -0
  34. package/dist/index.js +15 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/mcp.d.ts +3 -0
  37. package/dist/mcp.js +215 -0
  38. package/dist/mcp.js.map +1 -0
  39. package/dist/migrations.d.ts +13 -0
  40. package/dist/migrations.js +266 -0
  41. package/dist/migrations.js.map +1 -0
  42. package/dist/policy.d.ts +22 -0
  43. package/dist/policy.js +33 -0
  44. package/dist/policy.js.map +1 -0
  45. package/dist/server.d.ts +49 -0
  46. package/dist/server.js +529 -0
  47. package/dist/server.js.map +1 -0
  48. package/dist/stdio-adapter.d.ts +230 -0
  49. package/dist/stdio-adapter.js +406 -0
  50. package/dist/stdio-adapter.js.map +1 -0
  51. package/dist/tui.d.ts +26 -0
  52. package/dist/tui.js +291 -0
  53. package/dist/tui.js.map +1 -0
  54. package/dist/types.d.ts +355 -0
  55. package/dist/types.js +85 -0
  56. package/dist/types.js.map +1 -0
  57. package/docs/ARCHITECTURE.md +119 -0
  58. package/docs/README.md +37 -0
  59. package/docs/RELEASING.md +228 -0
  60. package/docs/ROADMAP.md +112 -0
  61. package/docs/cli-reference.md +133 -0
  62. package/docs/dogfooding-report.md +83 -0
  63. package/docs/getting-started.md +228 -0
  64. package/docs/guides/antigravity-setup.md +84 -0
  65. package/docs/guides/claude-cursor-setup.md +76 -0
  66. package/docs/guides/codex-setup.md +75 -0
  67. package/docs/guides/human-console.md +177 -0
  68. package/docs/mcp-tools-reference.md +235 -0
  69. package/docs/policy-guide.md +105 -0
  70. package/examples/org.toml +65 -0
  71. package/package.json +68 -0
package/dist/tui.js ADDED
@@ -0,0 +1,291 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { stdin as input, stdout as output } from "node:process";
3
+ import { AgentCorpError } from "./errors.js";
4
+ // ANSI escape codes for slick terminal styling
5
+ const c = {
6
+ reset: "\x1b[0m",
7
+ bold: "\x1b[1m",
8
+ dim: "\x1b[2m",
9
+ cyan: "\x1b[36m",
10
+ green: "\x1b[32m",
11
+ yellow: "\x1b[33m",
12
+ red: "\x1b[31m",
13
+ magenta: "\x1b[35m",
14
+ blue: "\x1b[34m",
15
+ gray: "\x1b[90m",
16
+ bgCyan: "\x1b[46m\x1b[30m",
17
+ bgYellow: "\x1b[43m\x1b[30m",
18
+ };
19
+ export class AgentCorpTui {
20
+ daemonUrl;
21
+ adminToken;
22
+ broker;
23
+ constructor(options) {
24
+ this.daemonUrl = options.daemonUrl;
25
+ this.adminToken = options.adminToken;
26
+ this.broker = options.broker;
27
+ }
28
+ async fetchApprovals() {
29
+ if (this.daemonUrl && this.adminToken) {
30
+ try {
31
+ const res = await fetch(`${this.daemonUrl}/api/approvals`, {
32
+ headers: { Authorization: `Bearer ${this.adminToken}` },
33
+ });
34
+ if (!res.ok) {
35
+ const body = await res.text().catch(() => "");
36
+ throw new AgentCorpError("DAEMON_ERROR", `Daemon returned HTTP ${res.status} (${res.statusText}): ${body || "Authentication or permission failure"}`);
37
+ }
38
+ return (await res.json());
39
+ }
40
+ catch (err) {
41
+ if (err instanceof AgentCorpError)
42
+ throw err;
43
+ throw new AgentCorpError("DAEMON_UNREACHABLE", `Cannot reach AgentCorp daemon at ${this.daemonUrl}: ${String(err)}`);
44
+ }
45
+ }
46
+ if (this.broker) {
47
+ return this.broker.listPendingApprovals();
48
+ }
49
+ return [];
50
+ }
51
+ async approve(id, note, payload) {
52
+ if (this.daemonUrl && this.adminToken) {
53
+ const res = await fetch(`${this.daemonUrl}/api/approvals/${encodeURIComponent(id)}/approve`, {
54
+ method: "POST",
55
+ headers: {
56
+ Authorization: `Bearer ${this.adminToken}`,
57
+ "Content-Type": "application/json",
58
+ },
59
+ body: JSON.stringify({ note: note || "Approved via Terminal Console", payload }),
60
+ });
61
+ if (!res.ok) {
62
+ const body = await res.text().catch(() => "");
63
+ throw new AgentCorpError("APPROVE_FAILED", `Failed to approve ${id}: HTTP ${res.status} ${body}`);
64
+ }
65
+ return;
66
+ }
67
+ if (this.broker) {
68
+ this.broker.approve(id, note, payload);
69
+ }
70
+ }
71
+ async reject(id, note) {
72
+ if (this.daemonUrl && this.adminToken) {
73
+ const res = await fetch(`${this.daemonUrl}/api/approvals/${encodeURIComponent(id)}/reject`, {
74
+ method: "POST",
75
+ headers: {
76
+ Authorization: `Bearer ${this.adminToken}`,
77
+ "Content-Type": "application/json",
78
+ },
79
+ body: JSON.stringify({ note: note || "Rejected via Terminal Console" }),
80
+ });
81
+ if (!res.ok) {
82
+ const body = await res.text().catch(() => "");
83
+ throw new AgentCorpError("REJECT_FAILED", `Failed to reject ${id}: HTTP ${res.status} ${body}`);
84
+ }
85
+ return;
86
+ }
87
+ if (this.broker) {
88
+ this.broker.reject(id, note);
89
+ }
90
+ }
91
+ printHeader() {
92
+ console.log(`
93
+ ${c.cyan}┌─────────────────────────────────────────────────────────────┐${c.reset}
94
+ ${c.cyan}│${c.reset} ${c.bold}AGENTCORP${c.reset} ${c.dim}::${c.reset} ${c.bold}Human Approval & Coordination Console${c.reset} ${c.cyan}│${c.reset}
95
+ ${c.cyan}└─────────────────────────────────────────────────────────────┘${c.reset}
96
+ `);
97
+ }
98
+ async runReview() {
99
+ const rl = createInterface({ input, output });
100
+ let approved = 0;
101
+ let rejected = 0;
102
+ let skipped = 0;
103
+ try {
104
+ this.printHeader();
105
+ let pending = [];
106
+ try {
107
+ pending = await this.fetchApprovals();
108
+ }
109
+ catch (err) {
110
+ console.log(`\n ${c.red}${c.bold}✘ FAILED TO RETRIEVE APPROVALS:${c.reset} ${err instanceof Error ? err.message : String(err)}\n`);
111
+ return { approved: 0, rejected: 0, skipped: 0 };
112
+ }
113
+ if (pending.length === 0) {
114
+ console.log(` ${c.green}✔${c.reset} ${c.bold}All clear!${c.reset} No pending approvals requiring sign-off.`);
115
+ return { approved: 0, rejected: 0, skipped: 0 };
116
+ }
117
+ console.log(` Found ${c.yellow}${c.bold}${pending.length}${c.reset} item(s) awaiting human sign-off:\n`);
118
+ for (let i = 0; i < pending.length; i++) {
119
+ const item = pending[i];
120
+ const num = `[${i + 1}/${pending.length}]`;
121
+ const isMsg = item.subject === "message";
122
+ const subjectTag = isMsg
123
+ ? `${c.cyan}[MESSAGE]${c.reset}`
124
+ : `${c.magenta}[TASK TRANSITION]${c.reset}`;
125
+ console.log(`${c.gray}──────────────────────────────────────────────────────────────${c.reset}`);
126
+ console.log(` ${c.bold}${num}${c.reset} ${subjectTag} ${c.bold}ID:${c.reset} ${item.approvalId}`);
127
+ console.log(` ${c.dim}Requested by:${c.reset} ${c.cyan}${item.requestedBy}${c.reset} ${c.dim}Target:${c.reset} ${item.subjectId}`);
128
+ console.log(` ${c.dim}Created at:${c.reset} ${item.createdAt}`);
129
+ if (item.context && typeof item.context === "object") {
130
+ const ctx = item.context;
131
+ if (ctx.toRole) {
132
+ console.log(` ${c.dim}Recipient:${c.reset} ${c.green}${ctx.toRole}${c.reset}`);
133
+ }
134
+ if (ctx.type) {
135
+ console.log(` ${c.dim}Message Type:${c.reset} ${c.blue}${ctx.type}${c.reset}`);
136
+ }
137
+ if (ctx.taskId) {
138
+ console.log(` ${c.dim}Task ID:${c.reset} ${ctx.taskId}`);
139
+ }
140
+ if (ctx.fromStatus && ctx.toStatus) {
141
+ console.log(` ${c.dim}Transition:${c.reset} ${ctx.fromStatus} ──> ${c.bold}${ctx.toStatus}${c.reset}`);
142
+ }
143
+ if (ctx.payload !== undefined) {
144
+ console.log(`\n ${c.bold}Proposed Message Payload:${c.reset}`);
145
+ const payloadStr = typeof ctx.payload === "object"
146
+ ? JSON.stringify(ctx.payload, null, 2)
147
+ : String(ctx.payload);
148
+ const indented = payloadStr
149
+ .split("\n")
150
+ .map((line) => ` ${c.gray}│${c.reset} ${line}`)
151
+ .join("\n");
152
+ console.log(indented);
153
+ }
154
+ else {
155
+ console.log(`\n ${c.bold}Context / Details:${c.reset}`);
156
+ const contextStr = JSON.stringify(ctx, null, 2);
157
+ const indented = contextStr
158
+ .split("\n")
159
+ .map((line) => ` ${c.gray}│${c.reset} ${line}`)
160
+ .join("\n");
161
+ console.log(indented);
162
+ }
163
+ }
164
+ console.log("");
165
+ let promptMore = true;
166
+ while (promptMore) {
167
+ const promptActions = isMsg
168
+ ? ` Action ${c.bold}[${c.green}a${c.reset}${c.bold}]pprove, [${c.cyan}e${c.reset}${c.bold}]dit & approve, [${c.red}r${c.reset}${c.bold}]eject, [${c.yellow}s${c.reset}${c.bold}]kip, [${c.dim}q${c.reset}${c.bold}]uit:${c.reset} `
169
+ : ` Action ${c.bold}[${c.green}a${c.reset}${c.bold}]pprove, [${c.red}r${c.reset}${c.bold}]eject, [${c.yellow}s${c.reset}${c.bold}]kip, [${c.dim}q${c.reset}${c.bold}]uit:${c.reset} `;
170
+ const action = (await rl.question(promptActions)).trim().toLowerCase();
171
+ if (action === "a") {
172
+ const note = (await rl.question(` ${c.dim}Approval note (optional):${c.reset} `)).trim();
173
+ try {
174
+ await this.approve(item.approvalId, note || undefined);
175
+ console.log(` ${c.green}✔ Approved ${item.approvalId}${c.reset}\n`);
176
+ approved++;
177
+ promptMore = false;
178
+ }
179
+ catch (err) {
180
+ console.log(` ${c.red}✘ Approval Failed:${c.reset} ${err instanceof Error ? err.message : String(err)}\n`);
181
+ }
182
+ }
183
+ else if (action === "e") {
184
+ if (!isMsg) {
185
+ console.log(` ${c.yellow}↷ Payload editing is only supported for messages.${c.reset}`);
186
+ continue;
187
+ }
188
+ console.log(`\n ${c.cyan}Enter revised JSON payload:${c.reset}`);
189
+ const inputJson = await rl.question(` ${c.dim}>${c.reset} `);
190
+ try {
191
+ const parsed = JSON.parse(inputJson.trim());
192
+ const note = (await rl.question(` ${c.dim}Modification note (optional):${c.reset} `)).trim();
193
+ await this.approve(item.approvalId, note || undefined, parsed);
194
+ console.log(` ${c.green}✔ Approved with modification ${item.approvalId}${c.reset}\n`);
195
+ approved++;
196
+ promptMore = false;
197
+ }
198
+ catch (err) {
199
+ console.log(` ${c.red}✘ Error:${c.reset} ${err instanceof Error ? err.message : String(err)}\n`);
200
+ }
201
+ }
202
+ else if (action === "r") {
203
+ const note = (await rl.question(` ${c.dim}Rejection reason / feedback:${c.reset} `)).trim();
204
+ try {
205
+ await this.reject(item.approvalId, note || undefined);
206
+ console.log(` ${c.red}✘ Rejected ${item.approvalId}${c.reset}\n`);
207
+ rejected++;
208
+ promptMore = false;
209
+ }
210
+ catch (err) {
211
+ console.log(` ${c.red}✘ Rejection Failed:${c.reset} ${err instanceof Error ? err.message : String(err)}\n`);
212
+ }
213
+ }
214
+ else if (action === "s") {
215
+ console.log(` ${c.yellow}↷ Skipped${c.reset}\n`);
216
+ skipped++;
217
+ promptMore = false;
218
+ }
219
+ else if (action === "q") {
220
+ console.log(`\n ${c.dim}Review session cancelled.${c.reset}`);
221
+ return { approved, rejected, skipped };
222
+ }
223
+ else {
224
+ console.log(` Invalid choice. Press 'a', 'e', 'r', 's', or 'q'.`);
225
+ }
226
+ }
227
+ }
228
+ console.log(`${c.gray}──────────────────────────────────────────────────────────────${c.reset}`);
229
+ console.log(` ${c.bold}Review Complete:${c.reset} ${c.green}${approved} approved${c.reset}, ${c.red}${rejected} rejected${c.reset}, ${c.yellow}${skipped} skipped${c.reset}.\n`);
230
+ return { approved, rejected, skipped };
231
+ }
232
+ finally {
233
+ rl.close();
234
+ }
235
+ }
236
+ async runDashboard() {
237
+ this.printHeader();
238
+ let pending = [];
239
+ try {
240
+ pending = await this.fetchApprovals();
241
+ }
242
+ catch (err) {
243
+ console.log(` ${c.red}${c.bold}✘ FAILED TO CONNECT TO APPROVALS QUEUE:${c.reset}`);
244
+ console.log(` ${c.red}${err instanceof Error ? err.message : String(err)}${c.reset}\n`);
245
+ throw err;
246
+ }
247
+ let tasks = [];
248
+ let totalTasksCount = 0;
249
+ if (this.daemonUrl && this.adminToken) {
250
+ try {
251
+ const res = await fetch(`${this.daemonUrl}/api/tasks`, {
252
+ headers: { Authorization: `Bearer ${this.adminToken}` },
253
+ });
254
+ if (res.ok) {
255
+ tasks = (await res.json());
256
+ const totalHeader = res.headers.get("X-Total-Count");
257
+ totalTasksCount = totalHeader ? parseInt(totalHeader, 10) : tasks.length;
258
+ }
259
+ }
260
+ catch { }
261
+ }
262
+ else if (this.broker) {
263
+ tasks = this.broker.database.listAllTasks();
264
+ totalTasksCount = this.broker.database.countTasks();
265
+ }
266
+ else {
267
+ totalTasksCount = tasks.length;
268
+ }
269
+ const tasksLabel = totalTasksCount > tasks.length
270
+ ? `${totalTasksCount} (Active Page: ${tasks.length})`
271
+ : `${totalTasksCount}`;
272
+ console.log(` ${c.bold}Status Summary:${c.reset}`);
273
+ console.log(` Pending Approvals: ${pending.length > 0 ? `${c.yellow}${c.bold}${pending.length}${c.reset}` : `${c.green}0 (Clean)${c.reset}`}`);
274
+ console.log(` Total Tasks: ${c.cyan}${tasksLabel}${c.reset}`);
275
+ if (this.daemonUrl) {
276
+ console.log(` Daemon URL: ${c.blue}${this.daemonUrl}${c.reset}`);
277
+ console.log(` Web Dashboard: ${c.blue}${this.daemonUrl}/console${c.reset}`);
278
+ }
279
+ console.log("");
280
+ if (pending.length > 0) {
281
+ console.log(` ${c.yellow}Pending Approvals Queue:${c.reset}`);
282
+ for (const p of pending) {
283
+ console.log(` ${c.yellow}•${c.reset} ${c.bold}${p.approvalId}${c.reset} (${p.subject}) by ${c.cyan}${p.requestedBy}${c.reset} [${p.createdAt}]`);
284
+ }
285
+ console.log(`\n Run ${c.bold}agentcorp approvals review${c.reset} to sign off interactively.`);
286
+ }
287
+ console.log("");
288
+ return { pendingCount: pending.length, tasksCount: tasks.length };
289
+ }
290
+ }
291
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,355 @@
1
+ import { z } from "zod";
2
+ export declare const MessageTypeSchema: z.ZodEnum<{
3
+ answer: "answer";
4
+ proposal: "proposal";
5
+ question: "question";
6
+ report: "report";
7
+ review: "review";
8
+ status_update: "status_update";
9
+ verdict: "verdict";
10
+ }>;
11
+ export type MessageType = z.infer<typeof MessageTypeSchema>;
12
+ export declare const MessageStatusSchema: z.ZodEnum<{
13
+ acknowledged: "acknowledged";
14
+ approved: "approved";
15
+ delivered: "delivered";
16
+ draft: "draft";
17
+ edited: "edited";
18
+ pending_approval: "pending_approval";
19
+ rejected: "rejected";
20
+ }>;
21
+ export type MessageStatus = z.infer<typeof MessageStatusSchema>;
22
+ export declare const TaskStatusSchema: z.ZodEnum<{
23
+ assigned: "assigned";
24
+ awaiting_review: "awaiting_review";
25
+ blocked: "blocked";
26
+ cancelled: "cancelled";
27
+ completed: "completed";
28
+ failed: "failed";
29
+ in_progress: "in_progress";
30
+ proposed: "proposed";
31
+ }>;
32
+ export type TaskStatus = z.infer<typeof TaskStatusSchema>;
33
+ export declare const PolicyActionSchema: z.ZodEnum<{
34
+ auto_approve: "auto_approve";
35
+ delegate_to_role: "delegate_to_role";
36
+ require_human: "require_human";
37
+ }>;
38
+ export type PolicyAction = z.infer<typeof PolicyActionSchema>;
39
+ export declare const PolicySubjectSchema: z.ZodEnum<{
40
+ message: "message";
41
+ task: "task";
42
+ }>;
43
+ export type PolicySubject = z.infer<typeof PolicySubjectSchema>;
44
+ export declare const RoleSchema: z.ZodObject<{
45
+ id: z.ZodString;
46
+ display_name: z.ZodOptional<z.ZodString>;
47
+ model: z.ZodOptional<z.ZodString>;
48
+ interface: z.ZodDefault<z.ZodLiteral<"mcp">>;
49
+ capabilities: z.ZodDefault<z.ZodArray<z.ZodString>>;
50
+ allowed_peers: z.ZodDefault<z.ZodArray<z.ZodString>>;
51
+ artifact_visibility: z.ZodUnion<readonly [z.ZodLiteral<"all">, z.ZodArray<z.ZodString>]>;
52
+ }, z.core.$strip>;
53
+ export type RoleDefinition = z.infer<typeof RoleSchema>;
54
+ export declare const InitialPolicySchema: z.ZodObject<{
55
+ id: z.ZodOptional<z.ZodString>;
56
+ subject: z.ZodEnum<{
57
+ message: "message";
58
+ task: "task";
59
+ }>;
60
+ priority: z.ZodDefault<z.ZodNumber>;
61
+ from_role: z.ZodOptional<z.ZodString>;
62
+ to_role: z.ZodOptional<z.ZodString>;
63
+ message_type: z.ZodOptional<z.ZodEnum<{
64
+ answer: "answer";
65
+ proposal: "proposal";
66
+ question: "question";
67
+ report: "report";
68
+ review: "review";
69
+ status_update: "status_update";
70
+ verdict: "verdict";
71
+ }>>;
72
+ risk_tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
73
+ from_status: z.ZodOptional<z.ZodEnum<{
74
+ assigned: "assigned";
75
+ awaiting_review: "awaiting_review";
76
+ blocked: "blocked";
77
+ cancelled: "cancelled";
78
+ completed: "completed";
79
+ failed: "failed";
80
+ in_progress: "in_progress";
81
+ proposed: "proposed";
82
+ }>>;
83
+ to_status: z.ZodOptional<z.ZodEnum<{
84
+ assigned: "assigned";
85
+ awaiting_review: "awaiting_review";
86
+ blocked: "blocked";
87
+ cancelled: "cancelled";
88
+ completed: "completed";
89
+ failed: "failed";
90
+ in_progress: "in_progress";
91
+ proposed: "proposed";
92
+ }>>;
93
+ action: z.ZodEnum<{
94
+ auto_approve: "auto_approve";
95
+ delegate_to_role: "delegate_to_role";
96
+ require_human: "require_human";
97
+ }>;
98
+ delegate_role: z.ZodOptional<z.ZodString>;
99
+ }, z.core.$strip>;
100
+ export type InitialPolicy = z.infer<typeof InitialPolicySchema>;
101
+ export declare const LimitsConfigSchema: z.ZodObject<{
102
+ max_request_body_bytes: z.ZodOptional<z.ZodNumber>;
103
+ max_message_payload_bytes: z.ZodOptional<z.ZodNumber>;
104
+ max_artifact_bytes: z.ZodOptional<z.ZodNumber>;
105
+ max_payload_size_bytes: z.ZodOptional<z.ZodNumber>;
106
+ max_artifact_size_bytes: z.ZodOptional<z.ZodNumber>;
107
+ default_page_size: z.ZodOptional<z.ZodNumber>;
108
+ max_page_size: z.ZodOptional<z.ZodNumber>;
109
+ max_audit_payload_bytes: z.ZodOptional<z.ZodNumber>;
110
+ }, z.core.$strip>;
111
+ export type LimitsConfig = z.infer<typeof LimitsConfigSchema>;
112
+ export declare const DEFAULT_MAX_AUDIT_PAYLOAD_BYTES = 65536;
113
+ /**
114
+ * RolePresence tracks agent connectivity and activity freshness.
115
+ * Note: lastSeenAt / lastActiveAt reflects when the role last performed an action (activity freshness),
116
+ * whereas status ("online" | "idle" | "offline") and activityFreshness ("fresh" | "idle" | "stale")
117
+ * provide temporal indicators for collaboration visibility.
118
+ */
119
+ export interface RolePresence {
120
+ roleId: string;
121
+ agentId?: string | undefined;
122
+ lastSeenAt?: string | undefined;
123
+ lastActiveAt?: string | undefined;
124
+ connectedAt?: string | undefined;
125
+ status: "online" | "idle" | "offline";
126
+ activityFreshness?: "fresh" | "idle" | "stale" | undefined;
127
+ }
128
+ export interface IdempotencyRecord {
129
+ key: string;
130
+ roleId: string;
131
+ operation: string;
132
+ requestHash?: string | undefined;
133
+ responseJson: string;
134
+ createdAt: string;
135
+ }
136
+ export declare const OrgConfigSchema: z.ZodObject<{
137
+ company: z.ZodObject<{
138
+ name: z.ZodString;
139
+ }, z.core.$strip>;
140
+ roles: z.ZodArray<z.ZodObject<{
141
+ id: z.ZodString;
142
+ display_name: z.ZodOptional<z.ZodString>;
143
+ model: z.ZodOptional<z.ZodString>;
144
+ interface: z.ZodDefault<z.ZodLiteral<"mcp">>;
145
+ capabilities: z.ZodDefault<z.ZodArray<z.ZodString>>;
146
+ allowed_peers: z.ZodDefault<z.ZodArray<z.ZodString>>;
147
+ artifact_visibility: z.ZodUnion<readonly [z.ZodLiteral<"all">, z.ZodArray<z.ZodString>]>;
148
+ }, z.core.$strip>>;
149
+ policies: z.ZodDefault<z.ZodArray<z.ZodObject<{
150
+ id: z.ZodOptional<z.ZodString>;
151
+ subject: z.ZodEnum<{
152
+ message: "message";
153
+ task: "task";
154
+ }>;
155
+ priority: z.ZodDefault<z.ZodNumber>;
156
+ from_role: z.ZodOptional<z.ZodString>;
157
+ to_role: z.ZodOptional<z.ZodString>;
158
+ message_type: z.ZodOptional<z.ZodEnum<{
159
+ answer: "answer";
160
+ proposal: "proposal";
161
+ question: "question";
162
+ report: "report";
163
+ review: "review";
164
+ status_update: "status_update";
165
+ verdict: "verdict";
166
+ }>>;
167
+ risk_tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
168
+ from_status: z.ZodOptional<z.ZodEnum<{
169
+ assigned: "assigned";
170
+ awaiting_review: "awaiting_review";
171
+ blocked: "blocked";
172
+ cancelled: "cancelled";
173
+ completed: "completed";
174
+ failed: "failed";
175
+ in_progress: "in_progress";
176
+ proposed: "proposed";
177
+ }>>;
178
+ to_status: z.ZodOptional<z.ZodEnum<{
179
+ assigned: "assigned";
180
+ awaiting_review: "awaiting_review";
181
+ blocked: "blocked";
182
+ cancelled: "cancelled";
183
+ completed: "completed";
184
+ failed: "failed";
185
+ in_progress: "in_progress";
186
+ proposed: "proposed";
187
+ }>>;
188
+ action: z.ZodEnum<{
189
+ auto_approve: "auto_approve";
190
+ delegate_to_role: "delegate_to_role";
191
+ require_human: "require_human";
192
+ }>;
193
+ delegate_role: z.ZodOptional<z.ZodString>;
194
+ }, z.core.$strip>>>;
195
+ limits: z.ZodOptional<z.ZodObject<{
196
+ max_request_body_bytes: z.ZodOptional<z.ZodNumber>;
197
+ max_message_payload_bytes: z.ZodOptional<z.ZodNumber>;
198
+ max_artifact_bytes: z.ZodOptional<z.ZodNumber>;
199
+ max_payload_size_bytes: z.ZodOptional<z.ZodNumber>;
200
+ max_artifact_size_bytes: z.ZodOptional<z.ZodNumber>;
201
+ default_page_size: z.ZodOptional<z.ZodNumber>;
202
+ max_page_size: z.ZodOptional<z.ZodNumber>;
203
+ max_audit_payload_bytes: z.ZodOptional<z.ZodNumber>;
204
+ }, z.core.$strip>>;
205
+ }, z.core.$strip>;
206
+ export type OrgConfig = z.infer<typeof OrgConfigSchema>;
207
+ export interface MessageRecord {
208
+ messageId: string;
209
+ taskId: string | null;
210
+ fromRole: string;
211
+ toRole: string;
212
+ type: MessageType;
213
+ payload: unknown;
214
+ references: string[];
215
+ inReplyTo: string | null;
216
+ status: MessageStatus;
217
+ riskTags: string[];
218
+ createdAt: string;
219
+ resolvedAt: string | null;
220
+ }
221
+ export interface TaskRecord {
222
+ taskId: string;
223
+ title: string;
224
+ description: string | null;
225
+ createdBy: string;
226
+ assignedTo: string | null;
227
+ status: TaskStatus;
228
+ createdAt: string;
229
+ updatedAt: string;
230
+ }
231
+ export interface AuditTaskRecord extends TaskRecord {
232
+ descriptionClipped?: boolean | undefined;
233
+ descriptionByteLength?: number | undefined;
234
+ }
235
+ export type WorkQueueActionKind = "accept_handoff" | "acknowledge_message" | "start_task" | "continue_task" | "resolve_blocker" | "send_proposal" | "review_task";
236
+ export interface WorkQueueAction {
237
+ kind: WorkQueueActionKind;
238
+ priority: number;
239
+ reason: string;
240
+ messageId?: string;
241
+ taskId?: string;
242
+ suggestedTool?: {
243
+ name: string;
244
+ arguments: Record<string, unknown>;
245
+ };
246
+ }
247
+ export interface RoleWorkQueue {
248
+ roleId: string;
249
+ generatedAt: string;
250
+ summary: {
251
+ unreadMessages: number;
252
+ activeTasks: number;
253
+ blockedTasks: number;
254
+ };
255
+ unreadMessages: MessageRecord[];
256
+ activeTasks: TaskRecord[];
257
+ nextActions: WorkQueueAction[];
258
+ presence?: RolePresence[] | undefined;
259
+ }
260
+ export interface ArtifactRecord {
261
+ artifactId: string;
262
+ type: string;
263
+ name: string;
264
+ producedBy: string;
265
+ content?: string;
266
+ contentUri?: string;
267
+ contentHash: string;
268
+ visibleToRoles: "all" | string[];
269
+ relatedTaskId: string | null;
270
+ createdAt: string;
271
+ }
272
+ export interface AuditArtifactRecord extends ArtifactRecord {
273
+ contentClipped?: boolean | undefined;
274
+ contentByteLength?: number | undefined;
275
+ }
276
+ export interface PolicyRule extends InitialPolicy {
277
+ id: string;
278
+ enabled: boolean;
279
+ createdAt: string;
280
+ updatedAt: string;
281
+ }
282
+ export interface PendingApproval {
283
+ approvalId: string;
284
+ subject: PolicySubject;
285
+ subjectId: string;
286
+ requestedBy: string;
287
+ status: "pending" | "approved" | "rejected";
288
+ context: unknown;
289
+ createdAt: string;
290
+ decidedAt: string | null;
291
+ decisionNote: string | null;
292
+ }
293
+ export interface PaginationOptions {
294
+ limit?: number | undefined;
295
+ cursor?: string | undefined;
296
+ }
297
+ export interface PaginatedResult<T> {
298
+ items: T[];
299
+ nextCursor: string | null;
300
+ total?: number | undefined;
301
+ }
302
+ export interface BrokerLimits {
303
+ maxPayloadSizeBytes?: number | undefined;
304
+ maxArtifactSizeBytes?: number | undefined;
305
+ }
306
+ export interface PruneOptions {
307
+ olderThanDays: number;
308
+ dryRun?: boolean | undefined;
309
+ deleteArtifacts?: boolean | undefined;
310
+ }
311
+ export interface PruneResult {
312
+ dryRun: boolean;
313
+ cutoffDate: string;
314
+ tasksCount: number;
315
+ messagesCount: number;
316
+ messageEventsCount: number;
317
+ taskTransitionsCount: number;
318
+ approvalsCount: number;
319
+ artifactsDetachedCount: number;
320
+ artifactsDeletedCount: number;
321
+ }
322
+ export interface MaintenanceLogRecord {
323
+ id: string;
324
+ action: "prune" | "prune_simulation" | "prune_execution" | "compact";
325
+ details: unknown;
326
+ createdAt: string;
327
+ }
328
+ export interface AuditExportOptions {
329
+ limit?: number | undefined;
330
+ since?: string | undefined;
331
+ maxPayloadBytes?: number | undefined;
332
+ }
333
+ export interface AuditSnapshotMetadata {
334
+ generatedAt: string;
335
+ since?: string | undefined;
336
+ limit?: number | undefined;
337
+ maxPayloadBytes?: number | undefined;
338
+ totalTasksAvailable: number;
339
+ totalMessagesAvailable: number;
340
+ totalApprovalsAvailable: number;
341
+ totalArtifactsAvailable: number;
342
+ matchingTasksCount?: number | undefined;
343
+ matchingMessagesCount?: number | undefined;
344
+ matchingApprovalsCount?: number | undefined;
345
+ matchingArtifactsCount?: number | undefined;
346
+ truncated: boolean;
347
+ rowLimitTruncated: boolean;
348
+ fieldClippingActive: boolean;
349
+ fieldClippedRecordsCount?: {
350
+ tasks: number;
351
+ messages: number;
352
+ approvals: number;
353
+ artifacts: number;
354
+ } | undefined;
355
+ }