@agent-town/shared 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/protocol.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { createMessage, parseMessage, MessageType } from "../index.js";
3
+ describe("protocol", () => {
4
+ it("should serialize and deserialize a client message", () => {
5
+ const msg = {
6
+ type: MessageType.Register,
7
+ agentId: "agent-abc123",
8
+ userName: "alice",
9
+ machineId: "machine-1",
10
+ teamKey: "team-xyz",
11
+ };
12
+ const serialized = createMessage(msg);
13
+ expect(typeof serialized).toBe("string");
14
+ const deserialized = parseMessage(serialized);
15
+ expect(deserialized).toEqual(msg);
16
+ });
17
+ it("should serialize and deserialize a server message", () => {
18
+ const msg = {
19
+ type: MessageType.State,
20
+ state: {
21
+ agents: [
22
+ {
23
+ agentId: "agent-1",
24
+ userName: "alice",
25
+ machineId: "m1",
26
+ status: "online",
27
+ connectedAt: 1000,
28
+ lastHeartbeat: 2000,
29
+ activeFiles: ["src/index.ts"],
30
+ },
31
+ ],
32
+ locks: [],
33
+ },
34
+ };
35
+ const serialized = createMessage(msg);
36
+ const deserialized = parseMessage(serialized);
37
+ expect(deserialized).toEqual(msg);
38
+ });
39
+ it("should throw on invalid message", () => {
40
+ expect(() => parseMessage("not json")).toThrow();
41
+ expect(() => parseMessage("{}")).toThrow("missing type field");
42
+ expect(() => parseMessage("null")).toThrow();
43
+ });
44
+ });
45
+ //# sourceMappingURL=protocol.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.test.js","sourceRoot":"","sources":["../../src/__tests__/protocol.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGvE,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAoB;YAC3B,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,UAAU;SACpB,CAAC;QAEF,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAuB;YAC9B,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,KAAK,EAAE;gBACL,MAAM,EAAE;oBACN;wBACE,OAAO,EAAE,SAAS;wBAClB,QAAQ,EAAE,OAAO;wBACjB,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,QAAiB;wBACzB,WAAW,EAAE,IAAI;wBACjB,aAAa,EAAE,IAAI;wBACnB,WAAW,EAAE,CAAC,cAAc,CAAC;qBAC9B;iBACF;gBACD,KAAK,EAAE,EAAE;aACV;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { generateAgentId, generateTeamKey } from "../index.js";
3
+ describe("utils", () => {
4
+ it("should generate unique agent IDs", () => {
5
+ const id1 = generateAgentId();
6
+ const id2 = generateAgentId();
7
+ expect(id1).toMatch(/^agent-[a-f0-9]{12}$/);
8
+ expect(id2).toMatch(/^agent-[a-f0-9]{12}$/);
9
+ expect(id1).not.toBe(id2);
10
+ });
11
+ it("should generate unique team keys", () => {
12
+ const key1 = generateTeamKey();
13
+ const key2 = generateTeamKey();
14
+ expect(key1).toMatch(/^team-[a-f0-9]{32}$/);
15
+ expect(key2).toMatch(/^team-[a-f0-9]{32}$/);
16
+ expect(key1).not.toBe(key2);
17
+ });
18
+ });
19
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE/D,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { MessageType, AgentStatus, LockStatus } from "./types.js";
2
+ export type { AgentInfo, FileLock, PresenceUpdate, ActivityEntry, ProtectedZone, TeamState, BridgeMessage, RegisterMessage, HeartbeatMessage, FileClaimMessage, FileReleaseMessage, FileChangeMessage, SendChatMessage, ZoneClaimMessage, ZoneReleaseMessage, ServerStateMessage, ServerConflictMessage, ServerChatMessage, ServerErrorMessage, ServerAckMessage, ClientMessage, ServerMessage, BridgeConfig, } from "./types.js";
3
+ export { createMessage, parseMessage } from "./protocol.js";
4
+ export { generateAgentId, generateTeamKey } from "./utils.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,EACV,SAAS,EACT,QAAQ,EACR,cAAc,EACd,aAAa,EACb,aAAa,EACb,SAAS,EACT,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { MessageType, AgentStatus, LockStatus } from "./types.js";
2
+ export { createMessage, parseMessage } from "./protocol.js";
3
+ export { generateAgentId, generateTeamKey } from "./utils.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA2BlE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BridgeMessage } from "./types.js";
2
+ export declare function createMessage<T extends BridgeMessage>(msg: T): string;
3
+ export declare function parseMessage(raw: string): BridgeMessage;
4
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,aAAa,CAAC,CAAC,SAAS,aAAa,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAErE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAMvD"}
@@ -0,0 +1,11 @@
1
+ export function createMessage(msg) {
2
+ return JSON.stringify(msg);
3
+ }
4
+ export function parseMessage(raw) {
5
+ const parsed = JSON.parse(raw);
6
+ if (!parsed || typeof parsed !== "object" || !parsed.type) {
7
+ throw new Error("Invalid message: missing type field");
8
+ }
9
+ return parsed;
10
+ }
11
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAA0B,GAAM;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAuB,CAAC;AACjC,CAAC"}
@@ -0,0 +1,161 @@
1
+ export declare enum MessageType {
2
+ Register = "register",
3
+ Heartbeat = "heartbeat",
4
+ FileClaim = "file_claim",
5
+ FileRelease = "file_release",
6
+ FileChange = "file_change",
7
+ SendChat = "send_chat",
8
+ ZoneClaim = "zone_claim",
9
+ ZoneRelease = "zone_release",
10
+ State = "state",
11
+ Conflict = "conflict",
12
+ Chat = "chat",
13
+ Error = "error",
14
+ Ack = "ack"
15
+ }
16
+ export declare enum AgentStatus {
17
+ Online = "online",
18
+ Idle = "idle",
19
+ Offline = "offline"
20
+ }
21
+ export declare enum LockStatus {
22
+ Active = "active",
23
+ Expired = "expired"
24
+ }
25
+ export interface AgentInfo {
26
+ agentId: string;
27
+ userName: string;
28
+ machineId: string;
29
+ status: AgentStatus;
30
+ connectedAt: number;
31
+ lastHeartbeat: number;
32
+ activeFiles: string[];
33
+ branch?: string;
34
+ }
35
+ export interface FileLock {
36
+ path: string;
37
+ agentId: string;
38
+ userName: string;
39
+ claimedAt: number;
40
+ status: LockStatus;
41
+ }
42
+ export interface PresenceUpdate {
43
+ agentId: string;
44
+ userName: string;
45
+ status: AgentStatus;
46
+ activeFiles: string[];
47
+ }
48
+ export interface ActivityEntry {
49
+ agentId: string;
50
+ userName: string;
51
+ path: string;
52
+ action: "edit" | "write" | "delete" | "claim" | "release";
53
+ timestamp: number;
54
+ }
55
+ export interface ProtectedZone {
56
+ pattern: string;
57
+ agentId: string;
58
+ userName: string;
59
+ reason?: string;
60
+ claimedAt: number;
61
+ }
62
+ export interface TeamState {
63
+ agents: AgentInfo[];
64
+ locks: FileLock[];
65
+ activities: ActivityEntry[];
66
+ zones: ProtectedZone[];
67
+ }
68
+ export interface RegisterMessage {
69
+ type: MessageType.Register;
70
+ agentId: string;
71
+ userName: string;
72
+ machineId: string;
73
+ teamKey: string;
74
+ branch?: string;
75
+ }
76
+ export interface HeartbeatMessage {
77
+ type: MessageType.Heartbeat;
78
+ agentId: string;
79
+ branch?: string;
80
+ }
81
+ export interface FileClaimMessage {
82
+ type: MessageType.FileClaim;
83
+ agentId: string;
84
+ path: string;
85
+ }
86
+ export interface FileReleaseMessage {
87
+ type: MessageType.FileRelease;
88
+ agentId: string;
89
+ path: string;
90
+ }
91
+ export interface FileChangeMessage {
92
+ type: MessageType.FileChange;
93
+ agentId: string;
94
+ path: string;
95
+ action: "edit" | "write" | "delete";
96
+ }
97
+ export interface SendChatMessage {
98
+ type: MessageType.SendChat;
99
+ agentId: string;
100
+ message: string;
101
+ }
102
+ export interface ZoneClaimMessage {
103
+ type: MessageType.ZoneClaim;
104
+ agentId: string;
105
+ pattern: string;
106
+ reason?: string;
107
+ }
108
+ export interface ZoneReleaseMessage {
109
+ type: MessageType.ZoneRelease;
110
+ agentId: string;
111
+ pattern: string;
112
+ }
113
+ export interface ServerStateMessage {
114
+ type: MessageType.State;
115
+ state: TeamState;
116
+ }
117
+ export interface ServerConflictMessage {
118
+ type: MessageType.Conflict;
119
+ path: string;
120
+ claimedBy: {
121
+ agentId: string;
122
+ userName: string;
123
+ };
124
+ requestedBy: {
125
+ agentId: string;
126
+ userName: string;
127
+ };
128
+ zone?: string;
129
+ }
130
+ export interface ServerChatMessage {
131
+ type: MessageType.Chat;
132
+ from: {
133
+ agentId: string;
134
+ userName: string;
135
+ };
136
+ message: string;
137
+ timestamp: number;
138
+ }
139
+ export interface ServerErrorMessage {
140
+ type: MessageType.Error;
141
+ code: string;
142
+ message: string;
143
+ }
144
+ export interface ServerAckMessage {
145
+ type: MessageType.Ack;
146
+ replyTo: MessageType;
147
+ }
148
+ export type ClientMessage = RegisterMessage | HeartbeatMessage | FileClaimMessage | FileReleaseMessage | FileChangeMessage | SendChatMessage | ZoneClaimMessage | ZoneReleaseMessage;
149
+ export type ServerMessage = ServerStateMessage | ServerConflictMessage | ServerChatMessage | ServerErrorMessage | ServerAckMessage;
150
+ export type BridgeMessage = ClientMessage | ServerMessage;
151
+ export interface BridgeConfig {
152
+ relayUrl: string;
153
+ teamKey: string;
154
+ userName: string;
155
+ agentId: string;
156
+ machineId: string;
157
+ watchPaths?: string[];
158
+ heartbeatInterval?: number;
159
+ lockTtl?: number;
160
+ }
161
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IAErB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,SAAS,eAAe;IACxB,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,QAAQ,cAAc;IACtB,SAAS,eAAe;IACxB,WAAW,iBAAiB;IAG5B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ;AAED,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAID,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;IACvB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;CACtB;AAID,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AAI1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
package/dist/types.js ADDED
@@ -0,0 +1,31 @@
1
+ // --- Enums ---
2
+ export var MessageType;
3
+ (function (MessageType) {
4
+ // Client -> Server
5
+ MessageType["Register"] = "register";
6
+ MessageType["Heartbeat"] = "heartbeat";
7
+ MessageType["FileClaim"] = "file_claim";
8
+ MessageType["FileRelease"] = "file_release";
9
+ MessageType["FileChange"] = "file_change";
10
+ MessageType["SendChat"] = "send_chat";
11
+ MessageType["ZoneClaim"] = "zone_claim";
12
+ MessageType["ZoneRelease"] = "zone_release";
13
+ // Server -> Client
14
+ MessageType["State"] = "state";
15
+ MessageType["Conflict"] = "conflict";
16
+ MessageType["Chat"] = "chat";
17
+ MessageType["Error"] = "error";
18
+ MessageType["Ack"] = "ack";
19
+ })(MessageType || (MessageType = {}));
20
+ export var AgentStatus;
21
+ (function (AgentStatus) {
22
+ AgentStatus["Online"] = "online";
23
+ AgentStatus["Idle"] = "idle";
24
+ AgentStatus["Offline"] = "offline";
25
+ })(AgentStatus || (AgentStatus = {}));
26
+ export var LockStatus;
27
+ (function (LockStatus) {
28
+ LockStatus["Active"] = "active";
29
+ LockStatus["Expired"] = "expired";
30
+ })(LockStatus || (LockStatus = {}));
31
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAEhB,MAAM,CAAN,IAAY,WAiBX;AAjBD,WAAY,WAAW;IACrB,mBAAmB;IACnB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,uCAAwB,CAAA;IACxB,2CAA4B,CAAA;IAC5B,yCAA0B,CAAA;IAC1B,qCAAsB,CAAA;IACtB,uCAAwB,CAAA;IACxB,2CAA4B,CAAA;IAE5B,mBAAmB;IACnB,8BAAe,CAAA;IACf,oCAAqB,CAAA;IACrB,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,0BAAW,CAAA;AACb,CAAC,EAjBW,WAAW,KAAX,WAAW,QAiBtB;AAED,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;IACb,kCAAmB,CAAA;AACrB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,iCAAmB,CAAA;AACrB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB"}
@@ -0,0 +1,3 @@
1
+ export declare function generateAgentId(): string;
2
+ export declare function generateTeamKey(): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
package/dist/utils.js ADDED
@@ -0,0 +1,8 @@
1
+ import { randomBytes } from "node:crypto";
2
+ export function generateAgentId() {
3
+ return `agent-${randomBytes(6).toString("hex")}`;
4
+ }
5
+ export function generateTeamKey() {
6
+ return `team-${randomBytes(16).toString("hex")}`;
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,eAAe;IAC7B,OAAO,SAAS,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@agent-town/shared",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "main": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js",
17
+ "default": "./dist/index.js"
18
+ }
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^25.9.1",
22
+ "typescript": "^5.8.0",
23
+ "vitest": "^3.2.1"
24
+ },
25
+ "scripts": {
26
+ "build": "tsc",
27
+ "clean": "rm -rf dist",
28
+ "test": "vitest run"
29
+ }
30
+ }