@minion-stack/shared 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.
@@ -0,0 +1,28 @@
1
+ import type { PendingRequest } from './protocol.js';
2
+ export interface ConnectionOptions {
3
+ url: string;
4
+ onMessage: (data: string) => void;
5
+ onConnected: () => void;
6
+ onDisconnected: (code: number, reason: string) => void;
7
+ }
8
+ export interface ConnectionState {
9
+ ws: WebSocket | null;
10
+ generation: number;
11
+ pending: Map<string, PendingRequest>;
12
+ reconnectTimer: ReturnType<typeof setTimeout> | null;
13
+ backoffMs: number;
14
+ closed: boolean;
15
+ }
16
+ /**
17
+ * Create a fresh connection state.
18
+ */
19
+ export declare function createConnectionState(): ConnectionState;
20
+ /**
21
+ * Open a WebSocket connection with auto-reconnect on close.
22
+ */
23
+ export declare function connect(state: ConnectionState, opts: ConnectionOptions): void;
24
+ /**
25
+ * Gracefully disconnect and stop reconnecting.
26
+ */
27
+ export declare function disconnect(state: ConnectionState): void;
28
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/gateway/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrC,cAAc,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CASvD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAgC7E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAYvD"}
@@ -0,0 +1,75 @@
1
+ import { flushPending } from './protocol.js';
2
+ /**
3
+ * Create a fresh connection state.
4
+ */
5
+ export function createConnectionState() {
6
+ return {
7
+ ws: null,
8
+ generation: 0,
9
+ pending: new Map(),
10
+ reconnectTimer: null,
11
+ backoffMs: 800,
12
+ closed: false,
13
+ };
14
+ }
15
+ /**
16
+ * Open a WebSocket connection with auto-reconnect on close.
17
+ */
18
+ export function connect(state, opts) {
19
+ state.closed = false;
20
+ // Close existing socket
21
+ if (state.ws) {
22
+ state.ws.close();
23
+ state.ws = null;
24
+ }
25
+ try {
26
+ const gen = ++state.generation;
27
+ state.ws = new WebSocket(opts.url);
28
+ state.ws.addEventListener('message', (ev) => {
29
+ if (state.generation !== gen)
30
+ return;
31
+ opts.onMessage(String(ev.data ?? ''));
32
+ });
33
+ state.ws.addEventListener('close', (ev) => {
34
+ if (state.generation !== gen)
35
+ return;
36
+ state.ws = null;
37
+ flushPending(state.pending, new Error(`closed (${ev.code}): ${ev.reason}`));
38
+ opts.onDisconnected(ev.code, ev.reason ?? '');
39
+ scheduleReconnect(state, opts);
40
+ });
41
+ state.ws.addEventListener('error', () => {
42
+ // close handler fires next
43
+ });
44
+ }
45
+ catch {
46
+ state.ws = null;
47
+ }
48
+ }
49
+ /**
50
+ * Gracefully disconnect and stop reconnecting.
51
+ */
52
+ export function disconnect(state) {
53
+ state.closed = true;
54
+ if (state.reconnectTimer) {
55
+ clearTimeout(state.reconnectTimer);
56
+ state.reconnectTimer = null;
57
+ }
58
+ if (state.ws) {
59
+ state.ws.close();
60
+ state.ws = null;
61
+ }
62
+ flushPending(state.pending, new Error('disconnected'));
63
+ state.backoffMs = 800;
64
+ }
65
+ function scheduleReconnect(state, opts) {
66
+ if (state.closed)
67
+ return;
68
+ const delay = state.backoffMs;
69
+ state.backoffMs = Math.min(state.backoffMs * 1.7, 15000);
70
+ state.reconnectTimer = setTimeout(() => {
71
+ state.reconnectTimer = null;
72
+ connect(state, opts);
73
+ }, delay);
74
+ }
75
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/gateway/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './protocol.js';
3
+ export * from './connection.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './protocol.js';
3
+ export * from './connection.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /** Pending request tracker */
2
+ export interface PendingRequest {
3
+ resolve: (value: unknown) => void;
4
+ reject: (error: Error) => void;
5
+ }
6
+ /**
7
+ * Send a request over a WebSocket and track the pending response.
8
+ * Returns a promise that resolves with the response payload.
9
+ */
10
+ export declare function sendRequest(ws: WebSocket, pending: Map<string, PendingRequest>, method: string, params?: unknown, timeoutMs?: number): Promise<unknown>;
11
+ /**
12
+ * Handle an incoming response frame by resolving/rejecting the matching pending request.
13
+ * Returns true if the frame was handled.
14
+ */
15
+ export declare function handleResponseFrame(frame: Record<string, unknown>, pending: Map<string, PendingRequest>): boolean;
16
+ /**
17
+ * Flush all pending requests with an error (e.g. on disconnect).
18
+ */
19
+ export declare function flushPending(pending: Map<string, PendingRequest>, err: Error): void;
20
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/gateway/protocol.ts"],"names":[],"mappings":"AAGA,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,SAAQ,GAChB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACnC,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,CAGnF"}
@@ -0,0 +1,52 @@
1
+ import { uuid } from '../utils/uuid.js';
2
+ /**
3
+ * Send a request over a WebSocket and track the pending response.
4
+ * Returns a promise that resolves with the response payload.
5
+ */
6
+ export function sendRequest(ws, pending, method, params, timeoutMs = 15000) {
7
+ return new Promise((resolve, reject) => {
8
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
9
+ return reject(new Error('not connected'));
10
+ }
11
+ const id = uuid();
12
+ const timer = setTimeout(() => {
13
+ pending.delete(id);
14
+ reject(new Error(`request '${method}' timed out after ${timeoutMs}ms`));
15
+ }, timeoutMs);
16
+ pending.set(id, {
17
+ resolve: (v) => { clearTimeout(timer); resolve(v); },
18
+ reject: (e) => { clearTimeout(timer); reject(e); },
19
+ });
20
+ const frame = { type: 'req', id, method, params };
21
+ ws.send(JSON.stringify(frame));
22
+ });
23
+ }
24
+ /**
25
+ * Handle an incoming response frame by resolving/rejecting the matching pending request.
26
+ * Returns true if the frame was handled.
27
+ */
28
+ export function handleResponseFrame(frame, pending) {
29
+ if (frame.type !== 'res')
30
+ return false;
31
+ const p = pending.get(frame.id);
32
+ if (!p)
33
+ return false;
34
+ pending.delete(frame.id);
35
+ if (frame.ok) {
36
+ p.resolve(frame.payload);
37
+ }
38
+ else {
39
+ const err = frame.error;
40
+ p.reject(new Error(err?.message ?? 'request failed'));
41
+ }
42
+ return true;
43
+ }
44
+ /**
45
+ * Flush all pending requests with an error (e.g. on disconnect).
46
+ */
47
+ export function flushPending(pending, err) {
48
+ for (const p of pending.values())
49
+ p.reject(err);
50
+ pending.clear();
51
+ }
52
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/gateway/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AASxC;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,EAAa,EACb,OAAoC,EACpC,MAAc,EACd,MAAgB,EAChB,SAAS,GAAG,KAAK;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,MAAM,qBAAqB,SAAS,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;YACd,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnD,CAAC,CAAC;QACH,MAAM,KAAK,GAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAChE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA8B,EAC9B,OAAoC;IAEpC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAY,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,KAAK,CAAC,KAAyC,CAAC;QAC5D,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoC,EAAE,GAAU;IAC3E,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;QAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,151 @@
1
+ export interface RequestFrame {
2
+ type: 'req';
3
+ id: string;
4
+ method: string;
5
+ params?: unknown;
6
+ }
7
+ export interface ResponseFrame {
8
+ type: 'res';
9
+ id: string;
10
+ ok: boolean;
11
+ payload?: unknown;
12
+ error?: {
13
+ code: string;
14
+ message: string;
15
+ details?: unknown;
16
+ retryable?: boolean;
17
+ };
18
+ }
19
+ export interface EventFrame {
20
+ type: 'event';
21
+ event: string;
22
+ payload?: unknown;
23
+ seq?: number;
24
+ stateVersion?: StateVersion;
25
+ }
26
+ export type GatewayFrame = RequestFrame | ResponseFrame | EventFrame;
27
+ export interface StateVersion {
28
+ presence: number;
29
+ health: number;
30
+ }
31
+ export interface PresenceEntry {
32
+ host?: string;
33
+ ip?: string;
34
+ version?: string;
35
+ platform?: string;
36
+ deviceFamily?: string;
37
+ modelIdentifier?: string;
38
+ mode?: string;
39
+ lastInputSeconds?: number;
40
+ reason?: string;
41
+ tags?: string[];
42
+ text?: string;
43
+ ts: number;
44
+ deviceId?: string;
45
+ roles?: string[];
46
+ scopes?: string[];
47
+ instanceId?: string;
48
+ }
49
+ export interface SessionDefaults {
50
+ defaultAgentId: string;
51
+ mainKey: string;
52
+ mainSessionKey: string;
53
+ scope?: string;
54
+ }
55
+ export interface GatewaySnapshot {
56
+ presence: PresenceEntry[];
57
+ health: unknown;
58
+ stateVersion: StateVersion;
59
+ uptimeMs: number;
60
+ configPath?: string;
61
+ stateDir?: string;
62
+ sessionDefaults?: SessionDefaults;
63
+ authMode?: 'none' | 'token' | 'password' | 'trusted-proxy';
64
+ }
65
+ export interface HelloOk {
66
+ type: 'hello-ok';
67
+ protocol: number;
68
+ server: {
69
+ version: string;
70
+ commit?: string;
71
+ host?: string;
72
+ connId: string;
73
+ };
74
+ features: {
75
+ methods: string[];
76
+ events: string[];
77
+ };
78
+ snapshot: GatewaySnapshot;
79
+ canvasHostUrl?: string;
80
+ auth?: {
81
+ deviceToken: string;
82
+ role: string;
83
+ scopes: string[];
84
+ issuedAtMs?: number;
85
+ };
86
+ policy: {
87
+ maxPayload: number;
88
+ maxBufferedBytes: number;
89
+ tickIntervalMs: number;
90
+ };
91
+ }
92
+ export interface Agent {
93
+ id: string;
94
+ name?: string;
95
+ emoji?: string;
96
+ description?: string;
97
+ model?: string;
98
+ status?: string;
99
+ }
100
+ export interface Session {
101
+ sessionKey: string;
102
+ agentId?: string;
103
+ kind?: 'direct' | 'group' | 'global' | 'unknown';
104
+ label?: string;
105
+ displayName?: string;
106
+ channel?: string;
107
+ model?: string;
108
+ status?: string;
109
+ lastActiveAt?: number;
110
+ updatedAt?: number;
111
+ createdAt?: number;
112
+ }
113
+ export interface ChatEvent {
114
+ runId: string;
115
+ sessionKey: string;
116
+ seq: number;
117
+ state: 'delta' | 'final' | 'aborted' | 'error';
118
+ message?: unknown;
119
+ errorMessage?: string;
120
+ usage?: unknown;
121
+ stopReason?: string;
122
+ }
123
+ export interface ShutdownEvent {
124
+ reason: string;
125
+ restartExpectedMs?: number;
126
+ }
127
+ export interface ChatMessage {
128
+ role: 'user' | 'assistant';
129
+ content: string | Array<{
130
+ type: string;
131
+ text?: string;
132
+ [key: string]: unknown;
133
+ }>;
134
+ timestamp?: number;
135
+ }
136
+ export interface AgentChatState {
137
+ messages: ChatMessage[];
138
+ stream: string | null;
139
+ runId: string | null;
140
+ sending: boolean;
141
+ loading: boolean;
142
+ inputText: string;
143
+ lastError: string | null;
144
+ }
145
+ export interface AgentActivityState {
146
+ working: boolean;
147
+ lastEventAt: number;
148
+ sparkBins: number[];
149
+ _workingTimer?: ReturnType<typeof setTimeout>;
150
+ }
151
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gateway/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // Gateway frame types — extracted from minion_hub
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gateway/types.ts"],"names":[],"mappings":"AAAA,kDAAkD"}
@@ -0,0 +1,3 @@
1
+ export * from './gateway/index.js';
2
+ export * from './utils/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './gateway/index.js';
2
+ export * from './utils/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { uuid } from './uuid.js';
2
+ export { parseAgentSessionKey } from './session-key.js';
3
+ export { extractText, cleanText, parseGatewayMetadata, extractMessageTimestamp } from './text.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { uuid } from './uuid.js';
2
+ export { parseAgentSessionKey } from './session-key.js';
3
+ export { extractText, cleanText, parseGatewayMetadata, extractMessageTimestamp } from './text.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parse an agent session key like "agent:panik:whatsapp:direct:+51922286663"
3
+ * into { agentId: "panik", rest: "whatsapp:direct:+51922286663" }.
4
+ */
5
+ export declare function parseAgentSessionKey(sessionKey: string | undefined | null): {
6
+ agentId: string;
7
+ rest: string;
8
+ } | null;
9
+ //# sourceMappingURL=session-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-key.d.ts","sourceRoot":"","sources":["../../src/utils/session-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS1C"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Parse an agent session key like "agent:panik:whatsapp:direct:+51922286663"
3
+ * into { agentId: "panik", rest: "whatsapp:direct:+51922286663" }.
4
+ */
5
+ export function parseAgentSessionKey(sessionKey) {
6
+ const raw = (sessionKey ?? '').trim();
7
+ if (!raw)
8
+ return null;
9
+ const parts = raw.split(':').filter(Boolean);
10
+ if (parts.length < 3 || parts[0] !== 'agent')
11
+ return null;
12
+ const agentId = parts[1]?.trim();
13
+ const rest = parts.slice(2).join(':');
14
+ if (!agentId || !rest)
15
+ return null;
16
+ return { agentId, rest };
17
+ }
18
+ //# sourceMappingURL=session-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-key.js","sourceRoot":"","sources":["../../src/utils/session-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAqC;IAErC,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function extractText(message: unknown): string | null;
2
+ /** Strip the gateway metadata wrapper and extract the timestamp prefix if present. */
3
+ export declare function parseGatewayMetadata(text: string): {
4
+ clean: string;
5
+ isoTs?: string;
6
+ };
7
+ /** Extract a short display timestamp (e.g. "17:36") from a message object. */
8
+ export declare function extractMessageTimestamp(message: unknown): string | undefined;
9
+ export declare function cleanText(text: string, role: string): string;
10
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAiB3D;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAQpF;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAqB5E;AAYD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAe5D"}
@@ -0,0 +1,80 @@
1
+ export function extractText(message) {
2
+ if (!message || typeof message !== 'object')
3
+ return null;
4
+ const m = message;
5
+ const role = typeof m.role === 'string' ? m.role : '';
6
+ const content = m.content;
7
+ if (typeof content === 'string')
8
+ return cleanText(content, role);
9
+ if (Array.isArray(content)) {
10
+ const parts = content
11
+ .filter((p) => p && p.type === 'text' && typeof p.text === 'string')
12
+ .map((p) => p.text);
13
+ if (parts.length > 0)
14
+ return cleanText(parts.join('\n'), role);
15
+ }
16
+ if (typeof m.text === 'string')
17
+ return cleanText(m.text, role);
18
+ return null;
19
+ }
20
+ /** Strip the gateway metadata wrapper and extract the timestamp prefix if present. */
21
+ export function parseGatewayMetadata(text) {
22
+ const metaRe = /^Conversation info \(untrusted metadata\):\s*```(?:json)?\s[\s\S]*?```\s*\n*/;
23
+ let clean = text.replace(metaRe, '');
24
+ const tsRe = /^\[([^\[\]]+)\]\s*/;
25
+ let isoTs;
26
+ const m = clean.match(tsRe);
27
+ if (m) {
28
+ isoTs = m[1];
29
+ clean = clean.slice(m[0].length);
30
+ }
31
+ return { clean, isoTs };
32
+ }
33
+ /** Extract a short display timestamp (e.g. "17:36") from a message object. */
34
+ export function extractMessageTimestamp(message) {
35
+ if (!message || typeof message !== 'object')
36
+ return undefined;
37
+ const m = message;
38
+ const content = m.content;
39
+ if (Array.isArray(content)) {
40
+ for (const p of content) {
41
+ if (p?.type === 'text' && typeof p.text === 'string') {
42
+ const { isoTs } = parseGatewayMetadata(p.text);
43
+ if (isoTs)
44
+ return _formatTs(isoTs);
45
+ }
46
+ }
47
+ }
48
+ else if (typeof content === 'string') {
49
+ const { isoTs } = parseGatewayMetadata(content);
50
+ if (isoTs)
51
+ return _formatTs(isoTs);
52
+ }
53
+ if (typeof m.timestamp === 'number') {
54
+ return new Date(m.timestamp).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
55
+ }
56
+ return undefined;
57
+ }
58
+ function _formatTs(isoTs) {
59
+ const hm = isoTs.match(/(\d{2}:\d{2})/);
60
+ if (hm?.[1])
61
+ return hm[1];
62
+ const d = new Date(isoTs);
63
+ if (!isNaN(d.getTime())) {
64
+ return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
65
+ }
66
+ return isoTs;
67
+ }
68
+ export function cleanText(text, role) {
69
+ text = parseGatewayMetadata(text).clean;
70
+ if (role === 'assistant') {
71
+ text = text.replace(/<\s*think(?:ing)?\s*>[\s\S]*?<\s*\/\s*think(?:ing)?\s*>/gi, '');
72
+ }
73
+ text = text.replace(/\[\[\s*(?:reply_to_current|reply_to\s*:\s*[^\]\n]+|audio_as_voice)\s*\]\]/gi, '');
74
+ text = text.replace(/^<env>[\s\S]*?<\/env>\s*/i, '');
75
+ return text
76
+ .replace(/[ \t]+/g, ' ')
77
+ .replace(/[ \t]*\n[ \t]*/g, '\n')
78
+ .trim();
79
+ }
80
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function uuid(): string;
2
+ //# sourceMappingURL=uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/utils/uuid.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,IAAI,MAAM,CAM7B"}
@@ -0,0 +1,9 @@
1
+ export function uuid() {
2
+ if (typeof crypto !== 'undefined' && crypto.randomUUID)
3
+ return crypto.randomUUID();
4
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
5
+ const r = (Math.random() * 16) | 0;
6
+ return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
7
+ });
8
+ }
9
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/utils/uuid.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI;IAClB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IACnF,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@minion-stack/shared",
3
+ "version": "0.1.0",
4
+ "description": "Shared gateway protocol types and utilities for the Minion platform.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/NikolasP98/minion-meta.git",
9
+ "directory": "packages/shared"
10
+ },
11
+ "type": "module",
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./gateway": {
20
+ "types": "./dist/gateway/index.d.ts",
21
+ "import": "./dist/gateway/index.js"
22
+ },
23
+ "./utils": {
24
+ "types": "./dist/utils/index.d.ts",
25
+ "import": "./dist/utils/index.js"
26
+ }
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "README.md"
34
+ ],
35
+ "scripts": {
36
+ "build": "tsc",
37
+ "prepublishOnly": "tsc"
38
+ },
39
+ "devDependencies": {
40
+ "@minion-stack/tsconfig": "workspace:*",
41
+ "typescript": "^5.7.0"
42
+ }
43
+ }