@sylix/coworker 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -0
- package/dist/api/sylix.d.ts +51 -0
- package/dist/api/sylix.d.ts.map +1 -0
- package/dist/api/sylix.js +234 -0
- package/dist/api/sylix.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +235 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/ask.d.ts +2 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +55 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/chat.d.ts +2 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +292 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/commit.d.ts +2 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +163 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +101 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/edit.d.ts +2 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +112 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/explain.d.ts +2 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +99 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +151 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/review.d.ts +2 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +137 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +136 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/context/reader.d.ts +24 -0
- package/dist/context/reader.d.ts.map +1 -0
- package/dist/context/reader.js +209 -0
- package/dist/context/reader.js.map +1 -0
- package/dist/memory/loader.d.ts +41 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +249 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/scripts/postinstall.d.ts +7 -0
- package/dist/scripts/postinstall.d.ts.map +1 -0
- package/dist/scripts/postinstall.js +23 -0
- package/dist/scripts/postinstall.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +40 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/chrome.d.ts +10 -0
- package/dist/tools/chrome.d.ts.map +1 -0
- package/dist/tools/chrome.js +228 -0
- package/dist/tools/chrome.js.map +1 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +67 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/ls.d.ts +2 -0
- package/dist/tools/ls.d.ts.map +1 -0
- package/dist/tools/ls.js +75 -0
- package/dist/tools/ls.js.map +1 -0
- package/dist/tools/read.d.ts +2 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +72 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +64 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/utils/output.d.ts +62 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +487 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,228 @@
|
|
|
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.chromeNavigate = chromeNavigate;
|
|
37
|
+
exports.chromeScreenshot = chromeScreenshot;
|
|
38
|
+
exports.chromeGetConsole = chromeGetConsole;
|
|
39
|
+
exports.chromeEvalJs = chromeEvalJs;
|
|
40
|
+
exports.chromeGetDom = chromeGetDom;
|
|
41
|
+
exports.chromeClick = chromeClick;
|
|
42
|
+
exports.chromeFill = chromeFill;
|
|
43
|
+
exports.chromeGetUrl = chromeGetUrl;
|
|
44
|
+
exports.chromeClose = chromeClose;
|
|
45
|
+
const output_1 = require("../utils/output");
|
|
46
|
+
let browser = null;
|
|
47
|
+
let context = null;
|
|
48
|
+
let page = null;
|
|
49
|
+
async function getBrowser() {
|
|
50
|
+
if (!browser) {
|
|
51
|
+
const { chromium } = await Promise.resolve().then(() => __importStar(require('playwright')));
|
|
52
|
+
// Try connecting to an existing running Chrome via CDP first
|
|
53
|
+
// (user can launch Chrome with: chrome --remote-debugging-port=9222)
|
|
54
|
+
try {
|
|
55
|
+
browser = await chromium.connectOverCDP('http://localhost:9222');
|
|
56
|
+
console.log(output_1.theme.dim(' [Chrome] Connected to existing Chrome instance on port 9222'));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Start a new browser if no existing Chrome
|
|
60
|
+
browser = await chromium.launch({
|
|
61
|
+
headless: false,
|
|
62
|
+
args: ['--start-maximized', '--remote-debugging-port=9222']
|
|
63
|
+
});
|
|
64
|
+
console.log(output_1.theme.dim(' [Chrome] Launched new Chrome instance'));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return browser;
|
|
68
|
+
}
|
|
69
|
+
async function getPage() {
|
|
70
|
+
if (!page) {
|
|
71
|
+
const b = await getBrowser();
|
|
72
|
+
const contexts = b.contexts();
|
|
73
|
+
if (contexts.length > 0) {
|
|
74
|
+
context = contexts[0];
|
|
75
|
+
const pages = context.pages();
|
|
76
|
+
page = pages.length > 0 ? pages[0] : await context.newPage();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
context = await b.newContext({ viewport: null });
|
|
80
|
+
page = await context.newPage();
|
|
81
|
+
}
|
|
82
|
+
// Capture console logs to forward to AI
|
|
83
|
+
page.on('console', msg => {
|
|
84
|
+
consoleLog.push({ type: msg.type(), text: msg.text(), timestamp: Date.now() });
|
|
85
|
+
if (consoleLog.length > 200)
|
|
86
|
+
consoleLog.shift();
|
|
87
|
+
});
|
|
88
|
+
page.on('pageerror', err => {
|
|
89
|
+
consoleLog.push({ type: 'error', text: err.message, timestamp: Date.now() });
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return page;
|
|
93
|
+
}
|
|
94
|
+
// Rolling console log buffer for the AI to read
|
|
95
|
+
const consoleLog = [];
|
|
96
|
+
// ─────────────────────────────────────────────
|
|
97
|
+
// CHROME TOOL IMPLEMENTATIONS
|
|
98
|
+
// ─────────────────────────────────────────────
|
|
99
|
+
async function chromeNavigate(argsObj) {
|
|
100
|
+
const { url } = argsObj;
|
|
101
|
+
if (!url)
|
|
102
|
+
return 'Error: url is required.';
|
|
103
|
+
try {
|
|
104
|
+
const p = await getPage();
|
|
105
|
+
const response = await p.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
|
106
|
+
const status = response?.status();
|
|
107
|
+
return `Navigated to ${url} — HTTP ${status}. Title: "${await p.title()}"`;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
return `Error navigating: ${err.message}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function chromeScreenshot(argsObj) {
|
|
114
|
+
const { path: screenshotPath } = argsObj;
|
|
115
|
+
try {
|
|
116
|
+
const p = await getPage();
|
|
117
|
+
const savePath = screenshotPath || `screenshot_${Date.now()}.png`;
|
|
118
|
+
await p.screenshot({ path: savePath, fullPage: true });
|
|
119
|
+
return `Screenshot saved to ${savePath}`;
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return `Error taking screenshot: ${err.message}`;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function chromeGetConsole(argsObj) {
|
|
126
|
+
const { type, limit } = argsObj;
|
|
127
|
+
const logs = type ? consoleLog.filter(l => l.type === type) : consoleLog;
|
|
128
|
+
const limited = logs.slice(-(limit || 50));
|
|
129
|
+
if (!limited.length)
|
|
130
|
+
return 'No console logs captured yet.';
|
|
131
|
+
return limited.map(l => `[${l.type.toUpperCase()}] ${l.text}`).join('\n');
|
|
132
|
+
}
|
|
133
|
+
async function chromeEvalJs(argsObj) {
|
|
134
|
+
const { script } = argsObj;
|
|
135
|
+
if (!script)
|
|
136
|
+
return 'Error: script is required.';
|
|
137
|
+
try {
|
|
138
|
+
const p = await getPage();
|
|
139
|
+
const result = await p.evaluate(script);
|
|
140
|
+
return `Result: ${JSON.stringify(result, null, 2)}`;
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
return `Error executing script: ${err.message}`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function chromeGetDom(argsObj) {
|
|
147
|
+
const { selector } = argsObj;
|
|
148
|
+
try {
|
|
149
|
+
const p = await getPage();
|
|
150
|
+
if (selector) {
|
|
151
|
+
const el = await p.$(selector);
|
|
152
|
+
if (!el)
|
|
153
|
+
return `No element found for selector: ${selector}`;
|
|
154
|
+
const html = await el.innerHTML();
|
|
155
|
+
return html.substring(0, 5000);
|
|
156
|
+
}
|
|
157
|
+
// Return the body text content (simplified DOM)
|
|
158
|
+
const text = await p.evaluate(() => {
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
160
|
+
// @ts-ignore - running inside browser context
|
|
161
|
+
const body = document.body;
|
|
162
|
+
// @ts-ignore
|
|
163
|
+
const clone = body.cloneNode(true);
|
|
164
|
+
// @ts-ignore
|
|
165
|
+
clone.querySelectorAll('script, style, noscript').forEach((el) => el.remove());
|
|
166
|
+
return (clone.innerText || '').substring(0, 10000);
|
|
167
|
+
});
|
|
168
|
+
return text;
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
return `Error getting DOM: ${err.message}`;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async function chromeClick(argsObj) {
|
|
175
|
+
const { selector, text } = argsObj;
|
|
176
|
+
try {
|
|
177
|
+
const p = await getPage();
|
|
178
|
+
if (text) {
|
|
179
|
+
await p.getByText(text, { exact: false }).first().click();
|
|
180
|
+
return `Clicked element with text: "${text}"`;
|
|
181
|
+
}
|
|
182
|
+
if (selector) {
|
|
183
|
+
await p.click(selector);
|
|
184
|
+
return `Clicked element: ${selector}`;
|
|
185
|
+
}
|
|
186
|
+
return 'Error: selector or text is required.';
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
return `Error clicking: ${err.message}`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
async function chromeFill(argsObj) {
|
|
193
|
+
const { selector, value } = argsObj;
|
|
194
|
+
if (!selector || value === undefined)
|
|
195
|
+
return 'Error: selector and value are required.';
|
|
196
|
+
try {
|
|
197
|
+
const p = await getPage();
|
|
198
|
+
await p.fill(selector, value);
|
|
199
|
+
return `Filled ${selector} with "${value}"`;
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
return `Error filling: ${err.message}`;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async function chromeGetUrl(_argsObj) {
|
|
206
|
+
try {
|
|
207
|
+
const p = await getPage();
|
|
208
|
+
return `Current URL: ${p.url()}\nTitle: ${await p.title()}`;
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
return `Error: ${err.message}`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async function chromeClose(_argsObj) {
|
|
215
|
+
try {
|
|
216
|
+
if (browser) {
|
|
217
|
+
await browser.close();
|
|
218
|
+
browser = null;
|
|
219
|
+
context = null;
|
|
220
|
+
page = null;
|
|
221
|
+
}
|
|
222
|
+
return 'Browser closed.';
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
return `Error closing browser: ${err.message}`;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=chrome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/tools/chrome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC/D"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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.executeEdit = executeEdit;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
async function executeEdit(argsObj) {
|
|
40
|
+
const { file_path, old_string, new_string, replace_all } = argsObj;
|
|
41
|
+
if (!file_path || old_string === undefined || new_string === undefined) {
|
|
42
|
+
return 'Error: file_path, old_string, and new_string are required.';
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const absolutePath = path.resolve(process.cwd(), file_path);
|
|
46
|
+
if (!(await fs.pathExists(absolutePath))) {
|
|
47
|
+
return `Error: File not found at ${absolutePath}`;
|
|
48
|
+
}
|
|
49
|
+
const content = await fs.readFile(absolutePath, 'utf8');
|
|
50
|
+
if (!content.includes(old_string)) {
|
|
51
|
+
return 'Error: old_string not found in file. Ensure exact spaces/tabs match.';
|
|
52
|
+
}
|
|
53
|
+
let modifiedContent = content;
|
|
54
|
+
if (replace_all) {
|
|
55
|
+
modifiedContent = content.split(old_string).join(new_string);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
modifiedContent = content.replace(old_string, new_string);
|
|
59
|
+
}
|
|
60
|
+
await fs.writeFile(absolutePath, modifiedContent, 'utf8');
|
|
61
|
+
return `Successfully edited ${absolutePath}`;
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
return `Error editing file: ${err.message}`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,kCAkCC;AArCD,6CAA+B;AAC/B,2CAA6B;AAEtB,KAAK,UAAU,WAAW,CAAC,OAAY;IAC5C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEnE,IAAI,CAAC,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACvE,OAAO,4DAA4D,CAAC;IACtE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAE5D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,4BAA4B,YAAY,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,sEAAsE,CAAC;QAChF,CAAC;QAED,IAAI,eAAe,GAAG,OAAO,CAAC;QAE9B,IAAI,WAAW,EAAE,CAAC;YAChB,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QAE1D,OAAO,uBAAuB,YAAY,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,uBAAuB,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/tools/ls.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAuC7D"}
|
package/dist/tools/ls.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
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.executeLs = executeLs;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
async function executeLs(argsObj) {
|
|
40
|
+
const { path: dirPath, ignore } = argsObj;
|
|
41
|
+
if (!dirPath)
|
|
42
|
+
return 'Error: path is required.';
|
|
43
|
+
try {
|
|
44
|
+
const targetDir = path.resolve(process.cwd(), dirPath);
|
|
45
|
+
if (!(await fs.pathExists(targetDir))) {
|
|
46
|
+
return `Error: Directory not found at ${targetDir}`;
|
|
47
|
+
}
|
|
48
|
+
const stats = await fs.stat(targetDir);
|
|
49
|
+
if (!stats.isDirectory()) {
|
|
50
|
+
return `Error: ${targetDir} is not a directory`;
|
|
51
|
+
}
|
|
52
|
+
const files = await fs.readdir(targetDir);
|
|
53
|
+
// Quick and dirty ignore implementation
|
|
54
|
+
const filteredFiles = files.filter(f => {
|
|
55
|
+
if (!ignore || !Array.isArray(ignore))
|
|
56
|
+
return true;
|
|
57
|
+
for (const pattern of ignore) {
|
|
58
|
+
if (f.includes(pattern.replace(/\*/g, '')))
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
});
|
|
63
|
+
let output = '';
|
|
64
|
+
for (const file of filteredFiles) {
|
|
65
|
+
const filePath = path.join(targetDir, file);
|
|
66
|
+
const isDir = (await fs.stat(filePath)).isDirectory();
|
|
67
|
+
output += `${isDir ? '[DIR] ' : '[FILE]'} ${file}\n`;
|
|
68
|
+
}
|
|
69
|
+
return output || 'Directory is empty.';
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return `Error listing directory: ${err.message}`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=ls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/tools/ls.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,8BAuCC;AA1CD,6CAA+B;AAC/B,2CAA6B;AAEtB,KAAK,UAAU,SAAS,CAAC,OAAY;IAC1C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE1C,IAAI,CAAC,OAAO;QAAE,OAAO,0BAA0B,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACtC,OAAO,iCAAiC,SAAS,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO,UAAU,SAAS,qBAAqB,CAAC;QAClD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE1C,wCAAwC;QACxC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACrC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnD,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC3D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC;QACvD,CAAC;QAED,OAAO,MAAM,IAAI,qBAAqB,CAAC;IACzC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAwC/D"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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.executeRead = executeRead;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
async function executeRead(argsObj) {
|
|
40
|
+
const { file_path, offset, limit } = argsObj;
|
|
41
|
+
if (!file_path)
|
|
42
|
+
return 'Error: file_path is required.';
|
|
43
|
+
try {
|
|
44
|
+
const absolutePath = path.resolve(process.cwd(), file_path);
|
|
45
|
+
if (!(await fs.pathExists(absolutePath))) {
|
|
46
|
+
return `Error: File not found at ${absolutePath}`;
|
|
47
|
+
}
|
|
48
|
+
const content = await fs.readFile(absolutePath, 'utf8');
|
|
49
|
+
if (!content.trim())
|
|
50
|
+
return 'File is empty.';
|
|
51
|
+
const lines = content.split('\n');
|
|
52
|
+
let startIdx = 0;
|
|
53
|
+
let endIdx = lines.length;
|
|
54
|
+
if (offset !== undefined) {
|
|
55
|
+
startIdx = Math.max(0, offset - 1);
|
|
56
|
+
}
|
|
57
|
+
if (limit !== undefined) {
|
|
58
|
+
endIdx = Math.min(lines.length, startIdx + limit);
|
|
59
|
+
}
|
|
60
|
+
const slicedLines = lines.slice(startIdx, Math.min(endIdx, startIdx + 2000));
|
|
61
|
+
// Format output with cat -n style (1-indexed)
|
|
62
|
+
const formatted = slicedLines.map((line, idx) => {
|
|
63
|
+
const lineNum = startIdx + idx + 1;
|
|
64
|
+
return ` ${lineNum}\t${line}`;
|
|
65
|
+
}).join('\n');
|
|
66
|
+
return formatted;
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return `Error reading file: ${err.message}`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,kCAwCC;AA3CD,6CAA+B;AAC/B,2CAA6B;AAEtB,KAAK,UAAU,WAAW,CAAC,OAAY;IAC5C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE7C,IAAI,CAAC,SAAS;QAAE,OAAO,+BAA+B,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAE5D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,4BAA4B,YAAY,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,gBAAgB,CAAC;QAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAE1B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QAE7E,8CAA8C;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;YACnC,OAAO,OAAO,OAAO,KAAK,IAAI,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,uBAAuB,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAYA,wBAAsB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDnE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleToolCall = handleToolCall;
|
|
4
|
+
const bash_1 = require("./bash");
|
|
5
|
+
const read_1 = require("./read");
|
|
6
|
+
const edit_1 = require("./edit");
|
|
7
|
+
const ls_1 = require("./ls");
|
|
8
|
+
const chrome_1 = require("./chrome");
|
|
9
|
+
const output_1 = require("../utils/output");
|
|
10
|
+
// We implement core Claude Code tools locally
|
|
11
|
+
async function handleToolCall(toolCall) {
|
|
12
|
+
const name = toolCall.function.name;
|
|
13
|
+
const args = toolCall.function.arguments;
|
|
14
|
+
let parsedArgs;
|
|
15
|
+
try {
|
|
16
|
+
parsedArgs = JSON.parse(args);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return `Error: Failed to parse arguments for tool ${name}: ${args}`;
|
|
20
|
+
}
|
|
21
|
+
// Visual printing
|
|
22
|
+
console.log();
|
|
23
|
+
console.log(output_1.theme.success(` > Executing ${name}:`) + output_1.theme.dim(` ${JSON.stringify(parsedArgs).substring(0, 100)}`));
|
|
24
|
+
switch (name) {
|
|
25
|
+
case 'Bash':
|
|
26
|
+
return await (0, bash_1.executeBash)(parsedArgs);
|
|
27
|
+
case 'Read':
|
|
28
|
+
return await (0, read_1.executeRead)(parsedArgs);
|
|
29
|
+
case 'Edit':
|
|
30
|
+
return await (0, edit_1.executeEdit)(parsedArgs);
|
|
31
|
+
case 'LS':
|
|
32
|
+
return await (0, ls_1.executeLs)(parsedArgs);
|
|
33
|
+
// Glob and Grep fallback to Bash execution behind the scenes as a quick polyfill
|
|
34
|
+
case 'Glob':
|
|
35
|
+
return await (0, bash_1.executeBash)({ command: `dir /s /b *${parsedArgs.pattern?.replace(/\*/g, '')}*` });
|
|
36
|
+
case 'Grep':
|
|
37
|
+
return await (0, bash_1.executeBash)({ command: `findstr /S /I /C:"${parsedArgs.pattern}" *.*` });
|
|
38
|
+
case 'Task':
|
|
39
|
+
return `Error: Task (sub-agent) tool not implemented locally yet.`;
|
|
40
|
+
// ─── Chrome Tools ───
|
|
41
|
+
case 'ChromeNavigate':
|
|
42
|
+
case 'computer_20250124':
|
|
43
|
+
return await (0, chrome_1.chromeNavigate)(parsedArgs);
|
|
44
|
+
case 'ChromeScreenshot':
|
|
45
|
+
return await (0, chrome_1.chromeScreenshot)(parsedArgs);
|
|
46
|
+
case 'ChromeConsole':
|
|
47
|
+
return await (0, chrome_1.chromeGetConsole)(parsedArgs);
|
|
48
|
+
case 'ChromeEval':
|
|
49
|
+
return await (0, chrome_1.chromeEvalJs)(parsedArgs);
|
|
50
|
+
case 'ChromeGetDom':
|
|
51
|
+
return await (0, chrome_1.chromeGetDom)(parsedArgs);
|
|
52
|
+
case 'ChromeClick':
|
|
53
|
+
return await (0, chrome_1.chromeClick)(parsedArgs);
|
|
54
|
+
case 'ChromeFill':
|
|
55
|
+
return await (0, chrome_1.chromeFill)(parsedArgs);
|
|
56
|
+
case 'ChromeGetUrl':
|
|
57
|
+
return await (0, chrome_1.chromeGetUrl)(parsedArgs);
|
|
58
|
+
case 'ChromeClose':
|
|
59
|
+
return await (0, chrome_1.chromeClose)(parsedArgs);
|
|
60
|
+
default:
|
|
61
|
+
return `Error: Tool ${name} not recognized or implemented by CoWorker CLI.`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":";;AAYA,wCAqDC;AAjED,iCAAqC;AACrC,iCAAqC;AACrC,iCAAqC;AACrC,6BAAiC;AACjC,qCAIkB;AAClB,4CAAwC;AAExC,8CAA8C;AACvC,KAAK,UAAU,cAAc,CAAC,QAAa;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;IAEzC,IAAI,UAAe,CAAC;IACpB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6CAA6C,IAAI,KAAK,IAAI,EAAE,CAAC;IACtE,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,GAAG,CAAC,GAAG,cAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAErH,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,IAAA,kBAAW,EAAC,UAAU,CAAC,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,MAAM,IAAA,kBAAW,EAAC,UAAU,CAAC,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,MAAM,IAAA,kBAAW,EAAC,UAAU,CAAC,CAAC;QACvC,KAAK,IAAI;YACP,OAAO,MAAM,IAAA,cAAS,EAAC,UAAU,CAAC,CAAC;QACrC,iFAAiF;QACjF,KAAK,MAAM;YACT,OAAO,MAAM,IAAA,kBAAW,EAAC,EAAE,OAAO,EAAE,cAAc,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACjG,KAAK,MAAM;YACT,OAAO,MAAM,IAAA,kBAAW,EAAC,EAAE,OAAO,EAAE,qBAAqB,UAAU,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QACxF,KAAK,MAAM;YACT,OAAO,2DAA2D,CAAC;QACrE,uBAAuB;QACvB,KAAK,gBAAgB,CAAC;QAAC,KAAK,mBAAmB;YAC7C,OAAO,MAAM,IAAA,uBAAc,EAAC,UAAU,CAAC,CAAC;QAC1C,KAAK,kBAAkB;YACrB,OAAO,MAAM,IAAA,yBAAgB,EAAC,UAAU,CAAC,CAAC;QAC5C,KAAK,eAAe;YAClB,OAAO,MAAM,IAAA,yBAAgB,EAAC,UAAU,CAAC,CAAC;QAC5C,KAAK,YAAY;YACf,OAAO,MAAM,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,MAAM,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;QACxC,KAAK,aAAa;YAChB,OAAO,MAAM,IAAA,oBAAW,EAAC,UAAU,CAAC,CAAC;QACvC,KAAK,YAAY;YACf,OAAO,MAAM,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QACtC,KAAK,cAAc;YACjB,OAAO,MAAM,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;QACxC,KAAK,aAAa;YAChB,OAAO,MAAM,IAAA,oBAAW,EAAC,UAAU,CAAC,CAAC;QACvC;YACE,OAAO,eAAe,IAAI,iDAAiD,CAAC;IAChF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Ora } from 'ora';
|
|
3
|
+
export declare const theme: {
|
|
4
|
+
brand: chalk.Chalk;
|
|
5
|
+
accent: chalk.Chalk;
|
|
6
|
+
success: chalk.Chalk;
|
|
7
|
+
error: chalk.Chalk;
|
|
8
|
+
warning: chalk.Chalk;
|
|
9
|
+
ai: chalk.Chalk;
|
|
10
|
+
dim: chalk.Chalk;
|
|
11
|
+
white: chalk.Chalk;
|
|
12
|
+
code: chalk.Chalk;
|
|
13
|
+
muted: chalk.Chalk;
|
|
14
|
+
};
|
|
15
|
+
export declare const sleep: (ms: number) => Promise<unknown>;
|
|
16
|
+
export declare function getTerminalWidth(): number;
|
|
17
|
+
export declare function isNarrowTerminal(): boolean;
|
|
18
|
+
export declare function center(text: string, width?: number): string;
|
|
19
|
+
export declare function shouldShowBanner(): boolean;
|
|
20
|
+
export declare function printHeader(): Promise<void>;
|
|
21
|
+
export declare function printUserInfo(email?: string, model?: string, version?: string): void;
|
|
22
|
+
export declare function printSuccess(message: string, details?: string): void;
|
|
23
|
+
export declare function printError(message: string): void;
|
|
24
|
+
export declare function printWarning(message: string): void;
|
|
25
|
+
export declare function printInfo(message: string): void;
|
|
26
|
+
export declare function printErrorBox(title: string, message: string, suggestions?: string[], link?: string): void;
|
|
27
|
+
export declare function startLoadingAnimation(): void;
|
|
28
|
+
export declare function stopLoadingAnimation(): void;
|
|
29
|
+
export declare class StreamingRenderer {
|
|
30
|
+
private inCodeBlock;
|
|
31
|
+
private inBox;
|
|
32
|
+
private wordDelay;
|
|
33
|
+
start(): void;
|
|
34
|
+
write(text: string): void;
|
|
35
|
+
writeWithDelay(text: string): Promise<void>;
|
|
36
|
+
end(): void;
|
|
37
|
+
}
|
|
38
|
+
export declare function printResponseStats(elapsedMs: number, tokens?: number, verbose?: boolean): void;
|
|
39
|
+
export declare function printCodeBlock(code: string, language?: string, filename?: string): void;
|
|
40
|
+
export declare function printDiffPreview(filename: string, changes: {
|
|
41
|
+
oldLine: string;
|
|
42
|
+
newLine: string;
|
|
43
|
+
lineNumber: number;
|
|
44
|
+
}[]): void;
|
|
45
|
+
export declare function printDiff(oldContent: string, newContent: string, filename?: string): void;
|
|
46
|
+
export declare function printCommitBox(message: string): void;
|
|
47
|
+
export declare function printReviewCard(filename: string, scores: {
|
|
48
|
+
quality: number;
|
|
49
|
+
security: number;
|
|
50
|
+
performance: number;
|
|
51
|
+
readability: number;
|
|
52
|
+
}): void;
|
|
53
|
+
export declare function printUserMessage(message: string): void;
|
|
54
|
+
export declare function printAIMessage(message: string): void;
|
|
55
|
+
export declare function createSpinner(text: string): Ora;
|
|
56
|
+
export declare class Timer {
|
|
57
|
+
private startTime;
|
|
58
|
+
elapsed(): number;
|
|
59
|
+
elapsedSeconds(): string;
|
|
60
|
+
}
|
|
61
|
+
export declare function printExitMessage(): void;
|
|
62
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|