@sylix/coworker 1.2.0 → 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.
@@ -1,7 +1,3 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Phase 4: CLI Flags & Headless IDE Modes.
4
- * The absolute entry point uniting all 16 features.
5
- */
6
2
  export declare function bootstrapCoWorker(): Promise<void>;
7
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAOA;;;GAGG;AACH,wBAAsB,iBAAiB,kBAqGtC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAqGA,wBAAsB,iBAAiB,kBAyHtC"}
package/dist/cli/index.js CHANGED
@@ -37,30 +37,101 @@ Object.defineProperty(exports, "__esModule", { value: true });
37
37
  exports.bootstrapCoWorker = bootstrapCoWorker;
38
38
  const commander_1 = require("commander");
39
39
  const CoWorkerAgent_1 = require("../core/CoWorkerAgent");
40
+ const AuthManager_1 = require("../config/AuthManager");
40
41
  const child_process_1 = require("child_process");
41
42
  const http = __importStar(require("http"));
42
43
  const ws_1 = require("ws");
44
+ const readline = __importStar(require("readline"));
43
45
  /**
44
- * Phase 4: CLI Flags & Headless IDE Modes.
45
- * The absolute entry point uniting all 16 features.
46
+ * CoWorker CLI Interactive Agentic Coding Assistant.
47
+ * Default behavior: launches an interactive chat REPL (like Claude Code).
46
48
  */
47
- async function bootstrapCoWorker() {
48
- // Dynamic import for optional InkUI
49
- let renderCoWorkerUI;
50
- try {
51
- const inkModule = await Promise.resolve().then(() => __importStar(require('../ui/InkUI')));
52
- renderCoWorkerUI = inkModule.renderCoWorkerUI;
53
- }
54
- catch (e) {
55
- // InkUI not available - will use text mode
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
56
120
  }
121
+ rl.close();
122
+ process.exit(0);
123
+ }
124
+ // ============================================================================
125
+ // CLI SETUP
126
+ // ============================================================================
127
+ async function bootstrapCoWorker() {
57
128
  const program = new commander_1.Command();
58
129
  program.allowUnknownOption();
59
130
  program.passThroughOptions();
60
131
  program
61
132
  .name('coworker')
62
- .description('Autonomous Agentic Parity to Claude Code')
63
- .version('1.0.0')
133
+ .description('CoWorker — Autonomous AI Coding Agent by Sylix')
134
+ .version('1.2.0')
64
135
  .option('-p, --print', 'One-shot mode, process and exit')
65
136
  .option('-c, --continue', 'Resume most recent session')
66
137
  .option('-r, --resume <id>', 'Resume specific session UUID')
@@ -69,24 +140,43 @@ async function bootstrapCoWorker() {
69
140
  .option('--model <name>', 'Override default model', 'helix-1.2')
70
141
  .option('--dangerously-skip-permissions', 'Bypass all security policies')
71
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 ====================
72
163
  program
73
164
  .command('update')
74
165
  .description('Auto-update the CoWorker CLI')
75
166
  .action(() => {
76
167
  console.log('Downloading latest release...');
77
- (0, child_process_1.spawnSync)('npm', ['install', '-g', 'coworker'], { stdio: 'inherit' });
78
- process.exit(0);
79
- });
80
- program
81
- .command('auth <action>')
82
- .description('Manage authentication (login/logout/status)')
83
- .action((action) => {
84
- console.log(`Authentication ${action} is active.`);
168
+ (0, child_process_1.spawnSync)('npm', ['install', '-g', '@sylix/coworker'], { stdio: 'inherit' });
85
169
  process.exit(0);
86
170
  });
87
171
  program.parse(process.argv);
88
172
  const options = program.opts();
89
- console.error('DEBUG: args =', program.args, 'opts =', options);
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 ====================
90
180
  if (options.worktree) {
91
181
  console.log(`[Isolating Agent...] Creating Git Worktree: coworker-task`);
92
182
  try {
@@ -99,12 +189,13 @@ async function bootstrapCoWorker() {
99
189
  process.exit(1);
100
190
  }
101
191
  }
192
+ // ==================== HEADLESS / REMOTE MODE ====================
102
193
  if (options.remoteControl) {
103
194
  const port = parseInt(options.remoteControl, 10);
104
195
  startHeadlessServer(port);
105
196
  return;
106
197
  }
107
- // Determine resuming logic
198
+ // ==================== AGENT BOOTSTRAP ====================
108
199
  let sessionId = undefined;
109
200
  if (options.resume)
110
201
  sessionId = options.resume;
@@ -114,36 +205,37 @@ async function bootstrapCoWorker() {
114
205
  if (sessionId) {
115
206
  agent.sessions.currentSessionId = sessionId;
116
207
  }
117
- // Boot async subsystems (Settings, MCP servers, Skills)
118
208
  await agent.boot();
119
- // Apply --dangerously-skip-permissions if provided
120
209
  if (options.dangerouslySkipPermissions) {
121
210
  console.log('\x1b[31m⚠️ WARNING: All permission checks are DISABLED.\x1b[0m');
122
211
  agent.permissions = { intercept: async () => true };
123
212
  }
124
- // One shot processing mode
213
+ // ==================== MODE SELECTION ====================
125
214
  if (options.print && program.args.length > 0) {
126
- runOneShot(agent, program.args.join(' '), options.outputFormat);
215
+ // One-shot mode: process prompt and exit
216
+ await runOneShot(agent, program.args.join(' '), options.outputFormat);
127
217
  }
128
- else if (renderCoWorkerUI) {
129
- // Launch the React Ink Terminal UI for interactive mode
130
- const prompt = program.args.length > 0 ? program.args.join(' ') : undefined;
131
- renderCoWorkerUI(agent, prompt);
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);
132
228
  }
133
229
  else {
134
- // Fallback: use one-shot mode for prompts
135
- const prompt = program.args.length > 0 ? program.args.join(' ') : undefined;
136
- if (prompt) {
137
- runOneShot(agent, prompt, options.outputFormat);
138
- }
139
- else {
140
- console.log('CoWorker ready. Use --print to send a prompt.');
141
- }
230
+ // No prompt launch interactive chat REPL (default, like Claude Code)
231
+ await runInteractiveChat(agent);
142
232
  }
143
233
  }
234
+ // ============================================================================
235
+ // ONE-SHOT MODE
236
+ // ============================================================================
144
237
  async function runOneShot(agent, prompt, format) {
145
238
  let outputText = '';
146
- // Stream the generator
147
239
  for await (const chunk of agent.chat(prompt)) {
148
240
  if (format === 'text') {
149
241
  process.stdout.write(chunk);
@@ -155,12 +247,14 @@ async function runOneShot(agent, prompt, format) {
155
247
  }
156
248
  process.exit(0);
157
249
  }
250
+ // ============================================================================
251
+ // HEADLESS / REMOTE CONTROL SERVER
252
+ // ============================================================================
158
253
  function startHeadlessServer(port) {
159
254
  const server = http.createServer();
160
255
  const wss = new ws_1.WebSocketServer({ server });
161
256
  wss.on('connection', (ws) => {
162
257
  console.log('[Remote-Control] IDE Connected via WebSocket');
163
- // Each IDE window instance gets its own agent session tracking
164
258
  const remoteAgent = new CoWorkerAgent_1.CoWorkerAgent({ model: 'helix-1.2', role: 'General' });
165
259
  ws.on('message', async (data) => {
166
260
  const { prompt, sessionId } = JSON.parse(data.toString());
@@ -176,7 +270,7 @@ function startHeadlessServer(port) {
176
270
  console.log(`[Remote-Control] Listening for headless connections on port ${port}...`);
177
271
  });
178
272
  }
179
- // Self-execute if this file is directly run
273
+ // Self-execute
180
274
  if (require.main === module) {
181
275
  bootstrapCoWorker();
182
276
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sylix/coworker",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "CoWorker by Sylix - AI-powered CLI coding assistant",
5
5
  "main": "dist/cli/index.js",
6
6
  "bin": {