@vibecompany/247-cli 0.1.0 → 0.2.3
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/agent/dist/config.d.ts +29 -0
- package/agent/dist/config.d.ts.map +1 -0
- package/agent/dist/config.js +56 -0
- package/agent/dist/config.js.map +1 -0
- package/agent/dist/db/environments.d.ts +65 -0
- package/agent/dist/db/environments.d.ts.map +1 -0
- package/agent/dist/db/environments.js +243 -0
- package/agent/dist/db/environments.js.map +1 -0
- package/agent/dist/db/history.d.ts +37 -0
- package/agent/dist/db/history.d.ts.map +1 -0
- package/agent/dist/db/history.js +98 -0
- package/agent/dist/db/history.js.map +1 -0
- package/agent/dist/db/index.d.ts +37 -0
- package/agent/dist/db/index.d.ts.map +1 -0
- package/agent/dist/db/index.js +225 -0
- package/agent/dist/db/index.js.map +1 -0
- package/agent/dist/db/schema.d.ts +70 -0
- package/agent/dist/db/schema.d.ts.map +1 -0
- package/agent/dist/db/schema.js +79 -0
- package/agent/dist/db/schema.js.map +1 -0
- package/agent/dist/db/sessions.d.ts +75 -0
- package/agent/dist/db/sessions.d.ts.map +1 -0
- package/agent/dist/db/sessions.js +244 -0
- package/agent/dist/db/sessions.js.map +1 -0
- package/agent/dist/editor.d.ts +18 -0
- package/agent/dist/editor.d.ts.map +1 -0
- package/agent/dist/editor.js +220 -0
- package/agent/dist/editor.js.map +1 -0
- package/agent/dist/environments.d.ts +59 -0
- package/agent/dist/environments.d.ts.map +1 -0
- package/agent/dist/environments.js +229 -0
- package/agent/dist/environments.js.map +1 -0
- package/agent/dist/git.d.ts +39 -0
- package/agent/dist/git.d.ts.map +1 -0
- package/agent/dist/git.js +436 -0
- package/agent/dist/git.js.map +1 -0
- package/agent/dist/index.d.ts +2 -0
- package/agent/dist/index.d.ts.map +1 -0
- package/agent/dist/index.js +17 -0
- package/agent/dist/index.js.map +1 -0
- package/agent/dist/server.d.ts +2 -0
- package/agent/dist/server.d.ts.map +1 -0
- package/agent/dist/server.js +1062 -0
- package/agent/dist/server.js.map +1 -0
- package/agent/dist/terminal.d.ts +14 -0
- package/agent/dist/terminal.d.ts.map +1 -0
- package/agent/dist/terminal.js +115 -0
- package/agent/dist/terminal.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +25 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/profile.d.ts +3 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +156 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -10
- package/dist/commands/start.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +30 -5
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +85 -12
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/process.d.ts +2 -1
- package/dist/lib/process.d.ts.map +1 -1
- package/dist/lib/process.js +7 -3
- package/dist/lib/process.js.map +1 -1
- package/hooks/.claude-plugin/plugin.json +5 -0
- package/hooks/hooks/hooks.json +61 -0
- package/hooks/scripts/notify-status.sh +89 -0
- package/package.json +22 -5
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync } from 'fs';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { CREATE_TABLES_SQL, SCHEMA_VERSION, RETENTION_CONFIG } from './schema.js';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
// Database file location: apps/agent/data/agent.db
|
|
9
|
+
const DATA_DIR = join(__dirname, '..', '..', 'data');
|
|
10
|
+
const DB_PATH = join(DATA_DIR, 'agent.db');
|
|
11
|
+
// Singleton database instance
|
|
12
|
+
let db = null;
|
|
13
|
+
/**
|
|
14
|
+
* Get or create the database instance
|
|
15
|
+
*/
|
|
16
|
+
export function getDatabase() {
|
|
17
|
+
if (!db) {
|
|
18
|
+
throw new Error('Database not initialized. Call initDatabase() first.');
|
|
19
|
+
}
|
|
20
|
+
return db;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Initialize the database
|
|
24
|
+
* - Creates data directory if missing
|
|
25
|
+
* - Opens/creates database file
|
|
26
|
+
* - Runs migrations
|
|
27
|
+
* - Sets WAL mode for better performance
|
|
28
|
+
*/
|
|
29
|
+
export function initDatabase(dbPath) {
|
|
30
|
+
const path = dbPath ?? DB_PATH;
|
|
31
|
+
// Create data directory if it doesn't exist
|
|
32
|
+
const dataDir = dirname(path);
|
|
33
|
+
if (!existsSync(dataDir)) {
|
|
34
|
+
console.log(`[DB] Creating data directory: ${dataDir}`);
|
|
35
|
+
mkdirSync(dataDir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
// Open database (creates if doesn't exist)
|
|
38
|
+
console.log(`[DB] Opening database: ${path}`);
|
|
39
|
+
db = new Database(path);
|
|
40
|
+
// Enable WAL mode for better concurrent performance
|
|
41
|
+
db.pragma('journal_mode = WAL');
|
|
42
|
+
// Run migrations
|
|
43
|
+
runMigrations(db);
|
|
44
|
+
return db;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create an in-memory database for testing
|
|
48
|
+
*/
|
|
49
|
+
export function initTestDatabase() {
|
|
50
|
+
db = new Database(':memory:');
|
|
51
|
+
runMigrations(db);
|
|
52
|
+
return db;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Close the database connection
|
|
56
|
+
*/
|
|
57
|
+
export function closeDatabase() {
|
|
58
|
+
if (db) {
|
|
59
|
+
console.log('[DB] Closing database connection');
|
|
60
|
+
db.close();
|
|
61
|
+
db = null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Run database migrations
|
|
66
|
+
*/
|
|
67
|
+
function runMigrations(database) {
|
|
68
|
+
const currentVersion = getCurrentSchemaVersion(database);
|
|
69
|
+
if (currentVersion < SCHEMA_VERSION) {
|
|
70
|
+
console.log(`[DB] Running migrations from v${currentVersion} to v${SCHEMA_VERSION}`);
|
|
71
|
+
// Run all schema creation (idempotent with IF NOT EXISTS)
|
|
72
|
+
database.exec(CREATE_TABLES_SQL);
|
|
73
|
+
// Run incremental migrations for existing tables
|
|
74
|
+
if (currentVersion < 2) {
|
|
75
|
+
migrateToV2(database);
|
|
76
|
+
}
|
|
77
|
+
if (currentVersion < 3) {
|
|
78
|
+
migrateToV3(database);
|
|
79
|
+
}
|
|
80
|
+
// Record the new version
|
|
81
|
+
database
|
|
82
|
+
.prepare(`
|
|
83
|
+
INSERT OR REPLACE INTO schema_version (version, applied_at)
|
|
84
|
+
VALUES (?, ?)
|
|
85
|
+
`)
|
|
86
|
+
.run(SCHEMA_VERSION, Date.now());
|
|
87
|
+
console.log(`[DB] Migrations complete. Now at v${SCHEMA_VERSION}`);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log(`[DB] Database schema is up to date (v${currentVersion})`);
|
|
91
|
+
}
|
|
92
|
+
// Always ensure required columns exist (handles incomplete migrations)
|
|
93
|
+
ensureRequiredColumns(database);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Ensure all required columns exist (handles incomplete migrations)
|
|
97
|
+
*/
|
|
98
|
+
function ensureRequiredColumns(database) {
|
|
99
|
+
// Check environments.icon column
|
|
100
|
+
const envColumns = database.pragma('table_info(environments)');
|
|
101
|
+
if (!envColumns.some((c) => c.name === 'icon')) {
|
|
102
|
+
console.log('[DB] Adding missing icon column to environments');
|
|
103
|
+
database.exec('ALTER TABLE environments ADD COLUMN icon TEXT');
|
|
104
|
+
}
|
|
105
|
+
// Check sessions.archived_at column
|
|
106
|
+
const sessionColumns = database.pragma('table_info(sessions)');
|
|
107
|
+
if (!sessionColumns.some((c) => c.name === 'archived_at')) {
|
|
108
|
+
console.log('[DB] Adding missing archived_at column to sessions');
|
|
109
|
+
database.exec('ALTER TABLE sessions ADD COLUMN archived_at INTEGER');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Migration to v2: Add icon column to environments table
|
|
114
|
+
*/
|
|
115
|
+
function migrateToV2(database) {
|
|
116
|
+
// Check if icon column already exists
|
|
117
|
+
const columns = database.pragma('table_info(environments)');
|
|
118
|
+
const hasIcon = columns.some((c) => c.name === 'icon');
|
|
119
|
+
if (!hasIcon) {
|
|
120
|
+
console.log('[DB] v2 migration: Adding icon column to environments');
|
|
121
|
+
database.exec('ALTER TABLE environments ADD COLUMN icon TEXT');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Migration to v3: Add archived_at column to sessions table
|
|
126
|
+
*/
|
|
127
|
+
function migrateToV3(database) {
|
|
128
|
+
// Check if archived_at column already exists
|
|
129
|
+
const columns = database.pragma('table_info(sessions)');
|
|
130
|
+
const hasArchivedAt = columns.some((c) => c.name === 'archived_at');
|
|
131
|
+
if (!hasArchivedAt) {
|
|
132
|
+
console.log('[DB] v3 migration: Adding archived_at column to sessions');
|
|
133
|
+
database.exec('ALTER TABLE sessions ADD COLUMN archived_at INTEGER');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get current schema version
|
|
138
|
+
*/
|
|
139
|
+
function getCurrentSchemaVersion(database) {
|
|
140
|
+
try {
|
|
141
|
+
// Check if schema_version table exists
|
|
142
|
+
const tableExists = database
|
|
143
|
+
.prepare(`
|
|
144
|
+
SELECT name FROM sqlite_master
|
|
145
|
+
WHERE type='table' AND name='schema_version'
|
|
146
|
+
`)
|
|
147
|
+
.get();
|
|
148
|
+
if (!tableExists) {
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
const row = database
|
|
152
|
+
.prepare(`
|
|
153
|
+
SELECT version FROM schema_version ORDER BY version DESC LIMIT 1
|
|
154
|
+
`)
|
|
155
|
+
.get();
|
|
156
|
+
return row?.version ?? 0;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Migrate environments from JSON file to database
|
|
164
|
+
* Only runs if environments.json exists and environments table is empty
|
|
165
|
+
*/
|
|
166
|
+
export function migrateEnvironmentsFromJson(database) {
|
|
167
|
+
const ENVIRONMENTS_FILE = join(__dirname, '..', '..', 'environments.json');
|
|
168
|
+
// Check if JSON file exists
|
|
169
|
+
if (!existsSync(ENVIRONMENTS_FILE)) {
|
|
170
|
+
console.log('[DB] No environments.json found, skipping migration');
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
// Check if environments table is empty
|
|
174
|
+
const count = database.prepare('SELECT COUNT(*) as count FROM environments').get();
|
|
175
|
+
if (count.count > 0) {
|
|
176
|
+
console.log('[DB] Environments table already has data, skipping migration');
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
console.log('[DB] Migrating environments from JSON...');
|
|
181
|
+
const data = readFileSync(ENVIRONMENTS_FILE, 'utf-8');
|
|
182
|
+
const environments = JSON.parse(data);
|
|
183
|
+
const insert = database.prepare(`
|
|
184
|
+
INSERT INTO environments (id, name, provider, is_default, variables, created_at, updated_at)
|
|
185
|
+
VALUES (@id, @name, @provider, @isDefault, @variables, @createdAt, @updatedAt)
|
|
186
|
+
`);
|
|
187
|
+
const insertMany = database.transaction((envs) => {
|
|
188
|
+
for (const env of envs) {
|
|
189
|
+
insert.run({
|
|
190
|
+
id: env.id,
|
|
191
|
+
name: env.name,
|
|
192
|
+
provider: env.provider,
|
|
193
|
+
isDefault: env.isDefault ? 1 : 0,
|
|
194
|
+
variables: JSON.stringify(env.variables),
|
|
195
|
+
createdAt: env.createdAt,
|
|
196
|
+
updatedAt: env.updatedAt,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
insertMany(environments);
|
|
201
|
+
console.log(`[DB] Migrated ${environments.length} environments from JSON`);
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
console.error('[DB] Failed to migrate environments from JSON:', err);
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get database statistics for debugging
|
|
211
|
+
*/
|
|
212
|
+
export function getDatabaseStats() {
|
|
213
|
+
const database = getDatabase();
|
|
214
|
+
const sessions = database.prepare('SELECT COUNT(*) as count FROM sessions').get();
|
|
215
|
+
const history = database.prepare('SELECT COUNT(*) as count FROM status_history').get();
|
|
216
|
+
const environments = database.prepare('SELECT COUNT(*) as count FROM environments').get();
|
|
217
|
+
return {
|
|
218
|
+
sessions: sessions.count,
|
|
219
|
+
history: history.count,
|
|
220
|
+
environments: environments.count,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
// Export retention config for use in cleanup
|
|
224
|
+
export { RETENTION_CONFIG };
|
|
225
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { SessionStatus, AttentionReason, EnvironmentProvider } from '@vibecompany/247-shared';
|
|
2
|
+
export interface DbSession {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
project: string;
|
|
6
|
+
status: SessionStatus;
|
|
7
|
+
attention_reason: AttentionReason | null;
|
|
8
|
+
last_event: string | null;
|
|
9
|
+
last_activity: number;
|
|
10
|
+
last_status_change: number;
|
|
11
|
+
environment_id: string | null;
|
|
12
|
+
archived_at: number | null;
|
|
13
|
+
created_at: number;
|
|
14
|
+
updated_at: number;
|
|
15
|
+
}
|
|
16
|
+
export interface DbStatusHistory {
|
|
17
|
+
id: number;
|
|
18
|
+
session_name: string;
|
|
19
|
+
status: SessionStatus;
|
|
20
|
+
attention_reason: AttentionReason | null;
|
|
21
|
+
event: string | null;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
}
|
|
24
|
+
export interface DbEnvironment {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
provider: EnvironmentProvider;
|
|
28
|
+
icon: string | null;
|
|
29
|
+
is_default: number;
|
|
30
|
+
variables: string;
|
|
31
|
+
created_at: number;
|
|
32
|
+
updated_at: number;
|
|
33
|
+
}
|
|
34
|
+
export interface DbSessionEnvironment {
|
|
35
|
+
session_name: string;
|
|
36
|
+
environment_id: string;
|
|
37
|
+
}
|
|
38
|
+
export interface DbSchemaVersion {
|
|
39
|
+
version: number;
|
|
40
|
+
applied_at: number;
|
|
41
|
+
}
|
|
42
|
+
export interface UpsertSessionInput {
|
|
43
|
+
project: string;
|
|
44
|
+
status: SessionStatus;
|
|
45
|
+
attentionReason?: AttentionReason | null;
|
|
46
|
+
lastEvent?: string | null;
|
|
47
|
+
lastActivity: number;
|
|
48
|
+
lastStatusChange: number;
|
|
49
|
+
environmentId?: string | null;
|
|
50
|
+
}
|
|
51
|
+
export interface UpsertEnvironmentInput {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
provider: EnvironmentProvider;
|
|
55
|
+
isDefault: boolean;
|
|
56
|
+
variables: Record<string, string>;
|
|
57
|
+
}
|
|
58
|
+
export declare const SCHEMA_VERSION = 3;
|
|
59
|
+
export declare const CREATE_TABLES_SQL = "\n-- Sessions: current state of terminal sessions\nCREATE TABLE IF NOT EXISTS sessions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n project TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'init',\n attention_reason TEXT,\n last_event TEXT,\n last_activity INTEGER NOT NULL,\n last_status_change INTEGER NOT NULL,\n environment_id TEXT,\n archived_at INTEGER,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_sessions_name ON sessions(name);\nCREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project);\nCREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);\nCREATE INDEX IF NOT EXISTS idx_sessions_last_activity ON sessions(last_activity);\n\n-- Status history: audit trail of status changes\nCREATE TABLE IF NOT EXISTS status_history (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n session_name TEXT NOT NULL,\n status TEXT NOT NULL,\n attention_reason TEXT,\n event TEXT,\n timestamp INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_history_session ON status_history(session_name);\nCREATE INDEX IF NOT EXISTS idx_history_timestamp ON status_history(timestamp);\n\n-- Environments: API provider configurations\nCREATE TABLE IF NOT EXISTS environments (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n provider TEXT NOT NULL,\n icon TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n variables TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_environments_default ON environments(is_default);\n\n-- Session-environment mapping\nCREATE TABLE IF NOT EXISTS session_environments (\n session_name TEXT PRIMARY KEY,\n environment_id TEXT NOT NULL\n);\n\n-- Schema version tracking\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY,\n applied_at INTEGER NOT NULL\n);\n";
|
|
60
|
+
export declare const RETENTION_CONFIG: {
|
|
61
|
+
/** Max age for sessions before cleanup (24 hours) */
|
|
62
|
+
sessionMaxAge: number;
|
|
63
|
+
/** Max age for archived sessions before cleanup (30 days) */
|
|
64
|
+
archivedMaxAge: number;
|
|
65
|
+
/** Max age for status history (7 days) */
|
|
66
|
+
historyMaxAge: number;
|
|
67
|
+
/** Cleanup interval (1 hour) */
|
|
68
|
+
cleanupInterval: number;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAMnG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAMD,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,eAAO,MAAM,iBAAiB,+1DA4D7B,CAAC;AAMF,eAAO,MAAM,gBAAgB;IAC3B,qDAAqD;;IAErD,6DAA6D;;IAE7D,0CAA0C;;IAE1C,gCAAgC;;CAEjC,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// SQL Schema Definitions
|
|
3
|
+
// ============================================================================
|
|
4
|
+
export const SCHEMA_VERSION = 3;
|
|
5
|
+
export const CREATE_TABLES_SQL = `
|
|
6
|
+
-- Sessions: current state of terminal sessions
|
|
7
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
8
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
name TEXT NOT NULL UNIQUE,
|
|
10
|
+
project TEXT NOT NULL,
|
|
11
|
+
status TEXT NOT NULL DEFAULT 'init',
|
|
12
|
+
attention_reason TEXT,
|
|
13
|
+
last_event TEXT,
|
|
14
|
+
last_activity INTEGER NOT NULL,
|
|
15
|
+
last_status_change INTEGER NOT NULL,
|
|
16
|
+
environment_id TEXT,
|
|
17
|
+
archived_at INTEGER,
|
|
18
|
+
created_at INTEGER NOT NULL,
|
|
19
|
+
updated_at INTEGER NOT NULL
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_name ON sessions(name);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project);
|
|
24
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_last_activity ON sessions(last_activity);
|
|
26
|
+
|
|
27
|
+
-- Status history: audit trail of status changes
|
|
28
|
+
CREATE TABLE IF NOT EXISTS status_history (
|
|
29
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
30
|
+
session_name TEXT NOT NULL,
|
|
31
|
+
status TEXT NOT NULL,
|
|
32
|
+
attention_reason TEXT,
|
|
33
|
+
event TEXT,
|
|
34
|
+
timestamp INTEGER NOT NULL
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_history_session ON status_history(session_name);
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_history_timestamp ON status_history(timestamp);
|
|
39
|
+
|
|
40
|
+
-- Environments: API provider configurations
|
|
41
|
+
CREATE TABLE IF NOT EXISTS environments (
|
|
42
|
+
id TEXT PRIMARY KEY,
|
|
43
|
+
name TEXT NOT NULL,
|
|
44
|
+
provider TEXT NOT NULL,
|
|
45
|
+
icon TEXT,
|
|
46
|
+
is_default INTEGER NOT NULL DEFAULT 0,
|
|
47
|
+
variables TEXT NOT NULL,
|
|
48
|
+
created_at INTEGER NOT NULL,
|
|
49
|
+
updated_at INTEGER NOT NULL
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_environments_default ON environments(is_default);
|
|
53
|
+
|
|
54
|
+
-- Session-environment mapping
|
|
55
|
+
CREATE TABLE IF NOT EXISTS session_environments (
|
|
56
|
+
session_name TEXT PRIMARY KEY,
|
|
57
|
+
environment_id TEXT NOT NULL
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
-- Schema version tracking
|
|
61
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
62
|
+
version INTEGER PRIMARY KEY,
|
|
63
|
+
applied_at INTEGER NOT NULL
|
|
64
|
+
);
|
|
65
|
+
`;
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// Retention Configuration
|
|
68
|
+
// ============================================================================
|
|
69
|
+
export const RETENTION_CONFIG = {
|
|
70
|
+
/** Max age for sessions before cleanup (24 hours) */
|
|
71
|
+
sessionMaxAge: 24 * 60 * 60 * 1000,
|
|
72
|
+
/** Max age for archived sessions before cleanup (30 days) */
|
|
73
|
+
archivedMaxAge: 30 * 24 * 60 * 60 * 1000,
|
|
74
|
+
/** Max age for status history (7 days) */
|
|
75
|
+
historyMaxAge: 7 * 24 * 60 * 60 * 1000,
|
|
76
|
+
/** Cleanup interval (1 hour) */
|
|
77
|
+
cleanupInterval: 60 * 60 * 1000,
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAyEA,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DhC,CAAC;AAEF,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,qDAAqD;IACrD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAClC,6DAA6D;IAC7D,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACxC,0CAA0C;IAC1C,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACtC,gCAAgC;IAChC,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;CAChC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { DbSession, UpsertSessionInput } from './schema.js';
|
|
2
|
+
import type { SessionStatus, AttentionReason } from '@vibecompany/247-shared';
|
|
3
|
+
/**
|
|
4
|
+
* Get a session by name
|
|
5
|
+
*/
|
|
6
|
+
export declare function getSession(name: string): DbSession | null;
|
|
7
|
+
/**
|
|
8
|
+
* Get all active (non-archived) sessions
|
|
9
|
+
*/
|
|
10
|
+
export declare function getAllSessions(): DbSession[];
|
|
11
|
+
/**
|
|
12
|
+
* Get all archived sessions
|
|
13
|
+
*/
|
|
14
|
+
export declare function getArchivedSessions(): DbSession[];
|
|
15
|
+
/**
|
|
16
|
+
* Get sessions by project
|
|
17
|
+
*/
|
|
18
|
+
export declare function getSessionsByProject(project: string): DbSession[];
|
|
19
|
+
/**
|
|
20
|
+
* Upsert a session (insert or update)
|
|
21
|
+
* Records status history if status changed
|
|
22
|
+
*/
|
|
23
|
+
export declare function upsertSession(name: string, input: UpsertSessionInput): DbSession;
|
|
24
|
+
/**
|
|
25
|
+
* Update session status only
|
|
26
|
+
*/
|
|
27
|
+
export declare function updateSessionStatus(name: string, status: SessionStatus, attentionReason?: AttentionReason | null, lastEvent?: string | null): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Delete a session
|
|
30
|
+
*/
|
|
31
|
+
export declare function deleteSession(name: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Archive a session (mark as done and keep in history)
|
|
34
|
+
* Returns the archived session or null if not found
|
|
35
|
+
*/
|
|
36
|
+
export declare function archiveSession(name: string): DbSession | null;
|
|
37
|
+
/**
|
|
38
|
+
* Cleanup stale sessions (older than maxAge)
|
|
39
|
+
* - Non-archived sessions: delete if last_activity older than maxAge
|
|
40
|
+
* - Archived sessions: delete if archived_at older than archivedMaxAge
|
|
41
|
+
* Returns number of deleted sessions
|
|
42
|
+
*/
|
|
43
|
+
export declare function cleanupStaleSessions(maxAge: number, archivedMaxAge?: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Reconcile sessions with active tmux sessions
|
|
46
|
+
* - Sessions in DB but not in tmux: mark as idle or delete if old
|
|
47
|
+
* - Sessions in tmux but not in DB: create with idle status
|
|
48
|
+
* - Archived sessions are skipped (they don't have tmux sessions)
|
|
49
|
+
*/
|
|
50
|
+
export declare function reconcileWithTmux(activeTmuxSessions: Set<string>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Get session environment mapping
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSessionEnvironmentId(sessionName: string): string | null;
|
|
55
|
+
/**
|
|
56
|
+
* Set session environment mapping
|
|
57
|
+
*/
|
|
58
|
+
export declare function setSessionEnvironmentId(sessionName: string, environmentId: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Clear session environment mapping
|
|
61
|
+
*/
|
|
62
|
+
export declare function clearSessionEnvironmentId(sessionName: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Convert DbSession to HookStatus format (for compatibility with existing code)
|
|
65
|
+
*/
|
|
66
|
+
export declare function toHookStatus(session: DbSession): {
|
|
67
|
+
status: SessionStatus;
|
|
68
|
+
attentionReason?: AttentionReason;
|
|
69
|
+
lastEvent: string;
|
|
70
|
+
lastActivity: number;
|
|
71
|
+
lastStatusChange: number;
|
|
72
|
+
project?: string;
|
|
73
|
+
archivedAt?: number;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/db/sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE9E;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIzD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAK5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,EAAE,CAKjD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAKjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,SAAS,CA8ChF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,EACxC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAsCT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAyB7D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CA4BpF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CA6BvE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAQxF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG;IAChD,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAUA"}
|