aibroker 0.2.3 → 0.2.5
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/dist/backend/api.d.ts +32 -0
- package/dist/backend/api.d.ts.map +1 -1
- package/dist/backend/api.js +126 -7
- package/dist/backend/api.js.map +1 -1
- package/dist/core/markdown.d.ts +5 -0
- package/dist/core/markdown.d.ts.map +1 -1
- package/dist/core/markdown.js +33 -0
- package/dist/core/markdown.js.map +1 -1
- package/dist/core/transport.d.ts +25 -0
- package/dist/core/transport.d.ts.map +1 -0
- package/dist/core/transport.js +51 -0
- package/dist/core/transport.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/backend/api.d.ts
CHANGED
|
@@ -6,8 +6,33 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Supports multiple parallel sessions, each with its own conversation
|
|
8
8
|
* context, working directory, and Claude session UUID for resume.
|
|
9
|
+
*
|
|
10
|
+
* Tracks live session status (thinking, tool_running, compacting, etc.)
|
|
11
|
+
* so consumers can show meaningful status via /ss.
|
|
9
12
|
*/
|
|
10
13
|
import type { Backend, APIBackendConfig } from "../types/backend.js";
|
|
14
|
+
/** Live status of a session's current deliver() call */
|
|
15
|
+
export type SessionState = "idle" | "thinking" | "tool_running" | "compacting" | "done" | "error";
|
|
16
|
+
/** Live status snapshot for a session */
|
|
17
|
+
export interface SessionStatus {
|
|
18
|
+
state: SessionState;
|
|
19
|
+
/** Current tool name (when state === "tool_running") */
|
|
20
|
+
currentTool?: string;
|
|
21
|
+
/** How long the current tool has been running (seconds) */
|
|
22
|
+
toolElapsed?: number;
|
|
23
|
+
/** Number of turns completed so far */
|
|
24
|
+
turns: number;
|
|
25
|
+
/** Accumulated cost in USD */
|
|
26
|
+
costUsd: number;
|
|
27
|
+
/** Result subtype from the last completed deliver() */
|
|
28
|
+
lastResult?: string;
|
|
29
|
+
/** Error messages from the last completed deliver() */
|
|
30
|
+
lastErrors?: string[];
|
|
31
|
+
/** Permission denials encountered */
|
|
32
|
+
permissionDenials: number;
|
|
33
|
+
/** Timestamp when deliver() started */
|
|
34
|
+
startedAt?: number;
|
|
35
|
+
}
|
|
11
36
|
/** Metadata for a single API session */
|
|
12
37
|
export interface APISession {
|
|
13
38
|
/** External session ID (e.g. "api-1") */
|
|
@@ -29,6 +54,8 @@ export declare class APIBackend implements Backend {
|
|
|
29
54
|
private readonly config;
|
|
30
55
|
/** All active API sessions */
|
|
31
56
|
private readonly sessions;
|
|
57
|
+
/** Live status per session */
|
|
58
|
+
private readonly statuses;
|
|
32
59
|
/** Currently active session ID */
|
|
33
60
|
private _activeSessionId;
|
|
34
61
|
/** Auto-increment counter for session IDs */
|
|
@@ -50,6 +77,11 @@ export declare class APIBackend implements Backend {
|
|
|
50
77
|
listSessions(): APISession[];
|
|
51
78
|
/** Get session by list index (1-based, matching /s display) */
|
|
52
79
|
getSessionByIndex(index: number): APISession | undefined;
|
|
80
|
+
/** Get live status for a session (or the active session) */
|
|
81
|
+
getStatus(sessionId?: string): SessionStatus;
|
|
82
|
+
/** Get a formatted status string suitable for display */
|
|
83
|
+
formatStatus(): string;
|
|
84
|
+
private formatState;
|
|
53
85
|
deliver(message: string, sessionId?: string): Promise<string | undefined>;
|
|
54
86
|
}
|
|
55
87
|
//# sourceMappingURL=api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/backend/api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/backend/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKrE,wDAAwD;AACxD,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,UAAU,GACV,cAAc,GACd,YAAY,GACZ,MAAM,GACN,OAAO,CAAC;AAEZ,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,UAAW,YAAW,OAAO;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAE1C,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,kCAAkC;IAClC,OAAO,CAAC,gBAAgB,CAAc;IACtC,6CAA6C;IAC7C,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,EAAE,gBAAgB,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAUxD,gCAAgC;IAChC,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,gCAAgC;IAChC,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,EAK7B;IAED,8CAA8C;IAC9C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU;IAerD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAc/B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAU/B,0CAA0C;IAC1C,YAAY,IAAI,UAAU,EAAE;IAQ5B,+DAA+D;IAC/D,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAKxD,4DAA4D;IAC5D,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa;IAK5C,yDAAyD;IACzD,YAAY,IAAI,MAAM;IAsCtB,OAAO,CAAC,WAAW;IA2Bb,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAmIhF"}
|
package/dist/backend/api.js
CHANGED
|
@@ -6,10 +6,16 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Supports multiple parallel sessions, each with its own conversation
|
|
8
8
|
* context, working directory, and Claude session UUID for resume.
|
|
9
|
+
*
|
|
10
|
+
* Tracks live session status (thinking, tool_running, compacting, etc.)
|
|
11
|
+
* so consumers can show meaningful status via /ss.
|
|
9
12
|
*/
|
|
10
13
|
import { log } from "../core/log.js";
|
|
11
14
|
import { homedir } from "os";
|
|
12
15
|
import { spawn } from "child_process";
|
|
16
|
+
function defaultStatus() {
|
|
17
|
+
return { state: "idle", turns: 0, costUsd: 0, permissionDenials: 0 };
|
|
18
|
+
}
|
|
13
19
|
export class APIBackend {
|
|
14
20
|
name;
|
|
15
21
|
type = "api";
|
|
@@ -18,6 +24,8 @@ export class APIBackend {
|
|
|
18
24
|
config;
|
|
19
25
|
/** All active API sessions */
|
|
20
26
|
sessions = new Map();
|
|
27
|
+
/** Live status per session */
|
|
28
|
+
statuses = new Map();
|
|
21
29
|
/** Currently active session ID */
|
|
22
30
|
_activeSessionId = "";
|
|
23
31
|
/** Auto-increment counter for session IDs */
|
|
@@ -51,6 +59,7 @@ export class APIBackend {
|
|
|
51
59
|
lastActive: Date.now(),
|
|
52
60
|
};
|
|
53
61
|
this.sessions.set(id, session);
|
|
62
|
+
this.statuses.set(id, defaultStatus());
|
|
54
63
|
this._activeSessionId = id;
|
|
55
64
|
log(`APIBackend: created session ${id} "${name}" (cwd=${session.cwd})`);
|
|
56
65
|
return session;
|
|
@@ -60,6 +69,7 @@ export class APIBackend {
|
|
|
60
69
|
if (!this.sessions.has(id))
|
|
61
70
|
return false;
|
|
62
71
|
this.sessions.delete(id);
|
|
72
|
+
this.statuses.delete(id);
|
|
63
73
|
log(`APIBackend: ended session ${id}`);
|
|
64
74
|
// Switch to most recent remaining session
|
|
65
75
|
if (this._activeSessionId === id) {
|
|
@@ -74,6 +84,7 @@ export class APIBackend {
|
|
|
74
84
|
const session = this.sessions.get(targetId);
|
|
75
85
|
if (session) {
|
|
76
86
|
session.claudeSessionId = undefined;
|
|
87
|
+
this.statuses.set(targetId, defaultStatus());
|
|
77
88
|
log(`APIBackend: cleared conversation for session ${targetId}`);
|
|
78
89
|
}
|
|
79
90
|
}
|
|
@@ -90,6 +101,69 @@ export class APIBackend {
|
|
|
90
101
|
const list = this.listSessions();
|
|
91
102
|
return list[index - 1];
|
|
92
103
|
}
|
|
104
|
+
/** Get live status for a session (or the active session) */
|
|
105
|
+
getStatus(sessionId) {
|
|
106
|
+
const id = sessionId ?? this._activeSessionId;
|
|
107
|
+
return this.statuses.get(id) ?? defaultStatus();
|
|
108
|
+
}
|
|
109
|
+
/** Get a formatted status string suitable for display */
|
|
110
|
+
formatStatus() {
|
|
111
|
+
const sessions = this.listSessions();
|
|
112
|
+
const lines = [
|
|
113
|
+
`*API Mode — ${this.model}*`,
|
|
114
|
+
``,
|
|
115
|
+
];
|
|
116
|
+
for (const s of sessions) {
|
|
117
|
+
const isActive = s.id === this._activeSessionId;
|
|
118
|
+
const status = this.statuses.get(s.id) ?? defaultStatus();
|
|
119
|
+
// Session header
|
|
120
|
+
const marker = isActive ? "*" : " ";
|
|
121
|
+
lines.push(`${marker}${s.name} (${s.cwd})`);
|
|
122
|
+
// State line
|
|
123
|
+
const stateDisplay = this.formatState(status);
|
|
124
|
+
const ctx = s.claudeSessionId ? "has context" : "fresh";
|
|
125
|
+
lines.push(` ${stateDisplay} | ${ctx}`);
|
|
126
|
+
// Stats line (only if there's been activity)
|
|
127
|
+
if (status.turns > 0 || status.costUsd > 0) {
|
|
128
|
+
const cost = status.costUsd > 0 ? ` | $${status.costUsd.toFixed(3)}` : "";
|
|
129
|
+
lines.push(` ${status.turns} turns${cost}`);
|
|
130
|
+
}
|
|
131
|
+
// Errors or denials
|
|
132
|
+
if (status.lastErrors?.length) {
|
|
133
|
+
lines.push(` Error: ${status.lastErrors[0]}`);
|
|
134
|
+
}
|
|
135
|
+
if (status.permissionDenials > 0) {
|
|
136
|
+
lines.push(` ${status.permissionDenials} permission denial(s)`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return lines.join("\n");
|
|
140
|
+
}
|
|
141
|
+
formatState(status) {
|
|
142
|
+
switch (status.state) {
|
|
143
|
+
case "idle":
|
|
144
|
+
if (status.lastResult) {
|
|
145
|
+
return status.lastResult === "success" ? "Idle (completed)" : `Idle (${status.lastResult})`;
|
|
146
|
+
}
|
|
147
|
+
return "Idle";
|
|
148
|
+
case "thinking": {
|
|
149
|
+
const elapsed = status.startedAt ? Math.round((Date.now() - status.startedAt) / 1000) : 0;
|
|
150
|
+
return `Thinking... (${elapsed}s)`;
|
|
151
|
+
}
|
|
152
|
+
case "tool_running": {
|
|
153
|
+
const tool = status.currentTool ?? "unknown";
|
|
154
|
+
const secs = status.toolElapsed ? `${Math.round(status.toolElapsed)}s` : "";
|
|
155
|
+
return `Running: ${tool} ${secs}`.trim();
|
|
156
|
+
}
|
|
157
|
+
case "compacting":
|
|
158
|
+
return "Compacting context...";
|
|
159
|
+
case "done":
|
|
160
|
+
return status.lastResult === "success" ? "Done" : `Done (${status.lastResult})`;
|
|
161
|
+
case "error":
|
|
162
|
+
return "Error";
|
|
163
|
+
default:
|
|
164
|
+
return String(status.state);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
93
167
|
async deliver(message, sessionId) {
|
|
94
168
|
if (this.provider !== "anthropic") {
|
|
95
169
|
log(`APIBackend: provider '${this.provider}' not yet supported, only 'anthropic'`);
|
|
@@ -102,6 +176,16 @@ export class APIBackend {
|
|
|
102
176
|
const cwd = session?.cwd ?? this.config.cwd ?? homedir();
|
|
103
177
|
if (session)
|
|
104
178
|
session.lastActive = Date.now();
|
|
179
|
+
// Initialize live status tracking
|
|
180
|
+
const status = {
|
|
181
|
+
state: "thinking",
|
|
182
|
+
turns: 0,
|
|
183
|
+
costUsd: 0,
|
|
184
|
+
permissionDenials: 0,
|
|
185
|
+
startedAt: Date.now(),
|
|
186
|
+
};
|
|
187
|
+
if (targetId)
|
|
188
|
+
this.statuses.set(targetId, status);
|
|
105
189
|
try {
|
|
106
190
|
// Dynamic import — avoid loading the SDK at module level for consumers that don't use API mode
|
|
107
191
|
const { query } = await import("@anthropic-ai/claude-agent-sdk");
|
|
@@ -139,16 +223,26 @@ export class APIBackend {
|
|
|
139
223
|
},
|
|
140
224
|
},
|
|
141
225
|
})) {
|
|
226
|
+
// Track SDK events for live status
|
|
227
|
+
const ev = event;
|
|
142
228
|
if (event.type === "system") {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
229
|
+
if (typeof ev.session_id === "string") {
|
|
230
|
+
claudeSessionId = ev.session_id;
|
|
231
|
+
}
|
|
232
|
+
if (ev.subtype === "status") {
|
|
233
|
+
status.state = ev.status === "compacting" ? "compacting" : "thinking";
|
|
234
|
+
}
|
|
235
|
+
if (ev.subtype === "compact_boundary") {
|
|
236
|
+
// Context was compacted — note it happened
|
|
237
|
+
log(`APIBackend: context compacted (session=${targetId})`);
|
|
146
238
|
}
|
|
147
239
|
}
|
|
148
240
|
else if (event.type === "assistant") {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
241
|
+
status.state = "thinking";
|
|
242
|
+
status.currentTool = undefined;
|
|
243
|
+
status.toolElapsed = undefined;
|
|
244
|
+
const msg = ev.message;
|
|
245
|
+
const content = msg?.content;
|
|
152
246
|
if (Array.isArray(content)) {
|
|
153
247
|
for (const block of content) {
|
|
154
248
|
if (block && typeof block === "object" && "type" in block && block.type === "text" && "text" in block) {
|
|
@@ -157,18 +251,43 @@ export class APIBackend {
|
|
|
157
251
|
}
|
|
158
252
|
}
|
|
159
253
|
}
|
|
254
|
+
else if (event.type === "tool_progress") {
|
|
255
|
+
status.state = "tool_running";
|
|
256
|
+
status.currentTool = typeof ev.tool_name === "string" ? ev.tool_name : undefined;
|
|
257
|
+
status.toolElapsed = typeof ev.elapsed_time_seconds === "number" ? ev.elapsed_time_seconds : undefined;
|
|
258
|
+
}
|
|
259
|
+
else if (event.type === "result") {
|
|
260
|
+
const subtype = typeof ev.subtype === "string" ? ev.subtype : "unknown";
|
|
261
|
+
status.state = "done";
|
|
262
|
+
status.lastResult = subtype;
|
|
263
|
+
status.currentTool = undefined;
|
|
264
|
+
status.toolElapsed = undefined;
|
|
265
|
+
if (typeof ev.num_turns === "number")
|
|
266
|
+
status.turns = ev.num_turns;
|
|
267
|
+
if (typeof ev.total_cost_usd === "number")
|
|
268
|
+
status.costUsd = ev.total_cost_usd;
|
|
269
|
+
if (Array.isArray(ev.permission_denials))
|
|
270
|
+
status.permissionDenials = ev.permission_denials.length;
|
|
271
|
+
if (Array.isArray(ev.errors))
|
|
272
|
+
status.lastErrors = ev.errors;
|
|
273
|
+
}
|
|
160
274
|
}
|
|
161
275
|
// Store Claude session UUID for future resume
|
|
162
276
|
if (session && claudeSessionId) {
|
|
163
277
|
session.claudeSessionId = claudeSessionId;
|
|
164
278
|
}
|
|
279
|
+
// Finalize status
|
|
280
|
+
status.state = "idle";
|
|
281
|
+
status.lastResult = status.lastResult ?? "success";
|
|
165
282
|
const response = chunks.join("\n").trim();
|
|
166
|
-
log(`APIBackend: got response (${response.length} chars, session=${claudeSessionId ?? "unknown"})`);
|
|
283
|
+
log(`APIBackend: got response (${response.length} chars, session=${claudeSessionId ?? "unknown"}, turns=${status.turns}, cost=$${status.costUsd.toFixed(3)})`);
|
|
167
284
|
return response || undefined;
|
|
168
285
|
}
|
|
169
286
|
catch (err) {
|
|
170
287
|
const msg = err instanceof Error ? err.message : String(err);
|
|
171
288
|
log(`APIBackend: error — ${msg}`);
|
|
289
|
+
status.state = "error";
|
|
290
|
+
status.lastErrors = [msg];
|
|
172
291
|
return `Error from Claude subprocess: ${msg}`;
|
|
173
292
|
}
|
|
174
293
|
}
|
package/dist/backend/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/backend/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/backend/api.ts"],"names":[],"mappings":"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"}
|
package/dist/core/markdown.d.ts
CHANGED
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
* @param italicEndMarker - The closing italic delimiter ("_" for WhatsApp, "</i>" for Telegram)
|
|
25
25
|
*/
|
|
26
26
|
export declare function applySharedMarkdownTransforms(text: string, boldMarker: string, boldEndMarker: string, italicMarker: string, italicEndMarker: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Strip all markdown formatting, leaving plain conversational text for TTS.
|
|
29
|
+
* TTS engines read asterisks, backticks, etc. literally — this removes them.
|
|
30
|
+
*/
|
|
31
|
+
export declare function stripMarkdown(text: string): string;
|
|
27
32
|
/**
|
|
28
33
|
* WhatsApp markdown formatter.
|
|
29
34
|
* Uses * for bold, _ for italic.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,MAAM,CA0BR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAavD"}
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,MAAM,CA0BR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4BlD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAavD"}
|
package/dist/core/markdown.js
CHANGED
|
@@ -50,6 +50,39 @@ export function applySharedMarkdownTransforms(text, boldMarker, boldEndMarker, i
|
|
|
50
50
|
return boldMarker; // caller handles open/close if markers differ
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Strip all markdown formatting, leaving plain conversational text for TTS.
|
|
55
|
+
* TTS engines read asterisks, backticks, etc. literally — this removes them.
|
|
56
|
+
*/
|
|
57
|
+
export function stripMarkdown(text) {
|
|
58
|
+
return text
|
|
59
|
+
// Headings → just the title text
|
|
60
|
+
.replace(/^#{1,6}\s+(.+)$/gm, "$1")
|
|
61
|
+
// Horizontal rules → empty line
|
|
62
|
+
.replace(/^---+$/gm, "")
|
|
63
|
+
// Blockquotes → just the content
|
|
64
|
+
.replace(/^>\s?(.*)$/gm, "$1")
|
|
65
|
+
// Checkboxes → plain text
|
|
66
|
+
.replace(/^(\s*)- \[x\]\s+/gm, "$1")
|
|
67
|
+
.replace(/^(\s*)- \[ \]\s+/gm, "$1")
|
|
68
|
+
// Unordered list markers → nothing (keep the text)
|
|
69
|
+
.replace(/^(\s*)[-*]\s+/gm, "$1")
|
|
70
|
+
// Bold **text** → text
|
|
71
|
+
.replace(/\*\*(.+?)\*\*/gs, "$1")
|
|
72
|
+
// Italic *text* → text
|
|
73
|
+
.replace(/(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/gs, "$1")
|
|
74
|
+
// Italic _text_ → text
|
|
75
|
+
.replace(/(?<![a-zA-Z0-9])_(.+?)_(?![a-zA-Z0-9])/gs, "$1")
|
|
76
|
+
// Inline code `text` → text
|
|
77
|
+
.replace(/`([^`]+)`/g, "$1")
|
|
78
|
+
// Code blocks ```text``` → text
|
|
79
|
+
.replace(/```[\s\S]*?```/g, (m) => m.replace(/```/g, "").trim())
|
|
80
|
+
// Links [text](url) → text
|
|
81
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
|
|
82
|
+
// Collapse multiple blank lines
|
|
83
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
84
|
+
.trim();
|
|
85
|
+
}
|
|
53
86
|
/**
|
|
54
87
|
* WhatsApp markdown formatter.
|
|
55
88
|
* Uses * for bold, _ for italic.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,6BAA6B,CAC3C,IAAY,EACZ,UAAkB,EAClB,aAAqB,EACrB,YAAoB,EACpB,eAAuB;IAEvB,MAAM,IAAI,GAAG,MAAM,CAAC;IACpB,OAAO,IAAI;QACT,+DAA+D;SAC9D,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;QAC5F,4CAA4C;SAC3C,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAC3B,sCAAsC;SACrC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,0BAA0B;SACzB,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;QACtC,6CAA6C;SAC5C,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,8CAA8C;SAC7C,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;QAC/C,gDAAgD;SAC/C,OAAO,CAAC,uCAAuC,EAAE,GAAG,YAAY,KAAK,eAAe,EAAE,CAAC;QACxF,mCAAmC;SAClC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC;QAClC,qDAAqD;SACpD,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAc,EAAE,EAAE;QACpD,4CAA4C;QAC5C,oDAAoD;QACpD,OAAO,UAAU,CAAC,CAAC,8CAA8C;IACnE,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC;IACpB,OAAO,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;SAC3F,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;SAC/B,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;SAClC,OAAO,CAAC,iBAAiB,EAAE,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;SAC9C,OAAO,CAAC,uCAAuC,EAAE,MAAM,CAAC;SACxD,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC;SACjC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/transport.ts — Shared API backend delivery with transport abstraction.
|
|
3
|
+
*
|
|
4
|
+
* Centralises the voice-detection, TTS chunking, and response-routing logic
|
|
5
|
+
* that every transport (Whazaa, Telex, …) needs when using the APIBackend.
|
|
6
|
+
* Transports only provide two callbacks: sendText and sendVoice.
|
|
7
|
+
*/
|
|
8
|
+
import type { APIBackend } from "../backend/api.js";
|
|
9
|
+
/** Transport-provided callbacks for sending responses back to the user. */
|
|
10
|
+
export interface TransportCallbacks {
|
|
11
|
+
/** Send a text message (already markdown-formatted by the transport). */
|
|
12
|
+
sendText: (text: string) => Promise<unknown>;
|
|
13
|
+
/** Send a single voice-note buffer (OGG Opus). transcript is for companion-app display. */
|
|
14
|
+
sendVoice: (buffer: Buffer, transcript?: string) => Promise<unknown>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Deliver a message through the APIBackend and route the response back
|
|
18
|
+
* via the appropriate transport channel (text or voice).
|
|
19
|
+
*
|
|
20
|
+
* Voice detection: if `message` contains `:voice]` (e.g. `[Whazaa:voice]`),
|
|
21
|
+
* the response is synthesised to voice notes via Kokoro TTS and sent as
|
|
22
|
+
* audio. Otherwise it's sent as a plain text message.
|
|
23
|
+
*/
|
|
24
|
+
export declare function deliverViaApi(backend: APIBackend, message: string, sessionId: string, transport: TransportCallbacks): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,2FAA2F;IAC3F,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/transport.ts — Shared API backend delivery with transport abstraction.
|
|
3
|
+
*
|
|
4
|
+
* Centralises the voice-detection, TTS chunking, and response-routing logic
|
|
5
|
+
* that every transport (Whazaa, Telex, …) needs when using the APIBackend.
|
|
6
|
+
* Transports only provide two callbacks: sendText and sendVoice.
|
|
7
|
+
*/
|
|
8
|
+
import { textToVoiceNote } from "../adapters/kokoro/tts.js";
|
|
9
|
+
import { splitIntoChunks } from "../adapters/kokoro/media.js";
|
|
10
|
+
import { loadVoiceConfig } from "./persistence.js";
|
|
11
|
+
import { stripMarkdown } from "./markdown.js";
|
|
12
|
+
import { log } from "./log.js";
|
|
13
|
+
/**
|
|
14
|
+
* Deliver a message through the APIBackend and route the response back
|
|
15
|
+
* via the appropriate transport channel (text or voice).
|
|
16
|
+
*
|
|
17
|
+
* Voice detection: if `message` contains `:voice]` (e.g. `[Whazaa:voice]`),
|
|
18
|
+
* the response is synthesised to voice notes via Kokoro TTS and sent as
|
|
19
|
+
* audio. Otherwise it's sent as a plain text message.
|
|
20
|
+
*/
|
|
21
|
+
export async function deliverViaApi(backend, message, sessionId, transport) {
|
|
22
|
+
const isVoice = message.includes(":voice]");
|
|
23
|
+
log(`deliverViaApi: session=${sessionId}, voice=${isVoice}`);
|
|
24
|
+
try {
|
|
25
|
+
const response = await backend.deliver(message, sessionId);
|
|
26
|
+
if (!response)
|
|
27
|
+
return;
|
|
28
|
+
if (isVoice) {
|
|
29
|
+
const voice = loadVoiceConfig().defaultVoice;
|
|
30
|
+
// Strip markdown — TTS reads asterisks, backticks etc. literally
|
|
31
|
+
const plainText = stripMarkdown(response);
|
|
32
|
+
const chunks = splitIntoChunks(plainText);
|
|
33
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
34
|
+
if (i > 0)
|
|
35
|
+
await new Promise((r) => setTimeout(r, 1000));
|
|
36
|
+
const audioBuffer = await textToVoiceNote(chunks[i], voice);
|
|
37
|
+
await transport.sendVoice(audioBuffer, chunks[i]);
|
|
38
|
+
}
|
|
39
|
+
log(`deliverViaApi: voice reply sent (${chunks.length} chunk${chunks.length > 1 ? "s" : ""})`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
await transport.sendText(response);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
47
|
+
log(`deliverViaApi: error — ${msg}`);
|
|
48
|
+
await transport.sendText(`Error: ${msg}`).catch(() => { });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/core/transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAU/B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAmB,EACnB,OAAe,EACf,SAAiB,EACjB,SAA6B;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,0BAA0B,SAAS,WAAW,OAAO,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC,YAAY,CAAC;YAC7C,iEAAiE;YACjE,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,GAAG,CAAC,oCAAoC,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,GAAG,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
export * from "./types/index.js";
|
|
16
16
|
export { log, setLogPrefix } from "./core/log.js";
|
|
17
17
|
export { MIME_MAP, lookupMime } from "./core/mime.js";
|
|
18
|
-
export { applySharedMarkdownTransforms, markdownToWhatsApp } from "./core/markdown.js";
|
|
18
|
+
export { applySharedMarkdownTransforms, markdownToWhatsApp, stripMarkdown } from "./core/markdown.js";
|
|
19
19
|
export { sessionRegistry, managedSessions, sessionTtyCache, activeClientId, activeItermSessionId, setActiveClientId, setActiveItermSessionId, updateSessionTtyCache, cachedSessionList, cachedSessionListTime, setCachedSessionList, clientQueues, clientWaiters, contactMessageQueues, contactDirectory, voiceConfig, setVoiceConfig, commandHandler, setCommandHandler, sentMessageIds, dispatchIncomingMessage, enqueueContactMessage, } from "./core/state.js";
|
|
20
20
|
export type { CommandHandler } from "./core/state.js";
|
|
21
21
|
export { setAppDir, getAppDir, DEFAULT_VOICE_CONFIG, loadVoiceConfig, saveVoiceConfig, loadSessionRegistry, saveSessionRegistry, } from "./core/persistence.js";
|
|
22
22
|
export { MessageRouter, router } from "./core/router.js";
|
|
23
|
+
export { deliverViaApi } from "./core/transport.js";
|
|
24
|
+
export type { TransportCallbacks } from "./core/transport.js";
|
|
23
25
|
export { WatcherClient } from "./ipc/client.js";
|
|
24
26
|
export { IpcServer } from "./ipc/server.js";
|
|
25
27
|
export type { IpcHandler } from "./ipc/server.js";
|
|
@@ -32,5 +34,5 @@ export type { KokoroVoice } from "./adapters/kokoro/tts.js";
|
|
|
32
34
|
export { transcribeAudio, splitIntoChunks, mimetypeToExt, mimetypeToDocExt, WHISPER_BIN, WHISPER_MODEL, } from "./adapters/kokoro/media.js";
|
|
33
35
|
export { SessionBackend } from "./adapters/session/backend.js";
|
|
34
36
|
export { APIBackend } from "./backend/api.js";
|
|
35
|
-
export type { APISession } from "./backend/api.js";
|
|
37
|
+
export type { APISession, SessionStatus, SessionState } from "./backend/api.js";
|
|
36
38
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,WAAW,GACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,WAAW,IAAI,qBAAqB,EACpC,aAAa,IAAI,uBAAuB,GACzC,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,10 +17,11 @@ export * from "./types/index.js";
|
|
|
17
17
|
// ── Core ──
|
|
18
18
|
export { log, setLogPrefix } from "./core/log.js";
|
|
19
19
|
export { MIME_MAP, lookupMime } from "./core/mime.js";
|
|
20
|
-
export { applySharedMarkdownTransforms, markdownToWhatsApp } from "./core/markdown.js";
|
|
20
|
+
export { applySharedMarkdownTransforms, markdownToWhatsApp, stripMarkdown } from "./core/markdown.js";
|
|
21
21
|
export { sessionRegistry, managedSessions, sessionTtyCache, activeClientId, activeItermSessionId, setActiveClientId, setActiveItermSessionId, updateSessionTtyCache, cachedSessionList, cachedSessionListTime, setCachedSessionList, clientQueues, clientWaiters, contactMessageQueues, contactDirectory, voiceConfig, setVoiceConfig, commandHandler, setCommandHandler, sentMessageIds, dispatchIncomingMessage, enqueueContactMessage, } from "./core/state.js";
|
|
22
22
|
export { setAppDir, getAppDir, DEFAULT_VOICE_CONFIG, loadVoiceConfig, saveVoiceConfig, loadSessionRegistry, saveSessionRegistry, } from "./core/persistence.js";
|
|
23
23
|
export { MessageRouter, router } from "./core/router.js";
|
|
24
|
+
export { deliverViaApi } from "./core/transport.js";
|
|
24
25
|
// ── IPC ──
|
|
25
26
|
export { WatcherClient } from "./ipc/client.js";
|
|
26
27
|
export { IpcServer } from "./ipc/server.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc;AACd,cAAc,kBAAkB,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc;AACd,cAAc,kBAAkB,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,0BAA0B;AAC1B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,WAAW,GACZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,WAAW,IAAI,qBAAqB,EACpC,aAAa,IAAI,uBAAuB,GACzC,MAAM,+BAA+B,CAAC;AAEvC,8BAA8B;AAC9B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,mCAAmC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|