@masons/agent-network 0.4.21 → 0.4.22

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 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA2B9D,oEAAoE;AACpE,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAEvD;AAQD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,oBAAoB,CAAC,CAAC;IAC9B,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;IACvD,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IACpE,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IACjE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;CAC/D;AAED,UAAU,sBAAsB;IAC9B,EAAE,EAAE,OAAO,CAAC;CACb;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,sBAAsB;IAC9B,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9C,QAAQ,CAAC,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACzE;AAED,UAAU,qBAAqB,CAAC,CAAC,GAAG,OAAO;IACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAsDD,UAAU,qBAAqB,CAAC,CAAC,GAAG,OAAO;IACzC,YAAY,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,WAAW,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,UAAU,yBAAyB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,MAAM,EAAE,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IAClD,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;CACrD;AA4PD,eAAO,MAAM,mBAAmB,EAAE,yBAwNjC,CAAC"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA2B9D,oEAAoE;AACpE,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAEvD;AAQD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,oBAAoB,CAAC,CAAC;IAC9B,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;IACvD,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IACpE,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IACjE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;CAC/D;AAED,UAAU,sBAAsB;IAC9B,EAAE,EAAE,OAAO,CAAC;CACb;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,sBAAsB;IAC9B,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9C,QAAQ,CAAC,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACzE;AAED,UAAU,qBAAqB,CAAC,CAAC,GAAG,OAAO;IACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAsDD,UAAU,qBAAqB,CAAC,CAAC,GAAG,OAAO;IACzC,YAAY,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,WAAW,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,UAAU,yBAAyB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,MAAM,EAAE,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IAClD,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;CACrD;AAgQD,eAAO,MAAM,mBAAmB,EAAE,yBAwNjC,CAAC"}
package/dist/channel.js CHANGED
@@ -204,6 +204,10 @@ async function handleAddressedMessage(event, conversationManager, client, ctx) {
204
204
  }
205
205
  finally {
206
206
  client.sendTyping(fromAddress, false);
207
+ // Commit deferred deletions from end_conversation calls made during
208
+ // this dispatch cycle. Must run after text buffer flush so that
209
+ // hasConversation() returns true for the deliver callback (#999).
210
+ conversationManager.commitEndedConversations();
207
211
  }
208
212
  }
209
213
  catch (err) {
@@ -23,6 +23,20 @@ export interface ConversationEntry {
23
23
  address: string;
24
24
  lastMessageAt: number;
25
25
  initiatedBy: "local" | "remote";
26
+ /**
27
+ * Deferred deletion flag (#999).
28
+ *
29
+ * When `masons_end_conversation` runs during a dispatch cycle, the entry
30
+ * is marked `ended` but NOT removed from the Map. This keeps
31
+ * `hasConversation()` returning true so the deliver callback can still
32
+ * flush buffered text from the same LLM turn.
33
+ *
34
+ * Call `commitEndedConversations()` after the dispatch cycle completes
35
+ * to actually remove ended entries.
36
+ *
37
+ * @see https://github.com/MASONS-ai/masons.ai/issues/999
38
+ */
39
+ ended?: boolean;
26
40
  }
27
41
  export interface ConversationSummary {
28
42
  contact: string;
@@ -68,17 +82,41 @@ export declare class ConversationManager {
68
82
  /**
69
83
  * Check if a conversation entry exists for a contact.
70
84
  *
71
- * Used by the deliver callback to detect post-end straggler text:
72
- * endConversation() deletes the entry, so its absence signals that
73
- * the LLM called masons_end_conversation during this dispatch.
85
+ * Returns true for entries that are marked `ended` but not yet committed —
86
+ * this allows the deliver callback to flush buffered text from the same
87
+ * dispatch cycle as end_conversation (#999).
88
+ *
89
+ * Straggler text from *subsequent* dispatch cycles is still suppressed
90
+ * because `commitEndedConversations()` removes entries between cycles.
74
91
  */
75
92
  hasConversation(contact: string): boolean;
76
93
  /**
77
- * End the conversation with a contact.
78
- * Removes the conversation entry. No END_SESSION needed — the Connector
79
- * manages connection lifecycle (idle timeout).
94
+ * Mark the conversation with a contact as ended (deferred deletion).
95
+ *
96
+ * The entry is NOT removed immediately — it is flagged `ended` and stays
97
+ * in the Map until `commitEndedConversations()` is called after the
98
+ * current dispatch cycle completes. This prevents the "last-message-
99
+ * before-close" race where the dispatcher executes end_conversation
100
+ * before flushing buffered text (#999).
101
+ *
102
+ * No END_SESSION needed — the Connector manages connection lifecycle
103
+ * (idle timeout).
80
104
  */
81
105
  endConversation(contact: string): void;
106
+ /**
107
+ * Remove all conversations marked as `ended`.
108
+ *
109
+ * Call this after the dispatch cycle completes (in the `finally` block
110
+ * of `handleAddressedMessage`). Deferred deletion ensures that text
111
+ * buffered in the same dispatch cycle as end_conversation is delivered
112
+ * before the entry disappears.
113
+ *
114
+ * Pattern: React 18 batched updates / Qt `deleteLater()` — mutations
115
+ * during a dispatch cycle are committed only when the cycle ends.
116
+ *
117
+ * @see https://github.com/MASONS-ai/masons.ai/issues/999
118
+ */
119
+ commitEndedConversations(): void;
82
120
  /**
83
121
  * Resolve a contact (handle, MSTP address, or passport address) to a
84
122
  * routable address.
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-manager.d.ts","sourceRoot":"","sources":["../src/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,uBAAuB,CAAC;AAS7E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAwBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;gBAE1D,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM;IAS1D;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA0CjE;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKvD;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAaxD;;;;OAIG;IACH,iBAAiB,IAAI,mBAAmB,EAAE;IAc1C;;;;;;OAMG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKzC;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUtC;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAoBvC;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAQtC,OAAO,CAAC,uBAAuB;IAwB/B,0CAA0C;IAC1C,gBAAgB,IAAI,IAAI;CAGzB"}
1
+ {"version":3,"file":"conversation-manager.d.ts","sourceRoot":"","sources":["../src/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,uBAAuB,CAAC;AAS7E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAwBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;gBAE1D,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM;IAS1D;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA0CjE;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKvD;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAaxD;;;;OAIG;IACH,iBAAiB,IAAI,mBAAmB,EAAE;IAc1C;;;;;;;;;OASG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKzC;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWtC;;;;;;;;;;;;OAYG;IACH,wBAAwB,IAAI,IAAI;IAiBhC;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAoBvC;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAQtC,OAAO,CAAC,uBAAuB;IAyB/B,0CAA0C;IAC1C,gBAAgB,IAAI,IAAI;CAGzB"}
@@ -122,7 +122,7 @@ export class ConversationManager {
122
122
  result.push({
123
123
  contact: entry.contact,
124
124
  address: entry.address,
125
- active: true,
125
+ active: !entry.ended,
126
126
  lastMessageAt: entry.lastMessageAt,
127
127
  initiatedBy: entry.initiatedBy,
128
128
  });
@@ -132,23 +132,64 @@ export class ConversationManager {
132
132
  /**
133
133
  * Check if a conversation entry exists for a contact.
134
134
  *
135
- * Used by the deliver callback to detect post-end straggler text:
136
- * endConversation() deletes the entry, so its absence signals that
137
- * the LLM called masons_end_conversation during this dispatch.
135
+ * Returns true for entries that are marked `ended` but not yet committed —
136
+ * this allows the deliver callback to flush buffered text from the same
137
+ * dispatch cycle as end_conversation (#999).
138
+ *
139
+ * Straggler text from *subsequent* dispatch cycles is still suppressed
140
+ * because `commitEndedConversations()` removes entries between cycles.
138
141
  */
139
142
  hasConversation(contact) {
140
143
  const address = this.resolveAddress(contact);
141
144
  return this.conversations.has(address);
142
145
  }
143
146
  /**
144
- * End the conversation with a contact.
145
- * Removes the conversation entry. No END_SESSION needed — the Connector
146
- * manages connection lifecycle (idle timeout).
147
+ * Mark the conversation with a contact as ended (deferred deletion).
148
+ *
149
+ * The entry is NOT removed immediately — it is flagged `ended` and stays
150
+ * in the Map until `commitEndedConversations()` is called after the
151
+ * current dispatch cycle completes. This prevents the "last-message-
152
+ * before-close" race where the dispatcher executes end_conversation
153
+ * before flushing buffered text (#999).
154
+ *
155
+ * No END_SESSION needed — the Connector manages connection lifecycle
156
+ * (idle timeout).
147
157
  */
148
158
  endConversation(contact) {
149
159
  const address = this.resolveAddress(contact);
150
- this.conversations.delete(address);
151
- dbg("endConversation contact=%s address=%s", contact, address);
160
+ const entry = this.conversations.get(address);
161
+ if (entry) {
162
+ entry.ended = true;
163
+ dbg("endConversation (deferred) contact=%s address=%s", contact, address);
164
+ }
165
+ else {
166
+ dbg("endConversation (no-op) contact=%s address=%s", contact, address);
167
+ }
168
+ }
169
+ /**
170
+ * Remove all conversations marked as `ended`.
171
+ *
172
+ * Call this after the dispatch cycle completes (in the `finally` block
173
+ * of `handleAddressedMessage`). Deferred deletion ensures that text
174
+ * buffered in the same dispatch cycle as end_conversation is delivered
175
+ * before the entry disappears.
176
+ *
177
+ * Pattern: React 18 batched updates / Qt `deleteLater()` — mutations
178
+ * during a dispatch cycle are committed only when the cycle ends.
179
+ *
180
+ * @see https://github.com/MASONS-ai/masons.ai/issues/999
181
+ */
182
+ commitEndedConversations() {
183
+ let count = 0;
184
+ for (const [address, entry] of this.conversations) {
185
+ if (entry.ended) {
186
+ this.conversations.delete(address);
187
+ count++;
188
+ }
189
+ }
190
+ if (count > 0) {
191
+ dbg("commitEndedConversations removed=%d", count);
192
+ }
152
193
  }
153
194
  // -------------------------------------------------------------------------
154
195
  // Contact resolution
@@ -210,6 +251,7 @@ export class ConversationManager {
210
251
  const entry = this.conversations.get(address);
211
252
  if (entry) {
212
253
  entry.lastMessageAt = Date.now();
254
+ entry.ended = false; // Clear deferred deletion on re-registration
213
255
  }
214
256
  }
215
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AA0HA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,IAAI,CAAC;CACnE;AAED,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;kBA4BI,iBAAiB;CAsWhC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AA0HA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,IAAI,CAAC;CACnE;AAED,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;kBA4BI,iBAAiB;CA8VhC,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/plugin.js CHANGED
@@ -289,10 +289,7 @@ const plugin = {
289
289
  .map((n) => {
290
290
  const fromStr = n.from ? `@${n.from}` : "agent";
291
291
  const timeStr = formatTimeAgo(n.timestamp);
292
- const preview = n.content.length > 100
293
- ? `${n.content.slice(0, 100)}...`
294
- : n.content;
295
- return `• ${fromStr} (${timeStr}): "${preview}"`;
292
+ return `• ${fromStr} (${timeStr}): "${n.content}"`;
296
293
  })
297
294
  .join("\n")
298
295
  : "";
@@ -345,10 +342,7 @@ const plugin = {
345
342
  const lines = notes.map((n) => {
346
343
  const fromStr = n.from ? `@${n.from}` : "agent";
347
344
  const timeStr = formatTimeAgo(n.timestamp);
348
- const preview = n.content.length > 100
349
- ? `${n.content.slice(0, 100)}...`
350
- : n.content;
351
- return `• ${fromStr} (${timeStr}): "${preview}"`;
345
+ return `• ${fromStr} (${timeStr}): "${n.content}"`;
352
346
  });
353
347
  dynamicContext =
354
348
  "[Agent Network — Updates]\n" +
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Plugin version — must match package.json. Validated by prepublishOnly. */
2
- export declare const PLUGIN_VERSION = "0.4.21";
2
+ export declare const PLUGIN_VERSION = "0.4.22";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /** Plugin version — must match package.json. Validated by prepublishOnly. */
2
- export const PLUGIN_VERSION = "0.4.21";
2
+ export const PLUGIN_VERSION = "0.4.22";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masons/agent-network",
3
- "version": "0.4.21",
3
+ "version": "0.4.22",
4
4
  "description": "MASONS plugin for OpenClaw — connect your agent to the agent network",
5
5
  "license": "MIT",
6
6
  "author": "MASONS.ai <hello@masons.ai> (https://masons.ai)",
@@ -19,15 +19,6 @@
19
19
  "publishConfig": {
20
20
  "access": "public"
21
21
  },
22
- "scripts": {
23
- "build": "tsc",
24
- "dev": "tsc --watch",
25
- "test": "tsc -p test/tsconfig.json && node --test --loader ts-node/esm test/**/*.test.ts",
26
- "lint": "biome check",
27
- "format": "biome format --write",
28
- "prepublishOnly": "bash scripts/check-version.sh && npm run build && npm run test",
29
- "release": "pnpm publish --access public"
30
- },
31
22
  "files": [
32
23
  "dist/",
33
24
  "openclaw.plugin.json",
@@ -77,5 +68,13 @@
77
68
  "@types/ws": "^8",
78
69
  "ts-node": "^10",
79
70
  "typescript": "^5"
71
+ },
72
+ "scripts": {
73
+ "build": "tsc",
74
+ "dev": "tsc --watch",
75
+ "test": "tsc -p test/tsconfig.json && node --test --loader ts-node/esm test/**/*.test.ts",
76
+ "lint": "biome check",
77
+ "format": "biome format --write",
78
+ "release": "pnpm publish --access public"
80
79
  }
81
- }
80
+ }
@@ -4,6 +4,10 @@ description: "Connects to the agent network through MASONS and enables real-time
4
4
  metadata:
5
5
  openclaw:
6
6
  emoji: "🌐"
7
+ homepage: "https://masons.ai"
8
+ requires:
9
+ config:
10
+ - "channels.agent-network.accounts.default.token"
7
11
  ---
8
12
 
9
13
  # Agent Network