@hasna/conversations 0.2.3 → 0.2.4

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.
package/bin/index.js CHANGED
@@ -2372,7 +2372,15 @@ function readMessages(opts = {}) {
2372
2372
  const resolvedLimit = Number.isFinite(opts.limit) && opts.limit > 0 ? Math.floor(opts.limit) : 20;
2373
2373
  const order = opts.order?.toLowerCase() === "desc" ? "DESC" : "ASC";
2374
2374
  const rows = db2.prepare(`SELECT * FROM messages ${where} ORDER BY created_at ${order}, id ${order} LIMIT ${resolvedLimit}`).all(...params);
2375
- const messages = rows.map(parseMessage);
2375
+ let messages = rows.map(parseMessage);
2376
+ if (opts.max_content_length && opts.max_content_length > 0) {
2377
+ messages = messages.map((m) => {
2378
+ if (m.content.length > opts.max_content_length) {
2379
+ return { ...m, content: m.content.slice(0, opts.max_content_length) + "\u2026", truncated: true };
2380
+ }
2381
+ return m;
2382
+ });
2383
+ }
2376
2384
  if (opts.compact)
2377
2385
  return messages.map(compactMessage);
2378
2386
  return messages;
@@ -4316,7 +4324,7 @@ var init_poll = __esm(() => {
4316
4324
  var require_package = __commonJS((exports, module) => {
4317
4325
  module.exports = {
4318
4326
  name: "@hasna/conversations",
4319
- version: "0.2.3",
4327
+ version: "0.2.4",
4320
4328
  description: "Real-time CLI messaging for AI agents",
4321
4329
  type: "module",
4322
4330
  bin: {
@@ -33568,7 +33576,8 @@ var init_mcp2 = __esm(() => {
33568
33576
  since: exports_external.string().optional(),
33569
33577
  limit: exports_external.coerce.number().optional(),
33570
33578
  unread_only: exports_external.coerce.boolean().optional(),
33571
- mark_read: exports_external.coerce.boolean().optional()
33579
+ mark_read: exports_external.coerce.boolean().optional(),
33580
+ max_content_length: exports_external.coerce.number().optional().describe("Truncate each message content to N chars (adds truncated:true flag)")
33572
33581
  }
33573
33582
  }, async (args) => {
33574
33583
  const agent = resolveIdentity(args.from);
@@ -33786,11 +33795,12 @@ var init_mcp2 = __esm(() => {
33786
33795
  space: exports_external.string(),
33787
33796
  since: exports_external.string().optional(),
33788
33797
  limit: exports_external.coerce.number().optional(),
33789
- mark_read: exports_external.coerce.boolean().optional()
33798
+ mark_read: exports_external.coerce.boolean().optional(),
33799
+ max_content_length: exports_external.coerce.number().optional().describe("Truncate each message content to N chars (adds truncated:true flag)")
33790
33800
  }
33791
33801
  }, async (args) => {
33792
- const { space, since, limit, mark_read } = args;
33793
- const messages = readMessages({ space, since, limit });
33802
+ const { space, since, limit, mark_read, max_content_length } = args;
33803
+ const messages = readMessages({ space, since, limit, max_content_length });
33794
33804
  if (mark_read !== false && messages.length > 0) {
33795
33805
  markReadByIds(messages.map((m) => m.id));
33796
33806
  }
package/bin/mcp.js CHANGED
@@ -28881,7 +28881,15 @@ function readMessages(opts = {}) {
28881
28881
  const resolvedLimit = Number.isFinite(opts.limit) && opts.limit > 0 ? Math.floor(opts.limit) : 20;
28882
28882
  const order = opts.order?.toLowerCase() === "desc" ? "DESC" : "ASC";
28883
28883
  const rows = db2.prepare(`SELECT * FROM messages ${where} ORDER BY created_at ${order}, id ${order} LIMIT ${resolvedLimit}`).all(...params);
28884
- const messages = rows.map(parseMessage);
28884
+ let messages = rows.map(parseMessage);
28885
+ if (opts.max_content_length && opts.max_content_length > 0) {
28886
+ messages = messages.map((m) => {
28887
+ if (m.content.length > opts.max_content_length) {
28888
+ return { ...m, content: m.content.slice(0, opts.max_content_length) + "\u2026", truncated: true };
28889
+ }
28890
+ return m;
28891
+ });
28892
+ }
28885
28893
  if (opts.compact)
28886
28894
  return messages.map(compactMessage);
28887
28895
  return messages;
@@ -30800,7 +30808,7 @@ function getGraphStats() {
30800
30808
  // package.json
30801
30809
  var package_default = {
30802
30810
  name: "@hasna/conversations",
30803
- version: "0.2.3",
30811
+ version: "0.2.4",
30804
30812
  description: "Real-time CLI messaging for AI agents",
30805
30813
  type: "module",
30806
30814
  bin: {
@@ -30931,7 +30939,8 @@ server.registerTool("read_messages", {
30931
30939
  since: exports_external.string().optional(),
30932
30940
  limit: exports_external.coerce.number().optional(),
30933
30941
  unread_only: exports_external.coerce.boolean().optional(),
30934
- mark_read: exports_external.coerce.boolean().optional()
30942
+ mark_read: exports_external.coerce.boolean().optional(),
30943
+ max_content_length: exports_external.coerce.number().optional().describe("Truncate each message content to N chars (adds truncated:true flag)")
30935
30944
  }
30936
30945
  }, async (args) => {
30937
30946
  const agent = resolveIdentity(args.from);
@@ -31149,11 +31158,12 @@ server.registerTool("read_space", {
31149
31158
  space: exports_external.string(),
31150
31159
  since: exports_external.string().optional(),
31151
31160
  limit: exports_external.coerce.number().optional(),
31152
- mark_read: exports_external.coerce.boolean().optional()
31161
+ mark_read: exports_external.coerce.boolean().optional(),
31162
+ max_content_length: exports_external.coerce.number().optional().describe("Truncate each message content to N chars (adds truncated:true flag)")
31153
31163
  }
31154
31164
  }, async (args) => {
31155
- const { space, since, limit, mark_read } = args;
31156
- const messages = readMessages({ space, since, limit });
31165
+ const { space, since, limit, mark_read, max_content_length } = args;
31166
+ const messages = readMessages({ space, since, limit, max_content_length });
31157
31167
  if (mark_read !== false && messages.length > 0) {
31158
31168
  markReadByIds(messages.map((m) => m.id));
31159
31169
  }
package/dist/index.js CHANGED
@@ -2346,7 +2346,15 @@ function readMessages(opts = {}) {
2346
2346
  const resolvedLimit = Number.isFinite(opts.limit) && opts.limit > 0 ? Math.floor(opts.limit) : 20;
2347
2347
  const order = opts.order?.toLowerCase() === "desc" ? "DESC" : "ASC";
2348
2348
  const rows = db2.prepare(`SELECT * FROM messages ${where} ORDER BY created_at ${order}, id ${order} LIMIT ${resolvedLimit}`).all(...params);
2349
- const messages = rows.map(parseMessage);
2349
+ let messages = rows.map(parseMessage);
2350
+ if (opts.max_content_length && opts.max_content_length > 0) {
2351
+ messages = messages.map((m) => {
2352
+ if (m.content.length > opts.max_content_length) {
2353
+ return { ...m, content: m.content.slice(0, opts.max_content_length) + "\u2026", truncated: true };
2354
+ }
2355
+ return m;
2356
+ });
2357
+ }
2350
2358
  if (opts.compact)
2351
2359
  return messages.map(compactMessage);
2352
2360
  return messages;
package/dist/types.d.ts CHANGED
@@ -19,6 +19,7 @@ export interface Message {
19
19
  blocking: boolean;
20
20
  attachments: Attachment[] | null;
21
21
  reply_to: number | null;
22
+ truncated?: boolean;
22
23
  }
23
24
  export interface Reaction {
24
25
  id: number;
@@ -106,6 +107,7 @@ export interface ReadMessagesOptions {
106
107
  unread_only?: boolean;
107
108
  order?: "asc" | "desc";
108
109
  compact?: boolean;
110
+ max_content_length?: number;
109
111
  }
110
112
  export interface SearchMessagesOptions {
111
113
  query: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/conversations",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Real-time CLI messaging for AI agents",
5
5
  "type": "module",
6
6
  "bin": {