@kaitranntt/ccs 6.4.0-dev.3 → 6.4.0
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/VERSION +1 -1
- package/dist/auth/profile-detector.d.ts +1 -5
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +0 -31
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/ccs.d.ts +8 -0
- package/dist/ccs.d.ts.map +1 -1
- package/dist/ccs.js +11 -92
- package/dist/ccs.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +0 -16
- package/dist/commands/help-command.js.map +1 -1
- package/dist/config/reserved-names.d.ts +1 -1
- package/dist/config/reserved-names.d.ts.map +1 -1
- package/dist/config/reserved-names.js +0 -2
- package/dist/config/reserved-names.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +0 -30
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +2 -45
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +2 -18
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/ui/assets/{accounts-OHf-47mH.js → accounts-aPbCYgXy.js} +1 -1
- package/dist/ui/assets/{analytics-C4uOxyuU.js → analytics-ByHzJ4fO.js} +1 -1
- package/dist/ui/assets/{api-B_mbwU9C.js → api-DRVliui6.js} +1 -1
- package/dist/ui/assets/{card-CR0u1y_L.js → card-CkFFTnqL.js} +1 -1
- package/dist/ui/assets/{cliproxy-tXwMpEJd.js → cliproxy-CJ5njiYX.js} +1 -1
- package/dist/ui/assets/{cliproxy-control-panel-DIIw97Bs.js → cliproxy-control-panel-C9y82uCL.js} +1 -1
- package/dist/ui/assets/{code-editor-CVohe7u9.js → code-editor-D1jkWlaX.js} +1 -1
- package/dist/ui/assets/health-B4BNP_1z.js +1 -0
- package/dist/ui/assets/icons-B9AtZK5c.js +1 -0
- package/dist/ui/assets/index-B_6ILhjh.css +1 -0
- package/dist/ui/assets/index-EyLCmFok.js +44 -0
- package/dist/ui/assets/settings-DcAQTmWn.js +1 -0
- package/dist/ui/assets/shared-DJshj6er.js +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/update-checker.d.ts +2 -14
- package/dist/utils/update-checker.d.ts.map +1 -1
- package/dist/utils/update-checker.js +9 -39
- package/dist/utils/update-checker.js.map +1 -1
- package/dist/web-server/routes.js +0 -275
- package/dist/web-server/routes.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/copilot-command.d.ts +0 -10
- package/dist/commands/copilot-command.d.ts.map +0 -1
- package/dist/commands/copilot-command.js +0 -227
- package/dist/commands/copilot-command.js.map +0 -1
- package/dist/copilot/copilot-auth.d.ts +0 -52
- package/dist/copilot/copilot-auth.d.ts.map +0 -1
- package/dist/copilot/copilot-auth.js +0 -201
- package/dist/copilot/copilot-auth.js.map +0 -1
- package/dist/copilot/copilot-daemon.d.ts +0 -36
- package/dist/copilot/copilot-daemon.d.ts.map +0 -1
- package/dist/copilot/copilot-daemon.js +0 -237
- package/dist/copilot/copilot-daemon.js.map +0 -1
- package/dist/copilot/copilot-executor.d.ts +0 -26
- package/dist/copilot/copilot-executor.d.ts.map +0 -1
- package/dist/copilot/copilot-executor.js +0 -144
- package/dist/copilot/copilot-executor.js.map +0 -1
- package/dist/copilot/copilot-models.d.ts +0 -34
- package/dist/copilot/copilot-models.d.ts.map +0 -1
- package/dist/copilot/copilot-models.js +0 -261
- package/dist/copilot/copilot-models.js.map +0 -1
- package/dist/copilot/copilot-package-manager.d.ts +0 -93
- package/dist/copilot/copilot-package-manager.d.ts.map +0 -1
- package/dist/copilot/copilot-package-manager.js +0 -488
- package/dist/copilot/copilot-package-manager.js.map +0 -1
- package/dist/copilot/index.d.ts +0 -13
- package/dist/copilot/index.d.ts.map +0 -1
- package/dist/copilot/index.js +0 -63
- package/dist/copilot/index.js.map +0 -1
- package/dist/copilot/types.d.ts +0 -65
- package/dist/copilot/types.d.ts.map +0 -1
- package/dist/copilot/types.js +0 -8
- package/dist/copilot/types.js.map +0 -1
- package/dist/ui/assets/copilot-C-eWI9Ce.js +0 -4
- package/dist/ui/assets/health-Dh8bSHe-.js +0 -1
- package/dist/ui/assets/icons-WTNLz24z.js +0 -1
- package/dist/ui/assets/index-BXPLu3zJ.js +0 -44
- package/dist/ui/assets/index-D2qNwUdc.css +0 -1
- package/dist/ui/assets/settings-Bi8Aw4yN.js +0 -1
- package/dist/ui/assets/shared-DQlPCpix.js +0 -1
- package/dist/ui/assets/switch-pOvJh4Ez.js +0 -1
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copilot Auth Handler
|
|
4
|
-
*
|
|
5
|
-
* Handles GitHub OAuth authentication for copilot-api.
|
|
6
|
-
* Uses local installation from ~/.ccs/copilot/ (managed by copilot-package-manager).
|
|
7
|
-
*/
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
-
}) : function(o, v) {
|
|
22
|
-
o["default"] = v;
|
|
23
|
-
});
|
|
24
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
-
if (mod && mod.__esModule) return mod;
|
|
26
|
-
var result = {};
|
|
27
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
-
__setModuleDefault(result, mod);
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.startAuthFlow = exports.checkAuthStatus = exports.getCopilotDebugInfo = exports.isCopilotApiInstalled = exports.hasTokenFile = exports.getTokenPath = void 0;
|
|
33
|
-
const child_process_1 = require("child_process");
|
|
34
|
-
const fs = __importStar(require("fs"));
|
|
35
|
-
const path = __importStar(require("path"));
|
|
36
|
-
const os = __importStar(require("os"));
|
|
37
|
-
const copilot_package_manager_1 = require("./copilot-package-manager");
|
|
38
|
-
/**
|
|
39
|
-
* Get the path to copilot-api's GitHub token file.
|
|
40
|
-
* copilot-api stores tokens in ~/.local/share/copilot-api/github_token (Linux/macOS)
|
|
41
|
-
* or %APPDATA%/copilot-api/github_token (Windows)
|
|
42
|
-
*/
|
|
43
|
-
function getTokenPath() {
|
|
44
|
-
if (process.platform === 'win32') {
|
|
45
|
-
return path.join(process.env.APPDATA || os.homedir(), 'copilot-api', 'github_token');
|
|
46
|
-
}
|
|
47
|
-
return path.join(os.homedir(), '.local', 'share', 'copilot-api', 'github_token');
|
|
48
|
-
}
|
|
49
|
-
exports.getTokenPath = getTokenPath;
|
|
50
|
-
/**
|
|
51
|
-
* Check if GitHub token file exists.
|
|
52
|
-
* Fast check that doesn't require spawning copilot-api process.
|
|
53
|
-
*/
|
|
54
|
-
function hasTokenFile() {
|
|
55
|
-
try {
|
|
56
|
-
return fs.existsSync(getTokenPath());
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
exports.hasTokenFile = hasTokenFile;
|
|
63
|
-
/**
|
|
64
|
-
* Check if copilot-api is installed locally.
|
|
65
|
-
* Uses copilot-package-manager to check ~/.ccs/copilot/node_modules/.bin/copilot-api
|
|
66
|
-
*/
|
|
67
|
-
function isCopilotApiInstalled() {
|
|
68
|
-
return (0, copilot_package_manager_1.isCopilotApiInstalled)();
|
|
69
|
-
}
|
|
70
|
-
exports.isCopilotApiInstalled = isCopilotApiInstalled;
|
|
71
|
-
/**
|
|
72
|
-
* Get copilot-api debug info.
|
|
73
|
-
* Returns authentication status and version info.
|
|
74
|
-
*/
|
|
75
|
-
async function getCopilotDebugInfo() {
|
|
76
|
-
const binPath = (0, copilot_package_manager_1.getCopilotApiBinPath)();
|
|
77
|
-
return new Promise((resolve) => {
|
|
78
|
-
try {
|
|
79
|
-
const proc = (0, child_process_1.spawn)(binPath, ['debug', '--json'], {
|
|
80
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
81
|
-
shell: process.platform === 'win32',
|
|
82
|
-
timeout: 15000,
|
|
83
|
-
});
|
|
84
|
-
let stdout = '';
|
|
85
|
-
let _stderr = '';
|
|
86
|
-
proc.stdout.on('data', (data) => {
|
|
87
|
-
stdout += data.toString();
|
|
88
|
-
});
|
|
89
|
-
proc.stderr.on('data', (data) => {
|
|
90
|
-
_stderr += data.toString();
|
|
91
|
-
});
|
|
92
|
-
proc.on('close', (code) => {
|
|
93
|
-
if (code === 0 && stdout) {
|
|
94
|
-
try {
|
|
95
|
-
const info = JSON.parse(stdout.trim());
|
|
96
|
-
resolve(info);
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
resolve(null);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
resolve(null);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
proc.on('error', () => {
|
|
107
|
-
resolve(null);
|
|
108
|
-
});
|
|
109
|
-
// Timeout after 15 seconds
|
|
110
|
-
setTimeout(() => {
|
|
111
|
-
proc.kill();
|
|
112
|
-
resolve(null);
|
|
113
|
-
}, 15000);
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
resolve(null);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
exports.getCopilotDebugInfo = getCopilotDebugInfo;
|
|
121
|
-
/**
|
|
122
|
-
* Check copilot authentication status.
|
|
123
|
-
* Uses fast token file check first, falls back to copilot-api debug if needed.
|
|
124
|
-
*/
|
|
125
|
-
async function checkAuthStatus() {
|
|
126
|
-
// Fast path: check if token file exists (instant, no subprocess)
|
|
127
|
-
if (hasTokenFile()) {
|
|
128
|
-
return { authenticated: true };
|
|
129
|
-
}
|
|
130
|
-
// Slow path: try copilot-api debug --json (may timeout)
|
|
131
|
-
// Only used if token file doesn't exist
|
|
132
|
-
const debugInfo = await getCopilotDebugInfo();
|
|
133
|
-
if (debugInfo?.authenticated) {
|
|
134
|
-
return { authenticated: true };
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
authenticated: false,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
exports.checkAuthStatus = checkAuthStatus;
|
|
141
|
-
/**
|
|
142
|
-
* Start GitHub OAuth authentication flow.
|
|
143
|
-
* Captures device code from copilot-api output and returns it.
|
|
144
|
-
*
|
|
145
|
-
* @returns Promise that resolves with auth result including device code
|
|
146
|
-
*/
|
|
147
|
-
function startAuthFlow() {
|
|
148
|
-
const binPath = (0, copilot_package_manager_1.getCopilotApiBinPath)();
|
|
149
|
-
return new Promise((resolve) => {
|
|
150
|
-
console.log('[i] Starting GitHub authentication for Copilot...');
|
|
151
|
-
console.log('');
|
|
152
|
-
const proc = (0, child_process_1.spawn)(binPath, ['auth'], {
|
|
153
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
154
|
-
shell: process.platform === 'win32',
|
|
155
|
-
});
|
|
156
|
-
let stdout = '';
|
|
157
|
-
let deviceCode;
|
|
158
|
-
let verificationUrl;
|
|
159
|
-
proc.stdout.on('data', (data) => {
|
|
160
|
-
const chunk = data.toString();
|
|
161
|
-
stdout += chunk;
|
|
162
|
-
// Echo to console for terminal users
|
|
163
|
-
process.stdout.write(chunk);
|
|
164
|
-
// Parse device code from output like:
|
|
165
|
-
// "Please enter the code "5653-38A1" in https://github.com/login/device"
|
|
166
|
-
const codeMatch = stdout.match(/code\s+"([A-Z0-9]{4}-[A-Z0-9]{4})"/i);
|
|
167
|
-
const urlMatch = stdout.match(/(https:\/\/github\.com\/login\/device)/i);
|
|
168
|
-
if (codeMatch && !deviceCode) {
|
|
169
|
-
deviceCode = codeMatch[1];
|
|
170
|
-
}
|
|
171
|
-
if (urlMatch && !verificationUrl) {
|
|
172
|
-
verificationUrl = urlMatch[1];
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
proc.stderr.on('data', (data) => {
|
|
176
|
-
// Echo stderr to console
|
|
177
|
-
process.stderr.write(data.toString());
|
|
178
|
-
});
|
|
179
|
-
proc.on('close', (code) => {
|
|
180
|
-
if (code === 0) {
|
|
181
|
-
resolve({ success: true, deviceCode, verificationUrl });
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
resolve({
|
|
185
|
-
success: false,
|
|
186
|
-
error: `Authentication failed with exit code ${code}`,
|
|
187
|
-
deviceCode,
|
|
188
|
-
verificationUrl,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
proc.on('error', (err) => {
|
|
193
|
-
resolve({
|
|
194
|
-
success: false,
|
|
195
|
-
error: `Failed to start auth: ${err.message}`,
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
exports.startAuthFlow = startAuthFlow;
|
|
201
|
-
//# sourceMappingURL=copilot-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-auth.js","sourceRoot":"","sources":["../../src/copilot/copilot-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copilot Daemon Manager
|
|
3
|
-
*
|
|
4
|
-
* Manages the copilot-api daemon lifecycle (start/stop/status).
|
|
5
|
-
* Uses local installation from ~/.ccs/copilot/ (managed by copilot-package-manager).
|
|
6
|
-
*/
|
|
7
|
-
import { CopilotDaemonStatus } from './types';
|
|
8
|
-
import { CopilotConfig } from '../config/unified-config-types';
|
|
9
|
-
/**
|
|
10
|
-
* Check if copilot-api daemon is running on the specified port.
|
|
11
|
-
* Uses 127.0.0.1 instead of localhost for more reliable local connections.
|
|
12
|
-
*/
|
|
13
|
-
export declare function isDaemonRunning(port: number): Promise<boolean>;
|
|
14
|
-
/**
|
|
15
|
-
* Get daemon status.
|
|
16
|
-
*/
|
|
17
|
-
export declare function getDaemonStatus(port: number): Promise<CopilotDaemonStatus>;
|
|
18
|
-
/**
|
|
19
|
-
* Start the copilot-api daemon.
|
|
20
|
-
*
|
|
21
|
-
* @param config Copilot configuration
|
|
22
|
-
* @returns Promise that resolves when daemon is ready
|
|
23
|
-
*/
|
|
24
|
-
export declare function startDaemon(config: CopilotConfig): Promise<{
|
|
25
|
-
success: boolean;
|
|
26
|
-
pid?: number;
|
|
27
|
-
error?: string;
|
|
28
|
-
}>;
|
|
29
|
-
/**
|
|
30
|
-
* Stop the copilot-api daemon.
|
|
31
|
-
*/
|
|
32
|
-
export declare function stopDaemon(): Promise<{
|
|
33
|
-
success: boolean;
|
|
34
|
-
error?: string;
|
|
35
|
-
}>;
|
|
36
|
-
//# sourceMappingURL=copilot-daemon.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-daemon.d.ts","sourceRoot":"","sources":["../../src/copilot/copilot-daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAK/D;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BpE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAShF;AA8CD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuE7D;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyChF"}
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copilot Daemon Manager
|
|
4
|
-
*
|
|
5
|
-
* Manages the copilot-api daemon lifecycle (start/stop/status).
|
|
6
|
-
* Uses local installation from ~/.ccs/copilot/ (managed by copilot-package-manager).
|
|
7
|
-
*/
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
-
}) : function(o, v) {
|
|
22
|
-
o["default"] = v;
|
|
23
|
-
});
|
|
24
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
-
if (mod && mod.__esModule) return mod;
|
|
26
|
-
var result = {};
|
|
27
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
-
__setModuleDefault(result, mod);
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.stopDaemon = exports.startDaemon = exports.getDaemonStatus = exports.isDaemonRunning = void 0;
|
|
33
|
-
const child_process_1 = require("child_process");
|
|
34
|
-
const fs = __importStar(require("fs"));
|
|
35
|
-
const path = __importStar(require("path"));
|
|
36
|
-
const http = __importStar(require("http"));
|
|
37
|
-
const copilot_package_manager_1 = require("./copilot-package-manager");
|
|
38
|
-
const PID_FILE = path.join((0, copilot_package_manager_1.getCopilotDir)(), 'daemon.pid');
|
|
39
|
-
/**
|
|
40
|
-
* Check if copilot-api daemon is running on the specified port.
|
|
41
|
-
* Uses 127.0.0.1 instead of localhost for more reliable local connections.
|
|
42
|
-
*/
|
|
43
|
-
async function isDaemonRunning(port) {
|
|
44
|
-
return new Promise((resolve) => {
|
|
45
|
-
const req = http.request({
|
|
46
|
-
hostname: '127.0.0.1',
|
|
47
|
-
port,
|
|
48
|
-
path: '/usage',
|
|
49
|
-
method: 'GET',
|
|
50
|
-
timeout: 3000,
|
|
51
|
-
}, (res) => {
|
|
52
|
-
resolve(res.statusCode === 200);
|
|
53
|
-
});
|
|
54
|
-
req.on('error', () => {
|
|
55
|
-
resolve(false);
|
|
56
|
-
});
|
|
57
|
-
req.on('timeout', () => {
|
|
58
|
-
req.destroy();
|
|
59
|
-
resolve(false);
|
|
60
|
-
});
|
|
61
|
-
req.end();
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
exports.isDaemonRunning = isDaemonRunning;
|
|
65
|
-
/**
|
|
66
|
-
* Get daemon status.
|
|
67
|
-
*/
|
|
68
|
-
async function getDaemonStatus(port) {
|
|
69
|
-
const running = await isDaemonRunning(port);
|
|
70
|
-
const pid = getPidFromFile();
|
|
71
|
-
return {
|
|
72
|
-
running,
|
|
73
|
-
port,
|
|
74
|
-
pid: running ? (pid ?? undefined) : undefined,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
exports.getDaemonStatus = getDaemonStatus;
|
|
78
|
-
/**
|
|
79
|
-
* Read PID from file.
|
|
80
|
-
*/
|
|
81
|
-
function getPidFromFile() {
|
|
82
|
-
try {
|
|
83
|
-
if (fs.existsSync(PID_FILE)) {
|
|
84
|
-
const content = fs.readFileSync(PID_FILE, 'utf8').trim();
|
|
85
|
-
const pid = parseInt(content, 10);
|
|
86
|
-
return isNaN(pid) ? null : pid;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
// Ignore errors
|
|
91
|
-
}
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Write PID to file.
|
|
96
|
-
*/
|
|
97
|
-
function writePidToFile(pid) {
|
|
98
|
-
try {
|
|
99
|
-
const dir = path.dirname(PID_FILE);
|
|
100
|
-
if (!fs.existsSync(dir)) {
|
|
101
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
102
|
-
}
|
|
103
|
-
fs.writeFileSync(PID_FILE, pid.toString(), { mode: 0o600 });
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// Ignore errors
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Remove PID file.
|
|
111
|
-
*/
|
|
112
|
-
function removePidFile() {
|
|
113
|
-
try {
|
|
114
|
-
if (fs.existsSync(PID_FILE)) {
|
|
115
|
-
fs.unlinkSync(PID_FILE);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
// Ignore errors
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Start the copilot-api daemon.
|
|
124
|
-
*
|
|
125
|
-
* @param config Copilot configuration
|
|
126
|
-
* @returns Promise that resolves when daemon is ready
|
|
127
|
-
*/
|
|
128
|
-
async function startDaemon(config) {
|
|
129
|
-
// Check if already running
|
|
130
|
-
if (await isDaemonRunning(config.port)) {
|
|
131
|
-
return { success: true, pid: getPidFromFile() ?? undefined };
|
|
132
|
-
}
|
|
133
|
-
const binPath = (0, copilot_package_manager_1.getCopilotApiBinPath)();
|
|
134
|
-
const args = ['start', '--port', config.port.toString()];
|
|
135
|
-
// Add account type
|
|
136
|
-
if (config.account_type !== 'individual') {
|
|
137
|
-
args.push('--account-type', config.account_type);
|
|
138
|
-
}
|
|
139
|
-
// Add rate limiting
|
|
140
|
-
if (config.rate_limit !== null && config.rate_limit > 0) {
|
|
141
|
-
args.push('--rate-limit', config.rate_limit.toString());
|
|
142
|
-
if (config.wait_on_limit) {
|
|
143
|
-
args.push('--wait');
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return new Promise((resolve) => {
|
|
147
|
-
let proc;
|
|
148
|
-
try {
|
|
149
|
-
proc = (0, child_process_1.spawn)(binPath, args, {
|
|
150
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
151
|
-
detached: true,
|
|
152
|
-
shell: process.platform === 'win32',
|
|
153
|
-
});
|
|
154
|
-
// Unref so parent can exit
|
|
155
|
-
proc.unref();
|
|
156
|
-
if (proc.pid) {
|
|
157
|
-
writePidToFile(proc.pid);
|
|
158
|
-
}
|
|
159
|
-
// Wait for daemon to be ready (poll for up to 30 seconds)
|
|
160
|
-
let attempts = 0;
|
|
161
|
-
const maxAttempts = 30;
|
|
162
|
-
const checkInterval = setInterval(async () => {
|
|
163
|
-
attempts++;
|
|
164
|
-
if (await isDaemonRunning(config.port)) {
|
|
165
|
-
clearInterval(checkInterval);
|
|
166
|
-
resolve({ success: true, pid: proc.pid });
|
|
167
|
-
}
|
|
168
|
-
else if (attempts >= maxAttempts) {
|
|
169
|
-
clearInterval(checkInterval);
|
|
170
|
-
resolve({
|
|
171
|
-
success: false,
|
|
172
|
-
error: 'Daemon did not start within 30 seconds',
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
}, 1000);
|
|
176
|
-
proc.on('error', (err) => {
|
|
177
|
-
clearInterval(checkInterval);
|
|
178
|
-
resolve({
|
|
179
|
-
success: false,
|
|
180
|
-
error: `Failed to start daemon: ${err.message}`,
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
catch (err) {
|
|
185
|
-
resolve({
|
|
186
|
-
success: false,
|
|
187
|
-
error: `Failed to spawn daemon: ${err.message}`,
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
exports.startDaemon = startDaemon;
|
|
193
|
-
/**
|
|
194
|
-
* Stop the copilot-api daemon.
|
|
195
|
-
*/
|
|
196
|
-
async function stopDaemon() {
|
|
197
|
-
const pid = getPidFromFile();
|
|
198
|
-
if (!pid) {
|
|
199
|
-
// No PID file, try to find by port
|
|
200
|
-
removePidFile();
|
|
201
|
-
return { success: true };
|
|
202
|
-
}
|
|
203
|
-
try {
|
|
204
|
-
// Send SIGTERM to the process
|
|
205
|
-
process.kill(pid, 'SIGTERM');
|
|
206
|
-
// Wait for process to exit (up to 5 seconds)
|
|
207
|
-
let attempts = 0;
|
|
208
|
-
while (attempts < 10) {
|
|
209
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
210
|
-
try {
|
|
211
|
-
// Check if process still exists (kill(pid, 0) throws if not)
|
|
212
|
-
process.kill(pid, 0);
|
|
213
|
-
attempts++;
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
// Process no longer exists
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
removePidFile();
|
|
221
|
-
return { success: true };
|
|
222
|
-
}
|
|
223
|
-
catch (err) {
|
|
224
|
-
const error = err;
|
|
225
|
-
if (error.code === 'ESRCH') {
|
|
226
|
-
// Process doesn't exist
|
|
227
|
-
removePidFile();
|
|
228
|
-
return { success: true };
|
|
229
|
-
}
|
|
230
|
-
return {
|
|
231
|
-
success: false,
|
|
232
|
-
error: `Failed to stop daemon: ${error.message}`,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
exports.stopDaemon = stopDaemon;
|
|
237
|
-
//# sourceMappingURL=copilot-daemon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-daemon.js","sourceRoot":"","sources":["../../src/copilot/copilot-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copilot Executor
|
|
3
|
-
*
|
|
4
|
-
* Main execution flow for running Claude Code with copilot-api proxy.
|
|
5
|
-
* Uses local installation from ~/.ccs/copilot/ (managed by copilot-package-manager).
|
|
6
|
-
*/
|
|
7
|
-
import { CopilotConfig } from '../config/unified-config-types';
|
|
8
|
-
import { CopilotStatus } from './types';
|
|
9
|
-
/**
|
|
10
|
-
* Get full copilot status (auth + daemon).
|
|
11
|
-
*/
|
|
12
|
-
export declare function getCopilotStatus(config: CopilotConfig): Promise<CopilotStatus>;
|
|
13
|
-
/**
|
|
14
|
-
* Generate environment variables for Claude Code to use copilot-api.
|
|
15
|
-
* Uses model mapping for opus/sonnet/haiku tiers if configured.
|
|
16
|
-
*/
|
|
17
|
-
export declare function generateCopilotEnv(config: CopilotConfig): Record<string, string>;
|
|
18
|
-
/**
|
|
19
|
-
* Execute Claude Code with copilot-api proxy.
|
|
20
|
-
*
|
|
21
|
-
* @param config Copilot configuration
|
|
22
|
-
* @param claudeArgs Arguments to pass to Claude CLI
|
|
23
|
-
* @returns Exit code
|
|
24
|
-
*/
|
|
25
|
-
export declare function executeCopilotProfile(config: CopilotConfig, claudeArgs: string[]): Promise<number>;
|
|
26
|
-
//# sourceMappingURL=copilot-executor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-executor.d.ts","sourceRoot":"","sources":["../../src/copilot/copilot-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAI/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAapF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBhF;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,MAAM,CAAC,CAsFjB"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copilot Executor
|
|
4
|
-
*
|
|
5
|
-
* Main execution flow for running Claude Code with copilot-api proxy.
|
|
6
|
-
* Uses local installation from ~/.ccs/copilot/ (managed by copilot-package-manager).
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.executeCopilotProfile = exports.generateCopilotEnv = exports.getCopilotStatus = void 0;
|
|
10
|
-
const child_process_1 = require("child_process");
|
|
11
|
-
const copilot_auth_1 = require("./copilot-auth");
|
|
12
|
-
const copilot_daemon_1 = require("./copilot-daemon");
|
|
13
|
-
const copilot_package_manager_1 = require("./copilot-package-manager");
|
|
14
|
-
/**
|
|
15
|
-
* Get full copilot status (auth + daemon).
|
|
16
|
-
*/
|
|
17
|
-
async function getCopilotStatus(config) {
|
|
18
|
-
const [auth, daemonRunning] = await Promise.all([
|
|
19
|
-
(0, copilot_auth_1.checkAuthStatus)(),
|
|
20
|
-
(0, copilot_daemon_1.isDaemonRunning)(config.port),
|
|
21
|
-
]);
|
|
22
|
-
return {
|
|
23
|
-
auth,
|
|
24
|
-
daemon: {
|
|
25
|
-
running: daemonRunning,
|
|
26
|
-
port: config.port,
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
exports.getCopilotStatus = getCopilotStatus;
|
|
31
|
-
/**
|
|
32
|
-
* Generate environment variables for Claude Code to use copilot-api.
|
|
33
|
-
* Uses model mapping for opus/sonnet/haiku tiers if configured.
|
|
34
|
-
*/
|
|
35
|
-
function generateCopilotEnv(config) {
|
|
36
|
-
// Use mapped models if configured, otherwise fall back to default model
|
|
37
|
-
const opusModel = config.opus_model || config.model;
|
|
38
|
-
const sonnetModel = config.sonnet_model || config.model;
|
|
39
|
-
const haikuModel = config.haiku_model || config.model;
|
|
40
|
-
// Use 127.0.0.1 instead of localhost for more reliable local connections
|
|
41
|
-
// (bypasses DNS resolution and potential IPv6 issues)
|
|
42
|
-
return {
|
|
43
|
-
ANTHROPIC_BASE_URL: `http://127.0.0.1:${config.port}`,
|
|
44
|
-
ANTHROPIC_AUTH_TOKEN: 'dummy', // copilot-api handles auth internally
|
|
45
|
-
ANTHROPIC_MODEL: config.model,
|
|
46
|
-
// Model tier mapping - allows different models for opus/sonnet/haiku
|
|
47
|
-
ANTHROPIC_DEFAULT_OPUS_MODEL: opusModel,
|
|
48
|
-
ANTHROPIC_DEFAULT_SONNET_MODEL: sonnetModel,
|
|
49
|
-
ANTHROPIC_SMALL_FAST_MODEL: haikuModel,
|
|
50
|
-
ANTHROPIC_DEFAULT_HAIKU_MODEL: haikuModel,
|
|
51
|
-
// Disable non-essential traffic to avoid rate limiting
|
|
52
|
-
DISABLE_NON_ESSENTIAL_MODEL_CALLS: '1',
|
|
53
|
-
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '1',
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
exports.generateCopilotEnv = generateCopilotEnv;
|
|
57
|
-
/**
|
|
58
|
-
* Execute Claude Code with copilot-api proxy.
|
|
59
|
-
*
|
|
60
|
-
* @param config Copilot configuration
|
|
61
|
-
* @param claudeArgs Arguments to pass to Claude CLI
|
|
62
|
-
* @returns Exit code
|
|
63
|
-
*/
|
|
64
|
-
async function executeCopilotProfile(config, claudeArgs) {
|
|
65
|
-
// Ensure copilot-api is installed (auto-install if missing, auto-update if outdated)
|
|
66
|
-
try {
|
|
67
|
-
await (0, copilot_package_manager_1.ensureCopilotApi)();
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.error('[X] Failed to install copilot-api.');
|
|
71
|
-
console.error('');
|
|
72
|
-
console.error(`Error: ${error.message}`);
|
|
73
|
-
console.error('');
|
|
74
|
-
console.error('Try installing manually:');
|
|
75
|
-
console.error(' npm install -g copilot-api');
|
|
76
|
-
return 1;
|
|
77
|
-
}
|
|
78
|
-
// Check if copilot-api is installed (should be after ensureCopilotApi)
|
|
79
|
-
if (!(0, copilot_auth_1.isCopilotApiInstalled)()) {
|
|
80
|
-
console.error('[X] copilot-api is not installed.');
|
|
81
|
-
console.error('');
|
|
82
|
-
console.error('Install with: ccs copilot --install');
|
|
83
|
-
return 1;
|
|
84
|
-
}
|
|
85
|
-
// Check authentication
|
|
86
|
-
const authStatus = await (0, copilot_auth_1.checkAuthStatus)();
|
|
87
|
-
if (!authStatus.authenticated) {
|
|
88
|
-
console.error('[X] Not authenticated with GitHub.');
|
|
89
|
-
console.error('');
|
|
90
|
-
console.error('Run: npx copilot-api auth');
|
|
91
|
-
console.error('Or: ccs copilot auth');
|
|
92
|
-
return 1;
|
|
93
|
-
}
|
|
94
|
-
// Check if daemon is running or needs to be started
|
|
95
|
-
let daemonRunning = await (0, copilot_daemon_1.isDaemonRunning)(config.port);
|
|
96
|
-
if (!daemonRunning) {
|
|
97
|
-
if (config.auto_start) {
|
|
98
|
-
console.log('[i] Starting copilot-api daemon...');
|
|
99
|
-
const result = await (0, copilot_daemon_1.startDaemon)(config);
|
|
100
|
-
if (!result.success) {
|
|
101
|
-
console.error(`[X] Failed to start daemon: ${result.error}`);
|
|
102
|
-
return 1;
|
|
103
|
-
}
|
|
104
|
-
console.log(`[OK] Daemon started on port ${config.port}`);
|
|
105
|
-
daemonRunning = true;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
console.error('[X] copilot-api daemon is not running.');
|
|
109
|
-
console.error('');
|
|
110
|
-
console.error('Start the daemon manually:');
|
|
111
|
-
console.error(` npx copilot-api start --port ${config.port}`);
|
|
112
|
-
console.error('');
|
|
113
|
-
console.error('Or enable auto_start in config:');
|
|
114
|
-
console.error(' ccs config (then enable auto_start in Copilot section)');
|
|
115
|
-
return 1;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// Generate environment for Claude
|
|
119
|
-
const copilotEnv = generateCopilotEnv(config);
|
|
120
|
-
// Merge with current environment
|
|
121
|
-
const env = {
|
|
122
|
-
...process.env,
|
|
123
|
-
...copilotEnv,
|
|
124
|
-
};
|
|
125
|
-
console.log(`[i] Using GitHub Copilot proxy (model: ${config.model})`);
|
|
126
|
-
console.log('');
|
|
127
|
-
// Spawn Claude CLI
|
|
128
|
-
return new Promise((resolve) => {
|
|
129
|
-
const proc = (0, child_process_1.spawn)('claude', claudeArgs, {
|
|
130
|
-
stdio: 'inherit',
|
|
131
|
-
env,
|
|
132
|
-
shell: process.platform === 'win32',
|
|
133
|
-
});
|
|
134
|
-
proc.on('close', (code) => {
|
|
135
|
-
resolve(code ?? 0);
|
|
136
|
-
});
|
|
137
|
-
proc.on('error', (err) => {
|
|
138
|
-
console.error(`[X] Failed to start Claude: ${err.message}`);
|
|
139
|
-
resolve(1);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
exports.executeCopilotProfile = executeCopilotProfile;
|
|
144
|
-
//# sourceMappingURL=copilot-executor.js.map
|