@sylix/coworker 1.1.4 → 1.2.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.
Files changed (186) hide show
  1. package/dist/cli/index.d.ts +7 -0
  2. package/dist/cli/index.d.ts.map +1 -0
  3. package/dist/cli/index.js +183 -0
  4. package/dist/cli/index.js.map +1 -0
  5. package/dist/config/SettingsManager.d.ts +25 -0
  6. package/dist/config/SettingsManager.d.ts.map +1 -0
  7. package/dist/config/SettingsManager.js +96 -0
  8. package/dist/config/SettingsManager.js.map +1 -0
  9. package/dist/core/CoWorkerAgent.d.ts +52 -0
  10. package/dist/core/CoWorkerAgent.d.ts.map +1 -0
  11. package/dist/core/CoWorkerAgent.js +308 -0
  12. package/dist/core/CoWorkerAgent.js.map +1 -0
  13. package/dist/mcp/MCPClientManager.d.ts +30 -0
  14. package/dist/mcp/MCPClientManager.d.ts.map +1 -0
  15. package/dist/mcp/MCPClientManager.js +100 -0
  16. package/dist/mcp/MCPClientManager.js.map +1 -0
  17. package/dist/permissions/PermissionInterceptor.d.ts +21 -0
  18. package/dist/permissions/PermissionInterceptor.d.ts.map +1 -0
  19. package/dist/permissions/PermissionInterceptor.js +104 -0
  20. package/dist/permissions/PermissionInterceptor.js.map +1 -0
  21. package/dist/session/SessionManager.d.ts +38 -0
  22. package/dist/session/SessionManager.d.ts.map +1 -0
  23. package/dist/session/SessionManager.js +129 -0
  24. package/dist/session/SessionManager.js.map +1 -0
  25. package/dist/skills/HookAndSkillManager.d.ts +37 -0
  26. package/dist/skills/HookAndSkillManager.d.ts.map +1 -0
  27. package/dist/skills/HookAndSkillManager.js +141 -0
  28. package/dist/skills/HookAndSkillManager.js.map +1 -0
  29. package/dist/task/TaskEngine.d.ts +29 -0
  30. package/dist/task/TaskEngine.d.ts.map +1 -0
  31. package/dist/task/TaskEngine.js +117 -0
  32. package/dist/task/TaskEngine.js.map +1 -0
  33. package/dist/tools/CronManager.d.ts +22 -0
  34. package/dist/tools/CronManager.d.ts.map +1 -0
  35. package/dist/tools/CronManager.js +44 -0
  36. package/dist/tools/CronManager.js.map +1 -0
  37. package/dist/tools/NativeTools.d.ts +33 -0
  38. package/dist/tools/NativeTools.d.ts.map +1 -0
  39. package/dist/tools/NativeTools.js +175 -0
  40. package/dist/tools/NativeTools.js.map +1 -0
  41. package/dist/tools/Schemas.d.ts +365 -0
  42. package/dist/tools/Schemas.d.ts.map +1 -0
  43. package/dist/tools/Schemas.js +177 -0
  44. package/dist/tools/Schemas.js.map +1 -0
  45. package/dist/ui/InkUI.d.ts +2 -0
  46. package/dist/ui/InkUI.d.ts.map +1 -0
  47. package/dist/ui/InkUI.js +11 -0
  48. package/dist/ui/InkUI.js.map +1 -0
  49. package/package.json +18 -8
  50. package/dist/agents/runner.d.ts +0 -19
  51. package/dist/agents/runner.d.ts.map +0 -1
  52. package/dist/agents/runner.js +0 -170
  53. package/dist/agents/runner.js.map +0 -1
  54. package/dist/api/sylix.d.ts +0 -53
  55. package/dist/api/sylix.d.ts.map +0 -1
  56. package/dist/api/sylix.js +0 -237
  57. package/dist/api/sylix.js.map +0 -1
  58. package/dist/cli.d.ts +0 -3
  59. package/dist/cli.d.ts.map +0 -1
  60. package/dist/cli.js +0 -369
  61. package/dist/cli.js.map +0 -1
  62. package/dist/commands/ask.d.ts +0 -2
  63. package/dist/commands/ask.d.ts.map +0 -1
  64. package/dist/commands/ask.js +0 -55
  65. package/dist/commands/ask.js.map +0 -1
  66. package/dist/commands/chat.d.ts +0 -8
  67. package/dist/commands/chat.d.ts.map +0 -1
  68. package/dist/commands/chat.js +0 -479
  69. package/dist/commands/chat.js.map +0 -1
  70. package/dist/commands/commit.d.ts +0 -2
  71. package/dist/commands/commit.d.ts.map +0 -1
  72. package/dist/commands/commit.js +0 -163
  73. package/dist/commands/commit.js.map +0 -1
  74. package/dist/commands/config.d.ts +0 -3
  75. package/dist/commands/config.d.ts.map +0 -1
  76. package/dist/commands/config.js +0 -101
  77. package/dist/commands/config.js.map +0 -1
  78. package/dist/commands/edit.d.ts +0 -2
  79. package/dist/commands/edit.d.ts.map +0 -1
  80. package/dist/commands/edit.js +0 -112
  81. package/dist/commands/edit.js.map +0 -1
  82. package/dist/commands/explain.d.ts +0 -2
  83. package/dist/commands/explain.d.ts.map +0 -1
  84. package/dist/commands/explain.js +0 -99
  85. package/dist/commands/explain.js.map +0 -1
  86. package/dist/commands/login.d.ts +0 -2
  87. package/dist/commands/login.d.ts.map +0 -1
  88. package/dist/commands/login.js +0 -151
  89. package/dist/commands/login.js.map +0 -1
  90. package/dist/commands/review.d.ts +0 -2
  91. package/dist/commands/review.d.ts.map +0 -1
  92. package/dist/commands/review.js +0 -137
  93. package/dist/commands/review.js.map +0 -1
  94. package/dist/commands/run.d.ts +0 -2
  95. package/dist/commands/run.d.ts.map +0 -1
  96. package/dist/commands/run.js +0 -136
  97. package/dist/commands/run.js.map +0 -1
  98. package/dist/config/settings.d.ts +0 -33
  99. package/dist/config/settings.d.ts.map +0 -1
  100. package/dist/config/settings.js +0 -72
  101. package/dist/config/settings.js.map +0 -1
  102. package/dist/context/reader.d.ts +0 -24
  103. package/dist/context/reader.d.ts.map +0 -1
  104. package/dist/context/reader.js +0 -209
  105. package/dist/context/reader.js.map +0 -1
  106. package/dist/hooks/engine.d.ts +0 -9
  107. package/dist/hooks/engine.d.ts.map +0 -1
  108. package/dist/hooks/engine.js +0 -85
  109. package/dist/hooks/engine.js.map +0 -1
  110. package/dist/mcp/client.d.ts +0 -15
  111. package/dist/mcp/client.d.ts.map +0 -1
  112. package/dist/mcp/client.js +0 -211
  113. package/dist/mcp/client.js.map +0 -1
  114. package/dist/mcp/transport.d.ts +0 -46
  115. package/dist/mcp/transport.d.ts.map +0 -1
  116. package/dist/mcp/transport.js +0 -196
  117. package/dist/mcp/transport.js.map +0 -1
  118. package/dist/memory/loader.d.ts +0 -41
  119. package/dist/memory/loader.d.ts.map +0 -1
  120. package/dist/memory/loader.js +0 -249
  121. package/dist/memory/loader.js.map +0 -1
  122. package/dist/permissions/manager.d.ts +0 -7
  123. package/dist/permissions/manager.d.ts.map +0 -1
  124. package/dist/permissions/manager.js +0 -125
  125. package/dist/permissions/manager.js.map +0 -1
  126. package/dist/scripts/postinstall.d.ts +0 -7
  127. package/dist/scripts/postinstall.d.ts.map +0 -1
  128. package/dist/scripts/postinstall.js +0 -23
  129. package/dist/scripts/postinstall.js.map +0 -1
  130. package/dist/session/memory.d.ts +0 -6
  131. package/dist/session/memory.d.ts.map +0 -1
  132. package/dist/session/memory.js +0 -81
  133. package/dist/session/memory.js.map +0 -1
  134. package/dist/session/store.d.ts +0 -19
  135. package/dist/session/store.d.ts.map +0 -1
  136. package/dist/session/store.js +0 -94
  137. package/dist/session/store.js.map +0 -1
  138. package/dist/tools/bash.d.ts +0 -2
  139. package/dist/tools/bash.d.ts.map +0 -1
  140. package/dist/tools/bash.js +0 -40
  141. package/dist/tools/bash.js.map +0 -1
  142. package/dist/tools/chrome.d.ts +0 -10
  143. package/dist/tools/chrome.d.ts.map +0 -1
  144. package/dist/tools/chrome.js +0 -228
  145. package/dist/tools/chrome.js.map +0 -1
  146. package/dist/tools/edit.d.ts +0 -2
  147. package/dist/tools/edit.d.ts.map +0 -1
  148. package/dist/tools/edit.js +0 -67
  149. package/dist/tools/edit.js.map +0 -1
  150. package/dist/tools/glob.d.ts +0 -10
  151. package/dist/tools/glob.d.ts.map +0 -1
  152. package/dist/tools/glob.js +0 -245
  153. package/dist/tools/glob.js.map +0 -1
  154. package/dist/tools/grep.d.ts +0 -10
  155. package/dist/tools/grep.d.ts.map +0 -1
  156. package/dist/tools/grep.js +0 -252
  157. package/dist/tools/grep.js.map +0 -1
  158. package/dist/tools/ls.d.ts +0 -2
  159. package/dist/tools/ls.d.ts.map +0 -1
  160. package/dist/tools/ls.js +0 -75
  161. package/dist/tools/ls.js.map +0 -1
  162. package/dist/tools/read.d.ts +0 -2
  163. package/dist/tools/read.d.ts.map +0 -1
  164. package/dist/tools/read.js +0 -72
  165. package/dist/tools/read.js.map +0 -1
  166. package/dist/tools/registry.d.ts +0 -3
  167. package/dist/tools/registry.d.ts.map +0 -1
  168. package/dist/tools/registry.js +0 -281
  169. package/dist/tools/registry.js.map +0 -1
  170. package/dist/tools/schema.json +0 -508
  171. package/dist/tools/task.d.ts +0 -11
  172. package/dist/tools/task.d.ts.map +0 -1
  173. package/dist/tools/task.js +0 -118
  174. package/dist/tools/task.js.map +0 -1
  175. package/dist/tools/web.d.ts +0 -3
  176. package/dist/tools/web.d.ts.map +0 -1
  177. package/dist/tools/web.js +0 -113
  178. package/dist/tools/web.js.map +0 -1
  179. package/dist/tools/write.d.ts +0 -18
  180. package/dist/tools/write.d.ts.map +0 -1
  181. package/dist/tools/write.js +0 -122
  182. package/dist/tools/write.js.map +0 -1
  183. package/dist/utils/output.d.ts +0 -62
  184. package/dist/utils/output.d.ts.map +0 -1
  185. package/dist/utils/output.js +0 -487
  186. package/dist/utils/output.js.map +0 -1
@@ -1,151 +0,0 @@
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.loginCommand = loginCommand;
37
- const os = __importStar(require("os"));
38
- const output_1 = require("../utils/output");
39
- const sylix_1 = require("../api/sylix");
40
- const API_BASE = 'https://api.sylixide.com';
41
- async function loginCommand() {
42
- await (0, output_1.printHeader)();
43
- console.log('Authenticate CoWorker with your Sylix account');
44
- console.log();
45
- console.log(output_1.theme.dim('This will open your browser to authorize the CLI.'));
46
- console.log();
47
- try {
48
- // 1. Generate Device Code
49
- const deviceName = `CoWorker CLI on ${os.hostname()}`;
50
- const codeRes = await fetch(`${API_BASE}/v1/auth/device/code`, {
51
- method: 'POST',
52
- headers: { 'Content-Type': 'application/json' },
53
- body: JSON.stringify({
54
- device_id: `coworker-${os.hostname()}-${Date.now()}`,
55
- device_name: deviceName,
56
- })
57
- });
58
- if (!codeRes.ok) {
59
- const errorData = await codeRes.json().catch(() => ({}));
60
- throw new Error(errorData.error_description || 'Failed to generate device code from Sylix API');
61
- }
62
- const codeData = await codeRes.json();
63
- if (!codeData.success) {
64
- throw new Error(codeData.error_description || 'Unknown API error');
65
- }
66
- const device_code = codeData.device_code;
67
- const user_code = codeData.user_code;
68
- const verification_uri_complete = codeData.verification_uri_complete;
69
- const interval = codeData.interval || 5;
70
- const urlLength = verification_uri_complete.length;
71
- const innerWidth = Math.max(46, urlLength + 4);
72
- const pad = (len) => ' '.repeat(Math.max(0, innerWidth - len));
73
- console.log(output_1.theme.brand('╭─ Device Authorization ─' + '─'.repeat(Math.max(0, innerWidth - 23)) + '╮'));
74
- console.log(output_1.theme.brand('│') + pad(0) + output_1.theme.brand('│'));
75
- console.log(output_1.theme.brand('│') + ' ' + output_1.theme.white('Your authorization code: ') + output_1.theme.accent(user_code) + pad(27 + user_code.length) + output_1.theme.brand('│'));
76
- console.log(output_1.theme.brand('│') + pad(0) + output_1.theme.brand('│'));
77
- console.log(output_1.theme.brand('│') + ' Opening browser...' + pad(20) + output_1.theme.brand('│'));
78
- console.log(output_1.theme.brand('│') + pad(0) + output_1.theme.brand('│'));
79
- console.log(output_1.theme.brand('│') + ' ' + output_1.theme.dim('If browser does not open, visit:') + pad(34) + output_1.theme.brand('│'));
80
- console.log(output_1.theme.brand('│') + ' ' + output_1.theme.accent(verification_uri_complete) + pad(2 + urlLength) + output_1.theme.brand('│'));
81
- console.log(output_1.theme.brand('│') + pad(0) + output_1.theme.brand('│'));
82
- console.log(output_1.theme.brand('╰' + '─'.repeat(innerWidth) + '╯'));
83
- console.log();
84
- // Attempt to auto-open browser
85
- try {
86
- // @ts-ignore
87
- const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
88
- await open(verification_uri_complete);
89
- }
90
- catch {
91
- // Ignore if 'open' fails or is not installed
92
- }
93
- // 2. Poll for Token
94
- console.log(output_1.theme.dim('Waiting for authorization...'));
95
- (0, output_1.startLoadingAnimation)();
96
- const token = await pollForToken(device_code, interval || 5);
97
- (0, output_1.stopLoadingAnimation)();
98
- // 3. Save to Config
99
- let config = await (0, sylix_1.loadConfig)();
100
- if (!config) {
101
- // Default to coworker-backend
102
- config = {
103
- baseUrl: 'https://api.sylixide.com',
104
- apiKey: token,
105
- defaultModel: 'sylix-4'
106
- };
107
- }
108
- else {
109
- config.apiKey = token;
110
- }
111
- await (0, sylix_1.saveConfig)(config);
112
- console.log();
113
- (0, output_1.printSuccess)('Successfully logged in!');
114
- console.log();
115
- console.log(output_1.theme.dim(' Config saved to:') + ' ' + output_1.theme.white((0, sylix_1.getConfigPath)()));
116
- console.log();
117
- console.log(output_1.theme.dim(' Try:') + ' ' + output_1.theme.code('coworker ask "What does this project do?"'));
118
- console.log();
119
- }
120
- catch (error) {
121
- (0, output_1.stopLoadingAnimation)();
122
- console.log();
123
- (0, output_1.printError)('Login failed');
124
- if (error instanceof Error) {
125
- console.error(output_1.theme.error(error.message));
126
- }
127
- process.exit(1);
128
- }
129
- }
130
- async function pollForToken(deviceCode, intervalSeconds) {
131
- const pollIntervalMs = intervalSeconds * 1000;
132
- while (true) {
133
- await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
134
- const tokenRes = await fetch(`${API_BASE}/v1/auth/device/token`, {
135
- method: 'POST',
136
- headers: { 'Content-Type': 'application/json' },
137
- body: JSON.stringify({ device_code: deviceCode })
138
- });
139
- const tokenData = await tokenRes.json();
140
- if (tokenRes.ok && tokenData.success && tokenData.access_token) {
141
- return tokenData.access_token;
142
- }
143
- if (tokenData.error === 'authorization_pending') {
144
- // continue polling
145
- process.stdout.write('.');
146
- continue;
147
- }
148
- throw new Error(tokenData.error_description || 'Token polling failed');
149
- }
150
- }
151
- //# sourceMappingURL=login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function reviewCommand(filePath: string, verbose?: boolean): Promise<void>;
2
- //# sourceMappingURL=review.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAeA,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsG7F"}
@@ -1,137 +0,0 @@
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.reviewCommand = reviewCommand;
37
- const sylix_1 = require("../api/sylix");
38
- const reader_1 = require("../context/reader");
39
- const output_1 = require("../utils/output");
40
- const fs = __importStar(require("fs-extra"));
41
- const path = __importStar(require("path"));
42
- async function reviewCommand(filePath, verbose = false) {
43
- const timer = new output_1.Timer();
44
- const absolutePath = path.resolve(filePath);
45
- // Check if file exists
46
- if (!(await fs.pathExists(absolutePath))) {
47
- (0, output_1.printError)(`File not found: ${filePath}`);
48
- process.exit(1);
49
- }
50
- try {
51
- (0, output_1.startLoadingAnimation)();
52
- const content = await (0, reader_1.readFileContext)(absolutePath);
53
- const ext = path.extname(filePath).slice(1) || 'text';
54
- const fileName = path.basename(filePath);
55
- const messages = [
56
- {
57
- role: 'system',
58
- content: `You are CoWorker, an AI coding assistant by Sylix specializing in code review.
59
- Analyze the code and provide:
60
- 1. A quality score (1-10) for code quality
61
- 2. A security score (1-10) for security vulnerabilities
62
- 3. A performance score (1-10) for performance considerations
63
- 4. A readability score (1-10) for code clarity and documentation
64
-
65
- Return your response as JSON in this exact format:
66
- {
67
- "quality": <number>,
68
- "security": <number>,
69
- "performance": <number>,
70
- "readability": <number>,
71
- "summary": "<brief summary of findings>",
72
- "suggestions": ["<suggestion 1>", "<suggestion 2>", ...]
73
- }
74
-
75
- Be thorough but fair in your assessment.`
76
- },
77
- {
78
- role: 'user',
79
- content: `Review this file: ${fileName}\n\n\`\`\`${ext}\n${content}\n\`\`\``
80
- }
81
- ];
82
- const chatResponse = await (0, sylix_1.chat)(messages);
83
- const responseText = chatResponse.content;
84
- (0, output_1.stopLoadingAnimation)();
85
- // Parse the response
86
- let review;
87
- try {
88
- // Try to extract JSON from response
89
- const jsonMatch = responseText.match(/\{[\s\S]*\}/);
90
- if (jsonMatch) {
91
- review = JSON.parse(jsonMatch[0]);
92
- }
93
- else {
94
- throw new Error('No JSON found');
95
- }
96
- }
97
- catch {
98
- // If parsing fails, show the response as-is
99
- console.log();
100
- console.log(responseText);
101
- console.log();
102
- (0, output_1.printResponseStats)(timer.elapsed());
103
- return;
104
- }
105
- // Print score card
106
- (0, output_1.printReviewCard)(fileName, {
107
- quality: review.quality || 7,
108
- security: review.security || 7,
109
- performance: review.performance || 7,
110
- readability: review.readability || 7
111
- });
112
- // Print summary
113
- if (review.summary) {
114
- console.log(output_1.theme.brand('Summary:'));
115
- console.log(output_1.theme.dim(review.summary));
116
- console.log();
117
- }
118
- // Print suggestions
119
- if (review.suggestions && review.suggestions.length > 0) {
120
- console.log(output_1.theme.brand('Suggestions:'));
121
- review.suggestions.forEach((suggestion, i) => {
122
- console.log(` ${output_1.theme.accent(String(i + 1))}. ${suggestion}`);
123
- });
124
- console.log();
125
- }
126
- (0, output_1.printResponseStats)(timer.elapsed());
127
- }
128
- catch (error) {
129
- (0, output_1.stopLoadingAnimation)();
130
- (0, output_1.printError)('Failed to review file');
131
- if (error instanceof Error) {
132
- console.error(error.message);
133
- }
134
- process.exit(1);
135
- }
136
- }
137
- //# sourceMappingURL=review.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function runCommandTask(prompt: string, verbose?: boolean): Promise<void>;
2
- //# sourceMappingURL=run.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAwDA,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyG5F"}
@@ -1,136 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runCommandTask = runCommandTask;
7
- const sylix_1 = require("../api/sylix");
8
- const reader_1 = require("../context/reader");
9
- const output_1 = require("../utils/output");
10
- const child_process_1 = require("child_process");
11
- const util_1 = require("util");
12
- const prompts_1 = __importDefault(require("prompts"));
13
- const execAsync = (0, util_1.promisify)(child_process_1.exec);
14
- function extractCommands(response) {
15
- const commands = [];
16
- // Extract commands from code blocks
17
- const codeBlockRegex = /```(?:bash|sh|shell|cmd|powershell)?\n([\s\S]*?)```/g;
18
- let match;
19
- while ((match = codeBlockRegex.exec(response)) !== null) {
20
- const code = match[1].trim();
21
- // Split by newlines and filter out comments/empty lines
22
- const lines = code.split('\n')
23
- .map(line => line.trim())
24
- .filter(line => line && !line.startsWith('#') && !line.startsWith('//'));
25
- commands.push(...lines);
26
- }
27
- return commands;
28
- }
29
- async function runCommand(cmd) {
30
- try {
31
- const { stdout, stderr } = await execAsync(cmd, {
32
- cwd: process.cwd(),
33
- timeout: 60000
34
- });
35
- return { stdout, stderr, code: 0 };
36
- }
37
- catch (error) {
38
- return {
39
- stdout: error.stdout || '',
40
- stderr: error.stderr || error.message,
41
- code: error.code || 1
42
- };
43
- }
44
- }
45
- async function runCommandTask(prompt, verbose = false) {
46
- const timer = new output_1.Timer();
47
- try {
48
- (0, output_1.startLoadingAnimation)();
49
- const cwd = process.cwd();
50
- const context = await (0, reader_1.getContextString)(cwd, prompt);
51
- const messages = [
52
- {
53
- role: 'system',
54
- content: `You are CoWorker, an AI coding assistant by Sylix. You help developers run tasks and suggest terminal commands.
55
- Analyze the user's request and suggest specific terminal commands to accomplish it.
56
-
57
- For each command you suggest:
58
- 1. Wrap it in a bash code block
59
- 2. Provide a brief explanation of what it does
60
- 3. Consider cross-platform compatibility when possible
61
-
62
- Be practical and focus on the most direct approach. If multiple commands are needed, list them in order.
63
- If the user asks you to run potentially dangerous commands (like deleting files), warn them.`
64
- },
65
- {
66
- role: 'user',
67
- content: context
68
- }
69
- ];
70
- const chatResponse = await (0, sylix_1.chat)(messages);
71
- const responseText = chatResponse.content;
72
- (0, output_1.stopLoadingAnimation)();
73
- // Print response
74
- console.log(output_1.theme.ai(responseText));
75
- console.log();
76
- // Extract and offer to run commands
77
- const commands = extractCommands(responseText);
78
- if (commands.length > 0) {
79
- console.log(output_1.theme.dim('─'.repeat(50)));
80
- console.log();
81
- console.log('Detected commands:');
82
- console.log();
83
- commands.forEach((cmd, i) => {
84
- console.log(` ${output_1.theme.accent(String(i + 1))}. ${output_1.theme.code(cmd)}`);
85
- });
86
- console.log();
87
- // Ask which commands to run
88
- const response2 = await (0, prompts_1.default)({
89
- type: 'multiselect',
90
- name: 'commands',
91
- message: 'Select commands to run',
92
- choices: commands.map((cmd, i) => ({
93
- title: cmd,
94
- value: i,
95
- selected: false
96
- })),
97
- instructions: false
98
- });
99
- if (response2.commands && response2.commands.length > 0) {
100
- console.log();
101
- for (const idx of response2.commands) {
102
- const cmd = commands[idx];
103
- console.log(`Running: ${output_1.theme.code(cmd)}`);
104
- console.log();
105
- const result = await runCommand(cmd);
106
- if (result.stdout) {
107
- console.log(result.stdout);
108
- }
109
- if (result.stderr) {
110
- console.log(result.stderr);
111
- }
112
- if (result.code === 0) {
113
- (0, output_1.printSuccess)(`Command completed`, cmd);
114
- }
115
- else {
116
- (0, output_1.printError)(`Command failed with exit code ${result.code}`);
117
- }
118
- console.log();
119
- }
120
- }
121
- }
122
- else {
123
- (0, output_1.printWarning)('No commands detected in response');
124
- }
125
- (0, output_1.printResponseStats)(timer.elapsed());
126
- }
127
- catch (error) {
128
- (0, output_1.stopLoadingAnimation)();
129
- (0, output_1.printError)('Failed to process your request');
130
- if (error instanceof Error) {
131
- console.error(error.message);
132
- }
133
- process.exit(1);
134
- }
135
- }
136
- //# sourceMappingURL=run.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- export interface CoWorkerSettings {
2
- model?: string;
3
- permissions?: 'default' | 'plan' | 'acceptEdits' | 'bypass';
4
- allow?: string[];
5
- deny?: string[];
6
- mainBranch?: string;
7
- hooks?: HookConfig;
8
- mcpServers?: Record<string, MCPServerConfig>;
9
- }
10
- export interface HookConfig {
11
- PreToolUse?: HookRule[];
12
- PostToolUse?: HookRule[];
13
- Start?: HookRule[];
14
- Stop?: HookRule[];
15
- }
16
- export interface HookRule {
17
- matcher: string;
18
- hooks: HookAction[];
19
- }
20
- export interface HookAction {
21
- type: 'command' | 'block';
22
- command?: string;
23
- }
24
- export interface MCPServerConfig {
25
- command?: string;
26
- args?: string[];
27
- url?: string;
28
- config?: Record<string, string>;
29
- }
30
- export declare function loadSettings(): CoWorkerSettings;
31
- export declare function getSettingsPath(level: 'global' | 'project' | 'local'): string;
32
- export declare function saveSettings(settings: Partial<CoWorkerSettings>, level?: 'global' | 'project' | 'local'): Promise<void>;
33
- //# sourceMappingURL=settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAyBD,wBAAgB,YAAY,IAAI,gBAAgB,CAmB/C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAS7E;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACnC,KAAK,GAAE,QAAQ,GAAG,SAAS,GAAG,OAAmB,GAChD,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadSettings = loadSettings;
7
- exports.getSettingsPath = getSettingsPath;
8
- exports.saveSettings = saveSettings;
9
- const fs_extra_1 = __importDefault(require("fs-extra"));
10
- const path_1 = __importDefault(require("path"));
11
- const os_1 = __importDefault(require("os"));
12
- function deepMerge(target, source) {
13
- const result = { ...target };
14
- for (const key of Object.keys(source)) {
15
- if (Array.isArray(source[key])) {
16
- result[key] = [...(target[key] || []), ...source[key]];
17
- }
18
- else if (typeof source[key] === 'object' && source[key] !== null) {
19
- result[key] = deepMerge(target[key] || {}, source[key]);
20
- }
21
- else {
22
- result[key] = source[key];
23
- }
24
- }
25
- return result;
26
- }
27
- function loadJsonSafe(filePath) {
28
- try {
29
- if (fs_extra_1.default.existsSync(filePath)) {
30
- return fs_extra_1.default.readJsonSync(filePath);
31
- }
32
- }
33
- catch { /* ignore */ }
34
- return null;
35
- }
36
- function loadSettings() {
37
- let settings = {};
38
- // 1. Global: ~/.coworker/settings.json
39
- const globalPath = path_1.default.join(os_1.default.homedir(), '.coworker', 'settings.json');
40
- const globalSettings = loadJsonSafe(globalPath);
41
- if (globalSettings)
42
- settings = deepMerge(settings, globalSettings);
43
- // 2. Project: .coworker/settings.json
44
- const projectPath = path_1.default.join(process.cwd(), '.coworker', 'settings.json');
45
- const projectSettings = loadJsonSafe(projectPath);
46
- if (projectSettings)
47
- settings = deepMerge(settings, projectSettings);
48
- // 3. Local: .coworker/settings.local.json (for personal overrides, gitignored)
49
- const localPath = path_1.default.join(process.cwd(), '.coworker', 'settings.local.json');
50
- const localSettings = loadJsonSafe(localPath);
51
- if (localSettings)
52
- settings = deepMerge(settings, localSettings);
53
- return settings;
54
- }
55
- function getSettingsPath(level) {
56
- switch (level) {
57
- case 'global':
58
- return path_1.default.join(os_1.default.homedir(), '.coworker', 'settings.json');
59
- case 'project':
60
- return path_1.default.join(process.cwd(), '.coworker', 'settings.json');
61
- case 'local':
62
- return path_1.default.join(process.cwd(), '.coworker', 'settings.local.json');
63
- }
64
- }
65
- async function saveSettings(settings, level = 'project') {
66
- const filePath = getSettingsPath(level);
67
- await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
68
- const existing = loadJsonSafe(filePath) || {};
69
- const merged = deepMerge(existing, settings);
70
- await fs_extra_1.default.writeJson(filePath, merged, { spaces: 2 });
71
- }
72
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- export interface FileInfo {
2
- path: string;
3
- relativePath: string;
4
- content?: string;
5
- preview?: string;
6
- lineCount: number;
7
- isLarge: boolean;
8
- }
9
- export interface DirectoryInfo {
10
- name: string;
11
- path: string;
12
- files: FileInfo[];
13
- subdirectories: DirectoryInfo[];
14
- }
15
- export declare function getFileTree(dir: string, maxDepth?: number): Promise<string>;
16
- export declare function getFileInfo(filePath: string): Promise<FileInfo>;
17
- export declare function readDirectory(dir: string, options?: {
18
- includeContent?: boolean;
19
- maxFiles?: number;
20
- extensions?: string[];
21
- }): Promise<DirectoryInfo>;
22
- export declare function getContextString(dir: string, prompt: string): Promise<string>;
23
- export declare function readFileContext(filePath: string): Promise<string>;
24
- //# sourceMappingURL=reader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/context/reader.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpF;AAcD,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAerE;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,GACL,OAAO,CAAC,aAAa,CAAC,CAyDxB;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAavE"}