rantera 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,376 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import * as readline from "readline";
4
+ import { existsSync, writeFileSync } from "fs";
5
+ import { join } from "path";
6
+ import { runAgent } from "./agent.js";
7
+ import { login, logout } from "./auth.js";
8
+ import { getApiKey, loadConfig, saveConfig } from "./config.js";
9
+ import { loadMemory, RANTERA_MD_TEMPLATE } from "./memory.js";
10
+ import { MODELS, printWelcome, printHelp, printHistory, printStatus, printModelList, printCost, printText, printToolCall, printToolResult, printError, printSuccess, printDivider, printAssistantPrefix, startSpinner, stopSpinner, clearSpinner, } from "./ui.js";
11
+ import chalk from "chalk";
12
+ const CONTEXT_LIMIT = 200_000;
13
+ function estimateTokens(msgs, system) {
14
+ const histToks = msgs.reduce((s, m) => s + Math.ceil((m.content?.length ?? 0) / 4), 0);
15
+ const sysToks = system ? Math.ceil(system.length / 4) : 0;
16
+ return histToks + sysToks;
17
+ }
18
+ // ─── CLI definition ──────────────────────────────────────────────────────────
19
+ const program = new Command();
20
+ program
21
+ .name("rantera")
22
+ .description("Rantera CLI — African-first AI platform for developers")
23
+ .version("0.1.1");
24
+ // ─── rantera auth ─────────────────────────────────────────────────────────────
25
+ const auth = program.command("auth").description("Manage Rantera authentication");
26
+ auth
27
+ .command("login")
28
+ .description("Log in to your Rantera account")
29
+ .option("--url <url>", "API URL override", "https://rantera.ai")
30
+ .action(async (opts) => {
31
+ try {
32
+ await login(opts.url);
33
+ printSuccess("Logged in to Rantera. Run `rantera` to start building.");
34
+ }
35
+ catch (err) {
36
+ printError(String(err));
37
+ process.exit(1);
38
+ }
39
+ });
40
+ auth
41
+ .command("logout")
42
+ .description("Log out and remove stored credentials")
43
+ .action(() => {
44
+ logout();
45
+ console.log(chalk.dim(" Logged out."));
46
+ });
47
+ auth
48
+ .command("status")
49
+ .description("Show current auth status")
50
+ .action(() => {
51
+ const key = getApiKey();
52
+ if (key) {
53
+ printSuccess(`Authenticated ${chalk.dim(`(${key.slice(0, 12)}…)`)}`);
54
+ }
55
+ else {
56
+ console.log(chalk.hex("#CE1126")(" ✗ Not authenticated."), chalk.dim("Run `rantera auth login`."));
57
+ }
58
+ });
59
+ // ─── rantera config ───────────────────────────────────────────────────────────
60
+ const cfgCmd = program.command("config").description("Manage CLI configuration");
61
+ cfgCmd
62
+ .command("set-key <key>")
63
+ .description("Set a Rantera API key manually (overrides login token)")
64
+ .action((key) => {
65
+ if (!key.startsWith("sk-rnt-")) {
66
+ printError("Invalid key — Rantera API keys start with sk-rnt-");
67
+ process.exit(1);
68
+ }
69
+ const cfg = loadConfig();
70
+ cfg.apiKey = key;
71
+ saveConfig(cfg);
72
+ printSuccess(`API key saved. ${chalk.dim(`(${key.slice(0, 16)}…)`)}`);
73
+ });
74
+ cfgCmd
75
+ .command("set-url <url>")
76
+ .description("Set the Rantera API URL (default: https://rantera.ai)")
77
+ .action((url) => {
78
+ const cfg = loadConfig();
79
+ cfg.apiUrl = url;
80
+ saveConfig(cfg);
81
+ printSuccess(`API URL set to ${chalk.dim(url)}`);
82
+ });
83
+ cfgCmd
84
+ .command("show")
85
+ .description("Show current configuration")
86
+ .action(() => {
87
+ const cfg = loadConfig();
88
+ const key = process.env.WAKANDA_API_KEY ?? cfg.apiKey;
89
+ console.log(chalk.dim(" API URL:"), cfg.apiUrl);
90
+ console.log(chalk.dim(" API key:"), key
91
+ ? `${key.slice(0, 16)}… ${chalk.dim("(set)")}`
92
+ : chalk.yellow("not set — run `rantera auth login`"));
93
+ console.log(chalk.dim(" Model: "), cfg.model ?? "tera");
94
+ if (process.env.WAKANDA_API_KEY) {
95
+ console.log(chalk.dim(" ↑ from WAKANDA_API_KEY env var"));
96
+ }
97
+ });
98
+ // ─── rantera init ─────────────────────────────────────────────────────────────
99
+ program
100
+ .command("init")
101
+ .description("Create a RANTERA.md project memory file in the current directory")
102
+ .option("-f, --force", "Overwrite if RANTERA.md already exists")
103
+ .action((opts) => {
104
+ const dest = join(process.cwd(), "RANTERA.md");
105
+ if (existsSync(dest) && !opts.force) {
106
+ printError("RANTERA.md already exists. Use --force to overwrite.");
107
+ process.exit(1);
108
+ }
109
+ writeFileSync(dest, RANTERA_MD_TEMPLATE, "utf-8");
110
+ printSuccess("Created RANTERA.md");
111
+ console.log(chalk.dim(" Edit it to give Wakanda persistent context about this project."));
112
+ console.log(chalk.dim(" It loads automatically when you run `rantera` here.\n"));
113
+ });
114
+ // ─── rantera wakanda (explicit subcommand) ────────────────────────────────────
115
+ program
116
+ .command("wakanda [prompt]")
117
+ .description("Open the Wakanda AI workspace (default command)")
118
+ .option("-d, --dir <path>", "Working directory for file and shell tools", process.cwd())
119
+ .option("-p, --print", "Non-interactive: print output to stdout, no banner (for scripts/CI)")
120
+ .action(async (prompt, opts) => {
121
+ await startWakanda(prompt, opts.dir, opts.print ?? false);
122
+ });
123
+ // ─── default: `rantera` or `rantera "task"` ───────────────────────────────────
124
+ program
125
+ .argument("[prompt]", "One-shot task — runs and exits without opening the REPL")
126
+ .option("-d, --dir <path>", "Working directory for file and shell tools", process.cwd())
127
+ .option("-p, --print", "Non-interactive: print output to stdout, no banner (for scripts/CI)")
128
+ .action(async (prompt, options) => {
129
+ await startWakanda(prompt, options.dir, options.print ?? false);
130
+ });
131
+ // ─── Wakanda session ──────────────────────────────────────────────────────────
132
+ async function startWakanda(prompt, dir, printMode) {
133
+ let apiKey = getApiKey();
134
+ if (!apiKey) {
135
+ if (printMode) {
136
+ process.stderr.write("Error: Not authenticated. Run `rantera auth login`.\n");
137
+ process.exit(1);
138
+ }
139
+ const cfg0 = loadConfig();
140
+ console.log();
141
+ console.log(chalk.hex("#FCD116").bold(" You're not logged in to Rantera."));
142
+ console.log(chalk.dim(" Log in to continue. We'll open your browser now.\n"));
143
+ const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
144
+ await new Promise((resolve) => {
145
+ rl2.question(chalk.dim(" Press Enter to open the browser, or Ctrl+C to cancel… "), () => {
146
+ rl2.close();
147
+ resolve();
148
+ });
149
+ });
150
+ try {
151
+ await login(cfg0.apiUrl ?? "https://rantera.ai");
152
+ apiKey = getApiKey();
153
+ printSuccess("Logged in. Starting Wakanda...\n");
154
+ }
155
+ catch (err) {
156
+ printError(String(err));
157
+ process.exit(1);
158
+ }
159
+ }
160
+ const cfg = loadConfig();
161
+ const history = [];
162
+ let currentModel = cfg.model ?? "hira";
163
+ const system = loadMemory(dir);
164
+ if (!printMode) {
165
+ printWelcome(dir, currentModel, system !== null);
166
+ }
167
+ // ── One-shot mode ────────────────────────────────────────────────────────────
168
+ if (prompt) {
169
+ const finalText = await executeTask(prompt, history, dir, currentModel, system, printMode);
170
+ if (printMode) {
171
+ process.stdout.write(finalText + "\n");
172
+ }
173
+ return;
174
+ }
175
+ if (printMode) {
176
+ process.stderr.write("Error: --print requires a prompt argument. Try: rantera -p \"your task\"\n");
177
+ process.exit(1);
178
+ }
179
+ // ── Interactive REPL ─────────────────────────────────────────────────────────
180
+ const rl = readline.createInterface({
181
+ input: process.stdin,
182
+ output: process.stdout,
183
+ terminal: true,
184
+ historySize: 500,
185
+ });
186
+ rl.on("close", () => {
187
+ console.log(chalk.dim("\n Closing Wakanda. Keep building.\n"));
188
+ process.exit(0);
189
+ });
190
+ let multiLineBuf = "";
191
+ let inMultiLine = false;
192
+ const ask = () => {
193
+ const prompt = inMultiLine
194
+ ? " " + chalk.dim("... › ")
195
+ : " " + chalk.hex("#FCD116").bold("you › ");
196
+ rl.question(prompt, async (raw) => {
197
+ // Backslash continuation: end line with \ to keep typing
198
+ if (raw.endsWith("\\")) {
199
+ multiLineBuf += (multiLineBuf ? "\n" : "") + raw.slice(0, -1);
200
+ inMultiLine = true;
201
+ ask();
202
+ return;
203
+ }
204
+ const input = multiLineBuf + (multiLineBuf ? "\n" : "") + raw;
205
+ multiLineBuf = "";
206
+ inMultiLine = false;
207
+ const trimmed = input.trim();
208
+ if (!trimmed) {
209
+ ask();
210
+ return;
211
+ }
212
+ // ── Slash commands ───────────────────────────────────────────────────────
213
+ if (trimmed === "/help") {
214
+ printHelp();
215
+ ask();
216
+ return;
217
+ }
218
+ if (trimmed === "/clear") {
219
+ history.length = 0;
220
+ console.log(chalk.dim("\n Conversation cleared.\n"));
221
+ ask();
222
+ return;
223
+ }
224
+ if (trimmed === "/history") {
225
+ const msgs = history
226
+ .filter(m => m.role === "user" || m.role === "assistant")
227
+ .map(m => ({ role: m.role, content: m.content }));
228
+ printHistory(msgs);
229
+ ask();
230
+ return;
231
+ }
232
+ if (trimmed === "/status") {
233
+ const est = estimateTokens(history, system);
234
+ printStatus(getApiKey(), cfg.apiUrl, history.length, dir, currentModel, est);
235
+ ask();
236
+ return;
237
+ }
238
+ if (trimmed === "/compact") {
239
+ const KEEP = 6;
240
+ const before = history.length;
241
+ if (history.length > KEEP) {
242
+ history.splice(0, history.length - KEEP);
243
+ const after = history.length;
244
+ const afterEst = estimateTokens(history, system);
245
+ const pct = Math.round((afterEst / CONTEXT_LIMIT) * 100);
246
+ console.log(chalk.dim(`\n Compacted — kept last ${after} of ${before} messages.`) +
247
+ " " + chalk.dim(`(~${fmtK(afterEst)} tokens, ${pct}% of 200k)\n`));
248
+ }
249
+ else {
250
+ console.log(chalk.dim("\n Nothing to compact yet.\n"));
251
+ }
252
+ ask();
253
+ return;
254
+ }
255
+ if (trimmed === "/cost") {
256
+ const est = estimateTokens(history, system);
257
+ const msgs = history.filter(m => m.role === "user" || m.role === "assistant").length;
258
+ printCost(est, msgs);
259
+ ask();
260
+ return;
261
+ }
262
+ // /model or /model <name>
263
+ if (trimmed === "/model" || trimmed.startsWith("/model ")) {
264
+ const parts = trimmed.split(/\s+/);
265
+ if (parts.length === 1) {
266
+ printModelList(currentModel);
267
+ }
268
+ else {
269
+ const requested = parts[1].toLowerCase();
270
+ const found = MODELS.find(m => m.id === requested);
271
+ if (!found) {
272
+ printError(`Unknown model "${requested}". Available: ${MODELS.filter(m => m.available).map(m => m.id).join(", ")}`);
273
+ }
274
+ else if (!found.available) {
275
+ console.log(chalk.dim(`\n ${found.display} is coming soon — stay tuned.\n`));
276
+ }
277
+ else {
278
+ currentModel = found.id;
279
+ const saved = loadConfig();
280
+ saved.model = currentModel;
281
+ saveConfig(saved);
282
+ printSuccess(`Switched to ${found.display} ${chalk.dim(found.desc)}`);
283
+ console.log();
284
+ }
285
+ }
286
+ ask();
287
+ return;
288
+ }
289
+ if (trimmed === "/logout") {
290
+ await logout();
291
+ console.log(chalk.dim("\n Logged out. Type /login to authenticate with a different account.\n"));
292
+ ask();
293
+ return;
294
+ }
295
+ if (trimmed === "/login") {
296
+ console.log();
297
+ try {
298
+ await login(cfg.apiUrl);
299
+ printSuccess("Logged in.\n");
300
+ }
301
+ catch (err) {
302
+ printError(String(err));
303
+ }
304
+ ask();
305
+ return;
306
+ }
307
+ if (trimmed === "/exit" || trimmed === "/quit") {
308
+ rl.close();
309
+ return;
310
+ }
311
+ if (trimmed.startsWith("/")) {
312
+ console.log(chalk.dim(`\n Unknown command: ${trimmed} (type /help)\n`));
313
+ ask();
314
+ return;
315
+ }
316
+ // ── Run task ─────────────────────────────────────────────────────────────
317
+ await executeTask(trimmed, history, dir, currentModel, system, false);
318
+ ask();
319
+ });
320
+ };
321
+ ask();
322
+ }
323
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
324
+ function fmtK(n) {
325
+ return n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(n);
326
+ }
327
+ // ─── Task runner ──────────────────────────────────────────────────────────────
328
+ async function executeTask(userMessage, history, cwd, model, system, printMode) {
329
+ if (!printMode) {
330
+ console.log();
331
+ printAssistantPrefix();
332
+ }
333
+ let firstChunk = true;
334
+ const finalText = await runAgent(userMessage, history, {
335
+ cwd,
336
+ model,
337
+ system: system ?? undefined,
338
+ onText(text) {
339
+ if (firstChunk) {
340
+ clearSpinner();
341
+ firstChunk = false;
342
+ }
343
+ printText(text);
344
+ },
345
+ onToolCall(name, args) {
346
+ if (printMode)
347
+ return;
348
+ clearSpinner();
349
+ firstChunk = false;
350
+ printToolCall(name, args);
351
+ startSpinner(`${name}…`);
352
+ },
353
+ onToolResult(name, output, ok) {
354
+ if (printMode)
355
+ return;
356
+ stopSpinner(ok);
357
+ printToolResult(name, output, ok);
358
+ },
359
+ });
360
+ if (!printMode) {
361
+ if (!finalText && firstChunk) {
362
+ stopSpinner(false, "No response");
363
+ }
364
+ else if (firstChunk) {
365
+ clearSpinner();
366
+ }
367
+ console.log("\n");
368
+ printDivider();
369
+ }
370
+ history.push({ role: "user", content: userMessage });
371
+ if (finalText)
372
+ history.push({ role: "assistant", content: finalText });
373
+ return finalText;
374
+ }
375
+ program.parse(process.argv);
376
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function loadMemory(cwd: string): string | null;
2
+ export declare const RANTERA_MD_TEMPLATE = "# Wakanda \u2014 Project Context\n\n## Project overview\n<!-- Describe what this project does and its goals -->\n\n## Key files & architecture\n<!-- List the important files/modules and their purpose -->\n\n## Code style & preferences\n<!-- How you like your code: style guide, patterns, naming conventions -->\n\n## Current focus\n<!-- What you are actively working on right now -->\n\n## Important constraints\n<!-- Anything Tera must NOT do or must always do -->\n";
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrD;AAED,eAAO,MAAM,mBAAmB,wdAgB/B,CAAA"}
package/dist/memory.js ADDED
@@ -0,0 +1,32 @@
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { homedir } from "os";
3
+ import { join } from "path";
4
+ export function loadMemory(cwd) {
5
+ const globalPath = join(homedir(), ".wakanda", "RANTERA.md");
6
+ const localPath = join(cwd, "RANTERA.md");
7
+ const chunks = [];
8
+ if (existsSync(globalPath))
9
+ chunks.push(readFileSync(globalPath, "utf-8").trim());
10
+ if (existsSync(localPath) && localPath !== globalPath) {
11
+ chunks.push(readFileSync(localPath, "utf-8").trim());
12
+ }
13
+ return chunks.length ? chunks.join("\n\n---\n\n") : null;
14
+ }
15
+ export const RANTERA_MD_TEMPLATE = `# Wakanda — Project Context
16
+
17
+ ## Project overview
18
+ <!-- Describe what this project does and its goals -->
19
+
20
+ ## Key files & architecture
21
+ <!-- List the important files/modules and their purpose -->
22
+
23
+ ## Code style & preferences
24
+ <!-- How you like your code: style guide, patterns, naming conventions -->
25
+
26
+ ## Current focus
27
+ <!-- What you are actively working on right now -->
28
+
29
+ ## Important constraints
30
+ <!-- Anything Tera must NOT do or must always do -->
31
+ `;
32
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IAC5D,MAAM,SAAS,GAAI,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACjF,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;CAgBlC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare function listDirectory(path: string, rootDir: string): string;
2
+ export declare function readFile(path: string, rootDir: string): string;
3
+ export declare function writeFile(path: string, content: string, rootDir: string): string;
4
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAaA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgDnE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAe9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUhF"}
@@ -0,0 +1,86 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from "fs";
2
+ import { dirname, join, relative } from "path";
3
+ const MAX_FILE_SIZE = 500_000; // 500 KB — cap to avoid flooding the model
4
+ const MAX_DIR_ENTRIES = 200;
5
+ export function listDirectory(path, rootDir) {
6
+ const target = join(rootDir, path);
7
+ if (!existsSync(target))
8
+ return `ERROR: path '${path}' does not exist.`;
9
+ if (!statSync(target).isDirectory())
10
+ return `ERROR: '${path}' is not a directory.`;
11
+ const lines = [];
12
+ function walk(dir, depth, prefix) {
13
+ if (lines.length >= MAX_DIR_ENTRIES)
14
+ return;
15
+ let entries;
16
+ try {
17
+ entries = readdirSync(dir).sort();
18
+ }
19
+ catch {
20
+ return;
21
+ }
22
+ for (const entry of entries) {
23
+ if (lines.length >= MAX_DIR_ENTRIES)
24
+ break;
25
+ // Skip common noise
26
+ if (entry === "node_modules" ||
27
+ entry === ".git" ||
28
+ entry === ".next" ||
29
+ entry === "dist" ||
30
+ entry === "__pycache__" ||
31
+ entry === ".venv" ||
32
+ entry === "venv") {
33
+ lines.push(`${prefix}${entry}/ (skipped)`);
34
+ continue;
35
+ }
36
+ const full = join(dir, entry);
37
+ const stat = statSync(full);
38
+ if (stat.isDirectory()) {
39
+ lines.push(`${prefix}${entry}/`);
40
+ if (depth < 3)
41
+ walk(full, depth + 1, prefix + " ");
42
+ }
43
+ else {
44
+ lines.push(`${prefix}${entry}`);
45
+ }
46
+ }
47
+ }
48
+ walk(target, 0, "");
49
+ const rel = relative(rootDir, target) || ".";
50
+ const header = `${rel}/`;
51
+ if (lines.length >= MAX_DIR_ENTRIES) {
52
+ lines.push(`... (truncated at ${MAX_DIR_ENTRIES} entries)`);
53
+ }
54
+ return header + "\n" + lines.join("\n");
55
+ }
56
+ export function readFile(path, rootDir) {
57
+ const target = join(rootDir, path);
58
+ if (!existsSync(target))
59
+ return `ERROR: file '${path}' does not exist.`;
60
+ if (!statSync(target).isFile())
61
+ return `ERROR: '${path}' is not a file.`;
62
+ const size = statSync(target).size;
63
+ if (size > MAX_FILE_SIZE) {
64
+ return `ERROR: file '${path}' is too large (${Math.round(size / 1024)}KB). Read it in smaller chunks if needed.`;
65
+ }
66
+ try {
67
+ return readFileSync(target, "utf-8");
68
+ }
69
+ catch (err) {
70
+ return `ERROR reading '${path}': ${err}`;
71
+ }
72
+ }
73
+ export function writeFile(path, content, rootDir) {
74
+ const target = join(rootDir, path);
75
+ try {
76
+ const dir = dirname(target);
77
+ if (!existsSync(dir))
78
+ mkdirSync(dir, { recursive: true });
79
+ writeFileSync(target, content, "utf-8");
80
+ return `OK: wrote ${content.length} chars to '${path}'.`;
81
+ }
82
+ catch (err) {
83
+ return `ERROR writing '${path}': ${err}`;
84
+ }
85
+ }
86
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ToolResult {
2
+ output: string;
3
+ ok: boolean;
4
+ }
5
+ export declare function executeTool(name: string, args: Record<string, unknown>, cwd: string): Promise<ToolResult>;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,CAAC,CAoCrB"}
@@ -0,0 +1,44 @@
1
+ import { listDirectory, readFile, writeFile } from "./files.js";
2
+ import { runCommand } from "./shell.js";
3
+ export async function executeTool(name, args, cwd) {
4
+ try {
5
+ switch (name) {
6
+ case "list_directory": {
7
+ const path = String(args.path ?? ".");
8
+ const out = listDirectory(path, cwd);
9
+ return { output: out, ok: !out.startsWith("ERROR") };
10
+ }
11
+ case "read_file": {
12
+ const path = String(args.path ?? "");
13
+ if (!path)
14
+ return { output: "ERROR: path is required.", ok: false };
15
+ const out = readFile(path, cwd);
16
+ return { output: out, ok: !out.startsWith("ERROR") };
17
+ }
18
+ case "write_file": {
19
+ const path = String(args.path ?? "");
20
+ const content = String(args.content ?? "");
21
+ if (!path)
22
+ return { output: "ERROR: path is required.", ok: false };
23
+ const out = writeFile(path, content, cwd);
24
+ return { output: out, ok: out.startsWith("OK") };
25
+ }
26
+ case "run_command": {
27
+ const command = String(args.command ?? "");
28
+ if (!command)
29
+ return { output: "ERROR: command is required.", ok: false };
30
+ const out = await runCommand(command, cwd);
31
+ return {
32
+ output: out,
33
+ ok: !out.startsWith("ERROR") && !out.startsWith("BLOCKED"),
34
+ };
35
+ }
36
+ default:
37
+ return { output: `ERROR: unknown local tool '${name}'.`, ok: false };
38
+ }
39
+ }
40
+ catch (err) {
41
+ return { output: `ERROR: tool '${name}' threw: ${err}`, ok: false };
42
+ }
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAOvC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,IAA6B,EAC7B,GAAW;IAEX,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAA;gBACrC,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBACpC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;YACtD,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;gBACpC,IAAI,CAAC,IAAI;oBAAE,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;gBACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBAC/B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;YACtD,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;gBACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;gBAC1C,IAAI,CAAC,IAAI;oBAAE,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;gBACnE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;gBACzC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAA;YAClD,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;gBAC1C,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;gBACzE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBAC1C,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;iBAC3D,CAAA;YACH,CAAC;YACD;gBACE,OAAO,EAAE,MAAM,EAAE,8BAA8B,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;QACxE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,gBAAgB,IAAI,YAAY,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runCommand(command: string, cwd: string): Promise<string>;
2
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAkBA,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAkCjB"}