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/audit.js ADDED
@@ -0,0 +1,203 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { DEFAULT_AUDIT_LIMIT, MAX_AUDIT_LIMIT, parseLimit } from "./database.js";
4
+ import { DEFAULT_MAX_AUDIT_PAYLOAD_BYTES, } from "./types.js";
5
+ export function generateAuditSnapshot(broker, options = {}) {
6
+ const db = broker.database;
7
+ const boundRoles = new Map(db.listAllRoleBindings().map((b) => [b.roleId, b.agentId]));
8
+ const roles = broker.config.roles.map((role) => ({
9
+ id: role.id,
10
+ model: role.model,
11
+ capabilities: role.capabilities,
12
+ allowedPeers: role.allowed_peers,
13
+ boundAgent: boundRoles.get(role.id),
14
+ }));
15
+ const totalTasksAvailable = db.countTasks();
16
+ const totalMessagesAvailable = db.countMessages();
17
+ const totalApprovalsAvailable = db.countApprovals();
18
+ const totalArtifactsAvailable = db.countArtifacts();
19
+ const matchingTasksCount = db.countAuditTasks(options);
20
+ const matchingMessagesCount = db.countAuditMessages(options);
21
+ const matchingApprovalsCount = db.countAuditApprovals(options);
22
+ const matchingArtifactsCount = db.countAuditArtifacts(options);
23
+ const effectiveLimit = parseLimit(options.limit, DEFAULT_AUDIT_LIMIT, MAX_AUDIT_LIMIT);
24
+ const effectiveMaxPayloadBytes = options.maxPayloadBytes !== undefined
25
+ ? options.maxPayloadBytes
26
+ : (broker.config.limits?.max_audit_payload_bytes ?? DEFAULT_MAX_AUDIT_PAYLOAD_BYTES);
27
+ const exportOptions = {
28
+ ...options,
29
+ limit: effectiveLimit,
30
+ maxPayloadBytes: effectiveMaxPayloadBytes,
31
+ };
32
+ const tasks = db.getAuditTasks(exportOptions);
33
+ const messages = db.getAuditMessages(exportOptions);
34
+ const approvals = db.getAuditApprovals(exportOptions);
35
+ const artifacts = db.getAuditArtifacts(exportOptions);
36
+ const rowLimitTruncated = Boolean(tasks.length < matchingTasksCount ||
37
+ messages.length < matchingMessagesCount ||
38
+ approvals.length < matchingApprovalsCount ||
39
+ artifacts.length < matchingArtifactsCount);
40
+ const truncated = rowLimitTruncated;
41
+ let clippedTasksCount = 0;
42
+ for (const t of tasks) {
43
+ if (t.descriptionClipped === true) {
44
+ clippedTasksCount++;
45
+ }
46
+ }
47
+ let clippedMessagesCount = 0;
48
+ for (const m of messages) {
49
+ if (typeof m.payload === "object" && m.payload !== null && m.payload._truncated === true) {
50
+ clippedMessagesCount++;
51
+ }
52
+ }
53
+ let clippedApprovalsCount = 0;
54
+ for (const a of approvals) {
55
+ if (typeof a.context === "object" && a.context !== null && a.context._truncated === true) {
56
+ clippedApprovalsCount++;
57
+ }
58
+ }
59
+ let clippedArtifactsCount = 0;
60
+ for (const art of artifacts) {
61
+ if (art.contentClipped === true) {
62
+ clippedArtifactsCount++;
63
+ }
64
+ }
65
+ const fieldClippingActive = (clippedTasksCount + clippedMessagesCount + clippedApprovalsCount + clippedArtifactsCount) > 0;
66
+ const metadata = {
67
+ generatedAt: new Date().toISOString(),
68
+ ...(options.since ? { since: options.since } : {}),
69
+ limit: effectiveLimit,
70
+ maxPayloadBytes: effectiveMaxPayloadBytes,
71
+ totalTasksAvailable,
72
+ totalMessagesAvailable,
73
+ totalApprovalsAvailable,
74
+ totalArtifactsAvailable,
75
+ matchingTasksCount,
76
+ matchingMessagesCount,
77
+ matchingApprovalsCount,
78
+ matchingArtifactsCount,
79
+ truncated,
80
+ rowLimitTruncated,
81
+ fieldClippingActive,
82
+ fieldClippedRecordsCount: {
83
+ tasks: clippedTasksCount,
84
+ messages: clippedMessagesCount,
85
+ approvals: clippedApprovalsCount,
86
+ artifacts: clippedArtifactsCount,
87
+ },
88
+ };
89
+ return {
90
+ exportedAt: metadata.generatedAt,
91
+ company: broker.config.company.name,
92
+ metadata,
93
+ roles,
94
+ tasks,
95
+ messages,
96
+ approvals,
97
+ artifacts,
98
+ };
99
+ }
100
+ export function formatAuditMarkdown(snapshot) {
101
+ const lines = [];
102
+ lines.push(`# AgentCorp Audit Log — ${snapshot.company}`);
103
+ lines.push(`\n**Exported At:** \`${snapshot.exportedAt}\``);
104
+ if (snapshot.metadata?.since) {
105
+ lines.push(`**Since:** \`${snapshot.metadata.since}\``);
106
+ }
107
+ if (snapshot.metadata?.limit !== undefined) {
108
+ lines.push(`**Record Limit:** \`${snapshot.metadata.limit}\``);
109
+ }
110
+ lines.push(`**Row Limit Truncated:** \`${snapshot.metadata?.rowLimitTruncated ? "Yes" : "No"}\``);
111
+ if (snapshot.metadata?.maxPayloadBytes !== undefined) {
112
+ lines.push(`**Max Payload Bytes:** \`${snapshot.metadata.maxPayloadBytes}\``);
113
+ }
114
+ lines.push(`**Field Clipping Active:** \`${snapshot.metadata?.fieldClippingActive ? "Yes" : "No"}\``);
115
+ lines.push(`**Truncated:** \`${snapshot.metadata?.truncated ? "Yes" : "No"}\`\n`);
116
+ lines.push("## Active Roles & Bindings\n");
117
+ lines.push("| Role ID | Bound Agent | Allowed Peers | Capabilities |");
118
+ lines.push("| --- | --- | --- | --- |");
119
+ for (const role of snapshot.roles) {
120
+ lines.push(`| \`${role.id}\` | ${role.boundAgent ? `\`${role.boundAgent}\`` : "*unbound*"} | ${role.allowedPeers.map((p) => `\`${p}\``).join(", ") || "*none*"} | ${role.capabilities.join(", ") || "*none*"} |`);
121
+ }
122
+ lines.push("");
123
+ lines.push("## Tasks & Lifecycle\n");
124
+ if (snapshot.tasks.length === 0) {
125
+ lines.push("*No tasks recorded.* \n");
126
+ }
127
+ else {
128
+ for (const task of snapshot.tasks) {
129
+ lines.push(`### Task: ${task.title} (\`${task.taskId}\`)`);
130
+ lines.push(`- **Status:** \`${task.status}\``);
131
+ lines.push(`- **Created By:** \`${task.createdBy}\` | **Assigned To:** \`${task.assignedTo ?? "unassigned"}\``);
132
+ lines.push(`- **Created At:** ${task.createdAt} | **Updated At:** ${task.updatedAt}`);
133
+ if (task.description) {
134
+ lines.push(`- **Description:** ${task.description}`);
135
+ }
136
+ const taskMessages = snapshot.messages.filter((m) => m.taskId === task.taskId);
137
+ if (taskMessages.length > 0) {
138
+ lines.push("\n**Message Thread:**\n");
139
+ lines.push("| Time | From → To | Type | Status | Payload / Summary |");
140
+ lines.push("| --- | --- | --- | --- | --- |");
141
+ for (const msg of taskMessages) {
142
+ const payloadStr = typeof msg.payload === "string"
143
+ ? msg.payload
144
+ : JSON.stringify(msg.payload);
145
+ const sanitizedPayload = payloadStr.replace(/\|/g, "\\|").replace(/\n/g, " ");
146
+ lines.push(`| ${msg.createdAt} | \`${msg.fromRole}\` → \`${msg.toRole}\` | \`${msg.type}\` | \`${msg.status}\` | ${sanitizedPayload} |`);
147
+ }
148
+ }
149
+ lines.push("");
150
+ }
151
+ }
152
+ const outOfBandMessages = snapshot.messages.filter((m) => !m.taskId);
153
+ if (outOfBandMessages.length > 0) {
154
+ lines.push("## Direct / Out-of-Band Messages\n");
155
+ lines.push("| Time | From → To | Type | Status | Payload |");
156
+ lines.push("| --- | --- | --- | --- | --- |");
157
+ for (const msg of outOfBandMessages) {
158
+ const payloadStr = typeof msg.payload === "string"
159
+ ? msg.payload
160
+ : JSON.stringify(msg.payload);
161
+ lines.push(`| ${msg.createdAt} | \`${msg.fromRole}\` → \`${msg.toRole}\` | \`${msg.type}\` | \`${msg.status}\` | ${payloadStr} |`);
162
+ }
163
+ lines.push("");
164
+ }
165
+ lines.push("## Approvals\n");
166
+ if (snapshot.approvals.length === 0) {
167
+ lines.push("*No approvals recorded.* \n");
168
+ }
169
+ else {
170
+ lines.push("| Approval ID | Subject | Subject ID | Requested By | Status | Decided At | Note |");
171
+ lines.push("| --- | --- | --- | --- | --- | --- | --- |");
172
+ for (const app of snapshot.approvals) {
173
+ lines.push(`| \`${app.approvalId}\` | \`${app.subject}\` | \`${app.subjectId}\` | \`${app.requestedBy}\` | \`${app.status}\` | ${app.decidedAt ?? "*pending*"} | ${app.decisionNote ?? "-"} |`);
174
+ }
175
+ lines.push("");
176
+ }
177
+ lines.push("## Artifacts Catalog\n");
178
+ if (snapshot.artifacts.length === 0) {
179
+ lines.push("*No artifacts recorded.* \n");
180
+ }
181
+ else {
182
+ lines.push("| Artifact ID | Name | Type | Produced By | Visibility | Hash |");
183
+ lines.push("| --- | --- | --- | --- | --- | --- |");
184
+ for (const art of snapshot.artifacts) {
185
+ const vis = art.visibleToRoles === "all" ? "all" : art.visibleToRoles.join(", ");
186
+ lines.push(`| \`${art.artifactId}\` | ${art.name} | \`${art.type}\` | \`${art.producedBy}\` | \`${vis}\` | \`${art.contentHash.slice(0, 12)}...\` |`);
187
+ }
188
+ lines.push("");
189
+ }
190
+ return lines.join("\n");
191
+ }
192
+ export function exportAuditTrail(broker, outputDir = "coord", options = {}) {
193
+ const absoluteDir = resolve(outputDir);
194
+ mkdirSync(absoluteDir, { recursive: true });
195
+ const snapshot = generateAuditSnapshot(broker, options);
196
+ const markdown = formatAuditMarkdown(snapshot);
197
+ const markdownPath = resolve(absoluteDir, "audit.md");
198
+ const jsonPath = resolve(absoluteDir, "audit.json");
199
+ writeFileSync(markdownPath, markdown, "utf8");
200
+ writeFileSync(jsonPath, JSON.stringify(snapshot, null, 2), "utf8");
201
+ return { markdownPath, jsonPath, snapshot };
202
+ }
203
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { AgentCorpDatabase } from "./database.js";
3
+ import { type ArtifactRecord, type BrokerLimits, type IdempotencyRecord, type InitialPolicy, type MessageRecord, type MessageType, type OrgConfig, type PaginatedResult, type PaginationOptions, type PendingApproval, type PolicyRule, type PruneOptions, type PruneResult, type RoleDefinition, type RoleWorkQueue, type TaskRecord, type TaskStatus } from "./types.js";
4
+ export type BrokerEventType = "message_created" | "message_status_changed" | "task_created" | "task_status_changed" | "approval_created" | "approval_resolved" | "policy_saved" | "policy_toggled" | "artifact_created" | "role_registered" | "history_pruned";
5
+ export interface BrokerDomainEvent {
6
+ type: BrokerEventType;
7
+ data: unknown;
8
+ timestamp: string;
9
+ }
10
+ export interface SendMessageInput {
11
+ toRole: string;
12
+ type: MessageType;
13
+ payload: unknown;
14
+ taskId?: string;
15
+ references?: string[];
16
+ riskTags?: string[];
17
+ inReplyTo?: string;
18
+ idempotencyKey?: string;
19
+ }
20
+ export interface CreateTaskInput {
21
+ title: string;
22
+ description?: string;
23
+ assignedTo?: string;
24
+ idempotencyKey?: string;
25
+ }
26
+ export interface CreateArtifactInput {
27
+ type: string;
28
+ name: string;
29
+ content?: string;
30
+ contentUri?: string;
31
+ visibleToRoles?: "all" | string[];
32
+ relatedTaskId?: string;
33
+ idempotencyKey?: string;
34
+ }
35
+ export declare const DEFAULT_MAX_PAYLOAD_SIZE_BYTES: number;
36
+ export declare const DEFAULT_MAX_ARTIFACT_SIZE_BYTES: number;
37
+ export interface BrokerOptions {
38
+ now?: () => Date;
39
+ id?: (prefix: string) => string;
40
+ limits?: BrokerLimits;
41
+ }
42
+ export declare class AgentCorpBroker extends EventEmitter {
43
+ readonly config: OrgConfig;
44
+ readonly database: AgentCorpDatabase;
45
+ readonly maxPayloadSizeBytes: number;
46
+ readonly maxArtifactSizeBytes: number;
47
+ private readonly roles;
48
+ private readonly now;
49
+ private readonly id;
50
+ constructor(config: OrgConfig, database: AgentCorpDatabase, options?: BrokerOptions);
51
+ private emitDomainEvent;
52
+ private timestamp;
53
+ private role;
54
+ touchPresence(callerRole: string): void;
55
+ private executeIdempotent;
56
+ getOperation(callerRole: string, key: string): IdempotencyRecord | undefined;
57
+ private seedPolicies;
58
+ getRole(roleId: string): RoleDefinition;
59
+ registerRole(roleId: string, agentId: string, declaredCapabilities: string[]): RoleDefinition;
60
+ createTask(callerRole: string, input: CreateTaskInput): TaskRecord;
61
+ listTasksPaginated(callerRole: string, options?: PaginationOptions): PaginatedResult<TaskRecord>;
62
+ listTasks(callerRole: string, options?: PaginationOptions): TaskRecord[];
63
+ sendMessage(callerRole: string, input: SendMessageInput): MessageRecord;
64
+ getInboxPaginated(callerRole: string, options?: PaginationOptions): PaginatedResult<MessageRecord>;
65
+ getInbox(callerRole: string, options?: PaginationOptions): MessageRecord[];
66
+ getWorkQueue(callerRole: string): RoleWorkQueue;
67
+ acknowledgeMessage(callerRole: string, messageId: string): MessageRecord;
68
+ acceptHandoff(callerRole: string, messageId: string, idempotencyKey?: string): {
69
+ message: MessageRecord;
70
+ task: TaskRecord;
71
+ pendingApproval: boolean;
72
+ };
73
+ getThreadPaginated(callerRole: string, taskId: string, options?: PaginationOptions): PaginatedResult<MessageRecord>;
74
+ getThread(callerRole: string, taskId: string, options?: PaginationOptions): MessageRecord[];
75
+ createArtifact(callerRole: string, input: CreateArtifactInput): ArtifactRecord;
76
+ private hasRemainingVisibleArtifact;
77
+ listArtifactsPaginated(callerRole: string, taskIdOrOptions?: string | PaginationOptions, maybeOptions?: PaginationOptions): PaginatedResult<ArtifactRecord>;
78
+ listArtifacts(callerRole: string, taskIdOrOptions?: string | PaginationOptions, maybeOptions?: PaginationOptions): ArtifactRecord[];
79
+ getArtifact(callerRole: string, artifactId: string): ArtifactRecord;
80
+ updateTaskStatus(callerRole: string, taskId: string, requestedStatus: TaskStatus, riskTags?: string[], idempotencyKey?: string): {
81
+ task: TaskRecord;
82
+ pendingApproval: boolean;
83
+ };
84
+ listPendingApprovals(): PendingApproval[];
85
+ approve(approvalId: string, note?: string, editedPayload?: unknown): PendingApproval;
86
+ reject(approvalId: string, note?: string): PendingApproval;
87
+ listPolicies(): PolicyRule[];
88
+ savePolicy(input: InitialPolicy): PolicyRule;
89
+ setPolicyEnabled(policyId: string, enabled: boolean): PolicyRule;
90
+ private assertRoute;
91
+ private assertTaskParticipant;
92
+ private assignTaskForApprovedProposal;
93
+ prune(options: PruneOptions): PruneResult;
94
+ checkpointAndCompact(): {
95
+ checkpoint: string;
96
+ busy: boolean;
97
+ logPages: number;
98
+ checkpointedPages: number;
99
+ vacuumed: boolean;
100
+ };
101
+ private canSeeArtifact;
102
+ private assertArtifactVisible;
103
+ }