@circuitwall/jarela 0.7.2 → 0.7.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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/compact/route.js +51 -35
- package/.next/standalone/.next/server/app/api/v1/agents/[id]/compact/route.js.map +1 -1
- package/.next/standalone/.next/server/app/api/v1/threads/[thread_id]/run/route.js +2 -2
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/page.js +515 -104
- package/.next/standalone/.next/server/app/page.js.map +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/_index.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/.next/standalone/.next/server/chunks/1683.js +26 -16
- package/.next/standalone/.next/server/chunks/1683.js.map +1 -1
- package/.next/standalone/.next/server/chunks/{317.js → 5432.js} +11100 -10858
- package/.next/standalone/.next/server/chunks/5432.js.map +1 -0
- package/.next/standalone/.next/server/chunks/7885.js +606 -353
- package/.next/standalone/.next/server/chunks/7885.js.map +1 -1
- package/.next/standalone/.next/server/chunks/8135.js +59 -16
- package/.next/standalone/.next/server/chunks/8135.js.map +1 -1
- package/.next/standalone/.next/server/chunks/9032.js +3 -3
- package/.next/standalone/.next/server/chunks/9032.js.map +1 -1
- package/.next/standalone/.next/server/instrumentation.js +3 -3
- package/.next/standalone/.next/server/instrumentation.js.map +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +2 -2
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/app/{page-a20902703c0a4f10.js → page-9fb006074fb13526.js} +582 -171
- package/.next/standalone/.next/static/chunks/app/page-9fb006074fb13526.js.map +1 -0
- package/.next/standalone/.next/static/css/5507dbe1cdc6c599.css +5 -0
- package/.next/standalone/.next/static/css/5507dbe1cdc6c599.css.map +1 -0
- package/.next/standalone/package.json +1 -1
- package/CHANGELOG.md +11 -0
- package/README.md +83 -1
- package/api/types.ts +7 -0
- package/app/api/v1/agents/[id]/compact/route.ts +2 -40
- package/components/bridges/BridgeEditor.tsx +8 -0
- package/components/chat/MessageBubble.tsx +3 -36
- package/components/models/ModelEditor.tsx +141 -0
- package/components/scheduled-tasks/ScheduledTasksPanel.tsx +5 -0
- package/components/scheduled-tasks/WatchersSection.tsx +5 -0
- package/lib/agents/context-budget.test.ts +128 -0
- package/lib/agents/context-budget.ts +128 -0
- package/lib/agents/conversation-summary.test.ts +68 -0
- package/lib/agents/conversation-summary.ts +51 -0
- package/lib/agents/run-thread.ts +112 -2
- package/lib/bridges/dispatcher.test.ts +134 -0
- package/lib/bridges/dispatcher.ts +34 -16
- package/lib/bridges/message-role.test.ts +83 -0
- package/lib/bridges/message-role.ts +46 -0
- package/lib/triggers/handlers/watcher.test.ts +23 -4
- package/lib/triggers/handlers/watcher.ts +56 -8
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/317.js.map +0 -1
- package/.next/standalone/.next/static/chunks/app/page-a20902703c0a4f10.js.map +0 -1
- package/.next/standalone/.next/static/css/cc66c456aba91258.css +0 -5
- package/.next/standalone/.next/static/css/cc66c456aba91258.css.map +0 -1
- /package/.next/standalone/.next/static/{IauO0rNZkUVPX834k-SBa → AbCOWpaxP4v4lUSeFWWYz}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{IauO0rNZkUVPX834k-SBa → AbCOWpaxP4v4lUSeFWWYz}/_ssgManifest.js +0 -0
|
@@ -31,8 +31,8 @@ var global_state = __webpack_require__(15559);
|
|
|
31
31
|
var threads = __webpack_require__(83042);
|
|
32
32
|
// EXTERNAL MODULE: ./lib/stores/agent-configs.ts
|
|
33
33
|
var agent_configs = __webpack_require__(41720);
|
|
34
|
-
// EXTERNAL MODULE: ./lib/agents/run-thread.ts +
|
|
35
|
-
var run_thread = __webpack_require__(
|
|
34
|
+
// EXTERNAL MODULE: ./lib/agents/run-thread.ts + 12 modules
|
|
35
|
+
var run_thread = __webpack_require__(76644);
|
|
36
36
|
// EXTERNAL MODULE: ./lib/agents/stream-collector.ts
|
|
37
37
|
var stream_collector = __webpack_require__(30685);
|
|
38
38
|
;// ./lib/bridges/router.ts
|
|
@@ -126,6 +126,39 @@ var stream_collector = __webpack_require__(30685);
|
|
|
126
126
|
}
|
|
127
127
|
return `${note}\n\n${lines.join("\n")}\n\n${input.text}`;
|
|
128
128
|
}
|
|
129
|
+
// Parses bridge prompt envelopes rendered by formatBridgePrompt().
|
|
130
|
+
// Back-compat: also accepts legacy keys (chat_jid/sender_jid) and optional
|
|
131
|
+
// prose preface before the [bridge:...] metadata block.
|
|
132
|
+
function parseBridgePrompt(raw) {
|
|
133
|
+
const start = raw.indexOf("[bridge:");
|
|
134
|
+
if (start < 0) return null;
|
|
135
|
+
const src = raw.slice(start);
|
|
136
|
+
const headers = {};
|
|
137
|
+
const lines = src.split("\n");
|
|
138
|
+
let i = 0;
|
|
139
|
+
for(; i < lines.length; i++){
|
|
140
|
+
const line = lines[i];
|
|
141
|
+
if (line === "") {
|
|
142
|
+
i++;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
const m = /^\[([a-z_]+):([\s\S]*)\]$/.exec(line);
|
|
146
|
+
if (!m) return null;
|
|
147
|
+
headers[m[1]] = m[2];
|
|
148
|
+
}
|
|
149
|
+
const chatId = headers.chat_id || headers.chat_jid;
|
|
150
|
+
const senderId = headers.sender_id || headers.sender_jid || chatId;
|
|
151
|
+
if (!headers.bridge || !chatId || !headers.chat_type) return null;
|
|
152
|
+
return {
|
|
153
|
+
bridgeId: headers.bridge,
|
|
154
|
+
chatJid: chatId,
|
|
155
|
+
chatName: headers.chat_name || chatId,
|
|
156
|
+
isGroup: headers.chat_type === "group",
|
|
157
|
+
senderJid: senderId,
|
|
158
|
+
senderName: headers.sender_name || senderId || "Unknown",
|
|
159
|
+
body: lines.slice(i).join("\n").trimEnd()
|
|
160
|
+
};
|
|
161
|
+
}
|
|
129
162
|
function roleNote(role, isGroup) {
|
|
130
163
|
switch(role){
|
|
131
164
|
case "user":
|
|
@@ -145,6 +178,10 @@ function roleNote(role, isGroup) {
|
|
|
145
178
|
|
|
146
179
|
|
|
147
180
|
|
|
181
|
+
const SILENT_BRIDGE_DIRECTIVE = "[SILENT_BRIDGE] Observer mode is enabled for this route. You are standing on the user's side and monitoring events. " + "Never behave like a participant in the external chat and never draft/imitate a direct chat reply. " + "Write to the user only, as a concise report of important events, risks, or user-actionable changes. " + "Keep tone informational (status/update summary), not conversational. " + "If nothing important happened, reply with exactly the single token NO_REPLY and nothing else.";
|
|
182
|
+
function isNoReply(text) {
|
|
183
|
+
return /^\s*NO[_ ]?REPLY\b/i.test(text);
|
|
184
|
+
}
|
|
148
185
|
/**
|
|
149
186
|
* Handle one inbound message from a bridge adapter:
|
|
150
187
|
* 1. Resolve the chat → agent route. Unrouted → publish an advisory
|
|
@@ -195,7 +232,9 @@ function roleNote(role, isGroup) {
|
|
|
195
232
|
sender_name: senderName,
|
|
196
233
|
text: msg.text
|
|
197
234
|
});
|
|
198
|
-
const
|
|
235
|
+
const silent = route.silent_mode === 1;
|
|
236
|
+
const effectivePrompt = silent ? `${promptText}\n\n${SILENT_BRIDGE_DIRECTIVE}` : promptText;
|
|
237
|
+
const prepared = await (0,run_thread/* prepareThreadRun */.fn)(thread.thread_id, effectivePrompt, undefined, msg.attachments, undefined, undefined, "bridge");
|
|
199
238
|
// Silent mode: suppress *any* outbound signal — no reply, no typing
|
|
200
239
|
// indicator. The typing presence itself is a tell that an agent is
|
|
201
240
|
// listening, so observer-mode routes must stay completely dark on the
|
|
@@ -211,7 +250,6 @@ function roleNote(role, isGroup) {
|
|
|
211
250
|
// matches. Default 'counterpart' = agent answers the user's chat
|
|
212
251
|
// partner / group members but stays quiet on the user's own messages.
|
|
213
252
|
// 'user' = inverse — react only to what the paired user typed.
|
|
214
|
-
const silent = route.silent_mode === 1;
|
|
215
253
|
// Show the "composing…" presence on the channel while we drain the
|
|
216
254
|
// LLM stream. Refresh every ~8s because WhatsApp drops the indicator
|
|
217
255
|
// after ~10s if not renewed. We always send a final "paused" in the
|
|
@@ -246,8 +284,11 @@ function roleNote(role, isGroup) {
|
|
|
246
284
|
void adapter.sendTyping(msg.remote_jid, false).catch(()=>{});
|
|
247
285
|
}
|
|
248
286
|
}
|
|
249
|
-
(0,run_thread/* persistAssistantMessage */._w)(thread.thread_id, assistantContent, usedTools, toolEvents, "bridge");
|
|
250
287
|
const reply = assistantContent.trim();
|
|
288
|
+
const suppressAssistant = silent && (reply.length === 0 || isNoReply(reply));
|
|
289
|
+
if (!suppressAssistant) {
|
|
290
|
+
(0,run_thread/* persistAssistantMessage */._w)(thread.thread_id, assistantContent, usedTools, toolEvents, "bridge");
|
|
291
|
+
}
|
|
251
292
|
// Outbound reply gate: silent_mode (master switch) AND respond_to
|
|
252
293
|
// (per-role trigger). Both must clear for a message to leave the
|
|
253
294
|
// dispatcher. The WhatsApp adapter also re-checks `route.silent_mode`
|
|
@@ -261,17 +302,19 @@ function roleNote(role, isGroup) {
|
|
|
261
302
|
console.error(`[bridge ${adapter.bridge_id}] sendText failed:`, m);
|
|
262
303
|
}
|
|
263
304
|
}
|
|
264
|
-
(
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
305
|
+
if (!silent || !suppressAssistant) {
|
|
306
|
+
(0,bus/* publish */.mk)({
|
|
307
|
+
type: "bridge_message_received",
|
|
308
|
+
bridge_id: adapter.bridge_id,
|
|
309
|
+
remote_jid: msg.remote_jid,
|
|
310
|
+
push_name: msg.push_name,
|
|
311
|
+
is_group: msg.is_group,
|
|
312
|
+
thread_id: thread.thread_id,
|
|
313
|
+
agent_id: agentId,
|
|
314
|
+
preview: suppressAssistant ? "" : reply.replace(/\s+/g, " ").slice(0, 120),
|
|
315
|
+
ts: Date.now()
|
|
316
|
+
});
|
|
317
|
+
}
|
|
275
318
|
} catch (err) {
|
|
276
319
|
const m = err instanceof Error ? err.message : String(err);
|
|
277
320
|
console.error(`[bridge ${adapter.bridge_id}] dispatcher error on ${msg.remote_jid}:`, m);
|