@vibecompany/247-cli 0.1.0 → 0.2.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/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 +10 -4
- 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,65 @@
|
|
|
1
|
+
import type { Environment, EnvironmentMetadata, EnvironmentProvider, CreateEnvironmentRequest, UpdateEnvironmentRequest } from '@vibecompany/247-shared';
|
|
2
|
+
/**
|
|
3
|
+
* Get all environments (full data, agent-side only)
|
|
4
|
+
*/
|
|
5
|
+
export declare function getAllEnvironments(): Environment[];
|
|
6
|
+
/**
|
|
7
|
+
* Get all environments as safe metadata (for dashboard)
|
|
8
|
+
*/
|
|
9
|
+
export declare function getEnvironmentsMetadata(): EnvironmentMetadata[];
|
|
10
|
+
/**
|
|
11
|
+
* Get single environment by ID (full data)
|
|
12
|
+
*/
|
|
13
|
+
export declare function getEnvironment(id: string): Environment | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Get single environment metadata
|
|
16
|
+
*/
|
|
17
|
+
export declare function getEnvironmentMetadata(id: string): EnvironmentMetadata | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Get default environment
|
|
20
|
+
*/
|
|
21
|
+
export declare function getDefaultEnvironment(): Environment | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Create new environment
|
|
24
|
+
*/
|
|
25
|
+
export declare function createEnvironment(req: CreateEnvironmentRequest): Environment;
|
|
26
|
+
/**
|
|
27
|
+
* Update environment
|
|
28
|
+
*/
|
|
29
|
+
export declare function updateEnvironment(id: string, req: UpdateEnvironmentRequest): Environment | null;
|
|
30
|
+
/**
|
|
31
|
+
* Delete environment
|
|
32
|
+
*/
|
|
33
|
+
export declare function deleteEnvironment(id: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get environment variables for terminal injection
|
|
36
|
+
* Returns the variables for the specified environment, or default if not found
|
|
37
|
+
*/
|
|
38
|
+
export declare function getEnvironmentVariables(environmentId?: string): Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Track which environment a session uses
|
|
41
|
+
*/
|
|
42
|
+
export declare function setSessionEnvironment(sessionName: string, environmentId: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get the environment ID for a session
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSessionEnvironment(sessionName: string): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Clear session environment tracking (when session is killed)
|
|
49
|
+
*/
|
|
50
|
+
export declare function clearSessionEnvironment(sessionName: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Create environment from preset
|
|
53
|
+
*/
|
|
54
|
+
export declare function createEnvironmentFromPreset(provider: EnvironmentProvider, name: string, customVariables?: Record<string, string>): Environment;
|
|
55
|
+
/**
|
|
56
|
+
* Initialize environments with default if table is empty
|
|
57
|
+
* Called during database initialization
|
|
58
|
+
*/
|
|
59
|
+
export declare function ensureDefaultEnvironment(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Deprecated: No longer needed since we use SQLite
|
|
62
|
+
* Kept for API compatibility during migration
|
|
63
|
+
*/
|
|
64
|
+
export declare function loadEnvironments(): void;
|
|
65
|
+
//# sourceMappingURL=environments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../../src/db/environments.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EAEnB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AA2CjC;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAIlD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,mBAAmB,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAMlE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAIlF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,SAAS,CAM/D;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,wBAAwB,GAAG,WAAW,CAgC5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,GAAG,WAAW,GAAG,IAAI,CAwC/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAsBrD;AAMD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAatF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAQtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM7E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGjE;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,MAAM,EACZ,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,WAAW,CAUb;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAe/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { getDatabase } from './index.js';
|
|
3
|
+
import { ENVIRONMENT_PRESETS } from '@vibecompany/247-shared';
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Conversion Functions
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Convert database row to Environment
|
|
9
|
+
*/
|
|
10
|
+
function toEnvironment(row) {
|
|
11
|
+
return {
|
|
12
|
+
id: row.id,
|
|
13
|
+
name: row.name,
|
|
14
|
+
provider: row.provider,
|
|
15
|
+
icon: row.icon,
|
|
16
|
+
isDefault: row.is_default === 1,
|
|
17
|
+
variables: JSON.parse(row.variables),
|
|
18
|
+
createdAt: row.created_at,
|
|
19
|
+
updatedAt: row.updated_at,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Convert Environment to safe EnvironmentMetadata (no secret values)
|
|
24
|
+
*/
|
|
25
|
+
function toMetadata(env) {
|
|
26
|
+
return {
|
|
27
|
+
id: env.id,
|
|
28
|
+
name: env.name,
|
|
29
|
+
provider: env.provider,
|
|
30
|
+
icon: env.icon,
|
|
31
|
+
isDefault: env.isDefault,
|
|
32
|
+
variableKeys: Object.keys(env.variables),
|
|
33
|
+
createdAt: env.createdAt,
|
|
34
|
+
updatedAt: env.updatedAt,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Read Operations
|
|
39
|
+
// ============================================================================
|
|
40
|
+
/**
|
|
41
|
+
* Get all environments (full data, agent-side only)
|
|
42
|
+
*/
|
|
43
|
+
export function getAllEnvironments() {
|
|
44
|
+
const db = getDatabase();
|
|
45
|
+
const rows = db.prepare('SELECT * FROM environments ORDER BY name').all();
|
|
46
|
+
return rows.map(toEnvironment);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get all environments as safe metadata (for dashboard)
|
|
50
|
+
*/
|
|
51
|
+
export function getEnvironmentsMetadata() {
|
|
52
|
+
return getAllEnvironments().map(toMetadata);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get single environment by ID (full data)
|
|
56
|
+
*/
|
|
57
|
+
export function getEnvironment(id) {
|
|
58
|
+
const db = getDatabase();
|
|
59
|
+
const row = db.prepare('SELECT * FROM environments WHERE id = ?').get(id);
|
|
60
|
+
return row ? toEnvironment(row) : undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get single environment metadata
|
|
64
|
+
*/
|
|
65
|
+
export function getEnvironmentMetadata(id) {
|
|
66
|
+
const env = getEnvironment(id);
|
|
67
|
+
if (!env)
|
|
68
|
+
return undefined;
|
|
69
|
+
return toMetadata(env);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get default environment
|
|
73
|
+
*/
|
|
74
|
+
export function getDefaultEnvironment() {
|
|
75
|
+
const db = getDatabase();
|
|
76
|
+
const row = db.prepare('SELECT * FROM environments WHERE is_default = 1').get();
|
|
77
|
+
return row ? toEnvironment(row) : undefined;
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Write Operations
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Create new environment
|
|
84
|
+
*/
|
|
85
|
+
export function createEnvironment(req) {
|
|
86
|
+
const db = getDatabase();
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
const id = randomUUID();
|
|
89
|
+
// If setting as default, unset other defaults
|
|
90
|
+
if (req.isDefault) {
|
|
91
|
+
db.prepare('UPDATE environments SET is_default = 0').run();
|
|
92
|
+
}
|
|
93
|
+
// If this is the first environment, make it default
|
|
94
|
+
const count = db.prepare('SELECT COUNT(*) as count FROM environments').get();
|
|
95
|
+
const isFirstEnv = count.count === 0;
|
|
96
|
+
db.prepare(`
|
|
97
|
+
INSERT INTO environments (id, name, provider, icon, is_default, variables, created_at, updated_at)
|
|
98
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
99
|
+
`).run(id, req.name, req.provider, req.icon ?? null, req.isDefault || isFirstEnv ? 1 : 0, JSON.stringify(req.variables), now, now);
|
|
100
|
+
console.log(`[Environments] Created environment: ${req.name} (${req.provider})`);
|
|
101
|
+
return getEnvironment(id);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Update environment
|
|
105
|
+
*/
|
|
106
|
+
export function updateEnvironment(id, req) {
|
|
107
|
+
const db = getDatabase();
|
|
108
|
+
const existing = getEnvironment(id);
|
|
109
|
+
if (!existing)
|
|
110
|
+
return null;
|
|
111
|
+
// If setting as default, unset other defaults
|
|
112
|
+
if (req.isDefault) {
|
|
113
|
+
db.prepare('UPDATE environments SET is_default = 0').run();
|
|
114
|
+
}
|
|
115
|
+
// Merge variables if provided (don't replace entirely, allow partial updates)
|
|
116
|
+
const updatedVariables = req.variables
|
|
117
|
+
? { ...existing.variables, ...req.variables }
|
|
118
|
+
: existing.variables;
|
|
119
|
+
const now = Date.now();
|
|
120
|
+
db.prepare(`
|
|
121
|
+
UPDATE environments SET
|
|
122
|
+
name = ?,
|
|
123
|
+
provider = ?,
|
|
124
|
+
icon = ?,
|
|
125
|
+
is_default = ?,
|
|
126
|
+
variables = ?,
|
|
127
|
+
updated_at = ?
|
|
128
|
+
WHERE id = ?
|
|
129
|
+
`).run(req.name ?? existing.name, req.provider ?? existing.provider, req.icon !== undefined ? req.icon : existing.icon, req.isDefault !== undefined ? (req.isDefault ? 1 : 0) : (existing.isDefault ? 1 : 0), JSON.stringify(updatedVariables), now, id);
|
|
130
|
+
console.log(`[Environments] Updated environment: ${req.name ?? existing.name}`);
|
|
131
|
+
return getEnvironment(id) ?? null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Delete environment
|
|
135
|
+
*/
|
|
136
|
+
export function deleteEnvironment(id) {
|
|
137
|
+
const db = getDatabase();
|
|
138
|
+
const existing = getEnvironment(id);
|
|
139
|
+
if (!existing)
|
|
140
|
+
return false;
|
|
141
|
+
const wasDefault = existing.isDefault;
|
|
142
|
+
const deletedName = existing.name;
|
|
143
|
+
db.prepare('DELETE FROM environments WHERE id = ?').run(id);
|
|
144
|
+
// If deleted env was default, make first remaining env default
|
|
145
|
+
if (wasDefault) {
|
|
146
|
+
const first = db.prepare('SELECT id FROM environments LIMIT 1').get();
|
|
147
|
+
if (first) {
|
|
148
|
+
db.prepare('UPDATE environments SET is_default = 1 WHERE id = ?').run(first.id);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
console.log(`[Environments] Deleted environment: ${deletedName}`);
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Session Environment Mapping
|
|
156
|
+
// ============================================================================
|
|
157
|
+
/**
|
|
158
|
+
* Get environment variables for terminal injection
|
|
159
|
+
* Returns the variables for the specified environment, or default if not found
|
|
160
|
+
*/
|
|
161
|
+
export function getEnvironmentVariables(environmentId) {
|
|
162
|
+
let env;
|
|
163
|
+
if (environmentId) {
|
|
164
|
+
env = getEnvironment(environmentId);
|
|
165
|
+
}
|
|
166
|
+
// Fall back to default
|
|
167
|
+
if (!env) {
|
|
168
|
+
env = getDefaultEnvironment();
|
|
169
|
+
}
|
|
170
|
+
return env?.variables ?? {};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Track which environment a session uses
|
|
174
|
+
*/
|
|
175
|
+
export function setSessionEnvironment(sessionName, environmentId) {
|
|
176
|
+
const db = getDatabase();
|
|
177
|
+
db.prepare(`
|
|
178
|
+
INSERT OR REPLACE INTO session_environments (session_name, environment_id)
|
|
179
|
+
VALUES (?, ?)
|
|
180
|
+
`).run(sessionName, environmentId);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get the environment ID for a session
|
|
184
|
+
*/
|
|
185
|
+
export function getSessionEnvironment(sessionName) {
|
|
186
|
+
const db = getDatabase();
|
|
187
|
+
const row = db
|
|
188
|
+
.prepare('SELECT environment_id FROM session_environments WHERE session_name = ?')
|
|
189
|
+
.get(sessionName);
|
|
190
|
+
return row?.environment_id;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Clear session environment tracking (when session is killed)
|
|
194
|
+
*/
|
|
195
|
+
export function clearSessionEnvironment(sessionName) {
|
|
196
|
+
const db = getDatabase();
|
|
197
|
+
db.prepare('DELETE FROM session_environments WHERE session_name = ?').run(sessionName);
|
|
198
|
+
}
|
|
199
|
+
// ============================================================================
|
|
200
|
+
// Preset Operations
|
|
201
|
+
// ============================================================================
|
|
202
|
+
/**
|
|
203
|
+
* Create environment from preset
|
|
204
|
+
*/
|
|
205
|
+
export function createEnvironmentFromPreset(provider, name, customVariables) {
|
|
206
|
+
const preset = ENVIRONMENT_PRESETS[provider];
|
|
207
|
+
return createEnvironment({
|
|
208
|
+
name,
|
|
209
|
+
provider,
|
|
210
|
+
variables: {
|
|
211
|
+
...preset.defaultVariables,
|
|
212
|
+
...customVariables,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// ============================================================================
|
|
217
|
+
// Initialization
|
|
218
|
+
// ============================================================================
|
|
219
|
+
/**
|
|
220
|
+
* Initialize environments with default if table is empty
|
|
221
|
+
* Called during database initialization
|
|
222
|
+
*/
|
|
223
|
+
export function ensureDefaultEnvironment() {
|
|
224
|
+
const db = getDatabase();
|
|
225
|
+
const count = db.prepare('SELECT COUNT(*) as count FROM environments').get();
|
|
226
|
+
if (count.count === 0) {
|
|
227
|
+
console.log('[Environments] No environments found, creating default Anthropic environment');
|
|
228
|
+
const now = Date.now();
|
|
229
|
+
db.prepare(`
|
|
230
|
+
INSERT INTO environments (id, name, provider, icon, is_default, variables, created_at, updated_at)
|
|
231
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
232
|
+
`).run('default-anthropic', 'Anthropic (Default)', 'anthropic', null, 1, JSON.stringify({ ANTHROPIC_API_KEY: '' }), now, now);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Deprecated: No longer needed since we use SQLite
|
|
237
|
+
* Kept for API compatibility during migration
|
|
238
|
+
*/
|
|
239
|
+
export function loadEnvironments() {
|
|
240
|
+
// No-op: environments are now loaded from SQLite
|
|
241
|
+
console.log('[Environments] loadEnvironments() is deprecated, using SQLite');
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=environments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/db/environments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { DbStatusHistory } from './schema.js';
|
|
2
|
+
import type { SessionStatus, AttentionReason } from '@vibecompany/247-shared';
|
|
3
|
+
/**
|
|
4
|
+
* Record a status change in history
|
|
5
|
+
*/
|
|
6
|
+
export declare function recordStatusChange(sessionName: string, status: SessionStatus, attentionReason: AttentionReason | null, event: string | null): void;
|
|
7
|
+
/**
|
|
8
|
+
* Get status history for a session
|
|
9
|
+
*/
|
|
10
|
+
export declare function getSessionHistory(sessionName: string, limit?: number): DbStatusHistory[];
|
|
11
|
+
/**
|
|
12
|
+
* Get recent history across all sessions
|
|
13
|
+
*/
|
|
14
|
+
export declare function getRecentHistory(limit?: number): DbStatusHistory[];
|
|
15
|
+
/**
|
|
16
|
+
* Get history within a time range
|
|
17
|
+
*/
|
|
18
|
+
export declare function getHistoryInRange(startTime: number, endTime: number): DbStatusHistory[];
|
|
19
|
+
/**
|
|
20
|
+
* Cleanup old history entries
|
|
21
|
+
* Returns number of deleted entries
|
|
22
|
+
*/
|
|
23
|
+
export declare function cleanupOldHistory(maxAge: number): number;
|
|
24
|
+
/**
|
|
25
|
+
* Get statistics about status history
|
|
26
|
+
*/
|
|
27
|
+
export declare function getHistoryStats(): {
|
|
28
|
+
totalEntries: number;
|
|
29
|
+
oldestEntry: number | null;
|
|
30
|
+
newestEntry: number | null;
|
|
31
|
+
entriesByStatus: Record<string, number>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Delete all history for a session
|
|
35
|
+
*/
|
|
36
|
+
export declare function deleteSessionHistory(sessionName: string): number;
|
|
37
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE9E;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,eAAe,GAAG,IAAI,EACvC,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,eAAe,EAAE,CAYrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAAM,GAAG,eAAe,EAAE,CAW/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAWvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAkCA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIhE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { getDatabase } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Record a status change in history
|
|
4
|
+
*/
|
|
5
|
+
export function recordStatusChange(sessionName, status, attentionReason, event) {
|
|
6
|
+
const db = getDatabase();
|
|
7
|
+
const now = Date.now();
|
|
8
|
+
db.prepare(`
|
|
9
|
+
INSERT INTO status_history (session_name, status, attention_reason, event, timestamp)
|
|
10
|
+
VALUES (?, ?, ?, ?, ?)
|
|
11
|
+
`).run(sessionName, status, attentionReason, event, now);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get status history for a session
|
|
15
|
+
*/
|
|
16
|
+
export function getSessionHistory(sessionName, limit = 100) {
|
|
17
|
+
const db = getDatabase();
|
|
18
|
+
return db
|
|
19
|
+
.prepare(`
|
|
20
|
+
SELECT * FROM status_history
|
|
21
|
+
WHERE session_name = ?
|
|
22
|
+
ORDER BY timestamp DESC
|
|
23
|
+
LIMIT ?
|
|
24
|
+
`)
|
|
25
|
+
.all(sessionName, limit);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get recent history across all sessions
|
|
29
|
+
*/
|
|
30
|
+
export function getRecentHistory(limit = 100) {
|
|
31
|
+
const db = getDatabase();
|
|
32
|
+
return db
|
|
33
|
+
.prepare(`
|
|
34
|
+
SELECT * FROM status_history
|
|
35
|
+
ORDER BY timestamp DESC
|
|
36
|
+
LIMIT ?
|
|
37
|
+
`)
|
|
38
|
+
.all(limit);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get history within a time range
|
|
42
|
+
*/
|
|
43
|
+
export function getHistoryInRange(startTime, endTime) {
|
|
44
|
+
const db = getDatabase();
|
|
45
|
+
return db
|
|
46
|
+
.prepare(`
|
|
47
|
+
SELECT * FROM status_history
|
|
48
|
+
WHERE timestamp >= ? AND timestamp <= ?
|
|
49
|
+
ORDER BY timestamp DESC
|
|
50
|
+
`)
|
|
51
|
+
.all(startTime, endTime);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Cleanup old history entries
|
|
55
|
+
* Returns number of deleted entries
|
|
56
|
+
*/
|
|
57
|
+
export function cleanupOldHistory(maxAge) {
|
|
58
|
+
const db = getDatabase();
|
|
59
|
+
const cutoff = Date.now() - maxAge;
|
|
60
|
+
const result = db.prepare('DELETE FROM status_history WHERE timestamp < ?').run(cutoff);
|
|
61
|
+
if (result.changes > 0) {
|
|
62
|
+
console.log(`[DB] Cleaned up ${result.changes} old history entries`);
|
|
63
|
+
}
|
|
64
|
+
return result.changes;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get statistics about status history
|
|
68
|
+
*/
|
|
69
|
+
export function getHistoryStats() {
|
|
70
|
+
const db = getDatabase();
|
|
71
|
+
const total = db.prepare('SELECT COUNT(*) as count FROM status_history').get();
|
|
72
|
+
const oldest = db.prepare('SELECT MIN(timestamp) as ts FROM status_history').get();
|
|
73
|
+
const newest = db.prepare('SELECT MAX(timestamp) as ts FROM status_history').get();
|
|
74
|
+
const byStatus = db
|
|
75
|
+
.prepare(`
|
|
76
|
+
SELECT status, COUNT(*) as count FROM status_history GROUP BY status
|
|
77
|
+
`)
|
|
78
|
+
.all();
|
|
79
|
+
const entriesByStatus = {};
|
|
80
|
+
for (const row of byStatus) {
|
|
81
|
+
entriesByStatus[row.status] = row.count;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
totalEntries: total.count,
|
|
85
|
+
oldestEntry: oldest.ts,
|
|
86
|
+
newestEntry: newest.ts,
|
|
87
|
+
entriesByStatus,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Delete all history for a session
|
|
92
|
+
*/
|
|
93
|
+
export function deleteSessionHistory(sessionName) {
|
|
94
|
+
const db = getDatabase();
|
|
95
|
+
const result = db.prepare('DELETE FROM status_history WHERE session_name = ?').run(sessionName);
|
|
96
|
+
return result.changes;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { RETENTION_CONFIG } from './schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get or create the database instance
|
|
5
|
+
*/
|
|
6
|
+
export declare function getDatabase(): Database.Database;
|
|
7
|
+
/**
|
|
8
|
+
* Initialize the database
|
|
9
|
+
* - Creates data directory if missing
|
|
10
|
+
* - Opens/creates database file
|
|
11
|
+
* - Runs migrations
|
|
12
|
+
* - Sets WAL mode for better performance
|
|
13
|
+
*/
|
|
14
|
+
export declare function initDatabase(dbPath?: string): Database.Database;
|
|
15
|
+
/**
|
|
16
|
+
* Create an in-memory database for testing
|
|
17
|
+
*/
|
|
18
|
+
export declare function initTestDatabase(): Database.Database;
|
|
19
|
+
/**
|
|
20
|
+
* Close the database connection
|
|
21
|
+
*/
|
|
22
|
+
export declare function closeDatabase(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Migrate environments from JSON file to database
|
|
25
|
+
* Only runs if environments.json exists and environments table is empty
|
|
26
|
+
*/
|
|
27
|
+
export declare function migrateEnvironmentsFromJson(database: Database.Database): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Get database statistics for debugging
|
|
30
|
+
*/
|
|
31
|
+
export declare function getDatabaseStats(): {
|
|
32
|
+
sessions: number;
|
|
33
|
+
history: number;
|
|
34
|
+
environments: number;
|
|
35
|
+
};
|
|
36
|
+
export { RETENTION_CONFIG };
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAqC,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAalF;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAqB/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,QAAQ,CAIpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAyHD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CA0DhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAkBA;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|