diff --git a/assets/functions/tools/demo_ts.ts b/assets/functions/tools/demo_ts.ts new file mode 100644 index 0000000..26dc8d1 --- /dev/null +++ b/assets/functions/tools/demo_ts.ts @@ -0,0 +1,53 @@ +/** + * Demonstrates all supported TypeScript parameter types and variations. + * + * @param string - A required string property + * @param string_enum - A required string property constrained to specific values + * @param boolean - A required boolean property + * @param number - A required number property + * @param array_bracket - A required string array using bracket syntax + * @param array_generic - A required string array using generic syntax + * @param string_optional - An optional string using the question mark syntax + * @param string_nullable - An optional string using the union-with-null syntax + * @param number_with_default - An optional number with a default value + * @param boolean_with_default - An optional boolean with a default value + * @param string_with_default - An optional string with a default value + * @param array_optional - An optional string array using the question mark syntax + */ +export function run( + string: string, + string_enum: "foo" | "bar", + boolean: boolean, + number: number, + array_bracket: string[], + array_generic: Array, + string_optional?: string, + string_nullable: string | null = null, + number_with_default: number = 42, + boolean_with_default: boolean = true, + string_with_default: string = "hello", + array_optional?: string[], +): string { + const parts = [ + `string: ${string}`, + `string_enum: ${string_enum}`, + `boolean: ${boolean}`, + `number: ${number}`, + `array_bracket: ${JSON.stringify(array_bracket)}`, + `array_generic: ${JSON.stringify(array_generic)}`, + `string_optional: ${string_optional}`, + `string_nullable: ${string_nullable}`, + `number_with_default: ${number_with_default}`, + `boolean_with_default: ${boolean_with_default}`, + `string_with_default: ${string_with_default}`, + `array_optional: ${JSON.stringify(array_optional)}`, + ]; + + for (const [key, value] of Object.entries(process.env)) { + if (key.startsWith("LLM_")) { + parts.push(`${key}: ${value}`); + } + } + + return parts.join("\n"); +} diff --git a/assets/functions/tools/get_current_weather.ts b/assets/functions/tools/get_current_weather.ts new file mode 100644 index 0000000..34bbf0d --- /dev/null +++ b/assets/functions/tools/get_current_weather.ts @@ -0,0 +1,24 @@ +#!/usr/bin/env tsx + +import { appendFileSync, mkdirSync } from "fs"; +import { dirname } from "path"; + +/** + * Get the current weather in a given location + * @param location - The city and optionally the state or country (e.g., "London", "San Francisco, CA"). + */ +export async function run(location: string): string { + const encoded = encodeURIComponent(location); + const url = `https://wttr.in/${encoded}?format=4`; + + const resp = await fetch(url); + const data = await resp.text(); + + const dest = process.env["LLM_OUTPUT"] ?? "/dev/stdout"; + if (dest !== "-" && dest !== "/dev/stdout") { + mkdirSync(dirname(dest), { recursive: true }); + appendFileSync(dest, data, "utf-8"); + } + + return data; +}