@agent-glue/glue 0.1.1 → 0.1.3

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.
@@ -1,5 +1,5 @@
1
1
 
2
2
 
3
- > @agent-glue/glue@0.1.0 build /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
3
+ > @agent-glue/glue@0.1.2 build /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
4
4
  > tsc
5
5
 
@@ -1 +1,5 @@
1
1
 
2
+
3
+ > @agent-glue/glue@0.1.2 clean:build /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
4
+ > rimraf ./dist
5
+
@@ -1,5 +1,5 @@
1
1
 
2
2
 
3
- > @agent-glue/glue@0.1.0 lint /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
3
+ > @agent-glue/glue@0.1.2 lint /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
4
4
  > eslint .
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
2
 
3
- > @agent-glue/glue@0.1.0 typecheck /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
3
+ > @agent-glue/glue@0.1.2 typecheck /home/gareth/Documents/Personal/2025/agent-glue/packages/agent-glue
4
4
  > tsc --noEmit
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @agent-glue/glue
2
2
 
3
+ ## 0.1.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Build issues
8
+
9
+ ## 0.1.2
10
+
11
+ ### Patch Changes
12
+
13
+ - dcfb969: Broken build
14
+
3
15
  ## 0.1.1
4
16
 
5
17
  ### Patch Changes
package/dist/actor.js CHANGED
@@ -1,32 +1,32 @@
1
1
  import { Emitter } from "./emitter.js";
2
2
  export class Actor {
3
- emitter = new Emitter();
4
- emit(event) {
5
- this.emitter.emit(event);
6
- }
7
- send(_command) {
8
- return;
9
- }
10
- connect(handler) {
11
- return this.emitter.connect(handler);
12
- }
13
- disconnect(handler) {
14
- this.emitter.disconnect(handler);
15
- }
3
+ emitter = new Emitter();
4
+ emit(event) {
5
+ this.emitter.emit(event);
6
+ }
7
+ send(_command) {
8
+ return;
9
+ }
10
+ connect(handler) {
11
+ return this.emitter.connect(handler);
12
+ }
13
+ disconnect(handler) {
14
+ this.emitter.disconnect(handler);
15
+ }
16
16
  }
17
17
  export class FunctionActor extends Actor {
18
- constructor(fn) {
19
- super();
20
- this.send = fn(this.emit.bind(this));
21
- }
18
+ constructor(fn) {
19
+ super();
20
+ this.send = fn(this.emit.bind(this));
21
+ }
22
22
  }
23
23
  export function actor(fn) {
24
- return new FunctionActor(fn);
24
+ return new FunctionActor(fn);
25
25
  }
26
26
  export function actorClass(handler) {
27
- return class extends FunctionActor {
28
- constructor() {
29
- super(handler);
30
- }
31
- };
27
+ return class extends FunctionActor {
28
+ constructor() {
29
+ super(handler);
30
+ }
31
+ };
32
32
  }
package/dist/effects.js CHANGED
@@ -1,67 +1,66 @@
1
1
  function defaultDiscriminator(m) {
2
- return m === m;
2
+ return m === m;
3
3
  }
4
4
  export function take(actor, discriminator = defaultDiscriminator) {
5
- return new Promise((resolve) => {
6
- const handler = (message) => {
7
- if (discriminator(message)) {
8
- actor.disconnect(handler);
9
- resolve(message);
10
- }
11
- };
12
- actor.connect(handler);
13
- });
5
+ return new Promise((resolve) => {
6
+ const handler = (message) => {
7
+ if (discriminator(message)) {
8
+ actor.disconnect(handler);
9
+ resolve(message);
10
+ }
11
+ };
12
+ actor.connect(handler);
13
+ });
14
14
  }
15
15
  export async function* takeEvery(actor) {
16
- const eventQueue = [];
17
- let resolve = null;
18
- const disconnect = actor.connect((message) => {
19
- if (resolve) {
20
- resolve(message);
21
- resolve = null;
22
- } else {
23
- eventQueue.push(message);
16
+ const eventQueue = [];
17
+ let resolve = null;
18
+ const disconnect = actor.connect((message) => {
19
+ if (resolve) {
20
+ resolve(message);
21
+ resolve = null;
22
+ }
23
+ else {
24
+ eventQueue.push(message);
25
+ }
26
+ });
27
+ try {
28
+ while (true) {
29
+ if (eventQueue.length > 0) {
30
+ yield eventQueue.shift();
31
+ }
32
+ else {
33
+ yield new Promise((res) => {
34
+ resolve = res;
35
+ });
36
+ }
37
+ }
24
38
  }
25
- });
26
- try {
27
- while (true) {
28
- if (eventQueue.length > 0) {
29
- yield eventQueue.shift();
30
- } else {
31
- yield new Promise((res) => {
32
- resolve = res;
33
- });
34
- }
39
+ finally {
40
+ disconnect();
35
41
  }
36
- } finally {
37
- disconnect();
38
- }
39
42
  }
40
43
  export async function* takeIf(actor, discriminator) {
41
- for await (const event of takeEvery(actor)) {
42
- if (discriminator(event)) {
43
- yield event;
44
+ for await (const event of takeEvery(actor)) {
45
+ if (discriminator(event)) {
46
+ yield event;
47
+ }
44
48
  }
45
- }
46
49
  }
47
- export async function* takeUntil(
48
- actor,
49
- discriminator,
50
- endCondition = () => true
51
- ) {
52
- for await (const event of takeEvery(actor)) {
53
- if (endCondition(event)) {
54
- break;
50
+ export async function* takeUntil(actor, discriminator, endCondition = () => true) {
51
+ for await (const event of takeEvery(actor)) {
52
+ if (endCondition(event)) {
53
+ break;
54
+ }
55
+ if (discriminator(event)) {
56
+ yield event;
57
+ }
55
58
  }
56
- if (discriminator(event)) {
57
- yield event;
58
- }
59
- }
60
59
  }
61
60
  export function on(actor, discriminator, handler) {
62
- return actor.connect((message) => {
63
- if (discriminator(message)) {
64
- handler(message);
65
- }
66
- });
61
+ return actor.connect((message) => {
62
+ if (discriminator(message)) {
63
+ handler(message);
64
+ }
65
+ });
67
66
  }
package/dist/emitter.js CHANGED
@@ -1,18 +1,19 @@
1
1
  import { TypedEmitter } from "./utils/TypedEmitter.js";
2
2
  export class Emitter {
3
- emitter = new TypedEmitter();
4
- emit(event) {
5
- process.nextTick(() => this.emitter.emit("event", event));
6
- }
7
- connect(handler) {
8
- this.emitter.on("event", handler);
9
- return () => this.emitter.off("event", handler);
10
- }
11
- disconnect(handler) {
12
- if (!handler) {
13
- this.emitter.removeAllListeners();
14
- } else {
15
- this.emitter.off("event", handler);
3
+ emitter = new TypedEmitter();
4
+ emit(event) {
5
+ process.nextTick(() => this.emitter.emit("event", event));
6
+ }
7
+ connect(handler) {
8
+ this.emitter.on("event", handler);
9
+ return () => this.emitter.off("event", handler);
10
+ }
11
+ disconnect(handler) {
12
+ if (!handler) {
13
+ this.emitter.removeAllListeners();
14
+ }
15
+ else {
16
+ this.emitter.off("event", handler);
17
+ }
16
18
  }
17
- }
18
19
  }
package/dist/message.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { v7 as uuid } from "uuid";
2
2
  export function isMessageType(type) {
3
- return (message) => message.type === type;
3
+ return (message) => message.type === type;
4
4
  }
5
5
  export function message(type) {
6
- return (message) => {
7
- return { ...message, type, id: uuid() };
8
- };
6
+ return (message) => {
7
+ return { ...message, type, id: uuid() };
8
+ };
9
9
  }
10
10
  export function defineMessage(type) {
11
- const factory = message(type);
12
- const isMessage = isMessageType(type);
13
- factory.is = isMessage;
14
- factory.isMessage = isMessage;
15
- factory.type = type;
16
- factory.message = factory;
17
- return factory;
11
+ const factory = message(type);
12
+ const isMessage = isMessageType(type);
13
+ factory.is = isMessage;
14
+ factory.isMessage = isMessage;
15
+ factory.type = type;
16
+ factory.message = factory;
17
+ return factory;
18
18
  }
@@ -1,36 +1,37 @@
1
1
  import { describe, expect, expectTypeOf, it } from "vitest";
2
2
  import { defineMessage } from "./message.js";
3
3
  describe("defineMessage", () => {
4
- it("should create a message definition and type guard", () => {
5
- const TestMessage = defineMessage("test.type");
6
- const msg = TestMessage({ data: "test" });
7
- expect(msg.type).toBe("test.type");
8
- expect(TestMessage.type).toBe("test.type");
9
- expect(TestMessage.is(msg)).toBe(true);
10
- });
11
- describe("is", () => {
12
- it("should allow checking if a message is of the defined type", () => {
13
- const TestMessage = defineMessage("test.type");
14
- const OtherMessage = defineMessage("other.type");
15
- const msg = TestMessage({ data: "test" });
16
- expect(TestMessage.is(msg)).toBe(true);
17
- expect(OtherMessage.is(msg)).toBe(false);
18
- const unknownMsg = msg;
19
- if (TestMessage.is(unknownMsg)) {
20
- expectTypeOf(unknownMsg).toEqualTypeOf();
21
- } else {
22
- expectTypeOf(unknownMsg).toEqualTypeOf();
23
- }
4
+ it("should create a message definition and type guard", () => {
5
+ const TestMessage = defineMessage("test.type");
6
+ const msg = TestMessage({ data: "test" });
7
+ expect(msg.type).toBe("test.type");
8
+ expect(TestMessage.type).toBe("test.type");
9
+ expect(TestMessage.is(msg)).toBe(true);
24
10
  });
25
- });
26
- describe("message", () => {
27
- it("should provide a message builder function", () => {
28
- const TestMessage = defineMessage("test.type");
29
- const msg = TestMessage.message({ data: "test" });
30
- expectTypeOf(msg).toEqualTypeOf();
31
- expect(msg.type).toBe("test.type");
32
- expect(msg.data).toBe("test");
33
- expect(TestMessage.is(msg)).toBe(true);
11
+ describe("is", () => {
12
+ it("should allow checking if a message is of the defined type", () => {
13
+ const TestMessage = defineMessage("test.type");
14
+ const OtherMessage = defineMessage("other.type");
15
+ const msg = TestMessage({ data: "test" });
16
+ expect(TestMessage.is(msg)).toBe(true);
17
+ expect(OtherMessage.is(msg)).toBe(false);
18
+ const unknownMsg = msg;
19
+ if (TestMessage.is(unknownMsg)) {
20
+ expectTypeOf(unknownMsg).toEqualTypeOf();
21
+ }
22
+ else {
23
+ expectTypeOf(unknownMsg).toEqualTypeOf();
24
+ }
25
+ });
26
+ });
27
+ describe("message", () => {
28
+ it("should provide a message builder function", () => {
29
+ const TestMessage = defineMessage("test.type");
30
+ const msg = TestMessage.message({ data: "test" });
31
+ expectTypeOf(msg).toEqualTypeOf();
32
+ expect(msg.type).toBe("test.type");
33
+ expect(msg.data).toBe("test");
34
+ expect(TestMessage.is(msg)).toBe(true);
35
+ });
34
36
  });
35
- });
36
37
  });
@@ -1,54 +1,46 @@
1
1
  import { Actor } from "../actor.js";
2
2
  import { defineMessage } from "../message.js";
3
3
  import { event, isConnect, isSend } from "./protocol.js";
4
- export const {
5
- message: localConnect,
6
- isMessage: isLocalConnect,
7
- type: LocalConnectType
8
- } = defineMessage("local-connect");
9
- export const {
10
- message: localRegister,
11
- isMessage: isLocalRegister,
12
- type: LocalRegisterType
13
- } = defineMessage("local-register");
4
+ export const { message: localConnect, isMessage: isLocalConnect, type: LocalConnectType } = defineMessage("local-connect");
5
+ export const { message: localRegister, isMessage: isLocalRegister, type: LocalRegisterType } = defineMessage("local-register");
14
6
  export class LocalServer extends Actor {
15
- store = new Map();
16
- send(command) {
17
- if (isSend(command)) {
18
- const { destination, message } = command;
19
- const actor = this.store.get(destination);
20
- if (actor) {
21
- actor.send(message);
22
- }
23
- } else if (isLocalConnect(command)) {
24
- const { destination, callback } = command;
25
- const actor = this.store.get(destination);
26
- if (actor) {
27
- actor.connect(callback);
28
- }
29
- } else if (isLocalRegister(command)) {
30
- const { name, actor } = command;
31
- this.store.set(name, actor);
7
+ store = new Map();
8
+ send(command) {
9
+ if (isSend(command)) {
10
+ const { destination, message } = command;
11
+ const actor = this.store.get(destination);
12
+ if (actor) {
13
+ actor.send(message);
14
+ }
15
+ }
16
+ else if (isLocalConnect(command)) {
17
+ const { destination, callback } = command;
18
+ const actor = this.store.get(destination);
19
+ if (actor) {
20
+ actor.connect(callback);
21
+ }
22
+ }
23
+ else if (isLocalRegister(command)) {
24
+ const { name, actor } = command;
25
+ this.store.set(name, actor);
26
+ }
32
27
  }
33
- }
34
28
  }
35
29
  export class MemoryClient extends Actor {
36
- server;
37
- constructor(server) {
38
- super();
39
- this.server = server;
40
- }
41
- send(command) {
42
- if (isSend(command)) {
43
- this.server.send(command);
44
- } else if (isConnect(command)) {
45
- this.server.send(
46
- localConnect({
47
- destination: command.destination,
48
- callback: (msg) =>
49
- this.emit(event({ origin: command.destination, message: msg }))
50
- })
51
- );
30
+ server;
31
+ constructor(server) {
32
+ super();
33
+ this.server = server;
34
+ }
35
+ send(command) {
36
+ if (isSend(command)) {
37
+ this.server.send(command);
38
+ }
39
+ else if (isConnect(command)) {
40
+ this.server.send(localConnect({
41
+ destination: command.destination,
42
+ callback: (msg) => this.emit(event({ origin: command.destination, message: msg }))
43
+ }));
44
+ }
52
45
  }
53
- }
54
46
  }
@@ -1,16 +1,4 @@
1
1
  import { defineMessage } from "../message.js";
2
- export const {
3
- message: send,
4
- isMessage: isSend,
5
- type: SendType
6
- } = defineMessage("send");
7
- export const {
8
- message: connect,
9
- isMessage: isConnect,
10
- type: ConnectType
11
- } = defineMessage("connect");
12
- export const {
13
- message: event,
14
- isMessage: isEvent,
15
- type: EventType
16
- } = defineMessage("event");
2
+ export const { message: send, isMessage: isSend, type: SendType } = defineMessage("send");
3
+ export const { message: connect, isMessage: isConnect, type: ConnectType } = defineMessage("connect");
4
+ export const { message: event, isMessage: isEvent, type: EventType } = defineMessage("event");
@@ -1,96 +1,72 @@
1
1
  import { Actor } from "../actor.js";
2
2
  import { defineMessage } from "../message.js";
3
- export const {
4
- message: sendCommand,
5
- isMessage: isSendCommand,
6
- type: SendCommandType
7
- } = defineMessage("send-command");
8
- export const {
9
- message: openEvent,
10
- isMessage: isOpenEvent,
11
- type: OpenEventType
12
- } = defineMessage("open-event");
13
- export const {
14
- message: closeEvent,
15
- isMessage: isCloseEvent,
16
- type: CloseEventType
17
- } = defineMessage("close-event");
18
- export const {
19
- message: errorEvent,
20
- isMessage: isErrorEvent,
21
- type: ErrorEventType
22
- } = defineMessage("error-event");
23
- export const {
24
- message: messageEvent,
25
- isMessage: isMessageEvent,
26
- type: MessageEventType
27
- } = defineMessage("message-event");
3
+ export const { message: sendCommand, isMessage: isSendCommand, type: SendCommandType } = defineMessage("send-command");
4
+ export const { message: openEvent, isMessage: isOpenEvent, type: OpenEventType } = defineMessage("open-event");
5
+ export const { message: closeEvent, isMessage: isCloseEvent, type: CloseEventType } = defineMessage("close-event");
6
+ export const { message: errorEvent, isMessage: isErrorEvent, type: ErrorEventType } = defineMessage("error-event");
7
+ export const { message: messageEvent, isMessage: isMessageEvent, type: MessageEventType } = defineMessage("message-event");
28
8
  export class WebsocketClient extends Actor {
29
- ws;
30
- constructor(ws) {
31
- super();
32
- this.ws = ws;
33
- ws.addEventListener("open", () => {
34
- this.emit(openEvent({}));
35
- });
36
- ws.addEventListener("message", (event) => {
37
- this.emit(messageEvent({ message: event.data }));
38
- });
39
- ws.addEventListener("close", () => {
40
- this.emit(closeEvent({}));
41
- });
42
- ws.addEventListener("error", (event) => {
43
- this.emit(errorEvent({ error: event }));
44
- });
45
- }
46
- send(command) {
47
- if (isSendCommand(command)) {
48
- this.ws.send(command.message);
9
+ ws;
10
+ constructor(ws) {
11
+ super();
12
+ this.ws = ws;
13
+ ws.addEventListener("open", () => {
14
+ this.emit(openEvent({}));
15
+ });
16
+ ws.addEventListener("message", (event) => {
17
+ this.emit(messageEvent({ message: event.data }));
18
+ });
19
+ ws.addEventListener("close", () => {
20
+ this.emit(closeEvent({}));
21
+ });
22
+ ws.addEventListener("error", (event) => {
23
+ this.emit(errorEvent({ error: event }));
24
+ });
25
+ }
26
+ send(command) {
27
+ if (isSendCommand(command)) {
28
+ this.ws.send(command.message);
29
+ }
49
30
  }
50
- }
51
31
  }
52
32
  export class WebsocketClientWrapper extends Actor {
53
- ws;
54
- client;
55
- constructor(ws) {
56
- super();
57
- this.ws = ws;
58
- this.client = new WebsocketClient(ws);
59
- this.client.connect((event) => {
60
- if (isMessageEvent(event)) {
61
- const message = JSON.parse(event.message);
62
- this.emit(message);
63
- }
64
- });
65
- }
66
- send(command) {
67
- this.client.send(sendCommand({ message: JSON.stringify(command) }));
68
- }
33
+ ws;
34
+ client;
35
+ constructor(ws) {
36
+ super();
37
+ this.ws = ws;
38
+ this.client = new WebsocketClient(ws);
39
+ this.client.connect((event) => {
40
+ if (isMessageEvent(event)) {
41
+ const message = JSON.parse(event.message);
42
+ this.emit(message);
43
+ }
44
+ });
45
+ }
46
+ send(command) {
47
+ this.client.send(sendCommand({ message: JSON.stringify(command) }));
48
+ }
69
49
  }
70
- export const {
71
- message: connectionEvent,
72
- isMessage: isConnectionEvent,
73
- type: ConnectionEventType
74
- } = defineMessage("connection-event");
50
+ export const { message: connectionEvent, isMessage: isConnectionEvent, type: ConnectionEventType } = defineMessage("connection-event");
75
51
  export class WebsocketServer extends Actor {
76
- wss;
77
- constructor(wss) {
78
- super();
79
- this.wss = wss;
80
- this.wss.on("connection", (ws) => {
81
- this.emit(connectionEvent({ ws }));
82
- });
83
- }
52
+ wss;
53
+ constructor(wss) {
54
+ super();
55
+ this.wss = wss;
56
+ this.wss.on("connection", (ws) => {
57
+ this.emit(connectionEvent({ ws }));
58
+ });
59
+ }
84
60
  }
85
61
  export class WebsocketServerWrapper {
86
- constructor(ws, actor) {
87
- //const client = new WebsocketClient(ws);
88
- const wrapper = new WebsocketClientWrapper(ws);
89
- wrapper.connect((command) => {
90
- actor.send(command);
91
- });
92
- actor.connect((event) => {
93
- wrapper.send(event);
94
- });
95
- }
62
+ constructor(ws, actor) {
63
+ //const client = new WebsocketClient(ws);
64
+ const wrapper = new WebsocketClientWrapper(ws);
65
+ wrapper.connect((command) => {
66
+ actor.send(command);
67
+ });
68
+ actor.connect((event) => {
69
+ wrapper.send(event);
70
+ });
71
+ }
96
72
  }
@@ -1,19 +1,17 @@
1
1
  import { actor } from "./actor.js";
2
2
  export function commandTransformer(fn) {
3
- return (wrapped) =>
4
- actor((emit) => {
5
- wrapped.connect(emit);
6
- return (command) => {
7
- wrapped.send(fn(command));
8
- };
3
+ return (wrapped) => actor((emit) => {
4
+ wrapped.connect(emit);
5
+ return (command) => {
6
+ wrapped.send(fn(command));
7
+ };
9
8
  });
10
9
  }
11
10
  export function eventTransformer(fn) {
12
- return (wrapped) =>
13
- actor((emit) => {
14
- wrapped.connect((msg) => {
15
- emit(fn(msg));
16
- });
17
- return (command) => wrapped.send(command);
11
+ return (wrapped) => actor((emit) => {
12
+ wrapped.connect((msg) => {
13
+ emit(fn(msg));
14
+ });
15
+ return (command) => wrapped.send(command);
18
16
  });
19
17
  }