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:
2
cli-ink.js
Normal file → Executable file
2
cli-ink.js
Normal file → Executable 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
3
cli.js
@@ -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
43
scripts/jsx-loader.mjs
Normal 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
9
scripts/register-jsx-loader.mjs
Normal file
9
scripts/register-jsx-loader.mjs
Normal 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('./'));
|
||||
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user