@generacy-ai/control-plane 0.0.0-preview-20260507200146

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 (87) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +66 -0
  3. package/dist/bin/control-plane.d.ts +3 -0
  4. package/dist/bin/control-plane.d.ts.map +1 -0
  5. package/dist/bin/control-plane.js +36 -0
  6. package/dist/bin/control-plane.js.map +1 -0
  7. package/dist/src/context.d.ts +8 -0
  8. package/dist/src/context.d.ts.map +1 -0
  9. package/dist/src/context.js +20 -0
  10. package/dist/src/context.js.map +1 -0
  11. package/dist/src/errors.d.ts +16 -0
  12. package/dist/src/errors.d.ts.map +1 -0
  13. package/dist/src/errors.js +37 -0
  14. package/dist/src/errors.js.map +1 -0
  15. package/dist/src/index.d.ts +9 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +12 -0
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/relay-events.d.ts +5 -0
  20. package/dist/src/relay-events.d.ts.map +1 -0
  21. package/dist/src/relay-events.js +9 -0
  22. package/dist/src/relay-events.js.map +1 -0
  23. package/dist/src/router.d.ts +4 -0
  24. package/dist/src/router.d.ts.map +1 -0
  25. package/dist/src/router.js +83 -0
  26. package/dist/src/router.js.map +1 -0
  27. package/dist/src/routes/audit.d.ts +10 -0
  28. package/dist/src/routes/audit.d.ts.map +1 -0
  29. package/dist/src/routes/audit.js +38 -0
  30. package/dist/src/routes/audit.js.map +1 -0
  31. package/dist/src/routes/credentials.d.ts +5 -0
  32. package/dist/src/routes/credentials.d.ts.map +1 -0
  33. package/dist/src/routes/credentials.js +23 -0
  34. package/dist/src/routes/credentials.js.map +1 -0
  35. package/dist/src/routes/lifecycle.d.ts +4 -0
  36. package/dist/src/routes/lifecycle.d.ts.map +1 -0
  37. package/dist/src/routes/lifecycle.js +80 -0
  38. package/dist/src/routes/lifecycle.js.map +1 -0
  39. package/dist/src/routes/roles.d.ts +5 -0
  40. package/dist/src/routes/roles.d.ts.map +1 -0
  41. package/dist/src/routes/roles.js +20 -0
  42. package/dist/src/routes/roles.js.map +1 -0
  43. package/dist/src/routes/state.d.ts +4 -0
  44. package/dist/src/routes/state.d.ts.map +1 -0
  45. package/dist/src/routes/state.js +17 -0
  46. package/dist/src/routes/state.js.map +1 -0
  47. package/dist/src/routes/status.d.ts +4 -0
  48. package/dist/src/routes/status.d.ts.map +1 -0
  49. package/dist/src/routes/status.js +29 -0
  50. package/dist/src/routes/status.js.map +1 -0
  51. package/dist/src/schemas.d.ts +314 -0
  52. package/dist/src/schemas.d.ts.map +1 -0
  53. package/dist/src/schemas.js +94 -0
  54. package/dist/src/schemas.js.map +1 -0
  55. package/dist/src/server.d.ts +9 -0
  56. package/dist/src/server.d.ts.map +1 -0
  57. package/dist/src/server.js +70 -0
  58. package/dist/src/server.js.map +1 -0
  59. package/dist/src/services/code-server-manager.d.ts +44 -0
  60. package/dist/src/services/code-server-manager.d.ts.map +1 -0
  61. package/dist/src/services/code-server-manager.js +164 -0
  62. package/dist/src/services/code-server-manager.js.map +1 -0
  63. package/dist/src/services/default-role-writer.d.ts +7 -0
  64. package/dist/src/services/default-role-writer.d.ts.map +1 -0
  65. package/dist/src/services/default-role-writer.js +44 -0
  66. package/dist/src/services/default-role-writer.js.map +1 -0
  67. package/dist/src/services/peer-repo-cloner.d.ts +12 -0
  68. package/dist/src/services/peer-repo-cloner.d.ts.map +1 -0
  69. package/dist/src/services/peer-repo-cloner.js +80 -0
  70. package/dist/src/services/peer-repo-cloner.js.map +1 -0
  71. package/dist/src/services/tunnel-handler.d.ts +30 -0
  72. package/dist/src/services/tunnel-handler.d.ts.map +1 -0
  73. package/dist/src/services/tunnel-handler.js +110 -0
  74. package/dist/src/services/tunnel-handler.js.map +1 -0
  75. package/dist/src/state.d.ts +8 -0
  76. package/dist/src/state.d.ts.map +1 -0
  77. package/dist/src/state.js +39 -0
  78. package/dist/src/state.js.map +1 -0
  79. package/dist/src/types.d.ts +12 -0
  80. package/dist/src/types.d.ts.map +1 -0
  81. package/dist/src/types.js +2 -0
  82. package/dist/src/types.js.map +1 -0
  83. package/dist/src/util/read-body.d.ts +3 -0
  84. package/dist/src/util/read-body.d.ts.map +1 -0
  85. package/dist/src/util/read-body.js +9 -0
  86. package/dist/src/util/read-body.js.map +1 -0
  87. package/package.json +51 -0
@@ -0,0 +1,110 @@
1
+ import net from 'node:net';
2
+ export class TunnelHandler {
3
+ relaySend;
4
+ codeServerManager;
5
+ allowedTarget;
6
+ tunnels = new Map();
7
+ constructor(relaySend, codeServerManager, allowedTarget = '/run/code-server.sock') {
8
+ this.relaySend = relaySend;
9
+ this.codeServerManager = codeServerManager;
10
+ this.allowedTarget = allowedTarget;
11
+ }
12
+ async handleOpen(msg) {
13
+ const { tunnelId, target } = msg;
14
+ // FR-004: Restrict target to allowed path only
15
+ if (target !== this.allowedTarget) {
16
+ this.relaySend.send({
17
+ type: 'tunnel_open_ack',
18
+ tunnelId,
19
+ status: 'error',
20
+ error: 'invalid target',
21
+ });
22
+ return;
23
+ }
24
+ try {
25
+ // FR-005: Auto-start code-server if not running
26
+ await this.codeServerManager.start();
27
+ // Wait for socket with 10s timeout
28
+ const socket = await this.connectWithTimeout(target, 10_000);
29
+ // Store in map
30
+ this.tunnels.set(tunnelId, socket);
31
+ // Wire socket data → relay (base64 encode)
32
+ socket.on('data', (chunk) => {
33
+ this.relaySend.send({
34
+ type: 'tunnel_data',
35
+ tunnelId,
36
+ data: chunk.toString('base64'),
37
+ });
38
+ });
39
+ // FR-007: Handle abrupt socket disconnects
40
+ const onSocketEnd = () => {
41
+ if (this.tunnels.has(tunnelId)) {
42
+ this.tunnels.delete(tunnelId);
43
+ this.relaySend.send({
44
+ type: 'tunnel_close',
45
+ tunnelId,
46
+ reason: 'socket closed',
47
+ });
48
+ }
49
+ };
50
+ socket.on('close', onSocketEnd);
51
+ socket.on('error', () => {
52
+ socket.destroy();
53
+ onSocketEnd();
54
+ });
55
+ // Send success ack
56
+ this.relaySend.send({
57
+ type: 'tunnel_open_ack',
58
+ tunnelId,
59
+ status: 'ok',
60
+ });
61
+ }
62
+ catch (err) {
63
+ this.relaySend.send({
64
+ type: 'tunnel_open_ack',
65
+ tunnelId,
66
+ status: 'error',
67
+ error: err instanceof Error ? err.message : String(err),
68
+ });
69
+ }
70
+ }
71
+ handleData(msg) {
72
+ const socket = this.tunnels.get(msg.tunnelId);
73
+ if (!socket)
74
+ return; // silently drop if tunnel not found
75
+ const buf = Buffer.from(msg.data, 'base64');
76
+ socket.write(buf);
77
+ // FR-006: Reset code-server idle timer
78
+ this.codeServerManager.touch();
79
+ }
80
+ handleClose(msg) {
81
+ const socket = this.tunnels.get(msg.tunnelId);
82
+ if (!socket)
83
+ return; // no-op if tunnel not found
84
+ this.tunnels.delete(msg.tunnelId);
85
+ socket.destroy();
86
+ }
87
+ cleanup() {
88
+ for (const [tunnelId, socket] of this.tunnels) {
89
+ socket.destroy();
90
+ this.tunnels.delete(tunnelId);
91
+ }
92
+ }
93
+ connectWithTimeout(socketPath, timeoutMs) {
94
+ return new Promise((resolve, reject) => {
95
+ const timer = setTimeout(() => {
96
+ socket.destroy();
97
+ reject(new Error(`Timeout connecting to ${socketPath} after ${timeoutMs}ms`));
98
+ }, timeoutMs);
99
+ const socket = net.createConnection({ path: socketPath }, () => {
100
+ clearTimeout(timer);
101
+ resolve(socket);
102
+ });
103
+ socket.on('error', (err) => {
104
+ clearTimeout(timer);
105
+ reject(err);
106
+ });
107
+ });
108
+ }
109
+ }
110
+ //# sourceMappingURL=tunnel-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-handler.js","sourceRoot":"","sources":["../../../src/services/tunnel-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ClusterState, ClusterStatus, DeploymentMode, ClusterVariant } from './schemas.js';
2
+ export declare function initClusterState(config: {
3
+ deploymentMode?: DeploymentMode;
4
+ variant?: ClusterVariant;
5
+ }): void;
6
+ export declare function updateClusterStatus(status: ClusterStatus, statusReason?: string): void;
7
+ export declare function getClusterState(): ClusterState;
8
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBhG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,GAAG,IAAI,CAOP;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAcN;AAED,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
@@ -0,0 +1,39 @@
1
+ const VALID_TRANSITIONS = {
2
+ bootstrapping: ['ready', 'error'],
3
+ ready: ['degraded', 'error'],
4
+ degraded: ['ready', 'error'],
5
+ error: [],
6
+ };
7
+ let state = {
8
+ status: 'bootstrapping',
9
+ deploymentMode: 'local',
10
+ variant: 'cluster-base',
11
+ lastSeen: new Date().toISOString(),
12
+ };
13
+ export function initClusterState(config) {
14
+ state = {
15
+ status: 'bootstrapping',
16
+ deploymentMode: config.deploymentMode ?? 'local',
17
+ variant: config.variant ?? 'cluster-base',
18
+ lastSeen: new Date().toISOString(),
19
+ };
20
+ }
21
+ export function updateClusterStatus(status, statusReason) {
22
+ const allowed = VALID_TRANSITIONS[state.status];
23
+ if (!allowed.includes(status)) {
24
+ throw new Error(`Invalid state transition: ${state.status} → ${status}`);
25
+ }
26
+ state = {
27
+ ...state,
28
+ status,
29
+ lastSeen: new Date().toISOString(),
30
+ statusReason,
31
+ };
32
+ }
33
+ export function getClusterState() {
34
+ return {
35
+ ...state,
36
+ lastSeen: new Date().toISOString(),
37
+ };
38
+ }
39
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAA2C;IAChE,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;IACjC,KAAK,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;IAC5B,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,IAAI,KAAK,GAAiB;IACxB,MAAM,EAAE,eAAe;IACvB,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACnC,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAGhC;IACC,KAAK,GAAG;QACN,MAAM,EAAE,eAAe;QACvB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,OAAO;QAChD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,cAAc;QACzC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAqB,EACrB,YAAqB;IAErB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,CAAC,MAAM,MAAM,MAAM,EAAE,CACxD,CAAC;IACJ,CAAC;IAED,KAAK,GAAG;QACN,GAAG,KAAK;QACR,MAAM;QACN,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAClC,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,GAAG,KAAK;QACR,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type http from 'node:http';
2
+ import type { ActorContext } from './context.js';
3
+ import type { ClusterState, ClusterStatus } from './schemas.js';
4
+ export interface ServerConfig {
5
+ socketPath: string;
6
+ }
7
+ export type RouteHandler = (req: http.IncomingMessage, res: http.ServerResponse, actor: ActorContext, params: Record<string, string>) => Promise<void>;
8
+ export interface ClusterStateStore {
9
+ getState(): ClusterState;
10
+ updateStatus(status: ClusterStatus, statusReason?: string): void;
11
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,IAAI,YAAY,CAAC;IACzB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import http from 'node:http';
2
+ export declare function readBody(req: http.IncomingMessage): Promise<string>;
3
+ //# sourceMappingURL=read-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-body.d.ts","sourceRoot":"","sources":["../../../src/util/read-body.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnE"}
@@ -0,0 +1,9 @@
1
+ export function readBody(req) {
2
+ return new Promise((resolve, reject) => {
3
+ const chunks = [];
4
+ req.on('data', (chunk) => chunks.push(chunk));
5
+ req.on('end', () => resolve(Buffer.concat(chunks).toString()));
6
+ req.on('error', reject);
7
+ });
8
+ }
9
+ //# sourceMappingURL=read-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-body.js","sourceRoot":"","sources":["../../../src/util/read-body.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,GAAyB;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/D,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@generacy-ai/control-plane",
3
+ "version": "0.0.0-preview-20260507200146",
4
+ "description": "In-cluster control-plane HTTP service over Unix socket for cloud-hosted bootstrap UI",
5
+ "main": "dist/src/index.js",
6
+ "types": "dist/src/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/index.d.ts",
11
+ "import": "./dist/src/index.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "control-plane": "./dist/bin/control-plane.js"
16
+ },
17
+ "author": "Generacy AI",
18
+ "license": "Apache-2.0",
19
+ "dependencies": {
20
+ "yaml": "^2.7.0",
21
+ "zod": "^3.23.0",
22
+ "@generacy-ai/credhelper": "0.0.0-preview-20260507200146"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20.14.0",
26
+ "typescript": "^5.4.5",
27
+ "vitest": "^4.0.18"
28
+ },
29
+ "engines": {
30
+ "node": ">=20.0.0"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md"
35
+ ],
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/generacy-ai/generacy.git",
39
+ "directory": "packages/control-plane"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc",
46
+ "dev": "tsc --watch",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest",
49
+ "clean": "rm -rf dist"
50
+ }
51
+ }