@kaitranntt/ccs 7.60.0-dev.3 → 7.60.0-dev.4

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 (79) hide show
  1. package/dist/commands/docker/config-subcommand.d.ts +2 -0
  2. package/dist/commands/docker/config-subcommand.d.ts.map +1 -0
  3. package/dist/commands/docker/config-subcommand.js +53 -0
  4. package/dist/commands/docker/config-subcommand.js.map +1 -0
  5. package/dist/commands/docker/down-subcommand.d.ts +2 -0
  6. package/dist/commands/docker/down-subcommand.d.ts.map +1 -0
  7. package/dist/commands/docker/down-subcommand.js +37 -0
  8. package/dist/commands/docker/down-subcommand.js.map +1 -0
  9. package/dist/commands/docker/help-subcommand.d.ts +2 -0
  10. package/dist/commands/docker/help-subcommand.d.ts.map +1 -0
  11. package/dist/commands/docker/help-subcommand.js +65 -0
  12. package/dist/commands/docker/help-subcommand.js.map +1 -0
  13. package/dist/commands/docker/index.d.ts +2 -0
  14. package/dist/commands/docker/index.d.ts.map +1 -0
  15. package/dist/commands/docker/index.js +58 -0
  16. package/dist/commands/docker/index.js.map +1 -0
  17. package/dist/commands/docker/logs-subcommand.d.ts +2 -0
  18. package/dist/commands/docker/logs-subcommand.d.ts.map +1 -0
  19. package/dist/commands/docker/logs-subcommand.js +50 -0
  20. package/dist/commands/docker/logs-subcommand.js.map +1 -0
  21. package/dist/commands/docker/options.d.ts +23 -0
  22. package/dist/commands/docker/options.d.ts.map +1 -0
  23. package/dist/commands/docker/options.js +101 -0
  24. package/dist/commands/docker/options.js.map +1 -0
  25. package/dist/commands/docker/status-subcommand.d.ts +2 -0
  26. package/dist/commands/docker/status-subcommand.d.ts.map +1 -0
  27. package/dist/commands/docker/status-subcommand.js +54 -0
  28. package/dist/commands/docker/status-subcommand.js.map +1 -0
  29. package/dist/commands/docker/up-subcommand.d.ts +2 -0
  30. package/dist/commands/docker/up-subcommand.d.ts.map +1 -0
  31. package/dist/commands/docker/up-subcommand.js +42 -0
  32. package/dist/commands/docker/up-subcommand.js.map +1 -0
  33. package/dist/commands/docker/update-subcommand.d.ts +2 -0
  34. package/dist/commands/docker/update-subcommand.d.ts.map +1 -0
  35. package/dist/commands/docker/update-subcommand.js +37 -0
  36. package/dist/commands/docker/update-subcommand.js.map +1 -0
  37. package/dist/commands/docker-command.d.ts +2 -0
  38. package/dist/commands/docker-command.d.ts.map +1 -0
  39. package/dist/commands/docker-command.js +6 -0
  40. package/dist/commands/docker-command.js.map +1 -0
  41. package/dist/commands/help-command.d.ts.map +1 -1
  42. package/dist/commands/help-command.js +9 -0
  43. package/dist/commands/help-command.js.map +1 -1
  44. package/dist/commands/index.d.ts +1 -0
  45. package/dist/commands/index.d.ts.map +1 -1
  46. package/dist/commands/index.js +3 -1
  47. package/dist/commands/index.js.map +1 -1
  48. package/dist/commands/root-command-router.d.ts.map +1 -1
  49. package/dist/commands/root-command-router.js +7 -0
  50. package/dist/commands/root-command-router.js.map +1 -1
  51. package/dist/docker/docker-assets.d.ts +25 -0
  52. package/dist/docker/docker-assets.d.ts.map +1 -0
  53. package/dist/docker/docker-assets.js +106 -0
  54. package/dist/docker/docker-assets.js.map +1 -0
  55. package/dist/docker/docker-bootstrap.d.ts +2 -0
  56. package/dist/docker/docker-bootstrap.d.ts.map +1 -0
  57. package/dist/docker/docker-bootstrap.js +51 -0
  58. package/dist/docker/docker-bootstrap.js.map +1 -0
  59. package/dist/docker/docker-executor.d.ts +42 -0
  60. package/dist/docker/docker-executor.d.ts.map +1 -0
  61. package/dist/docker/docker-executor.js +257 -0
  62. package/dist/docker/docker-executor.js.map +1 -0
  63. package/dist/docker/docker-types.d.ts +39 -0
  64. package/dist/docker/docker-types.d.ts.map +1 -0
  65. package/dist/docker/docker-types.js +3 -0
  66. package/dist/docker/docker-types.js.map +1 -0
  67. package/dist/docker/index.d.ts +4 -0
  68. package/dist/docker/index.d.ts.map +1 -0
  69. package/dist/docker/index.js +12 -0
  70. package/dist/docker/index.js.map +1 -0
  71. package/docker/Dockerfile +85 -0
  72. package/docker/Dockerfile.integrated +23 -0
  73. package/docker/README.md +260 -0
  74. package/docker/docker-compose.integrated.yml +32 -0
  75. package/docker/docker-compose.yml +53 -0
  76. package/docker/entrypoint-integrated.sh +9 -0
  77. package/docker/entrypoint.sh +34 -0
  78. package/docker/supervisord.conf +43 -0
  79. package/package.json +2 -1
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DockerExecutor = void 0;
27
+ const child_process_1 = require("child_process");
28
+ const path = __importStar(require("path"));
29
+ const docker_assets_1 = require("./docker-assets");
30
+ const LOCAL_DOCKER_SYNC_TIMEOUT_MS = 10000;
31
+ const REMOTE_DOCKER_SYNC_TIMEOUT_MS = 30000;
32
+ function quotePosix(value) {
33
+ return `'${value.replace(/'/g, `'\"'\"'`)}'`;
34
+ }
35
+ function renderCommand(command, args) {
36
+ return [command, ...args.map((arg) => quotePosix(arg))].join(' ');
37
+ }
38
+ function normalizeOutput(value) {
39
+ if (typeof value === 'string')
40
+ return value;
41
+ return value ? value.toString('utf8') : '';
42
+ }
43
+ function formatTimeout(timeoutMs) {
44
+ return timeoutMs % 1000 === 0 ? `${timeoutMs / 1000}s` : `${timeoutMs}ms`;
45
+ }
46
+ function buildTimeoutMessage(command, args, timeoutMs, remote) {
47
+ return [
48
+ `Command timed out after ${formatTimeout(timeoutMs)} while running a ${remote ? 'remote' : 'local'} Docker command.`,
49
+ `Command: ${renderCommand(command, args)}`,
50
+ remote
51
+ ? 'Check SSH reachability and the remote Docker host, then try again.'
52
+ : 'Check Docker availability on this machine, then try again.',
53
+ ].join('\n');
54
+ }
55
+ function applyDefaultTimeouts(options) {
56
+ return {
57
+ ...options,
58
+ timeoutMs: options.timeoutMs ??
59
+ (options.remote ? REMOTE_DOCKER_SYNC_TIMEOUT_MS : LOCAL_DOCKER_SYNC_TIMEOUT_MS),
60
+ };
61
+ }
62
+ function runSync(command, args, options = {}) {
63
+ const normalizedOptions = applyDefaultTimeouts(options);
64
+ const result = (0, child_process_1.spawnSync)(command, args, {
65
+ cwd: normalizedOptions.cwd,
66
+ env: normalizedOptions.env,
67
+ encoding: 'utf8',
68
+ stdio: 'pipe',
69
+ timeout: normalizedOptions.timeoutMs,
70
+ windowsHide: true,
71
+ });
72
+ const errorMessage = result.error && 'code' in result.error && result.error.code === 'ETIMEDOUT'
73
+ ? buildTimeoutMessage(command, args, normalizedOptions.timeoutMs ?? LOCAL_DOCKER_SYNC_TIMEOUT_MS, normalizedOptions.remote ?? false)
74
+ : result.error?.message;
75
+ const stderr = [normalizeOutput(result.stderr), errorMessage].filter(Boolean).join('\n');
76
+ return {
77
+ command: renderCommand(command, args),
78
+ exitCode: result.status ?? 1,
79
+ stdout: normalizeOutput(result.stdout),
80
+ stderr,
81
+ remote: normalizedOptions.remote ?? false,
82
+ };
83
+ }
84
+ function runStreaming(command, args) {
85
+ return new Promise((resolve, reject) => {
86
+ const child = (0, child_process_1.spawn)(command, args, {
87
+ stdio: 'inherit',
88
+ windowsHide: true,
89
+ });
90
+ child.on('error', reject);
91
+ child.on('close', (code) => {
92
+ if ((code ?? 1) === 0) {
93
+ resolve();
94
+ return;
95
+ }
96
+ reject(new Error(`Command failed (${code ?? 1}): ${renderCommand(command, args)}`));
97
+ });
98
+ });
99
+ }
100
+ let cachedLocalComposePrefix;
101
+ function resolveLocalComposePrefix() {
102
+ if (cachedLocalComposePrefix) {
103
+ return [...cachedLocalComposePrefix];
104
+ }
105
+ if (runSync('docker', ['compose', 'version'], {
106
+ timeoutMs: LOCAL_DOCKER_SYNC_TIMEOUT_MS,
107
+ }).exitCode === 0) {
108
+ cachedLocalComposePrefix = ['docker', 'compose'];
109
+ return [...cachedLocalComposePrefix];
110
+ }
111
+ if (runSync('docker-compose', ['version'], {
112
+ timeoutMs: LOCAL_DOCKER_SYNC_TIMEOUT_MS,
113
+ }).exitCode === 0) {
114
+ cachedLocalComposePrefix = ['docker-compose'];
115
+ return [...cachedLocalComposePrefix];
116
+ }
117
+ throw new Error('Docker Compose is not available. Install Docker Desktop or docker-compose.');
118
+ }
119
+ function buildRemoteComposeCommand(composeArgs) {
120
+ const suffix = composeArgs.map((arg) => quotePosix(arg)).join(' ');
121
+ return [
122
+ 'if docker compose version >/dev/null 2>&1; then',
123
+ `docker compose ${suffix};`,
124
+ 'elif docker-compose version >/dev/null 2>&1; then',
125
+ `docker-compose ${suffix};`,
126
+ 'else',
127
+ "echo 'Docker Compose is not available on the remote host.' >&2;",
128
+ 'exit 127;',
129
+ 'fi',
130
+ ].join(' ');
131
+ }
132
+ function buildRemoteDockerCommand(args) {
133
+ return ['docker', ...args.map((arg) => quotePosix(arg))].join(' ');
134
+ }
135
+ class DockerExecutor {
136
+ constructor(deps = {}) {
137
+ this.deps = deps;
138
+ this.assets = deps.assets ?? (0, docker_assets_1.getDockerAssetPaths)();
139
+ }
140
+ getConfig(options) {
141
+ return (0, docker_assets_1.createDockerConfigSummary)(options);
142
+ }
143
+ up(options) {
144
+ if (options.host) {
145
+ this.stageRemoteAssets(options.host);
146
+ }
147
+ this.ensureSuccess(this.runCompose(['up', '-d', '--build'], options, {
148
+ CCS_NPM_VERSION: this.getInstalledCcsVersion(),
149
+ CCS_DASHBOARD_PORT: String(options.port),
150
+ CCS_CLIPROXY_PORT: String(options.proxyPort),
151
+ }), 'Docker stack startup', options);
152
+ }
153
+ down(options) {
154
+ this.ensureSuccess(this.runCompose(['down'], options), 'Docker stack shutdown', options);
155
+ }
156
+ status(options) {
157
+ const compose = this.runCompose(['ps'], options);
158
+ this.ensureSuccess(compose, 'Docker status', options);
159
+ let supervisor;
160
+ if (compose.exitCode === 0) {
161
+ supervisor = this.runDocker(['exec', docker_assets_1.DOCKER_CONTAINER_NAME, 'supervisorctl', '-c', '/etc/supervisord.conf', 'status'], options);
162
+ }
163
+ return { compose, supervisor };
164
+ }
165
+ update(options) {
166
+ const script = 'npm install -g @kaitranntt/ccs@latest --force && ccs cliproxy --latest && supervisorctl -c /etc/supervisord.conf restart ccs-dashboard cliproxy';
167
+ this.ensureSuccess(this.runDocker(['exec', docker_assets_1.DOCKER_CONTAINER_NAME, 'sh', '-lc', script], options), 'Docker stack update', options);
168
+ }
169
+ async logs(options) {
170
+ const files = options.service
171
+ ? [docker_assets_1.DOCKER_LOG_FILES[options.service]]
172
+ : [docker_assets_1.DOCKER_LOG_FILES.ccs, docker_assets_1.DOCKER_LOG_FILES.cliproxy];
173
+ const touch = `mkdir -p /var/log/ccs && touch ${files.map((file) => quotePosix(file)).join(' ')}`;
174
+ const command = options.follow
175
+ ? `${touch} && tail -n 100 -F ${files.map((file) => quotePosix(file)).join(' ')}`
176
+ : options.service
177
+ ? `${touch} && tail -n 100 ${quotePosix(files[0])}`
178
+ : `${touch} && printf '== ccs ==\\n' && tail -n 100 ${quotePosix(docker_assets_1.DOCKER_LOG_FILES.ccs)} && printf '\\n== cliproxy ==\\n' && tail -n 100 ${quotePosix(docker_assets_1.DOCKER_LOG_FILES.cliproxy)}`;
179
+ if (options.follow) {
180
+ await this.runDockerStreaming(['exec', docker_assets_1.DOCKER_CONTAINER_NAME, 'sh', '-lc', command], options);
181
+ return;
182
+ }
183
+ const result = this.runDocker(['exec', docker_assets_1.DOCKER_CONTAINER_NAME, 'sh', '-lc', command], options);
184
+ this.ensureSuccess(result, 'Docker log retrieval', options);
185
+ return result.stdout;
186
+ }
187
+ stageRemoteAssets(host) {
188
+ this.ensureSuccess(this.runSync('ssh', [host, `mkdir -p ${docker_assets_1.DOCKER_REMOTE_DIR}`], { remote: true }), 'Remote Docker asset staging', { host });
189
+ const files = [
190
+ this.assets.composeFile,
191
+ this.assets.dockerfile,
192
+ this.assets.supervisordConfig,
193
+ this.assets.entrypoint,
194
+ ];
195
+ const target = `${host}:${docker_assets_1.DOCKER_REMOTE_DIR}/`;
196
+ this.ensureSuccess(this.runSync('scp', [...files, target], { remote: true }), 'Remote Docker asset copy', {
197
+ host,
198
+ });
199
+ }
200
+ runCompose(args, options, env = {}) {
201
+ if (!options.host) {
202
+ const prefix = this.resolveLocalComposePrefix();
203
+ const command = prefix[0];
204
+ const composeArgs = [...prefix.slice(1), '-f', this.assets.composeFile, ...args];
205
+ return this.runSync(command, composeArgs, {
206
+ cwd: path.dirname(this.assets.composeFile),
207
+ env: { ...process.env, ...env },
208
+ remote: false,
209
+ });
210
+ }
211
+ const envPrefix = Object.entries(env)
212
+ .map(([key, value]) => `${key}=${quotePosix(value)}`)
213
+ .join(' ');
214
+ const composeArgs = ['-f', path.basename(this.assets.composeFile), ...args];
215
+ const remoteCommand = `cd ${docker_assets_1.DOCKER_REMOTE_DIR} && ${envPrefix ? `${envPrefix} ` : ''}${buildRemoteComposeCommand(composeArgs)}`;
216
+ return this.runSync('ssh', [options.host, remoteCommand], { remote: true });
217
+ }
218
+ runDocker(args, options) {
219
+ if (!options.host) {
220
+ return this.runSync('docker', args);
221
+ }
222
+ return this.runSync('ssh', [options.host, buildRemoteDockerCommand(args)], { remote: true });
223
+ }
224
+ async runDockerStreaming(args, options) {
225
+ if (!options.host) {
226
+ await this.runStreaming('docker', args);
227
+ return;
228
+ }
229
+ await this.runStreaming('ssh', [options.host, buildRemoteDockerCommand(args)]);
230
+ }
231
+ getInstalledCcsVersion() {
232
+ return this.deps.getInstalledCcsVersion?.() ?? (0, docker_assets_1.getInstalledCcsVersion)();
233
+ }
234
+ resolveLocalComposePrefix() {
235
+ return this.deps.resolveLocalComposePrefix?.() ?? resolveLocalComposePrefix();
236
+ }
237
+ runSync(command, args, options = {}) {
238
+ const normalizedOptions = applyDefaultTimeouts(options);
239
+ return (this.deps.runSync?.(command, args, normalizedOptions) ??
240
+ runSync(command, args, normalizedOptions));
241
+ }
242
+ async runStreaming(command, args) {
243
+ await (this.deps.runStreaming?.(command, args) ?? runStreaming(command, args));
244
+ }
245
+ ensureSuccess(result, label, options) {
246
+ if (result.exitCode === 0) {
247
+ return;
248
+ }
249
+ const detail = (result.stderr || result.stdout).trim();
250
+ const hint = options.host && /No such file|no configuration file|can't cd|not found/i.test(detail)
251
+ ? `\nRun \`ccs docker up --host ${options.host}\` first.`
252
+ : '';
253
+ throw new Error(`${label} failed.${detail ? `\n${detail}` : ''}${hint}`);
254
+ }
255
+ }
256
+ exports.DockerExecutor = DockerExecutor;
257
+ //# sourceMappingURL=docker-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-executor.js","sourceRoot":"","sources":["../../src/docker/docker-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export type DockerLogService = 'ccs' | 'cliproxy';
2
+ export interface DockerCommandTarget {
3
+ host?: string;
4
+ }
5
+ export interface DockerUpOptions extends DockerCommandTarget {
6
+ port: number;
7
+ proxyPort: number;
8
+ }
9
+ export interface DockerLogsOptions extends DockerCommandTarget {
10
+ follow: boolean;
11
+ service?: DockerLogService;
12
+ }
13
+ export interface DockerCommandResult {
14
+ command: string;
15
+ exitCode: number;
16
+ stdout: string;
17
+ stderr: string;
18
+ remote: boolean;
19
+ }
20
+ export interface DockerStatusResult {
21
+ compose: DockerCommandResult;
22
+ supervisor?: DockerCommandResult;
23
+ }
24
+ export interface DockerConfigSummary {
25
+ host?: string;
26
+ remote: boolean;
27
+ ccsDir: string;
28
+ dockerDir: string;
29
+ composeFile: string;
30
+ dockerfile: string;
31
+ supervisordConfig: string;
32
+ entrypoint: string;
33
+ remoteDeployDir: string;
34
+ composeService: string;
35
+ containerName: string;
36
+ dashboardPort: number;
37
+ proxyPort: number;
38
+ }
39
+ //# sourceMappingURL=docker-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-types.d.ts","sourceRoot":"","sources":["../../src/docker/docker-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=docker-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-types.js","sourceRoot":"","sources":["../../src/docker/docker-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export { DockerExecutor } from './docker-executor';
2
+ export { DOCKER_CONTAINER_NAME, DOCKER_COMPOSE_SERVICE, DOCKER_DEFAULT_DASHBOARD_PORT, DOCKER_DEFAULT_PROXY_PORT, DOCKER_REMOTE_DIR, } from './docker-assets';
3
+ export type { DockerCommandTarget, DockerConfigSummary, DockerLogsOptions, DockerLogService, DockerStatusResult, DockerUpOptions, } from './docker-types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOCKER_REMOTE_DIR = exports.DOCKER_DEFAULT_PROXY_PORT = exports.DOCKER_DEFAULT_DASHBOARD_PORT = exports.DOCKER_COMPOSE_SERVICE = exports.DOCKER_CONTAINER_NAME = exports.DockerExecutor = void 0;
4
+ var docker_executor_1 = require("./docker-executor");
5
+ Object.defineProperty(exports, "DockerExecutor", { enumerable: true, get: function () { return docker_executor_1.DockerExecutor; } });
6
+ var docker_assets_1 = require("./docker-assets");
7
+ Object.defineProperty(exports, "DOCKER_CONTAINER_NAME", { enumerable: true, get: function () { return docker_assets_1.DOCKER_CONTAINER_NAME; } });
8
+ Object.defineProperty(exports, "DOCKER_COMPOSE_SERVICE", { enumerable: true, get: function () { return docker_assets_1.DOCKER_COMPOSE_SERVICE; } });
9
+ Object.defineProperty(exports, "DOCKER_DEFAULT_DASHBOARD_PORT", { enumerable: true, get: function () { return docker_assets_1.DOCKER_DEFAULT_DASHBOARD_PORT; } });
10
+ Object.defineProperty(exports, "DOCKER_DEFAULT_PROXY_PORT", { enumerable: true, get: function () { return docker_assets_1.DOCKER_DEFAULT_PROXY_PORT; } });
11
+ Object.defineProperty(exports, "DOCKER_REMOTE_DIR", { enumerable: true, get: function () { return docker_assets_1.DOCKER_REMOTE_DIR; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/docker/index.ts"],"names":[],"mappings":";;;AAAA,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iDAMyB;AALvB,sHAAA,qBAAqB,OAAA;AACrB,uHAAA,sBAAsB,OAAA;AACtB,8HAAA,6BAA6B,OAAA;AAC7B,0HAAA,yBAAyB,OAAA;AACzB,kHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,85 @@
1
+ # syntax=docker/dockerfile:1
2
+
3
+ # =============================================================================
4
+ # Build stage: compile TypeScript and build UI
5
+ # =============================================================================
6
+ FROM node:20-bookworm-slim AS build
7
+
8
+ SHELL ["/bin/bash", "-lc"]
9
+
10
+ # Pin bun version for reproducible builds
11
+ ARG BUN_VERSION=1.2.21
12
+ ENV BUN_INSTALL=/usr/local/bun
13
+ ENV PATH="$BUN_INSTALL/bin:$PATH"
14
+
15
+ RUN apt-get update \
16
+ && apt-get install -y --no-install-recommends curl ca-certificates unzip \
17
+ && rm -rf /var/lib/apt/lists/*
18
+
19
+ # Install specific bun version
20
+ RUN curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}"
21
+
22
+ WORKDIR /app
23
+
24
+ # Dependency install layer (avoid running install scripts inside the image build)
25
+ COPY package.json bun.lock bunfig.toml ./
26
+ COPY ui/package.json ui/bun.lock ./ui/
27
+
28
+ RUN bun install --frozen-lockfile --ignore-scripts \
29
+ && (cd ui && bun install --frozen-lockfile --ignore-scripts)
30
+
31
+ COPY . .
32
+
33
+ RUN bun run build:all
34
+
35
+ # Validate build artifacts exist
36
+ RUN test -d dist && test -d lib && echo "[OK] Build artifacts validated"
37
+
38
+ # =============================================================================
39
+ # Runtime stage: minimal production image
40
+ # =============================================================================
41
+ FROM node:20-bookworm-slim AS runtime
42
+
43
+ SHELL ["/bin/bash", "-lc"]
44
+
45
+ # Pin bun version for reproducible builds
46
+ ARG BUN_VERSION=1.2.21
47
+ ENV BUN_INSTALL=/usr/local/bun
48
+ ENV PATH="$BUN_INSTALL/bin:/home/node/.opencode/bin:$PATH"
49
+
50
+ RUN apt-get update \
51
+ && apt-get install -y --no-install-recommends curl ca-certificates unzip \
52
+ && rm -rf /var/lib/apt/lists/*
53
+
54
+ # Install specific bun version
55
+ RUN curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}"
56
+
57
+ WORKDIR /app
58
+
59
+ COPY package.json bun.lock ./
60
+ RUN bun install --frozen-lockfile --production --ignore-scripts
61
+
62
+ COPY docker/entrypoint.sh /usr/local/bin/ccs-entrypoint
63
+ RUN chmod +x /usr/local/bin/ccs-entrypoint
64
+
65
+ COPY --from=build /app/dist ./dist
66
+ COPY --from=build /app/lib ./lib
67
+ COPY --from=build /app/config ./config
68
+ COPY --from=build /app/scripts ./scripts
69
+ COPY --from=build /app/README.md ./README.md
70
+ COPY --from=build /app/LICENSE ./LICENSE
71
+
72
+ # Install AI CLI tools (using latest - pin versions in production if needed)
73
+ # These are optional tools for docker exec usage
74
+ RUN npm install -g @google/gemini-cli @vibe-kit/grok-cli @anthropic-ai/claude-code \
75
+ && npm install -g @kaitranntt/ccs --force \
76
+ && npm cache clean --force \
77
+ && su -s /bin/bash node -c 'curl -fsSL https://opencode.ai/install | bash -s -- --no-modify-path' \
78
+ && ln -sf /app/dist/ccs.js /usr/local/bin/ccs
79
+
80
+ ENV CCS_PORT=3000
81
+ EXPOSE 3000 8317
82
+
83
+ ENTRYPOINT ["/usr/local/bin/ccs-entrypoint"]
84
+
85
+ CMD ["bash", "-c", "node dist/ccs.js config --port ${CCS_PORT}"]
@@ -0,0 +1,23 @@
1
+ FROM eceasy/cli-proxy-api:latest
2
+
3
+ ARG CCS_NPM_VERSION=latest
4
+
5
+ RUN apk add --no-cache \
6
+ curl \
7
+ jq \
8
+ nodejs \
9
+ npm \
10
+ supervisor
11
+
12
+ RUN npm install -g @kaitranntt/ccs@${CCS_NPM_VERSION} \
13
+ && ln -sf /usr/local/lib/node_modules/@kaitranntt/ccs/dist/docker/docker-bootstrap.js /usr/local/bin/ccs-docker-bootstrap
14
+
15
+ COPY supervisord.conf /etc/supervisord.conf
16
+ COPY entrypoint-integrated.sh /entrypoint-integrated.sh
17
+
18
+ RUN chmod +x /entrypoint-integrated.sh \
19
+ && mkdir -p /var/log/ccs
20
+
21
+ EXPOSE 3000 8085 8317
22
+
23
+ ENTRYPOINT ["/entrypoint-integrated.sh"]