copilot-hub 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.
Files changed (128) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +215 -0
  3. package/apps/agent-engine/.env.example +41 -0
  4. package/apps/agent-engine/LICENSE +21 -0
  5. package/apps/agent-engine/README.md +57 -0
  6. package/apps/agent-engine/bot-registry.example.json +28 -0
  7. package/apps/agent-engine/capabilities/example/index.js +3 -0
  8. package/apps/agent-engine/capabilities/example/manifest.json +14 -0
  9. package/apps/agent-engine/dist/agent-worker.js +241 -0
  10. package/apps/agent-engine/dist/config.js +225 -0
  11. package/apps/agent-engine/dist/index.js +352 -0
  12. package/apps/agent-engine/dist/test/project-fingerprint.test.js +40 -0
  13. package/apps/agent-engine/dist/test/thread-id.test.js +12 -0
  14. package/apps/agent-engine/package.json +28 -0
  15. package/apps/control-plane/.env.example +25 -0
  16. package/apps/control-plane/README.md +35 -0
  17. package/apps/control-plane/bot-registry.example.json +40 -0
  18. package/apps/control-plane/capabilities/example/index.js +3 -0
  19. package/apps/control-plane/capabilities/example/manifest.json +14 -0
  20. package/apps/control-plane/dist/agent-worker.js +243 -0
  21. package/apps/control-plane/dist/channels/channel-factory.js +21 -0
  22. package/apps/control-plane/dist/channels/hub-ops-commands.js +752 -0
  23. package/apps/control-plane/dist/channels/telegram-channel.js +743 -0
  24. package/apps/control-plane/dist/channels/whatsapp-channel.js +35 -0
  25. package/apps/control-plane/dist/config.js +230 -0
  26. package/apps/control-plane/dist/copilot-hub.js +138 -0
  27. package/apps/control-plane/dist/index.js +349 -0
  28. package/apps/control-plane/dist/kernel/admin-contract.js +51 -0
  29. package/apps/control-plane/dist/test/project-fingerprint.test.js +40 -0
  30. package/apps/control-plane/dist/test/thread-id.test.js +12 -0
  31. package/apps/control-plane/package.json +27 -0
  32. package/package.json +89 -0
  33. package/packages/contracts/README.md +10 -0
  34. package/packages/contracts/dist/control-plane.d.ts +24 -0
  35. package/packages/contracts/dist/control-plane.js +37 -0
  36. package/packages/contracts/dist/control-plane.js.map +1 -0
  37. package/packages/contracts/dist/index.d.ts +1 -0
  38. package/packages/contracts/dist/index.js +2 -0
  39. package/packages/contracts/dist/index.js.map +1 -0
  40. package/packages/contracts/package.json +27 -0
  41. package/packages/core/README.md +33 -0
  42. package/packages/core/dist/agent-supervisor.d.ts +39 -0
  43. package/packages/core/dist/agent-supervisor.js +552 -0
  44. package/packages/core/dist/agent-supervisor.js.map +1 -0
  45. package/packages/core/dist/bot-manager.d.ts +66 -0
  46. package/packages/core/dist/bot-manager.js +333 -0
  47. package/packages/core/dist/bot-manager.js.map +1 -0
  48. package/packages/core/dist/bot-registry.d.ts +60 -0
  49. package/packages/core/dist/bot-registry.js +381 -0
  50. package/packages/core/dist/bot-registry.js.map +1 -0
  51. package/packages/core/dist/bot-runtime.d.ts +135 -0
  52. package/packages/core/dist/bot-runtime.js +349 -0
  53. package/packages/core/dist/bot-runtime.js.map +1 -0
  54. package/packages/core/dist/bridge-service.d.ts +39 -0
  55. package/packages/core/dist/bridge-service.js +272 -0
  56. package/packages/core/dist/bridge-service.js.map +1 -0
  57. package/packages/core/dist/capability-manager.d.ts +18 -0
  58. package/packages/core/dist/capability-manager.js +335 -0
  59. package/packages/core/dist/capability-manager.js.map +1 -0
  60. package/packages/core/dist/capability-scaffold.d.ts +26 -0
  61. package/packages/core/dist/capability-scaffold.js +118 -0
  62. package/packages/core/dist/capability-scaffold.js.map +1 -0
  63. package/packages/core/dist/channel-factory.d.ts +6 -0
  64. package/packages/core/dist/channel-factory.js +22 -0
  65. package/packages/core/dist/channel-factory.js.map +1 -0
  66. package/packages/core/dist/codex-app-client.d.ts +56 -0
  67. package/packages/core/dist/codex-app-client.js +762 -0
  68. package/packages/core/dist/codex-app-client.js.map +1 -0
  69. package/packages/core/dist/codex-provider.d.ts +31 -0
  70. package/packages/core/dist/codex-provider.js +64 -0
  71. package/packages/core/dist/codex-provider.js.map +1 -0
  72. package/packages/core/dist/control-permission.d.ts +19 -0
  73. package/packages/core/dist/control-permission.js +106 -0
  74. package/packages/core/dist/control-permission.js.map +1 -0
  75. package/packages/core/dist/control-plane-actions.d.ts +1 -0
  76. package/packages/core/dist/control-plane-actions.js +2 -0
  77. package/packages/core/dist/control-plane-actions.js.map +1 -0
  78. package/packages/core/dist/example-capability.d.ts +17 -0
  79. package/packages/core/dist/example-capability.js +22 -0
  80. package/packages/core/dist/example-capability.js.map +1 -0
  81. package/packages/core/dist/extension-contract.d.ts +22 -0
  82. package/packages/core/dist/extension-contract.js +28 -0
  83. package/packages/core/dist/extension-contract.js.map +1 -0
  84. package/packages/core/dist/index.d.ts +26 -0
  85. package/packages/core/dist/index.js +27 -0
  86. package/packages/core/dist/index.js.map +1 -0
  87. package/packages/core/dist/instance-lock.d.ts +9 -0
  88. package/packages/core/dist/instance-lock.js +74 -0
  89. package/packages/core/dist/instance-lock.js.map +1 -0
  90. package/packages/core/dist/kernel-control-plane.d.ts +16 -0
  91. package/packages/core/dist/kernel-control-plane.js +500 -0
  92. package/packages/core/dist/kernel-control-plane.js.map +1 -0
  93. package/packages/core/dist/kernel-version.d.ts +1 -0
  94. package/packages/core/dist/kernel-version.js +2 -0
  95. package/packages/core/dist/kernel-version.js.map +1 -0
  96. package/packages/core/dist/project-fingerprint.d.ts +11 -0
  97. package/packages/core/dist/project-fingerprint.js +33 -0
  98. package/packages/core/dist/project-fingerprint.js.map +1 -0
  99. package/packages/core/dist/provider-factory.d.ts +7 -0
  100. package/packages/core/dist/provider-factory.js +21 -0
  101. package/packages/core/dist/provider-factory.js.map +1 -0
  102. package/packages/core/dist/secret-store.d.ts +18 -0
  103. package/packages/core/dist/secret-store.js +110 -0
  104. package/packages/core/dist/secret-store.js.map +1 -0
  105. package/packages/core/dist/state-store.d.ts +50 -0
  106. package/packages/core/dist/state-store.js +324 -0
  107. package/packages/core/dist/state-store.js.map +1 -0
  108. package/packages/core/dist/telegram-channel.d.ts +27 -0
  109. package/packages/core/dist/telegram-channel.js +951 -0
  110. package/packages/core/dist/telegram-channel.js.map +1 -0
  111. package/packages/core/dist/thread-id.d.ts +1 -0
  112. package/packages/core/dist/thread-id.js +12 -0
  113. package/packages/core/dist/thread-id.js.map +1 -0
  114. package/packages/core/dist/whatsapp-channel.d.ts +26 -0
  115. package/packages/core/dist/whatsapp-channel.js +36 -0
  116. package/packages/core/dist/whatsapp-channel.js.map +1 -0
  117. package/packages/core/dist/workspace-paths.d.ts +5 -0
  118. package/packages/core/dist/workspace-paths.js +77 -0
  119. package/packages/core/dist/workspace-paths.js.map +1 -0
  120. package/packages/core/dist/workspace-policy.d.ts +30 -0
  121. package/packages/core/dist/workspace-policy.js +104 -0
  122. package/packages/core/dist/workspace-policy.js.map +1 -0
  123. package/packages/core/package.json +126 -0
  124. package/scripts/cli.mjs +537 -0
  125. package/scripts/configure.mjs +254 -0
  126. package/scripts/ensure-shared-build.mjs +96 -0
  127. package/scripts/run-node-tests.mjs +52 -0
  128. package/scripts/supervisor.mjs +332 -0
@@ -0,0 +1,110 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ const SECRET_NAME_PATTERN = /^[A-Za-z0-9._:-]{1,120}$/;
4
+ export class KernelSecretStore {
5
+ filePath;
6
+ secrets;
7
+ initialized;
8
+ constructor(filePath) {
9
+ this.filePath = path.resolve(String(filePath));
10
+ this.secrets = new Map();
11
+ this.initialized = false;
12
+ }
13
+ async init() {
14
+ if (this.initialized) {
15
+ return;
16
+ }
17
+ try {
18
+ const raw = await fs.readFile(this.filePath, "utf8");
19
+ const parsed = JSON.parse(stripBom(raw));
20
+ this.loadFromParsed(parsed);
21
+ }
22
+ catch (error) {
23
+ if (getErrorCode(error) !== "ENOENT") {
24
+ throw error;
25
+ }
26
+ await fs.mkdir(path.dirname(this.filePath), { recursive: true });
27
+ await this.flush();
28
+ }
29
+ this.initialized = true;
30
+ }
31
+ getSecret(name) {
32
+ const key = normalizeSecretName(name);
33
+ return this.secrets.get(key) ?? null;
34
+ }
35
+ listSecretNames() {
36
+ return [...this.secrets.keys()].sort((a, b) => a.localeCompare(b));
37
+ }
38
+ async setSecret(name, value) {
39
+ const key = normalizeSecretName(name);
40
+ const secretValue = normalizeSecretValue(value);
41
+ this.secrets.set(key, secretValue);
42
+ await this.flush();
43
+ return { name: key };
44
+ }
45
+ async deleteSecret(name) {
46
+ const key = normalizeSecretName(name);
47
+ const existed = this.secrets.delete(key);
48
+ await this.flush();
49
+ return { name: key, deleted: existed };
50
+ }
51
+ loadFromParsed(parsed) {
52
+ const parsedObj = parsed && typeof parsed === "object" ? parsed : {};
53
+ const entries = parsedObj.secrets;
54
+ if (!entries || typeof entries !== "object") {
55
+ this.secrets = new Map();
56
+ return;
57
+ }
58
+ const next = new Map();
59
+ for (const [rawName, rawValue] of Object.entries(entries)) {
60
+ if (!SECRET_NAME_PATTERN.test(String(rawName))) {
61
+ continue;
62
+ }
63
+ const value = String(rawValue ?? "");
64
+ if (!value.trim()) {
65
+ continue;
66
+ }
67
+ next.set(String(rawName), value);
68
+ }
69
+ this.secrets = next;
70
+ }
71
+ async flush() {
72
+ const serialized = {
73
+ version: 1,
74
+ updatedAt: new Date().toISOString(),
75
+ secrets: Object.fromEntries(this.secrets.entries()),
76
+ };
77
+ await fs.mkdir(path.dirname(this.filePath), { recursive: true });
78
+ await fs.writeFile(this.filePath, `${JSON.stringify(serialized, null, 2)}\n`, "utf8");
79
+ }
80
+ }
81
+ function normalizeSecretName(value) {
82
+ const name = String(value ?? "").trim();
83
+ if (!SECRET_NAME_PATTERN.test(name)) {
84
+ throw new Error("Invalid secret name. Allowed: letters, numbers, dot, underscore, dash, colon.");
85
+ }
86
+ return name;
87
+ }
88
+ function normalizeSecretValue(value) {
89
+ const text = String(value ?? "").trim();
90
+ if (!text) {
91
+ throw new Error("Secret value cannot be empty.");
92
+ }
93
+ return text;
94
+ }
95
+ function stripBom(value) {
96
+ const text = String(value ?? "");
97
+ if (text.charCodeAt(0) === 0xfeff) {
98
+ return text.slice(1);
99
+ }
100
+ return text;
101
+ }
102
+ function getErrorCode(error) {
103
+ if (!error || typeof error !== "object") {
104
+ return "";
105
+ }
106
+ return String(error.code ?? "")
107
+ .trim()
108
+ .toUpperCase();
109
+ }
110
+ //# sourceMappingURL=secret-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-store.js","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ type MessageRole = "user" | "assistant" | "system";
2
+ type MessageSource = "telegram" | "web" | "internal";
3
+ export interface StateMessage {
4
+ id: string;
5
+ role: MessageRole;
6
+ source: MessageSource;
7
+ text: string;
8
+ createdAt: string;
9
+ }
10
+ export interface ThreadState {
11
+ sessionId: string | null;
12
+ turnCount: number;
13
+ lastMode: string | null;
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ messages: StateMessage[];
17
+ }
18
+ export interface StateShape {
19
+ version: number;
20
+ fingerprint: string | null;
21
+ threads: Record<string, ThreadState>;
22
+ bindings: {
23
+ channelUsers: Record<string, string>;
24
+ };
25
+ }
26
+ export declare class JsonStateStore {
27
+ filePath: string;
28
+ state: StateShape | null;
29
+ constructor(filePath: unknown);
30
+ init(): Promise<void>;
31
+ ensureFingerprint(expectedFingerprint: unknown): Promise<{
32
+ changed: boolean;
33
+ reset: boolean;
34
+ previousFingerprint?: string;
35
+ }>;
36
+ ensureThread(threadId: unknown): Promise<ThreadState>;
37
+ getThread(threadId: unknown): Promise<ThreadState | null>;
38
+ upsertThread(threadId: unknown, updater: (thread: ThreadState) => Partial<ThreadState> | ThreadState): Promise<ThreadState>;
39
+ appendMessage(threadId: unknown, message: unknown, maxMessages?: number): Promise<ThreadState>;
40
+ resetThread(threadId: unknown): Promise<ThreadState>;
41
+ listMessages(threadId: unknown, limit?: number): Promise<StateMessage[]>;
42
+ findThreadIdBySessionId(sessionId: unknown): Promise<string | null>;
43
+ getThreadIdForChannelUser(channelUserKey: unknown): Promise<string | null>;
44
+ getOrCreateThreadIdForChannelUser(channelUserKey: unknown): Promise<string>;
45
+ private ensureInit;
46
+ private readOrInit;
47
+ private flush;
48
+ private writeState;
49
+ }
50
+ export {};
@@ -0,0 +1,324 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ const STATE_VERSION = 3;
5
+ const DEFAULT_MAX_MESSAGES = 200;
6
+ const EMPTY_STATE = {
7
+ version: STATE_VERSION,
8
+ fingerprint: null,
9
+ threads: {},
10
+ bindings: {
11
+ channelUsers: {},
12
+ },
13
+ };
14
+ export class JsonStateStore {
15
+ filePath;
16
+ state;
17
+ constructor(filePath) {
18
+ this.filePath = String(filePath);
19
+ this.state = null;
20
+ }
21
+ async init() {
22
+ await fs.mkdir(path.dirname(this.filePath), { recursive: true });
23
+ this.state = await this.readOrInit();
24
+ }
25
+ async ensureFingerprint(expectedFingerprint) {
26
+ await this.ensureInit();
27
+ const expected = String(expectedFingerprint ?? "").trim();
28
+ if (!expected) {
29
+ return { changed: false, reset: false };
30
+ }
31
+ const current = String(this.state.fingerprint ?? "").trim();
32
+ if (current && current !== expected) {
33
+ this.state = {
34
+ ...EMPTY_STATE,
35
+ fingerprint: expected,
36
+ };
37
+ await this.flush();
38
+ return {
39
+ changed: true,
40
+ reset: true,
41
+ previousFingerprint: current,
42
+ };
43
+ }
44
+ if (current !== expected) {
45
+ this.state.fingerprint = expected;
46
+ await this.flush();
47
+ return {
48
+ changed: true,
49
+ reset: false,
50
+ };
51
+ }
52
+ return { changed: false, reset: false };
53
+ }
54
+ async ensureThread(threadId) {
55
+ await this.ensureInit();
56
+ const key = String(threadId);
57
+ if (!this.state.threads[key]) {
58
+ const now = new Date().toISOString();
59
+ this.state.threads[key] = createDefaultThread(now);
60
+ await this.flush();
61
+ }
62
+ return this.state.threads[key];
63
+ }
64
+ async getThread(threadId) {
65
+ await this.ensureInit();
66
+ return this.state.threads[String(threadId)] ?? null;
67
+ }
68
+ async upsertThread(threadId, updater) {
69
+ await this.ensureInit();
70
+ const key = String(threadId);
71
+ const now = new Date().toISOString();
72
+ const current = this.state.threads[key] ?? createDefaultThread(now);
73
+ const next = updater(cloneThread(current));
74
+ this.state.threads[key] = {
75
+ ...createDefaultThread(current.createdAt),
76
+ ...next,
77
+ createdAt: current.createdAt,
78
+ updatedAt: now,
79
+ messages: ensureMessages(next?.messages ?? current.messages ?? []),
80
+ };
81
+ await this.flush();
82
+ return this.state.threads[key];
83
+ }
84
+ async appendMessage(threadId, message, maxMessages = DEFAULT_MAX_MESSAGES) {
85
+ return this.upsertThread(threadId, (thread) => ({
86
+ ...thread,
87
+ messages: trimMessages([...(thread.messages ?? []), sanitizeMessage(message)], maxMessages),
88
+ }));
89
+ }
90
+ async resetThread(threadId) {
91
+ return this.upsertThread(threadId, (thread) => ({
92
+ ...thread,
93
+ sessionId: null,
94
+ turnCount: 0,
95
+ lastMode: null,
96
+ messages: [],
97
+ }));
98
+ }
99
+ async listMessages(threadId, limit = DEFAULT_MAX_MESSAGES) {
100
+ await this.ensureInit();
101
+ const thread = this.state.threads[String(threadId)];
102
+ if (!thread) {
103
+ return [];
104
+ }
105
+ const safeLimit = clampLimit(limit);
106
+ const start = Math.max(0, thread.messages.length - safeLimit);
107
+ return thread.messages.slice(start);
108
+ }
109
+ async findThreadIdBySessionId(sessionId) {
110
+ await this.ensureInit();
111
+ const wantedSessionId = String(sessionId ?? "").trim();
112
+ if (!wantedSessionId) {
113
+ return null;
114
+ }
115
+ for (const [threadId, thread] of Object.entries(this.state.threads ?? {})) {
116
+ if (String(thread?.sessionId ?? "").trim() === wantedSessionId) {
117
+ return threadId;
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ async getThreadIdForChannelUser(channelUserKey) {
123
+ await this.ensureInit();
124
+ return this.state.bindings.channelUsers[String(channelUserKey)] ?? null;
125
+ }
126
+ async getOrCreateThreadIdForChannelUser(channelUserKey) {
127
+ await this.ensureInit();
128
+ const bindingKey = String(channelUserKey);
129
+ const existing = this.state.bindings.channelUsers[bindingKey];
130
+ if (existing) {
131
+ return existing;
132
+ }
133
+ const threadId = allocateUniqueThreadId(this.state.threads, bindingKey);
134
+ this.state.bindings.channelUsers[bindingKey] = threadId;
135
+ if (!this.state.threads[threadId]) {
136
+ this.state.threads[threadId] = createDefaultThread(new Date().toISOString());
137
+ }
138
+ await this.flush();
139
+ return threadId;
140
+ }
141
+ async ensureInit() {
142
+ if (!this.state) {
143
+ await this.init();
144
+ }
145
+ }
146
+ async readOrInit() {
147
+ try {
148
+ const raw = await fs.readFile(this.filePath, "utf8");
149
+ const parsed = JSON.parse(raw);
150
+ return normalizeStateShape(parsed);
151
+ }
152
+ catch (error) {
153
+ if (getErrorCode(error) === "ENOENT") {
154
+ await this.writeState({ ...EMPTY_STATE });
155
+ return { ...EMPTY_STATE };
156
+ }
157
+ throw error;
158
+ }
159
+ }
160
+ async flush() {
161
+ await this.writeState(this.state);
162
+ }
163
+ async writeState(state) {
164
+ const tmpPath = `${this.filePath}.tmp`;
165
+ const payload = `${JSON.stringify(state, null, 2)}\n`;
166
+ await fs.writeFile(tmpPath, payload, "utf8");
167
+ await fs.rename(tmpPath, this.filePath);
168
+ }
169
+ }
170
+ function normalizeStateShape(parsed) {
171
+ if (isVersion3State(parsed)) {
172
+ return {
173
+ version: STATE_VERSION,
174
+ fingerprint: normalizeFingerprint(parsed.fingerprint),
175
+ threads: normalizeThreads(parsed.threads),
176
+ bindings: {
177
+ channelUsers: normalizeStringMap(parsed.bindings?.channelUsers),
178
+ },
179
+ };
180
+ }
181
+ return { ...EMPTY_STATE };
182
+ }
183
+ function isVersion3State(value) {
184
+ if (!value || typeof value !== "object") {
185
+ return false;
186
+ }
187
+ const obj = value;
188
+ return (Number(obj.version) === STATE_VERSION && Boolean(obj.threads) && typeof obj.threads === "object");
189
+ }
190
+ function normalizeThreads(threads) {
191
+ const out = {};
192
+ const entries = threads && typeof threads === "object" ? Object.entries(threads) : [];
193
+ for (const [threadId, rawValue] of entries) {
194
+ const value = rawValue;
195
+ const createdAt = String(value?.createdAt ?? new Date().toISOString());
196
+ out[threadId] = {
197
+ sessionId: value?.sessionId ? String(value.sessionId) : null,
198
+ turnCount: safeNumber(value?.turnCount),
199
+ lastMode: value?.lastMode ? String(value.lastMode) : null,
200
+ createdAt,
201
+ updatedAt: value?.updatedAt ? String(value.updatedAt) : createdAt,
202
+ messages: ensureMessages(value?.messages ?? []),
203
+ };
204
+ }
205
+ return out;
206
+ }
207
+ function normalizeFingerprint(value) {
208
+ const fingerprint = String(value ?? "").trim();
209
+ return fingerprint || null;
210
+ }
211
+ function normalizeStringMap(value) {
212
+ if (!value || typeof value !== "object") {
213
+ return {};
214
+ }
215
+ const out = {};
216
+ for (const [key, mapValue] of Object.entries(value)) {
217
+ if (typeof mapValue === "string" && mapValue.trim()) {
218
+ out[key] = mapValue;
219
+ }
220
+ }
221
+ return out;
222
+ }
223
+ function createDefaultThread(nowIso) {
224
+ return {
225
+ sessionId: null,
226
+ turnCount: 0,
227
+ lastMode: null,
228
+ createdAt: nowIso,
229
+ updatedAt: nowIso,
230
+ messages: [],
231
+ };
232
+ }
233
+ function cloneThread(value) {
234
+ return {
235
+ ...value,
236
+ messages: [...(value.messages ?? [])],
237
+ };
238
+ }
239
+ function ensureMessages(value) {
240
+ if (!Array.isArray(value)) {
241
+ return [];
242
+ }
243
+ return value.map((entry) => sanitizeMessage(entry)).filter((entry) => entry.text.length > 0);
244
+ }
245
+ function sanitizeMessage(input) {
246
+ const raw = input;
247
+ const role = normalizeRole(raw?.role);
248
+ const source = normalizeSource(raw?.source);
249
+ const text = String(raw?.text ?? "").trim();
250
+ const createdAt = String(raw?.createdAt ?? new Date().toISOString());
251
+ const id = raw?.id ? String(raw.id) : createMessageId();
252
+ return {
253
+ id,
254
+ role,
255
+ source,
256
+ text,
257
+ createdAt,
258
+ };
259
+ }
260
+ function normalizeRole(value) {
261
+ const role = String(value ?? "").toLowerCase();
262
+ if (role === "assistant" || role === "system") {
263
+ return role;
264
+ }
265
+ return "user";
266
+ }
267
+ function normalizeSource(value) {
268
+ const source = String(value ?? "").toLowerCase();
269
+ if (source === "telegram" || source === "web" || source === "internal") {
270
+ return source;
271
+ }
272
+ return "internal";
273
+ }
274
+ function trimMessages(messages, maxMessages) {
275
+ const safeMax = clampLimit(maxMessages);
276
+ if (messages.length <= safeMax) {
277
+ return messages;
278
+ }
279
+ return messages.slice(messages.length - safeMax);
280
+ }
281
+ function clampLimit(value) {
282
+ const parsed = Number.parseInt(String(value), 10);
283
+ if (!Number.isFinite(parsed) || parsed <= 0) {
284
+ return DEFAULT_MAX_MESSAGES;
285
+ }
286
+ return Math.min(parsed, 1000);
287
+ }
288
+ function safeNumber(value) {
289
+ const parsed = Number.parseInt(String(value ?? 0), 10);
290
+ if (!Number.isFinite(parsed) || parsed < 0) {
291
+ return 0;
292
+ }
293
+ return parsed;
294
+ }
295
+ function createMessageId() {
296
+ return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
297
+ }
298
+ function allocateUniqueThreadId(existingThreads, bindingKey) {
299
+ const base = `ch:${hashBindingKey(bindingKey).slice(0, 16)}`;
300
+ if (!existingThreads[base]) {
301
+ return base;
302
+ }
303
+ let index = 1;
304
+ while (index < 1000) {
305
+ const candidate = `${base}:${index}`;
306
+ if (!existingThreads[candidate]) {
307
+ return candidate;
308
+ }
309
+ index += 1;
310
+ }
311
+ return `ch:${Date.now().toString(36)}`;
312
+ }
313
+ function hashBindingKey(value) {
314
+ return crypto.createHash("sha1").update(String(value)).digest("hex");
315
+ }
316
+ function getErrorCode(error) {
317
+ if (!error || typeof error !== "object") {
318
+ return "";
319
+ }
320
+ return String(error.code ?? "")
321
+ .trim()
322
+ .toUpperCase();
323
+ }
324
+ //# sourceMappingURL=state-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare class TelegramChannel {
2
+ #private;
3
+ constructor({ channelConfig, runtime }: {
4
+ channelConfig: any;
5
+ runtime: any;
6
+ });
7
+ start(): Promise<{
8
+ kind: any;
9
+ id: any;
10
+ running: any;
11
+ error: any;
12
+ }>;
13
+ stop(): Promise<{
14
+ kind: any;
15
+ id: any;
16
+ running: any;
17
+ error: any;
18
+ }>;
19
+ shutdown(): Promise<void>;
20
+ getStatus(): {
21
+ kind: any;
22
+ id: any;
23
+ running: any;
24
+ error: any;
25
+ };
26
+ notifyApproval(approval: any): Promise<void>;
27
+ }