@sylix/coworker 1.1.5 → 1.2.1
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/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +277 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/AuthManager.d.ts +33 -0
- package/dist/config/AuthManager.d.ts.map +1 -0
- package/dist/config/AuthManager.js +181 -0
- package/dist/config/AuthManager.js.map +1 -0
- package/dist/config/SettingsManager.d.ts +25 -0
- package/dist/config/SettingsManager.d.ts.map +1 -0
- package/dist/config/SettingsManager.js +96 -0
- package/dist/config/SettingsManager.js.map +1 -0
- package/dist/core/CoWorkerAgent.d.ts +52 -0
- package/dist/core/CoWorkerAgent.d.ts.map +1 -0
- package/dist/core/CoWorkerAgent.js +308 -0
- package/dist/core/CoWorkerAgent.js.map +1 -0
- package/dist/mcp/MCPClientManager.d.ts +30 -0
- package/dist/mcp/MCPClientManager.d.ts.map +1 -0
- package/dist/mcp/MCPClientManager.js +100 -0
- package/dist/mcp/MCPClientManager.js.map +1 -0
- package/dist/permissions/PermissionInterceptor.d.ts +21 -0
- package/dist/permissions/PermissionInterceptor.d.ts.map +1 -0
- package/dist/permissions/PermissionInterceptor.js +104 -0
- package/dist/permissions/PermissionInterceptor.js.map +1 -0
- package/dist/session/SessionManager.d.ts +38 -0
- package/dist/session/SessionManager.d.ts.map +1 -0
- package/dist/session/SessionManager.js +129 -0
- package/dist/session/SessionManager.js.map +1 -0
- package/dist/skills/HookAndSkillManager.d.ts +37 -0
- package/dist/skills/HookAndSkillManager.d.ts.map +1 -0
- package/dist/skills/HookAndSkillManager.js +141 -0
- package/dist/skills/HookAndSkillManager.js.map +1 -0
- package/dist/task/TaskEngine.d.ts +29 -0
- package/dist/task/TaskEngine.d.ts.map +1 -0
- package/dist/task/TaskEngine.js +117 -0
- package/dist/task/TaskEngine.js.map +1 -0
- package/dist/tools/CronManager.d.ts +22 -0
- package/dist/tools/CronManager.d.ts.map +1 -0
- package/dist/tools/CronManager.js +44 -0
- package/dist/tools/CronManager.js.map +1 -0
- package/dist/tools/NativeTools.d.ts +33 -0
- package/dist/tools/NativeTools.d.ts.map +1 -0
- package/dist/tools/NativeTools.js +175 -0
- package/dist/tools/NativeTools.js.map +1 -0
- package/dist/tools/Schemas.d.ts +365 -0
- package/dist/tools/Schemas.d.ts.map +1 -0
- package/dist/tools/Schemas.js +177 -0
- package/dist/tools/Schemas.js.map +1 -0
- package/dist/ui/InkUI.d.ts +2 -0
- package/dist/ui/InkUI.d.ts.map +1 -0
- package/dist/ui/InkUI.js +11 -0
- package/dist/ui/InkUI.js.map +1 -0
- package/package.json +18 -8
- package/dist/agents/runner.d.ts +0 -19
- package/dist/agents/runner.d.ts.map +0 -1
- package/dist/agents/runner.js +0 -170
- package/dist/agents/runner.js.map +0 -1
- package/dist/api/sylix.d.ts +0 -53
- package/dist/api/sylix.d.ts.map +0 -1
- package/dist/api/sylix.js +0 -237
- package/dist/api/sylix.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -371
- package/dist/cli.js.map +0 -1
- package/dist/commands/ask.d.ts +0 -2
- package/dist/commands/ask.d.ts.map +0 -1
- package/dist/commands/ask.js +0 -55
- package/dist/commands/ask.js.map +0 -1
- package/dist/commands/chat.d.ts +0 -8
- package/dist/commands/chat.d.ts.map +0 -1
- package/dist/commands/chat.js +0 -479
- package/dist/commands/chat.js.map +0 -1
- package/dist/commands/commit.d.ts +0 -2
- package/dist/commands/commit.d.ts.map +0 -1
- package/dist/commands/commit.js +0 -163
- package/dist/commands/commit.js.map +0 -1
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -101
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/edit.d.ts +0 -2
- package/dist/commands/edit.d.ts.map +0 -1
- package/dist/commands/edit.js +0 -112
- package/dist/commands/edit.js.map +0 -1
- package/dist/commands/explain.d.ts +0 -2
- package/dist/commands/explain.d.ts.map +0 -1
- package/dist/commands/explain.js +0 -99
- package/dist/commands/explain.js.map +0 -1
- package/dist/commands/login.d.ts +0 -2
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -151
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/review.d.ts +0 -2
- package/dist/commands/review.d.ts.map +0 -1
- package/dist/commands/review.js +0 -137
- package/dist/commands/review.js.map +0 -1
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -136
- package/dist/commands/run.js.map +0 -1
- package/dist/config/settings.d.ts +0 -33
- package/dist/config/settings.d.ts.map +0 -1
- package/dist/config/settings.js +0 -72
- package/dist/config/settings.js.map +0 -1
- package/dist/context/reader.d.ts +0 -24
- package/dist/context/reader.d.ts.map +0 -1
- package/dist/context/reader.js +0 -209
- package/dist/context/reader.js.map +0 -1
- package/dist/hooks/engine.d.ts +0 -9
- package/dist/hooks/engine.d.ts.map +0 -1
- package/dist/hooks/engine.js +0 -85
- package/dist/hooks/engine.js.map +0 -1
- package/dist/mcp/client.d.ts +0 -15
- package/dist/mcp/client.d.ts.map +0 -1
- package/dist/mcp/client.js +0 -211
- package/dist/mcp/client.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -46
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -196
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/loader.d.ts +0 -41
- package/dist/memory/loader.d.ts.map +0 -1
- package/dist/memory/loader.js +0 -249
- package/dist/memory/loader.js.map +0 -1
- package/dist/permissions/manager.d.ts +0 -7
- package/dist/permissions/manager.d.ts.map +0 -1
- package/dist/permissions/manager.js +0 -125
- package/dist/permissions/manager.js.map +0 -1
- package/dist/scripts/postinstall.d.ts +0 -7
- package/dist/scripts/postinstall.d.ts.map +0 -1
- package/dist/scripts/postinstall.js +0 -23
- package/dist/scripts/postinstall.js.map +0 -1
- package/dist/session/memory.d.ts +0 -6
- package/dist/session/memory.d.ts.map +0 -1
- package/dist/session/memory.js +0 -81
- package/dist/session/memory.js.map +0 -1
- package/dist/session/store.d.ts +0 -19
- package/dist/session/store.d.ts.map +0 -1
- package/dist/session/store.js +0 -94
- package/dist/session/store.js.map +0 -1
- package/dist/tools/bash.d.ts +0 -2
- package/dist/tools/bash.d.ts.map +0 -1
- package/dist/tools/bash.js +0 -40
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/chrome.d.ts +0 -10
- package/dist/tools/chrome.d.ts.map +0 -1
- package/dist/tools/chrome.js +0 -228
- package/dist/tools/chrome.js.map +0 -1
- package/dist/tools/edit.d.ts +0 -2
- package/dist/tools/edit.d.ts.map +0 -1
- package/dist/tools/edit.js +0 -67
- package/dist/tools/edit.js.map +0 -1
- package/dist/tools/glob.d.ts +0 -10
- package/dist/tools/glob.d.ts.map +0 -1
- package/dist/tools/glob.js +0 -245
- package/dist/tools/glob.js.map +0 -1
- package/dist/tools/grep.d.ts +0 -10
- package/dist/tools/grep.d.ts.map +0 -1
- package/dist/tools/grep.js +0 -252
- package/dist/tools/grep.js.map +0 -1
- package/dist/tools/ls.d.ts +0 -2
- package/dist/tools/ls.d.ts.map +0 -1
- package/dist/tools/ls.js +0 -75
- package/dist/tools/ls.js.map +0 -1
- package/dist/tools/read.d.ts +0 -2
- package/dist/tools/read.d.ts.map +0 -1
- package/dist/tools/read.js +0 -72
- package/dist/tools/read.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -3
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -281
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/schema.json +0 -508
- package/dist/tools/task.d.ts +0 -11
- package/dist/tools/task.d.ts.map +0 -1
- package/dist/tools/task.js +0 -118
- package/dist/tools/task.js.map +0 -1
- package/dist/tools/web.d.ts +0 -3
- package/dist/tools/web.d.ts.map +0 -1
- package/dist/tools/web.js +0 -113
- package/dist/tools/web.js.map +0 -1
- package/dist/tools/write.d.ts +0 -18
- package/dist/tools/write.d.ts.map +0 -1
- package/dist/tools/write.js +0 -122
- package/dist/tools/write.js.map +0 -1
- package/dist/utils/output.d.ts +0 -62
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -487
- package/dist/utils/output.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAqGA,wBAAsB,iBAAiB,kBAyHtC"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.bootstrapCoWorker = bootstrapCoWorker;
|
|
38
|
+
const commander_1 = require("commander");
|
|
39
|
+
const CoWorkerAgent_1 = require("../core/CoWorkerAgent");
|
|
40
|
+
const AuthManager_1 = require("../config/AuthManager");
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const http = __importStar(require("http"));
|
|
43
|
+
const ws_1 = require("ws");
|
|
44
|
+
const readline = __importStar(require("readline"));
|
|
45
|
+
/**
|
|
46
|
+
* CoWorker CLI — Interactive Agentic Coding Assistant.
|
|
47
|
+
* Default behavior: launches an interactive chat REPL (like Claude Code).
|
|
48
|
+
*/
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// INTERACTIVE CHAT REPL
|
|
51
|
+
// ============================================================================
|
|
52
|
+
async function runInteractiveChat(agent) {
|
|
53
|
+
const rl = readline.createInterface({
|
|
54
|
+
input: process.stdin,
|
|
55
|
+
output: process.stdout,
|
|
56
|
+
terminal: true
|
|
57
|
+
});
|
|
58
|
+
// Welcome banner
|
|
59
|
+
console.log('\n\x1b[36m╔══════════════════════════════════════════════════╗\x1b[0m');
|
|
60
|
+
console.log('\x1b[36m║\x1b[0m \x1b[1m🤖 CoWorker\x1b[0m by Sylix \x1b[36m║\x1b[0m');
|
|
61
|
+
console.log('\x1b[36m║\x1b[0m Autonomous AI Coding Agent \x1b[36m║\x1b[0m');
|
|
62
|
+
console.log('\x1b[36m╚══════════════════════════════════════════════════╝\x1b[0m');
|
|
63
|
+
console.log(`\x1b[90m cwd: ${process.cwd()}\x1b[0m`);
|
|
64
|
+
console.log(`\x1b[90m model: helix-1.2 | session: ${agent.sessions.currentSessionId.substring(0, 8)}...\x1b[0m`);
|
|
65
|
+
console.log(`\x1b[90m Type your prompt. Press Ctrl+C to exit.\x1b[0m\n`);
|
|
66
|
+
const prompt = () => {
|
|
67
|
+
return new Promise((resolve) => {
|
|
68
|
+
rl.question('\x1b[1m\x1b[36m>\x1b[0m ', (answer) => {
|
|
69
|
+
resolve(answer.trim());
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
// Main REPL loop
|
|
74
|
+
while (true) {
|
|
75
|
+
const input = await prompt();
|
|
76
|
+
// Handle special commands
|
|
77
|
+
if (!input)
|
|
78
|
+
continue;
|
|
79
|
+
if (input === '/exit' || input === '/quit') {
|
|
80
|
+
console.log('\n\x1b[90mGoodbye! 👋\x1b[0m\n');
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
if (input === '/clear') {
|
|
84
|
+
console.clear();
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (input === '/status') {
|
|
88
|
+
await AuthManager_1.AuthManager.status();
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (input === '/help') {
|
|
92
|
+
console.log(`
|
|
93
|
+
\x1b[36m Commands:\x1b[0m
|
|
94
|
+
/help Show this help
|
|
95
|
+
/clear Clear the screen
|
|
96
|
+
/status Show auth & session status
|
|
97
|
+
/compact Show context usage
|
|
98
|
+
/exit Exit CoWorker
|
|
99
|
+
`);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (input === '/compact') {
|
|
103
|
+
const msgCount = agent.sessions.state.messages.length;
|
|
104
|
+
const totalChars = agent.sessions.state.messages.reduce((a, m) => a + m.content.length, 0);
|
|
105
|
+
const estimatedTokens = Math.ceil(totalChars / 4);
|
|
106
|
+
console.log(`\x1b[90m Messages: ${msgCount} | Est. tokens: ${estimatedTokens}/12000 | Session: ${agent.sessions.currentSessionId.substring(0, 8)}\x1b[0m\n`);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
// Run the agentic loop
|
|
110
|
+
console.log(''); // blank line before response
|
|
111
|
+
try {
|
|
112
|
+
for await (const chunk of agent.chat(input)) {
|
|
113
|
+
process.stdout.write(chunk);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
console.error(`\n\x1b[31m✗ Error: ${err.message}\x1b[0m`);
|
|
118
|
+
}
|
|
119
|
+
console.log('\n'); // blank lines after response
|
|
120
|
+
}
|
|
121
|
+
rl.close();
|
|
122
|
+
process.exit(0);
|
|
123
|
+
}
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// CLI SETUP
|
|
126
|
+
// ============================================================================
|
|
127
|
+
async function bootstrapCoWorker() {
|
|
128
|
+
const program = new commander_1.Command();
|
|
129
|
+
program.allowUnknownOption();
|
|
130
|
+
program.passThroughOptions();
|
|
131
|
+
program
|
|
132
|
+
.name('coworker')
|
|
133
|
+
.description('CoWorker — Autonomous AI Coding Agent by Sylix')
|
|
134
|
+
.version('1.2.0')
|
|
135
|
+
.option('-p, --print', 'One-shot mode, process and exit')
|
|
136
|
+
.option('-c, --continue', 'Resume most recent session')
|
|
137
|
+
.option('-r, --resume <id>', 'Resume specific session UUID')
|
|
138
|
+
.option('-w, --worktree', 'Run in an isolated git worktree branch')
|
|
139
|
+
.option('--output-format <format>', 'text | json', 'text')
|
|
140
|
+
.option('--model <name>', 'Override default model', 'helix-1.2')
|
|
141
|
+
.option('--dangerously-skip-permissions', 'Bypass all security policies')
|
|
142
|
+
.option('--remote-control <port>', 'Start REST/WebSocket server for IDE access');
|
|
143
|
+
// ==================== AUTH COMMANDS ====================
|
|
144
|
+
program
|
|
145
|
+
.command('login')
|
|
146
|
+
.description('Authenticate with your Sylix account')
|
|
147
|
+
.action(async () => {
|
|
148
|
+
await AuthManager_1.AuthManager.login();
|
|
149
|
+
});
|
|
150
|
+
program
|
|
151
|
+
.command('logout')
|
|
152
|
+
.description('Remove saved credentials')
|
|
153
|
+
.action(async () => {
|
|
154
|
+
await AuthManager_1.AuthManager.logout();
|
|
155
|
+
});
|
|
156
|
+
program
|
|
157
|
+
.command('status')
|
|
158
|
+
.description('Show authentication and account status')
|
|
159
|
+
.action(async () => {
|
|
160
|
+
await AuthManager_1.AuthManager.status();
|
|
161
|
+
});
|
|
162
|
+
// ==================== UTILITY COMMANDS ====================
|
|
163
|
+
program
|
|
164
|
+
.command('update')
|
|
165
|
+
.description('Auto-update the CoWorker CLI')
|
|
166
|
+
.action(() => {
|
|
167
|
+
console.log('Downloading latest release...');
|
|
168
|
+
(0, child_process_1.spawnSync)('npm', ['install', '-g', '@sylix/coworker'], { stdio: 'inherit' });
|
|
169
|
+
process.exit(0);
|
|
170
|
+
});
|
|
171
|
+
program.parse(process.argv);
|
|
172
|
+
const options = program.opts();
|
|
173
|
+
// If a subcommand was run (login, logout, status, update), commander handles it
|
|
174
|
+
// and we should not continue. Check if args contain a known subcommand:
|
|
175
|
+
const subcommands = ['login', 'logout', 'status', 'update'];
|
|
176
|
+
if (process.argv.length > 2 && subcommands.includes(process.argv[2])) {
|
|
177
|
+
return; // Subcommand handles its own lifecycle
|
|
178
|
+
}
|
|
179
|
+
// ==================== WORKTREE ISOLATION ====================
|
|
180
|
+
if (options.worktree) {
|
|
181
|
+
console.log(`[Isolating Agent...] Creating Git Worktree: coworker-task`);
|
|
182
|
+
try {
|
|
183
|
+
(0, child_process_1.spawnSync)('git', ['worktree', 'add', '../coworker-task', '-b', `coworker/temp-${Date.now()}`]);
|
|
184
|
+
process.chdir('../coworker-task');
|
|
185
|
+
console.log(`[Isolated] Changed directory to protected worktree.`);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
console.error('Failed to create Git worktree. Ensure repo is clean.');
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// ==================== HEADLESS / REMOTE MODE ====================
|
|
193
|
+
if (options.remoteControl) {
|
|
194
|
+
const port = parseInt(options.remoteControl, 10);
|
|
195
|
+
startHeadlessServer(port);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// ==================== AGENT BOOTSTRAP ====================
|
|
199
|
+
let sessionId = undefined;
|
|
200
|
+
if (options.resume)
|
|
201
|
+
sessionId = options.resume;
|
|
202
|
+
else if (options.continue)
|
|
203
|
+
sessionId = 'latest';
|
|
204
|
+
const agent = new CoWorkerAgent_1.CoWorkerAgent({ model: options.model, role: 'General' });
|
|
205
|
+
if (sessionId) {
|
|
206
|
+
agent.sessions.currentSessionId = sessionId;
|
|
207
|
+
}
|
|
208
|
+
await agent.boot();
|
|
209
|
+
if (options.dangerouslySkipPermissions) {
|
|
210
|
+
console.log('\x1b[31m⚠️ WARNING: All permission checks are DISABLED.\x1b[0m');
|
|
211
|
+
agent.permissions = { intercept: async () => true };
|
|
212
|
+
}
|
|
213
|
+
// ==================== MODE SELECTION ====================
|
|
214
|
+
if (options.print && program.args.length > 0) {
|
|
215
|
+
// One-shot mode: process prompt and exit
|
|
216
|
+
await runOneShot(agent, program.args.join(' '), options.outputFormat);
|
|
217
|
+
}
|
|
218
|
+
else if (program.args.length > 0) {
|
|
219
|
+
// Prompt provided as args — run it, then drop into interactive
|
|
220
|
+
const initialPrompt = program.args.join(' ');
|
|
221
|
+
console.log(''); // spacing
|
|
222
|
+
for await (const chunk of agent.chat(initialPrompt)) {
|
|
223
|
+
process.stdout.write(chunk);
|
|
224
|
+
}
|
|
225
|
+
console.log('\n');
|
|
226
|
+
// Then drop into interactive mode
|
|
227
|
+
await runInteractiveChat(agent);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// No prompt — launch interactive chat REPL (default, like Claude Code)
|
|
231
|
+
await runInteractiveChat(agent);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// ============================================================================
|
|
235
|
+
// ONE-SHOT MODE
|
|
236
|
+
// ============================================================================
|
|
237
|
+
async function runOneShot(agent, prompt, format) {
|
|
238
|
+
let outputText = '';
|
|
239
|
+
for await (const chunk of agent.chat(prompt)) {
|
|
240
|
+
if (format === 'text') {
|
|
241
|
+
process.stdout.write(chunk);
|
|
242
|
+
}
|
|
243
|
+
outputText += chunk;
|
|
244
|
+
}
|
|
245
|
+
if (format === 'json') {
|
|
246
|
+
console.log(JSON.stringify({ response: outputText }));
|
|
247
|
+
}
|
|
248
|
+
process.exit(0);
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// HEADLESS / REMOTE CONTROL SERVER
|
|
252
|
+
// ============================================================================
|
|
253
|
+
function startHeadlessServer(port) {
|
|
254
|
+
const server = http.createServer();
|
|
255
|
+
const wss = new ws_1.WebSocketServer({ server });
|
|
256
|
+
wss.on('connection', (ws) => {
|
|
257
|
+
console.log('[Remote-Control] IDE Connected via WebSocket');
|
|
258
|
+
const remoteAgent = new CoWorkerAgent_1.CoWorkerAgent({ model: 'helix-1.2', role: 'General' });
|
|
259
|
+
ws.on('message', async (data) => {
|
|
260
|
+
const { prompt, sessionId } = JSON.parse(data.toString());
|
|
261
|
+
if (sessionId)
|
|
262
|
+
remoteAgent.sessions.currentSessionId = sessionId;
|
|
263
|
+
for await (const chunk of remoteAgent.chat(prompt)) {
|
|
264
|
+
ws.send(JSON.stringify({ type: 'stream', chunk }));
|
|
265
|
+
}
|
|
266
|
+
ws.send(JSON.stringify({ type: 'done' }));
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
server.listen(port, () => {
|
|
270
|
+
console.log(`[Remote-Control] Listening for headless connections on port ${port}...`);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
// Self-execute
|
|
274
|
+
if (require.main === module) {
|
|
275
|
+
bootstrapCoWorker();
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqGA,8CAyHC;AA7ND,yCAAoC;AACpC,yDAAsD;AACtD,uDAAoD;AACpD,iDAA0C;AAC1C,2CAA6B;AAC7B,2BAAqC;AACrC,mDAAqC;AAIrC;;;GAGG;AAEH,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,KAAK,UAAU,kBAAkB,CAAC,KAAoB;IACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,iGAAiG,CAAC,CAAC;IAC/G,OAAO,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IAClH,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,GAAoB,EAAE;QACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,EAAE,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC,MAAc,EAAE,EAAE;gBACzD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,iBAAiB;IACjB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,MAAM,EAAE,CAAC;QAE7B,0BAA0B;QAC1B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,MAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,yBAAW,CAAC,MAAM,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOjB,CAAC,CAAC;YACG,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3F,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,mBAAmB,eAAe,qBAAqB,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;YAC9J,SAAS;QACX,CAAC;QAED,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,6BAA6B;QAC9C,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B;IAClD,CAAC;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAExE,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAC7B,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAE7B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC;SACxD,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;SAC3D,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAClE,MAAM,CAAC,0BAA0B,EAAE,aAAa,EAAE,MAAM,CAAC;SACzD,MAAM,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,WAAW,CAAC;SAC/D,MAAM,CAAC,gCAAgC,EAAE,8BAA8B,CAAC;SACxE,MAAM,CAAC,yBAAyB,EAAE,4CAA4C,CAAC,CAAC;IAEnF,0DAA0D;IAE1D,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,yBAAW,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,yBAAW,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,yBAAW,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,6DAA6D;IAE7D,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,IAAA,yBAAS,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,gFAAgF;IAChF,wEAAwE;IACxE,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,uCAAuC;IACjD,CAAC;IAED,+DAA+D;IAE/D,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,IAAA,yBAAS,EAAC,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/F,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,mEAAmE;IAEnE,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjD,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,4DAA4D;IAE5D,IAAI,SAAS,GAAG,SAAS,CAAC;IAC1B,IAAI,OAAO,CAAC,MAAM;QAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;SAC1C,IAAI,OAAO,CAAC,QAAQ;QAAE,SAAS,GAAG,QAAQ,CAAC;IAEhD,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,KAAK,CAAC,WAAW,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,EAAS,CAAC;IAC7D,CAAC;IAED,2DAA2D;IAE3D,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,yCAAyC;QACzC,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,+DAA+D;QAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;QAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,kCAAkC;QAClC,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,uEAAuE;QACvE,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,KAAK,UAAU,UAAU,CAAC,KAAoB,EAAE,MAAc,EAAE,MAAc;IAC5E,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,UAAU,IAAI,KAAK,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAE/E,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,oBAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAE5D,MAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAE/E,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,IAAI,SAAS;gBAAE,WAAW,CAAC,QAAQ,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAEjE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;YACD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,+DAA+D,IAAI,KAAK,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,eAAe;AACf,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface AuthData {
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token: string;
|
|
4
|
+
user: {
|
|
5
|
+
id: string;
|
|
6
|
+
email: string;
|
|
7
|
+
};
|
|
8
|
+
expires_at: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Manages Device Code OAuth authentication for the CoWorker CLI.
|
|
12
|
+
* Flow: CLI requests device code → user authorizes on website → CLI polls for token.
|
|
13
|
+
*/
|
|
14
|
+
export declare class AuthManager {
|
|
15
|
+
/**
|
|
16
|
+
* Device Code login flow — opens browser, polls for authorization.
|
|
17
|
+
*/
|
|
18
|
+
static login(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Removes saved credentials.
|
|
21
|
+
*/
|
|
22
|
+
static logout(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Shows current authentication status.
|
|
25
|
+
*/
|
|
26
|
+
static status(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the stored access token, or null if not logged in.
|
|
29
|
+
*/
|
|
30
|
+
static getToken(): Promise<string | null>;
|
|
31
|
+
private static loadAuth;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=AuthManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../../src/config/AuthManager.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,WAAW;IAEtB;;OAEG;WACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyFnC;;OAEG;WACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IASpC;;OAEG;WACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBpC;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;mBAO1B,QAAQ;CAQ9B"}
|
|
@@ -0,0 +1,181 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AuthManager = void 0;
|
|
40
|
+
const fs = __importStar(require("fs/promises"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
44
|
+
const AUTH_FILE = path.join(os.homedir(), '.coworker', 'auth.json');
|
|
45
|
+
const API_BASE = 'https://api.sylixide.com/v1/auth';
|
|
46
|
+
/**
|
|
47
|
+
* Manages Device Code OAuth authentication for the CoWorker CLI.
|
|
48
|
+
* Flow: CLI requests device code → user authorizes on website → CLI polls for token.
|
|
49
|
+
*/
|
|
50
|
+
class AuthManager {
|
|
51
|
+
/**
|
|
52
|
+
* Device Code login flow — opens browser, polls for authorization.
|
|
53
|
+
*/
|
|
54
|
+
static async login() {
|
|
55
|
+
const deviceId = `coworker-cli-${os.hostname()}-${Date.now().toString(36)}`;
|
|
56
|
+
console.log('\n\x1b[36m🔐 CoWorker Login\x1b[0m\n');
|
|
57
|
+
console.log('Requesting device code...');
|
|
58
|
+
// Step 1: Request device code
|
|
59
|
+
let codeResponse;
|
|
60
|
+
try {
|
|
61
|
+
const res = await (0, node_fetch_1.default)(`${API_BASE}/device/code`, {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: { 'Content-Type': 'application/json' },
|
|
64
|
+
body: JSON.stringify({ device_id: deviceId, device_name: 'CoWorker CLI' })
|
|
65
|
+
});
|
|
66
|
+
codeResponse = await res.json();
|
|
67
|
+
if (!codeResponse.success) {
|
|
68
|
+
console.error(`\x1b[31m✗ Failed to get device code: ${codeResponse.error_description || codeResponse.error}\x1b[0m`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
console.error(`\x1b[31m✗ Could not connect to Sylix servers: ${err.message}\x1b[0m`);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const { device_code, user_code, verification_uri_complete } = codeResponse;
|
|
77
|
+
// Step 2: Show code and open browser
|
|
78
|
+
console.log(`\n Your one-time code: \x1b[1m\x1b[33m${user_code}\x1b[0m\n`);
|
|
79
|
+
console.log(` Open this URL to authorize:\n \x1b[4m${verification_uri_complete}\x1b[0m\n`);
|
|
80
|
+
// Try to open browser
|
|
81
|
+
try {
|
|
82
|
+
const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
|
|
83
|
+
await open(verification_uri_complete);
|
|
84
|
+
console.log(' \x1b[32m✓ Browser opened automatically\x1b[0m');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
console.log(' (Open the URL above manually in your browser)');
|
|
88
|
+
}
|
|
89
|
+
console.log('\n Waiting for authorization...\n');
|
|
90
|
+
// Step 3: Poll for token
|
|
91
|
+
const maxAttempts = 360; // 30 minutes at 5s intervals
|
|
92
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
93
|
+
await new Promise(r => setTimeout(r, 5000)); // 5 second interval
|
|
94
|
+
try {
|
|
95
|
+
const res = await (0, node_fetch_1.default)(`${API_BASE}/device/token`, {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers: { 'Content-Type': 'application/json' },
|
|
98
|
+
body: JSON.stringify({ device_code })
|
|
99
|
+
});
|
|
100
|
+
const tokenData = await res.json();
|
|
101
|
+
if (tokenData.success) {
|
|
102
|
+
// Save token
|
|
103
|
+
const authData = {
|
|
104
|
+
access_token: tokenData.access_token,
|
|
105
|
+
refresh_token: tokenData.refresh_token,
|
|
106
|
+
user: tokenData.user,
|
|
107
|
+
expires_at: Math.floor(Date.now() / 1000) + tokenData.expires_in
|
|
108
|
+
};
|
|
109
|
+
await fs.mkdir(path.dirname(AUTH_FILE), { recursive: true });
|
|
110
|
+
await fs.writeFile(AUTH_FILE, JSON.stringify(authData, null, 2), 'utf8');
|
|
111
|
+
console.log(` \x1b[32m✓ Logged in as \x1b[1m${tokenData.user.email}\x1b[0m\n`);
|
|
112
|
+
process.exit(0);
|
|
113
|
+
}
|
|
114
|
+
if (tokenData.error === 'authorization_pending') {
|
|
115
|
+
process.stdout.write('.');
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// Any other error is terminal
|
|
119
|
+
console.error(`\n\x1b[31m✗ ${tokenData.error_description || tokenData.error}\x1b[0m`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
// Network error during poll — retry
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
console.error('\n\x1b[31m✗ Login timed out. Please try again.\x1b[0m');
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Removes saved credentials.
|
|
132
|
+
*/
|
|
133
|
+
static async logout() {
|
|
134
|
+
try {
|
|
135
|
+
await fs.unlink(AUTH_FILE);
|
|
136
|
+
console.log('\x1b[32m✓ Logged out successfully.\x1b[0m');
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
console.log('Already logged out (no saved credentials).');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Shows current authentication status.
|
|
144
|
+
*/
|
|
145
|
+
static async status() {
|
|
146
|
+
const authData = await this.loadAuth();
|
|
147
|
+
if (!authData) {
|
|
148
|
+
console.log('\x1b[33m⚠ Not logged in.\x1b[0m Run \x1b[1mcoworker login\x1b[0m to authenticate.');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const expiresDate = new Date(authData.expires_at * 1000);
|
|
152
|
+
const isExpired = Date.now() > authData.expires_at * 1000;
|
|
153
|
+
console.log(`\n\x1b[36m🔐 CoWorker Auth Status\x1b[0m\n`);
|
|
154
|
+
console.log(` Account: \x1b[1m${authData.user.email}\x1b[0m`);
|
|
155
|
+
console.log(` User ID: ${authData.user.id}`);
|
|
156
|
+
console.log(` Expires: ${expiresDate.toLocaleDateString()} ${expiresDate.toLocaleTimeString()}`);
|
|
157
|
+
console.log(` Status: ${isExpired ? '\x1b[31mExpired\x1b[0m — run \x1b[1mcoworker login\x1b[0m' : '\x1b[32mActive\x1b[0m'}\n`);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Returns the stored access token, or null if not logged in.
|
|
161
|
+
*/
|
|
162
|
+
static async getToken() {
|
|
163
|
+
const authData = await this.loadAuth();
|
|
164
|
+
if (!authData)
|
|
165
|
+
return null;
|
|
166
|
+
if (Date.now() > authData.expires_at * 1000)
|
|
167
|
+
return null;
|
|
168
|
+
return authData.access_token;
|
|
169
|
+
}
|
|
170
|
+
static async loadAuth() {
|
|
171
|
+
try {
|
|
172
|
+
const content = await fs.readFile(AUTH_FILE, 'utf8');
|
|
173
|
+
return JSON.parse(content);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.AuthManager = AuthManager;
|
|
181
|
+
//# sourceMappingURL=AuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../../src/config/AuthManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,uCAAyB;AACzB,4DAA+B;AAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACpE,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AASpD;;;GAGG;AACH,MAAa,WAAW;IAEtB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAE5E,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEzC,8BAA8B;QAC9B,IAAI,YAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,QAAQ,cAAc,EAAE;gBACjD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;aAC3E,CAAC,CAAC;YACH,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,wCAAwC,YAAY,CAAC,iBAAiB,IAAI,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC;gBACrH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,iDAAiD,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE,GAAG,YAAY,CAAC;QAE3E,qCAAqC;QACrC,OAAO,CAAC,GAAG,CAAC,2CAA2C,SAAS,WAAW,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,2CAA2C,yBAAyB,WAAW,CAAC,CAAC;QAE7F,sBAAsB;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,wDAAa,MAAM,GAAC,CAAC,CAAC,OAAO,CAAC;YAC5C,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAElD,yBAAyB;QACzB,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,6BAA6B;QACtD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB;YAEjE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,QAAQ,eAAe,EAAE;oBAClD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;iBACtC,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;gBAE1C,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACtB,aAAa;oBACb,MAAM,QAAQ,GAAa;wBACzB,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,aAAa,EAAE,SAAS,CAAC,aAAa;wBACtC,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC,UAAU;qBACjE,CAAC;oBAEF,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAEzE,OAAO,CAAC,GAAG,CAAC,mCAAmC,SAAS,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC;oBAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,IAAI,SAAS,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;oBAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBAED,8BAA8B;gBAC9B,OAAO,CAAC,KAAK,CAAC,eAAe,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,oCAAoC;gBACpC,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1D,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,kBAAkB,EAAE,IAAI,WAAW,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC;IACpI,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;QACzD,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC/B,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,QAAQ;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAhJD,kCAgJC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface CoWorkerSettings {
|
|
2
|
+
allow: string[];
|
|
3
|
+
deny: string[];
|
|
4
|
+
mcpServers: Record<string, {
|
|
5
|
+
command: string;
|
|
6
|
+
args: string[];
|
|
7
|
+
}>;
|
|
8
|
+
worktree: {
|
|
9
|
+
symlinkDirectories: string[];
|
|
10
|
+
sparsePaths: string[];
|
|
11
|
+
};
|
|
12
|
+
mainBranch: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Phase 8: Settings JSON Parser.
|
|
16
|
+
* Loads user configurations from ~/.coworker/settings.json or the local project directory.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SettingsManager {
|
|
19
|
+
private globalPath;
|
|
20
|
+
private localPath;
|
|
21
|
+
config: CoWorkerSettings;
|
|
22
|
+
loadSettings(): Promise<CoWorkerSettings>;
|
|
23
|
+
private merge;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=SettingsManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsManager.d.ts","sourceRoot":"","sources":["../../src/config/SettingsManager.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,EAAE;QACR,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAyD;IAC3E,OAAO,CAAC,SAAS,CAA0D;IAEpE,MAAM,EAAE,gBAAgB,CAS7B;IAEI,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAsB/C,OAAO,CAAC,KAAK;CAWd"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SettingsManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs/promises"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
/**
|
|
41
|
+
* Phase 8: Settings JSON Parser.
|
|
42
|
+
* Loads user configurations from ~/.coworker/settings.json or the local project directory.
|
|
43
|
+
*/
|
|
44
|
+
class SettingsManager {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.globalPath = path.join(os.homedir(), '.coworker', 'settings.json');
|
|
47
|
+
this.localPath = path.join(process.cwd(), '.coworker', 'settings.json');
|
|
48
|
+
this.config = {
|
|
49
|
+
allow: [],
|
|
50
|
+
deny: [],
|
|
51
|
+
mcpServers: {},
|
|
52
|
+
worktree: {
|
|
53
|
+
symlinkDirectories: ['node_modules'],
|
|
54
|
+
sparsePaths: []
|
|
55
|
+
},
|
|
56
|
+
mainBranch: 'main'
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async loadSettings() {
|
|
60
|
+
try {
|
|
61
|
+
// Load global first
|
|
62
|
+
const globalData = await fs.readFile(this.globalPath, 'utf8');
|
|
63
|
+
const globalParsed = JSON.parse(globalData);
|
|
64
|
+
this.merge(globalParsed);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Global doesn't exist
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
// Override with local
|
|
71
|
+
const localData = await fs.readFile(this.localPath, 'utf8');
|
|
72
|
+
const localParsed = JSON.parse(localData);
|
|
73
|
+
this.merge(localParsed);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Local doesn't exist
|
|
77
|
+
}
|
|
78
|
+
return this.config;
|
|
79
|
+
}
|
|
80
|
+
merge(partial) {
|
|
81
|
+
if (partial.allow)
|
|
82
|
+
this.config.allow.push(...partial.allow);
|
|
83
|
+
if (partial.deny)
|
|
84
|
+
this.config.deny.push(...partial.deny);
|
|
85
|
+
if (partial.mcpServers) {
|
|
86
|
+
this.config.mcpServers = { ...this.config.mcpServers, ...partial.mcpServers };
|
|
87
|
+
}
|
|
88
|
+
if (partial.mainBranch)
|
|
89
|
+
this.config.mainBranch = partial.mainBranch;
|
|
90
|
+
if (partial.worktree) {
|
|
91
|
+
this.config.worktree = { ...this.config.worktree, ...partial.worktree };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.SettingsManager = SettingsManager;
|
|
96
|
+
//# sourceMappingURL=SettingsManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsManager.js","sourceRoot":"","sources":["../../src/config/SettingsManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,uCAAyB;AAazB;;;GAGG;AACH,MAAa,eAAe;IAA5B;QACU,eAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACnE,cAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAEpE,WAAM,GAAqB;YAChC,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE;gBACR,kBAAkB,EAAE,CAAC,cAAc,CAAC;gBACpC,WAAW,EAAE,EAAE;aAChB;YACD,UAAU,EAAE,MAAM;SACnB,CAAC;IAmCJ,CAAC;IAjCC,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QAED,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,OAAkC;QAC9C,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACpE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;CACF;AAhDD,0CAgDC"}
|