Single-commit clean baseline after security scrub of niche-tells, project codenames, internal jargon, and contributor-email leaks. Contents: - 100 Rust crates (_primitives/_rust/) - 37 agent manifests (_manifests/) + generated specs (_generated/) - 67 user-invocable skills (skills/) - 33 hooks (hooks/) - Composition blocks (_blocks/) - Documentation (docs/, README.md) - TS adapter packages (_ts_packages/) - Assembler (_assembler/) - Roles (_roles/) - Templates (_templates/) - Forgejo CI (.forgejo/) Author: Denis Parfionovich <info@greendragon.info> License: see LICENSE.
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { z } from "zod";
|
|
import { GrokClient } from "./client.js";
|
|
|
|
export interface GrokTool {
|
|
name: string;
|
|
description: string;
|
|
inputSchema: z.ZodObject<Record<string, z.ZodTypeAny>>;
|
|
handler: (args: Record<string, unknown>) => Promise<string>;
|
|
}
|
|
|
|
const ResearchArgs = z.object({ query: z.string().min(1) });
|
|
const ImagineArgs = z.object({
|
|
prompt: z.string().min(1),
|
|
quality: z.enum(["standard", "pro"]).default("standard"),
|
|
});
|
|
|
|
export function buildGrokTools(client: GrokClient): GrokTool[] {
|
|
return [
|
|
{
|
|
name: "grok_research",
|
|
description: "Deep research via Grok heavy model. Returns assistant message content.",
|
|
inputSchema: ResearchArgs,
|
|
handler: async (raw) => {
|
|
const args = ResearchArgs.parse(raw);
|
|
return client.deepResearch(args.query);
|
|
},
|
|
},
|
|
{
|
|
name: "grok_imagine",
|
|
description: "Generate an image from a prompt via Grok Imagine.",
|
|
inputSchema: ImagineArgs,
|
|
handler: async (raw) => {
|
|
const args = ImagineArgs.parse(raw);
|
|
const urls = await client.imageGenerate(args.prompt, args.quality === "pro");
|
|
if (urls.length === 0) return "No image returned.";
|
|
return urls.join("\n");
|
|
},
|
|
},
|
|
];
|
|
}
|