Update CLI scripts to enhance functionality and error handling. Change shebang in cli-ink.js for improved compatibility with TypeScript. Modify websearch.js to utilize EXA_API_KEY from environment variables, adding error handling for missing keys. Refactor wget.js to use ES module syntax and improve filename generation for downloaded content.

This commit is contained in:
sebseb7
2025-08-12 05:44:17 +00:00
parent 62e9754ab0
commit ac09e4ed08
6 changed files with 66 additions and 7 deletions

2
cli-ink.js Normal file → Executable file
View File

@@ -1,4 +1,4 @@
#!/usr/bin/env node
#!/usr/bin/env -S node --import tsx
import 'dotenv/config';
import React from 'react';
import { render } from 'ink';

3
cli.js
View File

@@ -87,7 +87,8 @@ list_files - (no/empty path means root)
patch_files - (zum anlegen, ändern und löschen von Dateien)
read_file - (nach zeilen)
ripgrep - suchmusater und dateimuster
websearch - eine Google Suche machen mit Schlüsselwörtern`
websearch - eine Google Suche machen mit Schlüsselwörtern
`
}]};
const input = [{"role": "user", "content": [ {"type": "input_text","text": userText } ]}];

43
scripts/jsx-loader.mjs Normal file
View File

@@ -0,0 +1,43 @@
// ESM loader to transpile .jsx files on the fly using esbuild
// Usage: node --loader ./scripts/jsx-loader.mjs cli-ink.js
import { readFile } from 'node:fs/promises';
import { pathToFileURL, fileURLToPath } from 'node:url';
import { transform } from 'esbuild';
/** @typedef {import('node:module').LoadHook} LoadHook */
/** @typedef {import('node:module').ResolveHook} ResolveHook */
/** @type {ResolveHook} */
export async function resolve(specifier, context, nextResolve) {
// Defer to Node's default resolver for most cases
return nextResolve(specifier, context, nextResolve);
}
/** @type {LoadHook} */
export async function load(url, context, nextLoad) {
// Handle .jsx sources
if (url.endsWith('.jsx')) {
const filename = fileURLToPath(url);
const source = await readFile(filename, 'utf8');
const result = await transform(source, {
loader: 'jsx',
format: 'esm',
jsx: 'automatic',
sourcefile: filename,
});
return {
format: 'module',
source: result.code,
shortCircuit: true,
};
}
// Fallback to default loader for everything else
return nextLoad(url, context, nextLoad);
}

View File

@@ -0,0 +1,9 @@
// Registers our custom JSX ESM loader using Node's stable register() API
import { register } from 'node:module';
import { pathToFileURL } from 'node:url';
// Resolve relative to project root cwd
register('./scripts/jsx-loader.mjs', pathToFileURL('./'));

View File

@@ -1,5 +1,11 @@
import 'dotenv/config';
import Exa from "exa-js";
const exa = new Exa("1513ba88-5280-402b-9da3-e060d38f96d8");
const exaApiKey = process.env.EXA_API_KEY;
if (!exaApiKey) {
throw new Error("Missing EXA_API_KEY environment variable for websearch");
}
const exa = new Exa(exaApiKey);
export default {
type: 'function',

View File

@@ -1,17 +1,17 @@
const fetch = require('node-fetch');
module.exports = async function wget(params) {
export async function run(args){
const { url } = params;
if (!url) throw new Error('missing url');
const res = await fetch(url);
const buffer = await res.buffer();
const filename = url.split('/').filter(Boolean).pop() || 'index.html';
const filename = new Date().getTime() + '.' + url.split('.').pop();
const content = buffer.slice(0, 500).toString('utf8');
return { filename, content };
};
// metadata for the tool runner
module.exports.meta = {
export default {
type: 'function',
name: 'wget',
description: 'Download URL to filesystem',