247-cli 2.21.0 → 2.23.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.
Files changed (125) hide show
  1. package/agent/dist/config.d.ts +4 -7
  2. package/agent/dist/config.d.ts.map +1 -1
  3. package/agent/dist/config.js +1 -2
  4. package/agent/dist/config.js.map +1 -1
  5. package/agent/dist/db/index.d.ts +0 -6
  6. package/agent/dist/db/index.d.ts.map +1 -1
  7. package/agent/dist/db/index.js +142 -88
  8. package/agent/dist/db/index.js.map +1 -1
  9. package/agent/dist/db/schema.d.ts +3 -32
  10. package/agent/dist/db/schema.d.ts.map +1 -1
  11. package/agent/dist/db/schema.js +1 -38
  12. package/agent/dist/db/schema.js.map +1 -1
  13. package/agent/dist/db/sessions.d.ts +0 -20
  14. package/agent/dist/db/sessions.d.ts.map +1 -1
  15. package/agent/dist/db/sessions.js +0 -86
  16. package/agent/dist/db/sessions.js.map +1 -1
  17. package/agent/dist/index.js +1 -0
  18. package/agent/dist/index.js.map +1 -1
  19. package/agent/dist/logger.d.ts +0 -2
  20. package/agent/dist/logger.d.ts.map +1 -1
  21. package/agent/dist/logger.js +0 -4
  22. package/agent/dist/logger.js.map +1 -1
  23. package/agent/dist/routes/attention.d.ts +10 -0
  24. package/agent/dist/routes/attention.d.ts.map +1 -0
  25. package/agent/dist/routes/attention.js +123 -0
  26. package/agent/dist/routes/attention.js.map +1 -0
  27. package/agent/dist/routes/index.d.ts +3 -7
  28. package/agent/dist/routes/index.d.ts.map +1 -1
  29. package/agent/dist/routes/index.js +3 -7
  30. package/agent/dist/routes/index.js.map +1 -1
  31. package/agent/dist/routes/pair.d.ts +26 -0
  32. package/agent/dist/routes/pair.d.ts.map +1 -0
  33. package/agent/dist/routes/pair.js +381 -0
  34. package/agent/dist/routes/pair.js.map +1 -0
  35. package/agent/dist/routes/projects.d.ts +2 -1
  36. package/agent/dist/routes/projects.d.ts.map +1 -1
  37. package/agent/dist/routes/projects.js +7 -39
  38. package/agent/dist/routes/projects.js.map +1 -1
  39. package/agent/dist/routes/sessions.d.ts.map +1 -1
  40. package/agent/dist/routes/sessions.js +38 -97
  41. package/agent/dist/routes/sessions.js.map +1 -1
  42. package/agent/dist/server.d.ts.map +1 -1
  43. package/agent/dist/server.js +11 -81
  44. package/agent/dist/server.js.map +1 -1
  45. package/agent/dist/setup-hooks.d.ts +10 -0
  46. package/agent/dist/setup-hooks.d.ts.map +1 -0
  47. package/agent/dist/setup-hooks.js +157 -0
  48. package/agent/dist/setup-hooks.js.map +1 -0
  49. package/agent/dist/status.d.ts.map +1 -1
  50. package/agent/dist/status.js +0 -8
  51. package/agent/dist/status.js.map +1 -1
  52. package/agent/dist/websocket-handlers.d.ts.map +1 -1
  53. package/agent/dist/websocket-handlers.js +2 -139
  54. package/agent/dist/websocket-handlers.js.map +1 -1
  55. package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -54
  56. package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
  57. package/agent/node_modules/247-shared/dist/types/index.js +0 -16
  58. package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
  59. package/agent/node_modules/247-shared/package.json +1 -1
  60. package/dist/index.js +1 -1
  61. package/package.json +3 -3
  62. package/agent/dist/db/environments.d.ts +0 -60
  63. package/agent/dist/db/environments.d.ts.map +0 -1
  64. package/agent/dist/db/environments.js +0 -235
  65. package/agent/dist/db/environments.js.map +0 -1
  66. package/agent/dist/db/push-subscriptions.d.ts +0 -44
  67. package/agent/dist/db/push-subscriptions.d.ts.map +0 -1
  68. package/agent/dist/db/push-subscriptions.js +0 -98
  69. package/agent/dist/db/push-subscriptions.js.map +0 -1
  70. package/agent/dist/editor.d.ts +0 -18
  71. package/agent/dist/editor.d.ts.map +0 -1
  72. package/agent/dist/editor.js +0 -222
  73. package/agent/dist/editor.js.map +0 -1
  74. package/agent/dist/environments.d.ts +0 -59
  75. package/agent/dist/environments.d.ts.map +0 -1
  76. package/agent/dist/environments.js +0 -229
  77. package/agent/dist/environments.js.map +0 -1
  78. package/agent/dist/git.d.ts +0 -39
  79. package/agent/dist/git.d.ts.map +0 -1
  80. package/agent/dist/git.js +0 -436
  81. package/agent/dist/git.js.map +0 -1
  82. package/agent/dist/heartbeat-monitor.d.ts +0 -24
  83. package/agent/dist/heartbeat-monitor.d.ts.map +0 -1
  84. package/agent/dist/heartbeat-monitor.js +0 -105
  85. package/agent/dist/heartbeat-monitor.js.map +0 -1
  86. package/agent/dist/push/sender.d.ts +0 -26
  87. package/agent/dist/push/sender.d.ts.map +0 -1
  88. package/agent/dist/push/sender.js +0 -122
  89. package/agent/dist/push/sender.js.map +0 -1
  90. package/agent/dist/push/vapid.d.ts +0 -25
  91. package/agent/dist/push/vapid.d.ts.map +0 -1
  92. package/agent/dist/push/vapid.js +0 -81
  93. package/agent/dist/push/vapid.js.map +0 -1
  94. package/agent/dist/routes/editor.d.ts +0 -9
  95. package/agent/dist/routes/editor.d.ts.map +0 -1
  96. package/agent/dist/routes/editor.js +0 -63
  97. package/agent/dist/routes/editor.js.map +0 -1
  98. package/agent/dist/routes/environments.d.ts +0 -6
  99. package/agent/dist/routes/environments.d.ts.map +0 -1
  100. package/agent/dist/routes/environments.js +0 -94
  101. package/agent/dist/routes/environments.js.map +0 -1
  102. package/agent/dist/routes/files.d.ts +0 -6
  103. package/agent/dist/routes/files.d.ts.map +0 -1
  104. package/agent/dist/routes/files.js +0 -84
  105. package/agent/dist/routes/files.js.map +0 -1
  106. package/agent/dist/routes/heartbeat.d.ts +0 -10
  107. package/agent/dist/routes/heartbeat.d.ts.map +0 -1
  108. package/agent/dist/routes/heartbeat.js +0 -124
  109. package/agent/dist/routes/heartbeat.js.map +0 -1
  110. package/agent/dist/routes/notification.d.ts +0 -9
  111. package/agent/dist/routes/notification.d.ts.map +0 -1
  112. package/agent/dist/routes/notification.js +0 -172
  113. package/agent/dist/routes/notification.js.map +0 -1
  114. package/agent/dist/routes/push.d.ts +0 -7
  115. package/agent/dist/routes/push.d.ts.map +0 -1
  116. package/agent/dist/routes/push.js +0 -98
  117. package/agent/dist/routes/push.js.map +0 -1
  118. package/agent/dist/routes/stop.d.ts +0 -9
  119. package/agent/dist/routes/stop.d.ts.map +0 -1
  120. package/agent/dist/routes/stop.js +0 -121
  121. package/agent/dist/routes/stop.js.map +0 -1
  122. package/agent/dist/setup-statusline.d.ts +0 -10
  123. package/agent/dist/setup-statusline.d.ts.map +0 -1
  124. package/agent/dist/setup-statusline.js +0 -234
  125. package/agent/dist/setup-statusline.js.map +0 -1
@@ -1,19 +1,3 @@
1
- // Labels for deliverables
2
- export const RALPH_DELIVERABLE_LABELS = {
3
- tests: 'Unit/integration tests with >80% coverage',
4
- readme: 'Updated README documentation',
5
- types: 'TypeScript types and interfaces',
6
- docs: 'Code comments and JSDoc',
7
- custom: '', // Uses customDeliverable value
8
- };
9
- // Suggested success criteria for quick selection
10
- export const RALPH_SUCCESS_CRITERIA_SUGGESTIONS = [
11
- 'All tests pass',
12
- 'No TypeScript errors',
13
- 'No linter errors',
14
- 'Code coverage >80%',
15
- 'Build succeeds',
16
- ];
17
1
  // Available icons for environments
18
2
  export const ENVIRONMENT_ICON_OPTIONS = [
19
3
  'zap',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AA6CA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,KAAK,EAAE,2CAA2C;IAClD,MAAM,EAAE,8BAA8B;IACtC,KAAK,EAAE,iCAAiC;IACxC,IAAI,EAAE,yBAAyB;IAC/B,MAAM,EAAE,EAAE,EAAE,+BAA+B;CAC5C,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,gBAAgB;IAChB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;CACR,CAAC;AAmIX,mCAAmC;AACnC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,KAAK;IACL,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,UAAU;IACV,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;CACE,CAAC;AAIX,0DAA0D;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAiD;IAClF,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,OAAO;CACpB,CAAC;AA2HF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,mBAAmB,GAO5B;IACF,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,gBAAgB,EAAE;YAChB,iBAAiB,EAAE,EAAE;SACtB;QACD,WAAW,EAAE,6BAA6B;KAC3C;IACD,UAAU,EAAE;QACV,KAAK,EAAE,YAAY;QACnB,gBAAgB,EAAE;YAChB,kBAAkB,EAAE,2BAA2B;YAC/C,oBAAoB,EAAE,EAAE;YACxB,iBAAiB,EAAE,EAAE,EAAE,2BAA2B;SACnD;QACD,WAAW,EAAE,mCAAmC;KACjD;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AA8IA,mCAAmC;AACnC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,KAAK;IACL,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,UAAU;IACV,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;CACE,CAAC;AAIX,0DAA0D;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAiD;IAClF,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,OAAO;CACpB,CAAC;AAmGF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,mBAAmB,GAO5B;IACF,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,gBAAgB,EAAE;YAChB,iBAAiB,EAAE,EAAE;SACtB;QACD,WAAW,EAAE,6BAA6B;KAC3C;IACD,UAAU,EAAE;QACV,KAAK,EAAE,YAAY;QACnB,gBAAgB,EAAE;YAChB,kBAAkB,EAAE,2BAA2B;YAC/C,oBAAoB,EAAE,EAAE;YACxB,iBAAiB,EAAE,EAAE,EAAE,2BAA2B;SACnD;QACD,WAAW,EAAE,mCAAmC;KACjD;CACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "247-shared",
3
- "version": "2.21.0",
3
+ "version": "2.23.2",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ const program = new Command();
15
15
  program
16
16
  .name('247')
17
17
  .description('247 - Access Claude Code from anywhere 24/7\nby The Vibe Company')
18
- .version('2.21.0')
18
+ .version('2.23.2')
19
19
  .option('-P, --profile <name>', 'Use a specific profile (dev, prod, etc.)');
20
20
  // Add commands
21
21
  program.addCommand(initCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "247-cli",
3
- "version": "2.21.0",
3
+ "version": "2.23.2",
4
4
  "description": "247 - Access Claude Code from anywhere 24/7",
5
5
  "keywords": [
6
6
  "claude",
@@ -15,12 +15,12 @@
15
15
  "author": "Quivr",
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "https://github.com/QuivrHQ/247",
18
+ "url": "https://github.com/QuivrHQ/247-claude-code-remote",
19
19
  "directory": "packages/cli"
20
20
  },
21
21
  "homepage": "https://247.quivr.com",
22
22
  "bugs": {
23
- "url": "https://github.com/QuivrHQ/247/issues"
23
+ "url": "https://github.com/QuivrHQ/247-claude-code-remote/issues"
24
24
  },
25
25
  "type": "module",
26
26
  "engines": {
@@ -1,60 +0,0 @@
1
- import type { Environment, EnvironmentMetadata, EnvironmentProvider, CreateEnvironmentRequest, UpdateEnvironmentRequest } from '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
- //# sourceMappingURL=environments.d.ts.map
@@ -1 +0,0 @@
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,YAAY,CAAC;AA2CpB;;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,CAwB/C"}
@@ -1,235 +0,0 @@
1
- import { randomUUID } from 'crypto';
2
- import { getDatabase } from './index.js';
3
- import { ENVIRONMENT_PRESETS } from '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
- //# sourceMappingURL=environments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/db/environments.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * Push subscription database operations.
3
- * Stores Web Push subscriptions for sending notifications when browser is closed.
4
- */
5
- import type webpush from 'web-push';
6
- export interface DbPushSubscription {
7
- id: number;
8
- endpoint: string;
9
- keys_p256dh: string;
10
- keys_auth: string;
11
- user_agent: string | null;
12
- created_at: number;
13
- }
14
- /**
15
- * Create the push_subscriptions table (called during migration)
16
- */
17
- export declare const CREATE_PUSH_SUBSCRIPTIONS_SQL = "\nCREATE TABLE IF NOT EXISTS push_subscriptions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n endpoint TEXT UNIQUE NOT NULL,\n keys_p256dh TEXT NOT NULL,\n keys_auth TEXT NOT NULL,\n user_agent TEXT,\n created_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);\n";
18
- /**
19
- * Save a push subscription.
20
- * Uses REPLACE to handle re-subscriptions from the same endpoint.
21
- */
22
- export declare function saveSubscription(subscription: webpush.PushSubscription, userAgent?: string): DbPushSubscription;
23
- /**
24
- * Delete a push subscription by endpoint.
25
- */
26
- export declare function deleteSubscription(endpoint: string): boolean;
27
- /**
28
- * Get all active push subscriptions.
29
- */
30
- export declare function getAllSubscriptions(): DbPushSubscription[];
31
- /**
32
- * Get subscription count.
33
- */
34
- export declare function getSubscriptionCount(): number;
35
- /**
36
- * Convert DB subscription to web-push format.
37
- */
38
- export declare function toWebPushSubscription(dbSub: DbPushSubscription): webpush.PushSubscription;
39
- /**
40
- * Delete expired/invalid subscriptions.
41
- * Called when a push fails with 404 or 410 status.
42
- */
43
- export declare function deleteInvalidSubscriptions(endpoints: string[]): number;
44
- //# sourceMappingURL=push-subscriptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push-subscriptions.d.ts","sourceRoot":"","sources":["../../src/db/push-subscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B,qUAWzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,EACtC,SAAS,CAAC,EAAE,MAAM,GACjB,kBAAkB,CA0BpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAG1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAQzF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAUtE"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Push subscription database operations.
3
- * Stores Web Push subscriptions for sending notifications when browser is closed.
4
- */
5
- import { getDatabase } from './index.js';
6
- /**
7
- * Create the push_subscriptions table (called during migration)
8
- */
9
- export const CREATE_PUSH_SUBSCRIPTIONS_SQL = `
10
- CREATE TABLE IF NOT EXISTS push_subscriptions (
11
- id INTEGER PRIMARY KEY AUTOINCREMENT,
12
- endpoint TEXT UNIQUE NOT NULL,
13
- keys_p256dh TEXT NOT NULL,
14
- keys_auth TEXT NOT NULL,
15
- user_agent TEXT,
16
- created_at INTEGER NOT NULL
17
- );
18
-
19
- CREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);
20
- `;
21
- /**
22
- * Save a push subscription.
23
- * Uses REPLACE to handle re-subscriptions from the same endpoint.
24
- */
25
- export function saveSubscription(subscription, userAgent) {
26
- const db = getDatabase();
27
- const now = Date.now();
28
- const stmt = db.prepare(`
29
- INSERT OR REPLACE INTO push_subscriptions
30
- (endpoint, keys_p256dh, keys_auth, user_agent, created_at)
31
- VALUES (@endpoint, @p256dh, @auth, @userAgent, @createdAt)
32
- `);
33
- stmt.run({
34
- endpoint: subscription.endpoint,
35
- p256dh: subscription.keys.p256dh,
36
- auth: subscription.keys.auth,
37
- userAgent: userAgent ?? null,
38
- createdAt: now,
39
- });
40
- return {
41
- id: 0, // Not needed for return
42
- endpoint: subscription.endpoint,
43
- keys_p256dh: subscription.keys.p256dh,
44
- keys_auth: subscription.keys.auth,
45
- user_agent: userAgent ?? null,
46
- created_at: now,
47
- };
48
- }
49
- /**
50
- * Delete a push subscription by endpoint.
51
- */
52
- export function deleteSubscription(endpoint) {
53
- const db = getDatabase();
54
- const result = db.prepare('DELETE FROM push_subscriptions WHERE endpoint = ?').run(endpoint);
55
- return result.changes > 0;
56
- }
57
- /**
58
- * Get all active push subscriptions.
59
- */
60
- export function getAllSubscriptions() {
61
- const db = getDatabase();
62
- return db.prepare('SELECT * FROM push_subscriptions').all();
63
- }
64
- /**
65
- * Get subscription count.
66
- */
67
- export function getSubscriptionCount() {
68
- const db = getDatabase();
69
- const result = db.prepare('SELECT COUNT(*) as count FROM push_subscriptions').get();
70
- return result.count;
71
- }
72
- /**
73
- * Convert DB subscription to web-push format.
74
- */
75
- export function toWebPushSubscription(dbSub) {
76
- return {
77
- endpoint: dbSub.endpoint,
78
- keys: {
79
- p256dh: dbSub.keys_p256dh,
80
- auth: dbSub.keys_auth,
81
- },
82
- };
83
- }
84
- /**
85
- * Delete expired/invalid subscriptions.
86
- * Called when a push fails with 404 or 410 status.
87
- */
88
- export function deleteInvalidSubscriptions(endpoints) {
89
- if (endpoints.length === 0)
90
- return 0;
91
- const db = getDatabase();
92
- const placeholders = endpoints.map(() => '?').join(',');
93
- const result = db
94
- .prepare(`DELETE FROM push_subscriptions WHERE endpoint IN (${placeholders})`)
95
- .run(...endpoints);
96
- return result.changes;
97
- }
98
- //# sourceMappingURL=push-subscriptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push-subscriptions.js","sourceRoot":"","sources":["../../src/db/push-subscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYzC;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;CAW5C,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAsC,EACtC,SAAkB;IAElB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC;QACP,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;QAChC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI;QAC5B,SAAS,EAAE,SAAS,IAAI,IAAI;QAC5B,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,CAAC,EAAE,wBAAwB;QAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;QACrC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI;QACjC,UAAU,EAAE,SAAS,IAAI,IAAI;QAC7B,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,EAA0B,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,EAEhF,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE;YACJ,MAAM,EAAE,KAAK,CAAC,WAAW;YACzB,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAAmB;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAErC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,qDAAqD,YAAY,GAAG,CAAC;SAC7E,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAErB,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -1,18 +0,0 @@
1
- import { ChildProcess } from 'child_process';
2
- import type { EditorConfig, EditorStatus } from '247-shared';
3
- interface EditorInstance {
4
- project: string;
5
- port: number;
6
- process: ChildProcess;
7
- startedAt: number;
8
- lastActivity: number;
9
- }
10
- export declare function initEditor(config: EditorConfig | undefined, basePath: string): Promise<void>;
11
- export declare function getOrStartEditor(project: string): Promise<EditorInstance>;
12
- export declare function stopEditor(project: string): boolean;
13
- export declare function getEditorStatus(project: string): EditorStatus;
14
- export declare function getAllEditors(): EditorStatus[];
15
- export declare function updateEditorActivity(project: string): void;
16
- export declare function shutdownAllEditors(): void;
17
- export {};
18
- //# sourceMappingURL=editor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAY,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAmBD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiBf;AA2ED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqF/E;AAGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUnD;AAYD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAW7D;AAGD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAK1D;AAkBD,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}