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 'dotenv/config';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { render } from 'ink';
|
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)
|
patch_files - (zum anlegen, ändern und löschen von Dateien)
|
||||||
read_file - (nach zeilen)
|
read_file - (nach zeilen)
|
||||||
ripgrep - suchmusater und dateimuster
|
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 } ]}];
|
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";
|
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 {
|
export default {
|
||||||
type: 'function',
|
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;
|
const { url } = params;
|
||||||
if (!url) throw new Error('missing url');
|
if (!url) throw new Error('missing url');
|
||||||
const res = await fetch(url);
|
const res = await fetch(url);
|
||||||
const buffer = await res.buffer();
|
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');
|
const content = buffer.slice(0, 500).toString('utf8');
|
||||||
return { filename, content };
|
return { filename, content };
|
||||||
};
|
};
|
||||||
|
|
||||||
// metadata for the tool runner
|
// metadata for the tool runner
|
||||||
module.exports.meta = {
|
export default {
|
||||||
type: 'function',
|
type: 'function',
|
||||||
name: 'wget',
|
name: 'wget',
|
||||||
description: 'Download URL to filesystem',
|
description: 'Download URL to filesystem',
|
||||||
|
|||||||
Reference in New Issue
Block a user