telecodex 0.1.0 → 0.1.2
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/README.md +41 -4
- package/dist/bot/auth.js +62 -13
- package/dist/bot/commandSupport.js +23 -8
- package/dist/bot/createBot.js +16 -3
- package/dist/bot/handlers/operationalHandlers.js +52 -0
- package/dist/bot/handlers/projectHandlers.js +67 -8
- package/dist/bot/handlers/sessionConfigHandlers.js +27 -6
- package/dist/bot/topicCleanup.js +80 -0
- package/dist/cli.js +0 -0
- package/dist/codex/sessionCatalog.js +215 -0
- package/dist/config.js +0 -1
- package/dist/runtime/appPaths.js +4 -1
- package/dist/runtime/bindingCodes.js +5 -0
- package/dist/runtime/bootstrap.js +26 -17
- package/dist/runtime/startTelecodex.js +5 -0
- package/dist/store/fileState.js +370 -0
- package/dist/store/legacyMigration.js +160 -0
- package/dist/store/projects.js +11 -33
- package/dist/store/sessions.js +240 -207
- package/dist/telegram/renderer.js +40 -3
- package/package.json +2 -2
- package/dist/store/db.js +0 -267
package/dist/store/db.js
DELETED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { mkdirSync } from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { DatabaseSync } from "node:sqlite";
|
|
4
|
-
export const LATEST_DB_SCHEMA_VERSION = 12;
|
|
5
|
-
export function openDatabase(dbPath) {
|
|
6
|
-
mkdirSync(path.dirname(dbPath), { recursive: true });
|
|
7
|
-
const db = new DatabaseSync(dbPath);
|
|
8
|
-
runMigrations(db);
|
|
9
|
-
return db;
|
|
10
|
-
}
|
|
11
|
-
const MIGRATIONS = [
|
|
12
|
-
{
|
|
13
|
-
version: 1,
|
|
14
|
-
apply(db) {
|
|
15
|
-
db.exec(`
|
|
16
|
-
CREATE TABLE IF NOT EXISTS app_state (
|
|
17
|
-
key TEXT PRIMARY KEY,
|
|
18
|
-
value TEXT NOT NULL,
|
|
19
|
-
updated_at TEXT NOT NULL
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
23
|
-
chat_id TEXT PRIMARY KEY,
|
|
24
|
-
name TEXT NOT NULL,
|
|
25
|
-
cwd TEXT NOT NULL,
|
|
26
|
-
created_at TEXT NOT NULL,
|
|
27
|
-
updated_at TEXT NOT NULL
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
31
|
-
session_key TEXT PRIMARY KEY,
|
|
32
|
-
chat_id TEXT NOT NULL,
|
|
33
|
-
message_thread_id TEXT,
|
|
34
|
-
codex_thread_id TEXT,
|
|
35
|
-
cwd TEXT NOT NULL,
|
|
36
|
-
model TEXT NOT NULL,
|
|
37
|
-
active_turn_id TEXT,
|
|
38
|
-
output_message_id INTEGER,
|
|
39
|
-
sandbox_mode TEXT NOT NULL DEFAULT 'read-only',
|
|
40
|
-
approval_policy TEXT NOT NULL DEFAULT 'on-request',
|
|
41
|
-
telegram_topic_name TEXT,
|
|
42
|
-
reasoning_effort TEXT,
|
|
43
|
-
web_search_mode TEXT,
|
|
44
|
-
network_access_enabled INTEGER NOT NULL DEFAULT 1,
|
|
45
|
-
skip_git_repo_check INTEGER NOT NULL DEFAULT 1,
|
|
46
|
-
additional_directories TEXT,
|
|
47
|
-
output_schema TEXT,
|
|
48
|
-
runtime_status TEXT NOT NULL DEFAULT 'idle',
|
|
49
|
-
runtime_status_detail TEXT,
|
|
50
|
-
runtime_status_updated_at TEXT,
|
|
51
|
-
created_at TEXT NOT NULL,
|
|
52
|
-
updated_at TEXT NOT NULL
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
CREATE INDEX IF NOT EXISTS sessions_codex_thread_id_idx
|
|
56
|
-
ON sessions (codex_thread_id);
|
|
57
|
-
|
|
58
|
-
CREATE TABLE IF NOT EXISTS queued_inputs (
|
|
59
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
60
|
-
session_key TEXT NOT NULL,
|
|
61
|
-
text TEXT NOT NULL,
|
|
62
|
-
input_json TEXT,
|
|
63
|
-
created_at TEXT NOT NULL,
|
|
64
|
-
updated_at TEXT NOT NULL
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
CREATE INDEX IF NOT EXISTS queued_inputs_session_key_idx
|
|
68
|
-
ON queued_inputs (session_key, id);
|
|
69
|
-
`);
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
version: 2,
|
|
74
|
-
apply(db) {
|
|
75
|
-
const addedSandboxMode = ensureTableColumn(db, "sessions", "sandbox_mode", "ALTER TABLE sessions ADD COLUMN sandbox_mode TEXT NOT NULL DEFAULT 'read-only'");
|
|
76
|
-
const addedApprovalPolicy = ensureTableColumn(db, "sessions", "approval_policy", "ALTER TABLE sessions ADD COLUMN approval_policy TEXT NOT NULL DEFAULT 'on-request'");
|
|
77
|
-
ensureTableColumn(db, "sessions", "telegram_topic_name", "ALTER TABLE sessions ADD COLUMN telegram_topic_name TEXT");
|
|
78
|
-
ensureTableColumn(db, "sessions", "reasoning_effort", "ALTER TABLE sessions ADD COLUMN reasoning_effort TEXT");
|
|
79
|
-
if (addedSandboxMode) {
|
|
80
|
-
db.exec(`
|
|
81
|
-
UPDATE sessions
|
|
82
|
-
SET sandbox_mode = CASE mode
|
|
83
|
-
WHEN 'write' THEN 'workspace-write'
|
|
84
|
-
ELSE 'read-only'
|
|
85
|
-
END
|
|
86
|
-
`);
|
|
87
|
-
}
|
|
88
|
-
if (addedApprovalPolicy) {
|
|
89
|
-
db.exec(`
|
|
90
|
-
UPDATE sessions
|
|
91
|
-
SET approval_policy = 'on-request'
|
|
92
|
-
`);
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
version: 5,
|
|
98
|
-
apply(db) {
|
|
99
|
-
ensureTableColumn(db, "sessions", "runtime_status", "ALTER TABLE sessions ADD COLUMN runtime_status TEXT NOT NULL DEFAULT 'idle'");
|
|
100
|
-
ensureTableColumn(db, "sessions", "runtime_status_detail", "ALTER TABLE sessions ADD COLUMN runtime_status_detail TEXT");
|
|
101
|
-
const addedRuntimeStatusUpdatedAt = ensureTableColumn(db, "sessions", "runtime_status_updated_at", "ALTER TABLE sessions ADD COLUMN runtime_status_updated_at TEXT");
|
|
102
|
-
db.exec(`
|
|
103
|
-
UPDATE sessions
|
|
104
|
-
SET runtime_status = CASE
|
|
105
|
-
WHEN active_turn_id IS NOT NULL THEN 'running'
|
|
106
|
-
ELSE 'idle'
|
|
107
|
-
END
|
|
108
|
-
WHERE runtime_status IS NULL
|
|
109
|
-
OR runtime_status NOT IN ('idle', 'preparing', 'running', 'failed')
|
|
110
|
-
`);
|
|
111
|
-
if (addedRuntimeStatusUpdatedAt) {
|
|
112
|
-
db.exec(`
|
|
113
|
-
UPDATE sessions
|
|
114
|
-
SET runtime_status_updated_at = updated_at
|
|
115
|
-
WHERE runtime_status_updated_at IS NULL
|
|
116
|
-
`);
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
version: 6,
|
|
122
|
-
apply(db) {
|
|
123
|
-
db.exec(`
|
|
124
|
-
CREATE TABLE IF NOT EXISTS queued_inputs (
|
|
125
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
126
|
-
session_key TEXT NOT NULL,
|
|
127
|
-
text TEXT NOT NULL,
|
|
128
|
-
created_at TEXT NOT NULL,
|
|
129
|
-
updated_at TEXT NOT NULL
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
CREATE INDEX IF NOT EXISTS queued_inputs_session_key_idx
|
|
133
|
-
ON queued_inputs (session_key, id)
|
|
134
|
-
`);
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
version: 10,
|
|
139
|
-
apply(db) {
|
|
140
|
-
db.exec(`
|
|
141
|
-
DROP INDEX IF EXISTS turn_deliveries_thread_id_idx;
|
|
142
|
-
DROP INDEX IF EXISTS turn_deliveries_session_key_idx;
|
|
143
|
-
DROP INDEX IF EXISTS turn_deliveries_status_idx;
|
|
144
|
-
DROP INDEX IF EXISTS pending_interactions_session_key_idx;
|
|
145
|
-
DROP TABLE IF EXISTS turn_deliveries;
|
|
146
|
-
DROP TABLE IF EXISTS pending_interactions;
|
|
147
|
-
`);
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
version: 11,
|
|
152
|
-
apply(db) {
|
|
153
|
-
db.exec(`
|
|
154
|
-
CREATE TABLE sessions_v11 (
|
|
155
|
-
session_key TEXT PRIMARY KEY,
|
|
156
|
-
chat_id TEXT NOT NULL,
|
|
157
|
-
message_thread_id TEXT,
|
|
158
|
-
codex_thread_id TEXT,
|
|
159
|
-
cwd TEXT NOT NULL,
|
|
160
|
-
model TEXT NOT NULL,
|
|
161
|
-
active_turn_id TEXT,
|
|
162
|
-
output_message_id INTEGER,
|
|
163
|
-
sandbox_mode TEXT NOT NULL DEFAULT 'read-only',
|
|
164
|
-
approval_policy TEXT NOT NULL DEFAULT 'on-request',
|
|
165
|
-
telegram_topic_name TEXT,
|
|
166
|
-
reasoning_effort TEXT,
|
|
167
|
-
runtime_status TEXT NOT NULL DEFAULT 'idle',
|
|
168
|
-
runtime_status_detail TEXT,
|
|
169
|
-
runtime_status_updated_at TEXT,
|
|
170
|
-
created_at TEXT NOT NULL,
|
|
171
|
-
updated_at TEXT NOT NULL
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
INSERT INTO sessions_v11 (
|
|
175
|
-
session_key,
|
|
176
|
-
chat_id,
|
|
177
|
-
message_thread_id,
|
|
178
|
-
codex_thread_id,
|
|
179
|
-
cwd,
|
|
180
|
-
model,
|
|
181
|
-
active_turn_id,
|
|
182
|
-
output_message_id,
|
|
183
|
-
sandbox_mode,
|
|
184
|
-
approval_policy,
|
|
185
|
-
telegram_topic_name,
|
|
186
|
-
reasoning_effort,
|
|
187
|
-
runtime_status,
|
|
188
|
-
runtime_status_detail,
|
|
189
|
-
runtime_status_updated_at,
|
|
190
|
-
created_at,
|
|
191
|
-
updated_at
|
|
192
|
-
)
|
|
193
|
-
SELECT
|
|
194
|
-
session_key,
|
|
195
|
-
chat_id,
|
|
196
|
-
message_thread_id,
|
|
197
|
-
codex_thread_id,
|
|
198
|
-
cwd,
|
|
199
|
-
model,
|
|
200
|
-
active_turn_id,
|
|
201
|
-
output_message_id,
|
|
202
|
-
sandbox_mode,
|
|
203
|
-
approval_policy,
|
|
204
|
-
telegram_topic_name,
|
|
205
|
-
reasoning_effort,
|
|
206
|
-
runtime_status,
|
|
207
|
-
runtime_status_detail,
|
|
208
|
-
runtime_status_updated_at,
|
|
209
|
-
created_at,
|
|
210
|
-
updated_at
|
|
211
|
-
FROM sessions;
|
|
212
|
-
|
|
213
|
-
DROP TABLE sessions;
|
|
214
|
-
ALTER TABLE sessions_v11 RENAME TO sessions;
|
|
215
|
-
|
|
216
|
-
CREATE INDEX IF NOT EXISTS sessions_codex_thread_id_idx
|
|
217
|
-
ON sessions (codex_thread_id);
|
|
218
|
-
`);
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
version: 12,
|
|
223
|
-
apply(db) {
|
|
224
|
-
ensureTableColumn(db, "sessions", "web_search_mode", "ALTER TABLE sessions ADD COLUMN web_search_mode TEXT");
|
|
225
|
-
ensureTableColumn(db, "sessions", "network_access_enabled", "ALTER TABLE sessions ADD COLUMN network_access_enabled INTEGER NOT NULL DEFAULT 1");
|
|
226
|
-
ensureTableColumn(db, "sessions", "skip_git_repo_check", "ALTER TABLE sessions ADD COLUMN skip_git_repo_check INTEGER NOT NULL DEFAULT 1");
|
|
227
|
-
ensureTableColumn(db, "sessions", "additional_directories", "ALTER TABLE sessions ADD COLUMN additional_directories TEXT");
|
|
228
|
-
ensureTableColumn(db, "sessions", "output_schema", "ALTER TABLE sessions ADD COLUMN output_schema TEXT");
|
|
229
|
-
ensureTableColumn(db, "queued_inputs", "input_json", "ALTER TABLE queued_inputs ADD COLUMN input_json TEXT");
|
|
230
|
-
},
|
|
231
|
-
},
|
|
232
|
-
];
|
|
233
|
-
function runMigrations(db) {
|
|
234
|
-
const currentVersion = getSchemaVersion(db);
|
|
235
|
-
if (currentVersion >= LATEST_DB_SCHEMA_VERSION) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
for (const migration of MIGRATIONS) {
|
|
239
|
-
if (migration.version <= currentVersion)
|
|
240
|
-
continue;
|
|
241
|
-
db.exec("BEGIN");
|
|
242
|
-
try {
|
|
243
|
-
migration.apply(db);
|
|
244
|
-
setSchemaVersion(db, migration.version);
|
|
245
|
-
db.exec("COMMIT");
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
db.exec("ROLLBACK");
|
|
249
|
-
throw error;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
function ensureTableColumn(db, tableName, columnName, sql) {
|
|
254
|
-
const columns = db.prepare(`PRAGMA table_info(${tableName})`).all();
|
|
255
|
-
if (columns.some((column) => column.name === columnName)) {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
db.exec(sql);
|
|
259
|
-
return true;
|
|
260
|
-
}
|
|
261
|
-
function getSchemaVersion(db) {
|
|
262
|
-
const row = db.prepare("PRAGMA user_version").get();
|
|
263
|
-
return row?.user_version ?? 0;
|
|
264
|
-
}
|
|
265
|
-
function setSchemaVersion(db, version) {
|
|
266
|
-
db.exec(`PRAGMA user_version = ${version}`);
|
|
267
|
-
}
|