aibroker 0.1.0
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/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/adapters/iterm/core.d.ts +28 -0
- package/dist/adapters/iterm/core.d.ts.map +1 -0
- package/dist/adapters/iterm/core.js +191 -0
- package/dist/adapters/iterm/core.js.map +1 -0
- package/dist/adapters/iterm/dictation.d.ts +26 -0
- package/dist/adapters/iterm/dictation.d.ts.map +1 -0
- package/dist/adapters/iterm/dictation.js +99 -0
- package/dist/adapters/iterm/dictation.js.map +1 -0
- package/dist/adapters/iterm/sessions.d.ts +31 -0
- package/dist/adapters/iterm/sessions.d.ts.map +1 -0
- package/dist/adapters/iterm/sessions.js +156 -0
- package/dist/adapters/iterm/sessions.js.map +1 -0
- package/dist/adapters/kokoro/media.d.ts +32 -0
- package/dist/adapters/kokoro/media.d.ts.map +1 -0
- package/dist/adapters/kokoro/media.js +157 -0
- package/dist/adapters/kokoro/media.js.map +1 -0
- package/dist/adapters/kokoro/tts.d.ts +19 -0
- package/dist/adapters/kokoro/tts.d.ts.map +1 -0
- package/dist/adapters/kokoro/tts.js +157 -0
- package/dist/adapters/kokoro/tts.js.map +1 -0
- package/dist/adapters/session/backend.d.ts +22 -0
- package/dist/adapters/session/backend.d.ts.map +1 -0
- package/dist/adapters/session/backend.js +43 -0
- package/dist/adapters/session/backend.js.map +1 -0
- package/dist/backend/api.d.ts +20 -0
- package/dist/backend/api.d.ts.map +1 -0
- package/dist/backend/api.js +26 -0
- package/dist/backend/api.js.map +1 -0
- package/dist/core/log.d.ts +7 -0
- package/dist/core/log.d.ts.map +1 -0
- package/dist/core/log.js +14 -0
- package/dist/core/log.js.map +1 -0
- package/dist/core/markdown.d.ts +32 -0
- package/dist/core/markdown.d.ts.map +1 -0
- package/dist/core/markdown.js +71 -0
- package/dist/core/markdown.js.map +1 -0
- package/dist/core/mime.d.ts +11 -0
- package/dist/core/mime.d.ts.map +1 -0
- package/dist/core/mime.js +46 -0
- package/dist/core/mime.js.map +1 -0
- package/dist/core/persistence.d.ts +20 -0
- package/dist/core/persistence.d.ts.map +1 -0
- package/dist/core/persistence.js +108 -0
- package/dist/core/persistence.js.map +1 -0
- package/dist/core/router.d.ts +24 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +38 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/state.d.ts +45 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +82 -0
- package/dist/core/state.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/client.d.ts +45 -0
- package/dist/ipc/client.d.ts.map +1 -0
- package/dist/ipc/client.js +199 -0
- package/dist/ipc/client.js.map +1 -0
- package/dist/ipc/server.d.ts +34 -0
- package/dist/ipc/server.d.ts.map +1 -0
- package/dist/ipc/server.js +123 -0
- package/dist/ipc/server.js.map +1 -0
- package/dist/types/backend.d.ts +25 -0
- package/dist/types/backend.d.ts.map +1 -0
- package/dist/types/backend.js +9 -0
- package/dist/types/backend.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/ipc.d.ts +18 -0
- package/dist/types/ipc.d.ts.map +1 -0
- package/dist/types/ipc.js +6 -0
- package/dist/types/ipc.js.map +1 -0
- package/dist/types/session.d.ts +29 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +5 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/transport.d.ts +43 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +8 -0
- package/dist/types/transport.js.map +1 -0
- package/dist/types/voice.d.ts +17 -0
- package/dist/types/voice.d.ts.map +1 -0
- package/dist/types/voice.js +5 -0
- package/dist/types/voice.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared markdown transform primitives.
|
|
3
|
+
*
|
|
4
|
+
* These transforms are the common subset used by both WhatsApp and Telegram
|
|
5
|
+
* formatters. Each transport applies additional platform-specific rules on top.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Apply the 8 shared block-level and inline markdown transforms.
|
|
9
|
+
*
|
|
10
|
+
* Transform order:
|
|
11
|
+
* 1. Headings → bold uppercase (using placeholder to protect from italic pass)
|
|
12
|
+
* 2. Horizontal rules → em dashes
|
|
13
|
+
* 3. Blockquotes → left bar
|
|
14
|
+
* 4. Checkboxes → unicode checkboxes
|
|
15
|
+
* 5. Unordered lists → bullet points
|
|
16
|
+
* 6. Bold **text** → placeholder-wrapped
|
|
17
|
+
* 7. Italic *text* → _text_
|
|
18
|
+
* 8. Replace bold placeholders with target bold marker
|
|
19
|
+
*
|
|
20
|
+
* @param text - Input markdown text
|
|
21
|
+
* @param boldMarker - The bold delimiter for the target platform ("*" for WhatsApp, "<b>" for Telegram)
|
|
22
|
+
* @param boldEndMarker - The closing bold delimiter ("*" for WhatsApp, "</b>" for Telegram)
|
|
23
|
+
* @param italicMarker - The italic delimiter ("_" for WhatsApp, "<i>" for Telegram)
|
|
24
|
+
* @param italicEndMarker - The closing italic delimiter ("_" for WhatsApp, "</i>" for Telegram)
|
|
25
|
+
*/
|
|
26
|
+
export function applySharedMarkdownTransforms(text, boldMarker, boldEndMarker, italicMarker, italicEndMarker) {
|
|
27
|
+
const BOLD = "\x01";
|
|
28
|
+
return text
|
|
29
|
+
// Block-level: headings → bold uppercase (placeholder-wrapped)
|
|
30
|
+
.replace(/^#{1,6}\s+(.+)$/gm, (_m, title) => `${BOLD}${title.toUpperCase()}${BOLD}`)
|
|
31
|
+
// Block-level: horizontal rules → em dashes
|
|
32
|
+
.replace(/^---+$/gm, "———")
|
|
33
|
+
// Block-level: blockquotes → left bar
|
|
34
|
+
.replace(/^>\s?(.*)$/gm, "▎ $1")
|
|
35
|
+
// Block-level: checkboxes
|
|
36
|
+
.replace(/^(\s*)- \[x\]\s+/gm, "$1☑ ")
|
|
37
|
+
.replace(/^(\s*)- \[ \]\s+/gm, "$1☐ ")
|
|
38
|
+
// Block-level: unordered list items → bullet
|
|
39
|
+
.replace(/^(\s*)[-*]\s+/gm, "$1• ")
|
|
40
|
+
// Inline: bold **text** → placeholder-wrapped
|
|
41
|
+
.replace(/\*\*(.+?)\*\*/gs, `${BOLD}$1${BOLD}`)
|
|
42
|
+
// Inline: italic *text* → target italic markers
|
|
43
|
+
.replace(/(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/gs, `${italicMarker}$1${italicEndMarker}`)
|
|
44
|
+
// Inline: code `text` → ```text```
|
|
45
|
+
.replace(/`([^`]+)`/g, "```$1```")
|
|
46
|
+
// Replace bold placeholders with target bold markers
|
|
47
|
+
.replace(new RegExp(BOLD, "g"), (_, offset) => {
|
|
48
|
+
// Even occurrences = opening, odd = closing
|
|
49
|
+
// Simple approach: alternate between open and close
|
|
50
|
+
return boldMarker; // caller handles open/close if markers differ
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* WhatsApp markdown formatter.
|
|
55
|
+
* Uses * for bold, _ for italic.
|
|
56
|
+
*/
|
|
57
|
+
export function markdownToWhatsApp(text) {
|
|
58
|
+
const BOLD = "\x01";
|
|
59
|
+
return text
|
|
60
|
+
.replace(/^#{1,6}\s+(.+)$/gm, (_m, title) => `${BOLD}${title.toUpperCase()}${BOLD}`)
|
|
61
|
+
.replace(/^---+$/gm, "———")
|
|
62
|
+
.replace(/^>\s?(.*)$/gm, "▎ $1")
|
|
63
|
+
.replace(/^(\s*)- \[x\]\s+/gm, "$1☑ ")
|
|
64
|
+
.replace(/^(\s*)- \[ \]\s+/gm, "$1☐ ")
|
|
65
|
+
.replace(/^(\s*)[-*]\s+/gm, "$1• ")
|
|
66
|
+
.replace(/\*\*(.+?)\*\*/gs, `${BOLD}$1${BOLD}`)
|
|
67
|
+
.replace(/(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/gs, "_$1_")
|
|
68
|
+
.replace(/`([^`]+)`/g, "```$1```")
|
|
69
|
+
.replace(new RegExp(BOLD, "g"), "*");
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIME type lookup table for file sending.
|
|
3
|
+
* Superset of WhatsApp and Telegram MIME maps.
|
|
4
|
+
*/
|
|
5
|
+
export declare const MIME_MAP: Record<string, string>;
|
|
6
|
+
/**
|
|
7
|
+
* Look up MIME type for a file extension.
|
|
8
|
+
* Falls back to "application/octet-stream" for unknown extensions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function lookupMime(ext: string): string;
|
|
11
|
+
//# sourceMappingURL=mime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/core/mime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgC3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIME type lookup table for file sending.
|
|
3
|
+
* Superset of WhatsApp and Telegram MIME maps.
|
|
4
|
+
*/
|
|
5
|
+
export const MIME_MAP = {
|
|
6
|
+
// Documents
|
|
7
|
+
".pdf": "application/pdf",
|
|
8
|
+
".doc": "application/msword",
|
|
9
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
10
|
+
".xls": "application/vnd.ms-excel",
|
|
11
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
12
|
+
".ppt": "application/vnd.ms-powerpoint",
|
|
13
|
+
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
14
|
+
".txt": "text/plain",
|
|
15
|
+
".csv": "text/csv",
|
|
16
|
+
".zip": "application/zip",
|
|
17
|
+
".tar": "application/x-tar",
|
|
18
|
+
".gz": "application/gzip",
|
|
19
|
+
".json": "application/json",
|
|
20
|
+
// Images
|
|
21
|
+
".jpg": "image/jpeg",
|
|
22
|
+
".jpeg": "image/jpeg",
|
|
23
|
+
".png": "image/png",
|
|
24
|
+
".gif": "image/gif",
|
|
25
|
+
".webp": "image/webp",
|
|
26
|
+
".svg": "image/svg+xml",
|
|
27
|
+
// Video
|
|
28
|
+
".mp4": "video/mp4",
|
|
29
|
+
".mov": "video/quicktime",
|
|
30
|
+
".avi": "video/x-msvideo",
|
|
31
|
+
".mkv": "video/x-matroska",
|
|
32
|
+
// Audio
|
|
33
|
+
".mp3": "audio/mpeg",
|
|
34
|
+
".wav": "audio/wav",
|
|
35
|
+
".ogg": "audio/ogg",
|
|
36
|
+
".m4a": "audio/mp4",
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Look up MIME type for a file extension.
|
|
40
|
+
* Falls back to "application/octet-stream" for unknown extensions.
|
|
41
|
+
*/
|
|
42
|
+
export function lookupMime(ext) {
|
|
43
|
+
const normalized = ext.startsWith(".") ? ext.toLowerCase() : `.${ext.toLowerCase()}`;
|
|
44
|
+
return MIME_MAP[normalized] ?? "application/octet-stream";
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=mime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../src/core/mime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C,YAAY;IACZ,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,oBAAoB;IAC5B,OAAO,EAAE,yEAAyE;IAClF,MAAM,EAAE,0BAA0B;IAClC,OAAO,EAAE,mEAAmE;IAC5E,MAAM,EAAE,+BAA+B;IACvC,OAAO,EAAE,2EAA2E;IACpF,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,kBAAkB;IACzB,OAAO,EAAE,kBAAkB;IAC3B,SAAS;IACT,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,QAAQ;IACR,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,kBAAkB;IAC1B,QAAQ;IACR,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IACrF,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,0BAA0B,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* persistence.ts — Disk I/O for session registry and voice configuration.
|
|
3
|
+
*
|
|
4
|
+
* Parameterized by appDir (e.g. "~/.whazaa" or "~/.telex") so each
|
|
5
|
+
* consumer uses its own data directory. Transport-specific store caches
|
|
6
|
+
* (Baileys stores, Telegram chats) remain in per-project code.
|
|
7
|
+
*/
|
|
8
|
+
import type { VoiceConfig } from "../types/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Set the application data directory.
|
|
11
|
+
* Must be called before any load/save operations.
|
|
12
|
+
*/
|
|
13
|
+
export declare function setAppDir(dir: string): void;
|
|
14
|
+
export declare function getAppDir(): string;
|
|
15
|
+
export declare const DEFAULT_VOICE_CONFIG: VoiceConfig;
|
|
16
|
+
export declare function loadVoiceConfig(): VoiceConfig;
|
|
17
|
+
export declare function saveVoiceConfig(config?: VoiceConfig): void;
|
|
18
|
+
export declare function loadSessionRegistry(): void;
|
|
19
|
+
export declare function saveSessionRegistry(): void;
|
|
20
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/core/persistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,mBAAmB,CAAC;AAM1E;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAuBD,eAAO,MAAM,oBAAoB,EAAE,WAUlC,CAAC;AAEF,wBAAgB,eAAe,IAAI,WAAW,CAS7C;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAE1D;AAID,wBAAgB,mBAAmB,IAAI,IAAI,CAgC1C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAU1C"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* persistence.ts — Disk I/O for session registry and voice configuration.
|
|
3
|
+
*
|
|
4
|
+
* Parameterized by appDir (e.g. "~/.whazaa" or "~/.telex") so each
|
|
5
|
+
* consumer uses its own data directory. Transport-specific store caches
|
|
6
|
+
* (Baileys stores, Telegram chats) remain in per-project code.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
import { log } from "./log.js";
|
|
12
|
+
import { sessionRegistry, clientQueues, activeItermSessionId, setActiveItermSessionId, voiceConfig, setVoiceConfig, } from "./state.js";
|
|
13
|
+
// ── Configuration ──
|
|
14
|
+
let _appDir = join(homedir(), ".aibroker");
|
|
15
|
+
/**
|
|
16
|
+
* Set the application data directory.
|
|
17
|
+
* Must be called before any load/save operations.
|
|
18
|
+
*/
|
|
19
|
+
export function setAppDir(dir) {
|
|
20
|
+
_appDir = dir;
|
|
21
|
+
}
|
|
22
|
+
export function getAppDir() {
|
|
23
|
+
return _appDir;
|
|
24
|
+
}
|
|
25
|
+
function ensureDir() {
|
|
26
|
+
mkdirSync(_appDir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
function safeReadJson(filename) {
|
|
29
|
+
try {
|
|
30
|
+
const path = join(_appDir, filename);
|
|
31
|
+
if (!existsSync(path))
|
|
32
|
+
return null;
|
|
33
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function safeWriteJson(filename, data) {
|
|
40
|
+
ensureDir();
|
|
41
|
+
writeFileSync(join(_appDir, filename), JSON.stringify(data, null, 2), "utf-8");
|
|
42
|
+
}
|
|
43
|
+
// ── Voice Config ──
|
|
44
|
+
export const DEFAULT_VOICE_CONFIG = {
|
|
45
|
+
defaultVoice: "bm_fable",
|
|
46
|
+
voiceMode: false,
|
|
47
|
+
localMode: false,
|
|
48
|
+
personas: {
|
|
49
|
+
Nicole: "af_nicole",
|
|
50
|
+
George: "bm_george",
|
|
51
|
+
Daniel: "bm_daniel",
|
|
52
|
+
Fable: "bm_fable",
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
export function loadVoiceConfig() {
|
|
56
|
+
const data = safeReadJson("voice-config.json");
|
|
57
|
+
const merged = {
|
|
58
|
+
...DEFAULT_VOICE_CONFIG,
|
|
59
|
+
...data,
|
|
60
|
+
personas: { ...DEFAULT_VOICE_CONFIG.personas, ...(data?.personas ?? {}) },
|
|
61
|
+
};
|
|
62
|
+
setVoiceConfig(merged);
|
|
63
|
+
return merged;
|
|
64
|
+
}
|
|
65
|
+
export function saveVoiceConfig(config) {
|
|
66
|
+
safeWriteJson("voice-config.json", config ?? voiceConfig);
|
|
67
|
+
}
|
|
68
|
+
// ── Session Registry ──
|
|
69
|
+
export function loadSessionRegistry() {
|
|
70
|
+
const parsed = safeReadJson("sessions.json");
|
|
71
|
+
if (!parsed)
|
|
72
|
+
return;
|
|
73
|
+
// Support both old format (plain array) and new format (object with sessions + activeItermSessionId)
|
|
74
|
+
const raw = Array.isArray(parsed) ? parsed : (parsed.sessions ?? []);
|
|
75
|
+
for (const entry of raw) {
|
|
76
|
+
if (!entry.sessionId)
|
|
77
|
+
continue;
|
|
78
|
+
sessionRegistry.set(entry.sessionId, {
|
|
79
|
+
sessionId: entry.sessionId,
|
|
80
|
+
name: entry.name ?? "Unknown",
|
|
81
|
+
itermSessionId: entry.itermSessionId,
|
|
82
|
+
registeredAt: Date.now(),
|
|
83
|
+
});
|
|
84
|
+
if (!clientQueues.has(entry.sessionId)) {
|
|
85
|
+
clientQueues.set(entry.sessionId, []);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Restore active session marker
|
|
89
|
+
if (!Array.isArray(parsed) && parsed.activeItermSessionId) {
|
|
90
|
+
setActiveItermSessionId(String(parsed.activeItermSessionId));
|
|
91
|
+
log(`Restored active iTerm session: ${parsed.activeItermSessionId}`);
|
|
92
|
+
}
|
|
93
|
+
if (raw.length > 0) {
|
|
94
|
+
log(`Restored ${raw.length} session(s) from disk`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export function saveSessionRegistry() {
|
|
98
|
+
const data = {
|
|
99
|
+
activeItermSessionId: activeItermSessionId || "",
|
|
100
|
+
sessions: Array.from(sessionRegistry.values()).map((s) => ({
|
|
101
|
+
sessionId: s.sessionId,
|
|
102
|
+
name: s.name,
|
|
103
|
+
itermSessionId: s.itermSessionId,
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
safeWriteJson("sessions.json", data);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/core/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/router.ts — Message routing: message → backend dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Routes incoming messages to the appropriate AI backend.
|
|
5
|
+
* Default: SessionBackend (typeIntoSession via iTerm2).
|
|
6
|
+
*/
|
|
7
|
+
import type { Backend } from "../types/backend.js";
|
|
8
|
+
export declare class MessageRouter {
|
|
9
|
+
private _defaultBackend;
|
|
10
|
+
private readonly sessionBackends;
|
|
11
|
+
get defaultBackend(): Backend | null;
|
|
12
|
+
setDefaultBackend(backend: Backend): void;
|
|
13
|
+
route(sessionId: string): Backend | null;
|
|
14
|
+
setBackend(sessionId: string, backend: Backend): void;
|
|
15
|
+
removeBackend(sessionId: string): void;
|
|
16
|
+
listBackends(): Array<{
|
|
17
|
+
sessionId: string;
|
|
18
|
+
backend: string;
|
|
19
|
+
type: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
/** Singleton router instance */
|
|
23
|
+
export declare const router: MessageRouter;
|
|
24
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;IAE9D,IAAI,cAAc,IAAI,OAAO,GAAG,IAAI,CAEnC;IAED,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKzC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAIxC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAKrD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAItC,YAAY,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAO5E;AAED,gCAAgC;AAChC,eAAO,MAAM,MAAM,eAAsB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core/router.ts — Message routing: message → backend dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Routes incoming messages to the appropriate AI backend.
|
|
5
|
+
* Default: SessionBackend (typeIntoSession via iTerm2).
|
|
6
|
+
*/
|
|
7
|
+
import { log } from "./log.js";
|
|
8
|
+
export class MessageRouter {
|
|
9
|
+
_defaultBackend = null;
|
|
10
|
+
sessionBackends = new Map();
|
|
11
|
+
get defaultBackend() {
|
|
12
|
+
return this._defaultBackend;
|
|
13
|
+
}
|
|
14
|
+
setDefaultBackend(backend) {
|
|
15
|
+
this._defaultBackend = backend;
|
|
16
|
+
log(`Default backend set to: ${backend.name} (${backend.type})`);
|
|
17
|
+
}
|
|
18
|
+
route(sessionId) {
|
|
19
|
+
return this.sessionBackends.get(sessionId) ?? this._defaultBackend;
|
|
20
|
+
}
|
|
21
|
+
setBackend(sessionId, backend) {
|
|
22
|
+
this.sessionBackends.set(sessionId, backend);
|
|
23
|
+
log(`Session ${sessionId} backend set to: ${backend.name}`);
|
|
24
|
+
}
|
|
25
|
+
removeBackend(sessionId) {
|
|
26
|
+
this.sessionBackends.delete(sessionId);
|
|
27
|
+
}
|
|
28
|
+
listBackends() {
|
|
29
|
+
const result = [];
|
|
30
|
+
for (const [sessionId, backend] of this.sessionBackends) {
|
|
31
|
+
result.push({ sessionId, backend: backend.name, type: backend.type });
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Singleton router instance */
|
|
37
|
+
export const router = new MessageRouter();
|
|
38
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/core/router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,OAAO,aAAa;IAChB,eAAe,GAAmB,IAAI,CAAC;IAC9B,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE9D,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,iBAAiB,CAAC,OAAgB;QAChC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,GAAG,CAAC,2BAA2B,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC;IACrE,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,OAAgB;QAC5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,GAAG,CAAC,WAAW,SAAS,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,YAAY;QACV,MAAM,MAAM,GAAgE,EAAE,CAAC;QAC/E,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* state.ts — Transport-agnostic mutable state for the watcher subsystem.
|
|
3
|
+
*
|
|
4
|
+
* All shared runtime state lives here. No transport SDK imports.
|
|
5
|
+
* Transport-specific state (Baileys socket, GramJS client, chat/message stores)
|
|
6
|
+
* remains in the per-project packages.
|
|
7
|
+
*/
|
|
8
|
+
import type { RegisteredSession, QueuedMessage, ClientWaiter, ContactEntry, VoiceConfig } from "../types/index.js";
|
|
9
|
+
export declare const sessionRegistry: Map<string, RegisteredSession>;
|
|
10
|
+
export declare const managedSessions: Map<string, {
|
|
11
|
+
name: string;
|
|
12
|
+
createdAt: number;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const sessionTtyCache: Map<string, string>;
|
|
15
|
+
export declare let activeClientId: string | null;
|
|
16
|
+
export declare let activeItermSessionId: string;
|
|
17
|
+
export declare function setActiveClientId(id: string | null): void;
|
|
18
|
+
export declare function setActiveItermSessionId(id: string): void;
|
|
19
|
+
export declare function updateSessionTtyCache(entries: Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
tty: string;
|
|
22
|
+
}>): void;
|
|
23
|
+
export declare let cachedSessionList: Array<{
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
path: string;
|
|
27
|
+
type: "claude" | "terminal";
|
|
28
|
+
paiName: string | null;
|
|
29
|
+
atPrompt: boolean;
|
|
30
|
+
}> | null;
|
|
31
|
+
export declare let cachedSessionListTime: number;
|
|
32
|
+
export declare function setCachedSessionList(list: typeof cachedSessionList, time: number): void;
|
|
33
|
+
export declare const clientQueues: Map<string, QueuedMessage[]>;
|
|
34
|
+
export declare const clientWaiters: Map<string, ClientWaiter[]>;
|
|
35
|
+
export declare const contactMessageQueues: Map<string, QueuedMessage[]>;
|
|
36
|
+
export declare const contactDirectory: Map<string, ContactEntry>;
|
|
37
|
+
export declare let voiceConfig: VoiceConfig;
|
|
38
|
+
export declare function setVoiceConfig(cfg: VoiceConfig): void;
|
|
39
|
+
export type CommandHandler = (text: string, timestamp: number) => void | Promise<void>;
|
|
40
|
+
export declare let commandHandler: CommandHandler | null;
|
|
41
|
+
export declare function setCommandHandler(handler: CommandHandler | null): void;
|
|
42
|
+
export declare const sentMessageIds: Set<string | number>;
|
|
43
|
+
export declare function dispatchIncomingMessage(body: string, timestamp: number): void;
|
|
44
|
+
export declare function enqueueContactMessage(contactId: string, body: string, timestamp: number): void;
|
|
45
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAI3B,eAAO,MAAM,eAAe,gCAAuC,CAAC;AACpE,eAAO,MAAM,eAAe;UAA2B,MAAM;eAAa,MAAM;EAAK,CAAC;AACtF,eAAO,MAAM,eAAe,qBAA4B,CAAC;AAEzD,eAAO,IAAI,cAAc,EAAE,MAAM,GAAG,IAAW,CAAC;AAChD,eAAO,IAAI,oBAAoB,QAAK,CAAC;AAErC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEzD;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAIvF;AAID,eAAO,IAAI,iBAAiB,EAAE,KAAK,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,GAAG,IAAW,CAAC;AAEjB,eAAO,IAAI,qBAAqB,QAAI,CAAC;AAErC,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,iBAAiB,EAC9B,IAAI,EAAE,MAAM,GACX,IAAI,CAGN;AAID,eAAO,MAAM,YAAY,8BAAqC,CAAC;AAC/D,eAAO,MAAM,aAAa,6BAAoC,CAAC;AAC/D,eAAO,MAAM,oBAAoB,8BAAqC,CAAC;AAIvE,eAAO,MAAM,gBAAgB,2BAAkC,CAAC;AAIhE,eAAO,IAAI,WAAW,EAAE,WAKvB,CAAC;AAEF,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAErD;AAID,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvF,eAAO,IAAI,cAAc,EAAE,cAAc,GAAG,IAAW,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAEtE;AAID,eAAO,MAAM,cAAc,sBAA6B,CAAC;AAIzD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAiB7E;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,IAAI,CAON"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* state.ts — Transport-agnostic mutable state for the watcher subsystem.
|
|
3
|
+
*
|
|
4
|
+
* All shared runtime state lives here. No transport SDK imports.
|
|
5
|
+
* Transport-specific state (Baileys socket, GramJS client, chat/message stores)
|
|
6
|
+
* remains in the per-project packages.
|
|
7
|
+
*/
|
|
8
|
+
// ── Session Registry ──
|
|
9
|
+
export const sessionRegistry = new Map();
|
|
10
|
+
export const managedSessions = new Map();
|
|
11
|
+
export const sessionTtyCache = new Map();
|
|
12
|
+
export let activeClientId = null;
|
|
13
|
+
export let activeItermSessionId = "";
|
|
14
|
+
export function setActiveClientId(id) {
|
|
15
|
+
activeClientId = id;
|
|
16
|
+
}
|
|
17
|
+
export function setActiveItermSessionId(id) {
|
|
18
|
+
activeItermSessionId = id;
|
|
19
|
+
}
|
|
20
|
+
export function updateSessionTtyCache(entries) {
|
|
21
|
+
for (const { id, tty } of entries) {
|
|
22
|
+
if (tty)
|
|
23
|
+
sessionTtyCache.set(id, tty);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// ── Cached Session List (for /s and /N commands) ──
|
|
27
|
+
export let cachedSessionList = null;
|
|
28
|
+
export let cachedSessionListTime = 0;
|
|
29
|
+
export function setCachedSessionList(list, time) {
|
|
30
|
+
cachedSessionList = list;
|
|
31
|
+
cachedSessionListTime = time;
|
|
32
|
+
}
|
|
33
|
+
// ── Message Queues ──
|
|
34
|
+
export const clientQueues = new Map();
|
|
35
|
+
export const clientWaiters = new Map();
|
|
36
|
+
export const contactMessageQueues = new Map();
|
|
37
|
+
// ── Contact Directory ──
|
|
38
|
+
export const contactDirectory = new Map();
|
|
39
|
+
// ── Voice Config ──
|
|
40
|
+
export let voiceConfig = {
|
|
41
|
+
defaultVoice: "bm_fable",
|
|
42
|
+
voiceMode: false,
|
|
43
|
+
localMode: false,
|
|
44
|
+
personas: {},
|
|
45
|
+
};
|
|
46
|
+
export function setVoiceConfig(cfg) {
|
|
47
|
+
voiceConfig = cfg;
|
|
48
|
+
}
|
|
49
|
+
export let commandHandler = null;
|
|
50
|
+
export function setCommandHandler(handler) {
|
|
51
|
+
commandHandler = handler;
|
|
52
|
+
}
|
|
53
|
+
// ── Self-Echo Suppression ──
|
|
54
|
+
export const sentMessageIds = new Set();
|
|
55
|
+
// ── Message Dispatch ──
|
|
56
|
+
export function dispatchIncomingMessage(body, timestamp) {
|
|
57
|
+
if (!activeClientId)
|
|
58
|
+
return;
|
|
59
|
+
const msg = { body, timestamp };
|
|
60
|
+
const waiters = clientWaiters.get(activeClientId);
|
|
61
|
+
if (waiters && waiters.length > 0) {
|
|
62
|
+
const waiter = waiters.shift();
|
|
63
|
+
waiter([msg]);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
let queue = clientQueues.get(activeClientId);
|
|
67
|
+
if (!queue) {
|
|
68
|
+
queue = [];
|
|
69
|
+
clientQueues.set(activeClientId, queue);
|
|
70
|
+
}
|
|
71
|
+
queue.push(msg);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export function enqueueContactMessage(contactId, body, timestamp) {
|
|
75
|
+
let queue = contactMessageQueues.get(contactId);
|
|
76
|
+
if (!queue) {
|
|
77
|
+
queue = [];
|
|
78
|
+
contactMessageQueues.set(contactId, queue);
|
|
79
|
+
}
|
|
80
|
+
queue.push({ body, timestamp });
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIBroker — Platform-agnostic AI message broker.
|
|
3
|
+
*
|
|
4
|
+
* Core modules (types/, core/, ipc/) are platform-independent and have
|
|
5
|
+
* zero dependencies on any messaging SDK or OS-specific tooling.
|
|
6
|
+
*
|
|
7
|
+
* Adapters in adapters/ are optional and platform-specific:
|
|
8
|
+
* - adapters/iterm/ — macOS iTerm2 integration (AppleScript, session management)
|
|
9
|
+
* - adapters/kokoro/ — Kokoro TTS synthesis + Whisper audio transcription
|
|
10
|
+
* - adapters/session/ — SessionBackend: deliver messages via iTerm2 typeIntoSession
|
|
11
|
+
*
|
|
12
|
+
* Hard rule: this package NEVER imports @whiskeysockets/baileys,
|
|
13
|
+
* telegram/gramjs, better-sqlite3, qrcode, or any transport SDK.
|
|
14
|
+
*/
|
|
15
|
+
export * from "./types/index.js";
|
|
16
|
+
export { log, setLogPrefix } from "./core/log.js";
|
|
17
|
+
export { MIME_MAP, lookupMime } from "./core/mime.js";
|
|
18
|
+
export { applySharedMarkdownTransforms, markdownToWhatsApp } from "./core/markdown.js";
|
|
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
|
+
export type { CommandHandler } from "./core/state.js";
|
|
21
|
+
export { setAppDir, getAppDir, DEFAULT_VOICE_CONFIG, loadVoiceConfig, saveVoiceConfig, loadSessionRegistry, saveSessionRegistry, } from "./core/persistence.js";
|
|
22
|
+
export { MessageRouter, router } from "./core/router.js";
|
|
23
|
+
export { WatcherClient } from "./ipc/client.js";
|
|
24
|
+
export { IpcServer } from "./ipc/server.js";
|
|
25
|
+
export type { IpcHandler } from "./ipc/server.js";
|
|
26
|
+
export { runAppleScript, stripItermPrefix, withSessionAppleScript, sendKeystrokeToSession, sendEscapeSequenceToSession, typeIntoSession, pasteTextIntoSession, findClaudeSession, isClaudeRunningInSession, isItermRunning, isItermSessionAlive, isScreenLocked, writeToTty, snapshotAllSessions, } from "./adapters/iterm/core.js";
|
|
27
|
+
export type { SessionSnapshot } from "./adapters/iterm/core.js";
|
|
28
|
+
export { setItermSessionVar, setItermTabName, getItermSessionVar, findItermSessionForTermId, listClaudeSessions, getSessionList, createClaudeSession, createTerminalTab, restartSession, killSession, } from "./adapters/iterm/sessions.js";
|
|
29
|
+
export { recordFromMic, transcribeLocalAudio, WHISPER_BIN as DICTATION_WHISPER_BIN, WHISPER_MODEL as DICTATION_WHISPER_MODEL, } from "./adapters/iterm/dictation.js";
|
|
30
|
+
export { textToVoiceNote, speakLocally, listVoices } from "./adapters/kokoro/tts.js";
|
|
31
|
+
export type { KokoroVoice } from "./adapters/kokoro/tts.js";
|
|
32
|
+
export { transcribeAudio, splitIntoChunks, mimetypeToExt, mimetypeToDocExt, WHISPER_BIN, WHISPER_MODEL, } from "./adapters/kokoro/media.js";
|
|
33
|
+
export { SessionBackend } from "./adapters/session/backend.js";
|
|
34
|
+
export { APIBackend } from "./backend/api.js";
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;AACvF,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;AAGzD,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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIBroker — Platform-agnostic AI message broker.
|
|
3
|
+
*
|
|
4
|
+
* Core modules (types/, core/, ipc/) are platform-independent and have
|
|
5
|
+
* zero dependencies on any messaging SDK or OS-specific tooling.
|
|
6
|
+
*
|
|
7
|
+
* Adapters in adapters/ are optional and platform-specific:
|
|
8
|
+
* - adapters/iterm/ — macOS iTerm2 integration (AppleScript, session management)
|
|
9
|
+
* - adapters/kokoro/ — Kokoro TTS synthesis + Whisper audio transcription
|
|
10
|
+
* - adapters/session/ — SessionBackend: deliver messages via iTerm2 typeIntoSession
|
|
11
|
+
*
|
|
12
|
+
* Hard rule: this package NEVER imports @whiskeysockets/baileys,
|
|
13
|
+
* telegram/gramjs, better-sqlite3, qrcode, or any transport SDK.
|
|
14
|
+
*/
|
|
15
|
+
// ── Types ──
|
|
16
|
+
export * from "./types/index.js";
|
|
17
|
+
// ── Core ──
|
|
18
|
+
export { log, setLogPrefix } from "./core/log.js";
|
|
19
|
+
export { MIME_MAP, lookupMime } from "./core/mime.js";
|
|
20
|
+
export { applySharedMarkdownTransforms, markdownToWhatsApp } from "./core/markdown.js";
|
|
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
|
+
export { setAppDir, getAppDir, DEFAULT_VOICE_CONFIG, loadVoiceConfig, saveVoiceConfig, loadSessionRegistry, saveSessionRegistry, } from "./core/persistence.js";
|
|
23
|
+
export { MessageRouter, router } from "./core/router.js";
|
|
24
|
+
// ── IPC ──
|
|
25
|
+
export { WatcherClient } from "./ipc/client.js";
|
|
26
|
+
export { IpcServer } from "./ipc/server.js";
|
|
27
|
+
// ── Adapters > iTerm2 ──
|
|
28
|
+
export { runAppleScript, stripItermPrefix, withSessionAppleScript, sendKeystrokeToSession, sendEscapeSequenceToSession, typeIntoSession, pasteTextIntoSession, findClaudeSession, isClaudeRunningInSession, isItermRunning, isItermSessionAlive, isScreenLocked, writeToTty, snapshotAllSessions, } from "./adapters/iterm/core.js";
|
|
29
|
+
export { setItermSessionVar, setItermTabName, getItermSessionVar, findItermSessionForTermId, listClaudeSessions, getSessionList, createClaudeSession, createTerminalTab, restartSession, killSession, } from "./adapters/iterm/sessions.js";
|
|
30
|
+
export { recordFromMic, transcribeLocalAudio, WHISPER_BIN as DICTATION_WHISPER_BIN, WHISPER_MODEL as DICTATION_WHISPER_MODEL, } from "./adapters/iterm/dictation.js";
|
|
31
|
+
// ── Adapters > Kokoro TTS ──
|
|
32
|
+
export { textToVoiceNote, speakLocally, listVoices } from "./adapters/kokoro/tts.js";
|
|
33
|
+
export { transcribeAudio, splitIntoChunks, mimetypeToExt, mimetypeToDocExt, WHISPER_BIN, WHISPER_MODEL, } from "./adapters/kokoro/media.js";
|
|
34
|
+
// ── Adapters > Session Backend ──
|
|
35
|
+
export { SessionBackend } from "./adapters/session/backend.js";
|
|
36
|
+
// ── Backend ──
|
|
37
|
+
export { APIBackend } from "./backend/api.js";
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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;AACvF,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;AAEzD,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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ipc/client.ts — MCP-side IPC client.
|
|
3
|
+
*
|
|
4
|
+
* WatcherClient connects to the watcher's Unix Domain Socket.
|
|
5
|
+
* Socket path is injected so each consumer uses its own socket.
|
|
6
|
+
*/
|
|
7
|
+
export declare class WatcherClient {
|
|
8
|
+
private readonly sessionId;
|
|
9
|
+
private readonly socketPath;
|
|
10
|
+
constructor(socketPath: string);
|
|
11
|
+
get session(): string;
|
|
12
|
+
private get defaultName();
|
|
13
|
+
register(name?: string): Promise<Record<string, unknown>>;
|
|
14
|
+
rename(name: string): Promise<Record<string, unknown>>;
|
|
15
|
+
status(): Promise<Record<string, unknown>>;
|
|
16
|
+
send(message: string, recipient?: string): Promise<Record<string, unknown>>;
|
|
17
|
+
receive(from?: string): Promise<Record<string, unknown>>;
|
|
18
|
+
contacts(search?: string, limit?: number): Promise<Record<string, unknown>>;
|
|
19
|
+
chats(search?: string, limit?: number): Promise<Record<string, unknown>>;
|
|
20
|
+
wait(timeoutMs: number): Promise<Record<string, unknown>>;
|
|
21
|
+
login(): Promise<Record<string, unknown>>;
|
|
22
|
+
history(params: {
|
|
23
|
+
jid?: string;
|
|
24
|
+
chatId?: string;
|
|
25
|
+
count?: number;
|
|
26
|
+
}): Promise<Record<string, unknown>>;
|
|
27
|
+
tts(params: {
|
|
28
|
+
text: string;
|
|
29
|
+
voice?: string;
|
|
30
|
+
jid?: string;
|
|
31
|
+
recipient?: string;
|
|
32
|
+
}): Promise<Record<string, unknown>>;
|
|
33
|
+
voiceConfig(action: "get" | "set", updates?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
34
|
+
sendFile(filePath: string, recipient?: string, caption?: string, prettify?: boolean): Promise<Record<string, unknown>>;
|
|
35
|
+
speak(text: string, voice?: string): Promise<Record<string, unknown>>;
|
|
36
|
+
discover(): Promise<Record<string, unknown>>;
|
|
37
|
+
sessions(): Promise<Record<string, unknown>>;
|
|
38
|
+
switchSession(target: string): Promise<Record<string, unknown>>;
|
|
39
|
+
endSession(target: string): Promise<Record<string, unknown>>;
|
|
40
|
+
command(text: string): Promise<Record<string, unknown>>;
|
|
41
|
+
dictate(maxDuration?: number): Promise<Record<string, unknown>>;
|
|
42
|
+
restart(): Promise<Record<string, unknown>>;
|
|
43
|
+
private call;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=client.d.ts.map
|