@clawchatsai/connector 0.0.64 → 0.0.66

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 (2) hide show
  1. package/dist/index.js +23 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -127,13 +127,20 @@ async function ensureNativeModules(ctx) {
127
127
  }
128
128
  const CLAWCHATS_MD_CONTENT = `# ClawChats — Inline File Delivery
129
129
 
130
- To deliver a file inline in this chat, print a MEDIA: line to stdout during an exec call:
130
+ To deliver a file inline in this chat, run an exec that outputs a MEDIA: line:
131
131
 
132
132
  MEDIA:/absolute/path/to/file
133
133
 
134
- - Supported for images (png, jpg, gif, webp, svg, etc.) and other file types
135
- - Include it at the end of the same exec command that creates the file
136
- - Example: \`python3 generate.py --output /tmp/result.png && echo "MEDIA:/tmp/result.png"\`
134
+ **After creating any file** (via Write tool or exec), deliver it by running:
135
+
136
+ exec echo "MEDIA:/absolute/path/to/file"
137
+
138
+ For files created during an exec command, you can inline it at the end of the same command:
139
+
140
+ exec python3 generate.py --output /tmp/result.png && echo "MEDIA:/tmp/result.png"
141
+
142
+ Notes:
143
+ - Works for images (png, jpg, gif, webp, svg, etc.), documents, markdown, code files, and more
137
144
  - Output each path once — duplicates are ignored automatically
138
145
  `;
139
146
  async function startClawChats(ctx, api, mediaStash) {
@@ -381,6 +388,8 @@ async function stopClawChats(ctx) {
381
388
  * guard checks MediaPath/MediaPaths but not inline base64 attachments).
382
389
  * Injecting a minimal placeholder ensures the agent run proceeds.
383
390
  */
391
+ // Track which ClawChats thread sessions have received the capability note (once per session).
392
+ const _hintedSessions = new Set();
384
393
  function normalizeGatewayPayload(raw) {
385
394
  try {
386
395
  const parsed = JSON.parse(raw);
@@ -402,6 +411,16 @@ function normalizeGatewayPayload(raw) {
402
411
  parsed.params.message = '[Image]';
403
412
  return JSON.stringify(parsed);
404
413
  }
414
+ // Capability note: inform the agent that exec stdout lines starting with MEDIA:/path
415
+ // cause that file to appear inline in chat. Phrased descriptively (not imperatively)
416
+ // to avoid triggering prompt-injection scanners. Injected once per session (~8 tokens).
417
+ const sk = parsed.params.sessionKey || '';
418
+ if (sk.includes(':chat:') && !_hintedSessions.has(sk)) {
419
+ _hintedSessions.add(sk);
420
+ parsed.params.message += '\n[ClawChats: exec stdout lines starting with MEDIA:/path cause that file to appear inline in chat]';
421
+ console.log(`[clawchats] capability-note injected for session ${sk}`);
422
+ return JSON.stringify(parsed);
423
+ }
405
424
  }
406
425
  }
407
426
  catch {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawchatsai/connector",
3
- "version": "0.0.64",
3
+ "version": "0.0.66",
4
4
  "type": "module",
5
5
  "description": "ClawChats OpenClaw plugin — P2P tunnel + local API bridge",
6
6
  "main": "dist/index.js",