@nudge-ai/cli 0.0.1-beta.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.mjs +893 -17
- package/dist/bin.mjs.map +1 -1
- package/dist/index.d.mts +71 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{src-DG37IBZ6.mjs → src-B7X5IQ4U.mjs} +1074 -74
- package/dist/src-B7X5IQ4U.mjs.map +1 -0
- package/package.json +13 -14
- package/dist/bin.cjs +0 -29
- package/dist/bin.d.cts +0 -1
- package/dist/index.cjs +0 -4
- package/dist/index.d.cts +0 -27
- package/dist/index.d.cts.map +0 -1
- package/dist/src-6tjbSqai.cjs +0 -5837
- package/dist/src-DG37IBZ6.mjs.map +0 -1
package/dist/bin.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.mjs","names":[],"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { AIConfig } from \"./ai.js\";\nimport { generate } from \"./index.js\";\n\ntype NudgeConfig = {\n generatedFile?: string;\n promptFilenamePattern?: string;\n ai?: AIConfig;\n};\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (command !== \"generate\") {\n console.error(`Usage: nudge generate [--no-cache]`);\n process.exit(1);\n}\n\nconst noCache = args.includes(\"--no-cache\");\n\nconst cwd = process.cwd();\nconst configPath = path.join(cwd, \"nudge.config.json\");\n\nlet config: NudgeConfig = {};\nif (fs.existsSync(configPath)) {\n config = JSON.parse(fs.readFileSync(configPath, \"utf-8\"));\n}\n\nconst outputPath = config.generatedFile\n ? path.join(cwd, config.generatedFile)\n : path.join(cwd, \"src\", \"prompts.gen.ts\");\n\nconst targetDir = path.dirname(outputPath);\n\ngenerate(targetDir, outputPath, {\n promptFilenamePattern: config.promptFilenamePattern,\n aiConfig: config.ai,\n noCache,\n}).catch((error) => {\n console.error(\"Error generating prompts:\", error);\n process.exit(1);\n});\n"],"mappings":";;;;;;AAYA,MAAM,OAAO,QAAQ,KAAK,MAAM,EAAE;AAGlC,IAFgB,KAAK,OAEL,YAAY;AAC1B,SAAQ,MAAM,qCAAqC;AACnD,SAAQ,KAAK,EAAE;;AAGjB,MAAM,UAAU,KAAK,SAAS,aAAa;AAE3C,MAAM,MAAM,QAAQ,KAAK;AACzB,MAAM,aAAa,KAAK,KAAK,KAAK,oBAAoB;AAEtD,IAAI,SAAsB,EAAE;AAC5B,IAAI,GAAG,WAAW,WAAW,CAC3B,UAAS,KAAK,MAAM,GAAG,aAAa,YAAY,QAAQ,CAAC;AAG3D,MAAM,aAAa,OAAO,gBACtB,KAAK,KAAK,KAAK,OAAO,cAAc,GACpC,KAAK,KAAK,KAAK,OAAO,iBAAiB;AAI3C,SAFkB,KAAK,QAAQ,WAAW,EAEtB,YAAY;CAC9B,uBAAuB,OAAO;CAC9B,UAAU,OAAO;CACjB;CACD,CAAC,CAAC,OAAO,UAAU;AAClB,SAAQ,MAAM,6BAA6B,MAAM;AACjD,SAAQ,KAAK,EAAE;EACf"}
|
|
1
|
+
{"version":3,"file":"bin.mjs","names":["runEvaluate","ErrorMessage","runGenerate","ErrorMessage","runImprove","ErrorMessage","args"],"sources":["../src/components/Header.tsx","../src/components/Spinner.tsx","../src/components/StatusMessage.tsx","../src/commands/Eval.tsx","../src/commands/Generate.tsx","../src/commands/Improve.tsx","../src/commands/Init.tsx","../src/bin.tsx"],"sourcesContent":["import { Box, Text } from \"ink\";\n\ntype HeaderProps = {\n title: string;\n subtitle?: string;\n};\n\nexport function Header({ title, subtitle }: HeaderProps) {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold color=\"magenta\">\n {title}\n </Text>\n {subtitle && <Text dimColor> {subtitle}</Text>}\n </Box>\n );\n}\n","import { Box, Text } from \"ink\";\nimport InkSpinner from \"ink-spinner\";\n\ntype SpinnerProps = {\n label: string;\n color?: string;\n};\n\nexport function Spinner({ label, color = \"cyan\" }: SpinnerProps) {\n return (\n <Box>\n <Text color={color}>\n <InkSpinner type=\"dots\" />\n </Text>\n <Text> {label}</Text>\n </Box>\n );\n}\n","import { Box, Text } from \"ink\";\nimport React from \"react\";\n\ntype StatusType = \"success\" | \"error\" | \"warning\" | \"info\";\n\ntype StatusMessageProps = {\n type: StatusType;\n children: React.ReactNode;\n};\n\nconst STATUS_ICONS: Record<StatusType, string> = {\n success: \"✓\",\n error: \"✗\",\n warning: \"⚠\",\n info: \"ℹ\",\n};\n\nconst STATUS_COLORS: Record<StatusType, string> = {\n success: \"green\",\n error: \"red\",\n warning: \"yellow\",\n info: \"blue\",\n};\n\nexport function StatusMessage({ type, children }: StatusMessageProps) {\n return (\n <Box>\n <Text color={STATUS_COLORS[type]}>{STATUS_ICONS[type]} </Text>\n <Text>{children}</Text>\n </Box>\n );\n}\n\nexport function Success({ children }: { children: React.ReactNode }) {\n return <StatusMessage type=\"success\">{children}</StatusMessage>;\n}\n\nexport function Error({ children }: { children: React.ReactNode }) {\n return <StatusMessage type=\"error\">{children}</StatusMessage>;\n}\n\nexport function Warning({ children }: { children: React.ReactNode }) {\n return <StatusMessage type=\"warning\">{children}</StatusMessage>;\n}\n\nexport function Info({ children }: { children: React.ReactNode }) {\n return <StatusMessage type=\"info\">{children}</StatusMessage>;\n}\n","import * as fs from \"fs\";\nimport { Box, Text, useApp } from \"ink\";\nimport * as path from \"path\";\nimport { useEffect, useState } from \"react\";\nimport type { AIConfig } from \"../ai.js\";\nimport { Error as ErrorMessage, Header, Spinner } from \"../components/index.js\";\nimport { evaluate as runEvaluate, type VariantEvaluation } from \"../index.js\";\n\ntype NudgeConfig = {\n generatedFile?: string;\n promptFilenamePattern?: string;\n ai?: AIConfig;\n};\n\ntype EvalCommandProps = {\n verbose?: boolean;\n judge?: boolean;\n};\n\ntype Status = \"loading\" | \"evaluating\" | \"done\" | \"error\";\n\nexport function EvalCommand({\n verbose = false,\n judge = false,\n}: EvalCommandProps) {\n const { exit } = useApp();\n const [status, setStatus] = useState<Status>(\"loading\");\n const [error, setError] = useState<string | null>(null);\n const [evaluations, setEvaluations] = useState<VariantEvaluation[]>([]);\n const [currentPrompt, setCurrentPrompt] = useState<string | null>(null);\n\n useEffect(() => {\n async function run() {\n const cwd = process.cwd();\n const configPath = path.join(cwd, \"nudge.config.json\");\n\n let config: NudgeConfig = {};\n if (fs.existsSync(configPath)) {\n config = JSON.parse(fs.readFileSync(configPath, \"utf-8\"));\n }\n\n const outputPath = config.generatedFile\n ? path.join(cwd, config.generatedFile)\n : path.join(cwd, \"src\", \"prompts.gen.ts\");\n\n const targetDir = path.dirname(outputPath);\n\n setStatus(\"evaluating\");\n\n try {\n const results = await runEvaluate(targetDir, outputPath, {\n promptFilenamePattern: config.promptFilenamePattern,\n aiConfig: config.ai,\n verbose,\n judge,\n onVariantStart: (promptId, variantName) => {\n setCurrentPrompt(`${promptId}:${variantName}`);\n },\n onVariantDone: (evaluation) => {\n setEvaluations((prev) => [...prev, evaluation]);\n setCurrentPrompt(null);\n },\n });\n\n setStatus(\"done\");\n setTimeout(() => exit(), 100);\n } catch (err) {\n setError(String(err));\n setStatus(\"error\");\n setTimeout(() => exit(), 100);\n }\n }\n\n run();\n }, [verbose, judge, exit]);\n\n const totalPassed = evaluations.reduce((sum, e) => sum + e.passed, 0);\n const totalFailed = evaluations.reduce((sum, e) => sum + e.failed, 0);\n const totalTests = totalPassed + totalFailed;\n const overallRate =\n totalTests > 0 ? Math.round((totalPassed / totalTests) * 100) : 0;\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Header\n title=\"Nudge Eval\"\n subtitle=\"Running tests against your prompts\"\n />\n\n {status === \"loading\" && <Spinner label=\"Loading configuration...\" />}\n\n {status === \"evaluating\" && (\n <Box flexDirection=\"column\" marginTop={1}>\n {evaluations.map((evaluation) => (\n <EvaluationResult\n key={`${evaluation.promptId}-${evaluation.variantName}`}\n evaluation={evaluation}\n verbose={verbose}\n />\n ))}\n {currentPrompt && (\n <Box>\n <Spinner label={`Evaluating ${currentPrompt}...`} />\n </Box>\n )}\n </Box>\n )}\n\n {status === \"done\" && (\n <Box flexDirection=\"column\" marginTop={1}>\n {evaluations.map((evaluation) => (\n <EvaluationResult\n key={`${evaluation.promptId}-${evaluation.variantName}`}\n evaluation={evaluation}\n verbose={verbose}\n />\n ))}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n <Box>\n <Text bold>Summary: </Text>\n <Text\n color={\n overallRate >= 80\n ? \"green\"\n : overallRate >= 50\n ? \"yellow\"\n : \"red\"\n }\n >\n {totalPassed}/{totalTests} tests passed ({overallRate}%)\n </Text>\n </Box>\n </Box>\n </Box>\n )}\n\n {status === \"error\" && (\n <Box marginTop={1}>\n <ErrorMessage>{error}</ErrorMessage>\n </Box>\n )}\n </Box>\n );\n}\n\nfunction EvaluationResult({\n evaluation,\n verbose,\n}: {\n evaluation: VariantEvaluation;\n verbose: boolean;\n}) {\n const allPassed = evaluation.failed === 0;\n const rateColor =\n evaluation.successRate >= 80\n ? \"green\"\n : evaluation.successRate >= 50\n ? \"yellow\"\n : \"red\";\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color={allPassed ? \"green\" : \"red\"}>\n {allPassed ? \"✓\" : \"✗\"}{\" \"}\n </Text>\n <Text bold>{evaluation.promptId}</Text>\n {evaluation.variantName !== \"default\" && (\n <Text dimColor> ({evaluation.variantName})</Text>\n )}\n <Text> - </Text>\n <Text color={rateColor}>\n {evaluation.passed}/{evaluation.total} passed (\n {Math.round(evaluation.successRate)}%)\n </Text>\n </Box>\n\n {verbose &&\n evaluation.results.map((result, i) => (\n <Box key={i} marginLeft={2}>\n <Text color={result.passed ? \"green\" : \"red\"}>\n {result.passed ? \"✓\" : \"✗\"}{\" \"}\n </Text>\n <Text dimColor>\n \"{result.input.slice(0, 40)}\n {result.input.length > 40 ? \"...\" : \"\"}\"\n </Text>\n {!result.passed && result.reason && (\n <Text color=\"red\"> - {result.reason}</Text>\n )}\n </Box>\n ))}\n </Box>\n );\n}\n","import * as fs from \"fs\";\nimport { Box, Text, useApp } from \"ink\";\nimport * as path from \"path\";\nimport { useEffect, useState } from \"react\";\nimport type { AIConfig } from \"../ai.js\";\nimport { Error as ErrorMessage, Header, Spinner, Success } from \"../components/index.js\";\nimport { generate as runGenerate } from \"../index.js\";\n\ntype NudgeConfig = {\n generatedFile?: string;\n promptFilenamePattern?: string;\n ai?: AIConfig;\n};\n\ntype GenerateCommandProps = {\n force?: boolean;\n};\n\ntype Status = \"loading\" | \"generating\" | \"done\" | \"error\";\n\ntype PromptStatus = {\n id: string;\n status: \"pending\" | \"generating\" | \"cached\" | \"done\" | \"error\";\n variantCount?: number;\n};\n\nexport function GenerateCommand({ force = false }: GenerateCommandProps) {\n const { exit } = useApp();\n const [status, setStatus] = useState<Status>(\"loading\");\n const [error, setError] = useState<string | null>(null);\n const [prompts, setPrompts] = useState<PromptStatus[]>([]);\n const [outputPath, setOutputPath] = useState<string>(\"\");\n\n useEffect(() => {\n async function run() {\n const cwd = process.cwd();\n const configPath = path.join(cwd, \"nudge.config.json\");\n\n let config: NudgeConfig = {};\n if (fs.existsSync(configPath)) {\n config = JSON.parse(fs.readFileSync(configPath, \"utf-8\"));\n }\n\n const output = config.generatedFile\n ? path.join(cwd, config.generatedFile)\n : path.join(cwd, \"src\", \"prompts.gen.ts\");\n\n setOutputPath(output);\n const targetDir = path.dirname(output);\n\n setStatus(\"generating\");\n\n try {\n await runGenerate(targetDir, output, {\n promptFilenamePattern: config.promptFilenamePattern,\n aiConfig: config.ai,\n noCache: force,\n onPromptStart: (id, variantCount) => {\n setPrompts((prev) => [\n ...prev,\n { id, status: \"generating\", variantCount },\n ]);\n },\n onPromptCached: (id) => {\n setPrompts((prev) => [\n ...prev,\n { id, status: \"cached\" },\n ]);\n },\n onPromptDone: (id, variantCount) => {\n setPrompts((prev) =>\n prev.map((p) =>\n p.id === id ? { ...p, status: \"done\", variantCount } : p\n )\n );\n },\n onPromptError: (id, err) => {\n setPrompts((prev) =>\n prev.map((p) =>\n p.id === id ? { ...p, status: \"error\" } : p\n )\n );\n },\n });\n\n setStatus(\"done\");\n setTimeout(() => exit(), 100);\n } catch (err) {\n setError(String(err));\n setStatus(\"error\");\n setTimeout(() => exit(), 100);\n }\n }\n\n run();\n }, [force, exit]);\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Header title=\"Nudge Generate\" subtitle=\"Generating type-safe prompt files\" />\n\n {status === \"loading\" && <Spinner label=\"Loading configuration...\" />}\n\n {(status === \"generating\" || status === \"done\") && (\n <Box flexDirection=\"column\" marginTop={1}>\n {prompts.map((prompt) => (\n <Box key={prompt.id} gap={1}>\n {prompt.status === \"generating\" && (\n <>\n <Text color=\"cyan\">◐</Text>\n <Text>\"{prompt.id}\" generating{prompt.variantCount && prompt.variantCount > 1 ? ` ${prompt.variantCount} variant(s)` : \"\"}...</Text>\n </>\n )}\n {prompt.status === \"cached\" && (\n <>\n <Text color=\"gray\">✓</Text>\n <Text dimColor>\"{prompt.id}\" (cached)</Text>\n </>\n )}\n {prompt.status === \"done\" && (\n <>\n <Text color=\"green\">✓</Text>\n <Text>\"{prompt.id}\" generated{prompt.variantCount && prompt.variantCount > 1 ? ` ${prompt.variantCount} variant(s)` : \"\"}</Text>\n </>\n )}\n {prompt.status === \"error\" && (\n <>\n <Text color=\"red\">✗</Text>\n <Text>\"{prompt.id}\" failed</Text>\n </>\n )}\n </Box>\n ))}\n </Box>\n )}\n\n {status === \"done\" && (\n <Box marginTop={1}>\n <Success>Generated {outputPath} with {prompts.length} prompt(s)</Success>\n </Box>\n )}\n\n {status === \"error\" && (\n <Box marginTop={1}>\n <ErrorMessage>{error}</ErrorMessage>\n </Box>\n )}\n </Box>\n );\n}\n","import * as fs from \"fs\";\nimport { Box, Text, useApp } from \"ink\";\nimport * as path from \"path\";\nimport { useEffect, useState } from \"react\";\nimport type { AIConfig } from \"../ai.js\";\nimport {\n Error as ErrorMessage,\n Header,\n Spinner,\n Success,\n Warning,\n} from \"../components/index.js\";\nimport { improve as runImprove, type ImprovementResult } from \"../index.js\";\n\ntype NudgeConfig = {\n generatedFile?: string;\n promptFilenamePattern?: string;\n ai?: AIConfig;\n};\n\ntype ImproveCommandProps = {\n maxIterations?: number;\n promptIds?: string;\n verbose?: boolean;\n judge?: boolean;\n};\n\ntype Status = \"loading\" | \"improving\" | \"done\" | \"error\";\n\ntype SourceHint = {\n stepType: string;\n action: string;\n suggestion: string;\n reason: string;\n};\n\ntype ImprovementProgress = {\n promptId: string;\n variantName: string;\n iteration: number;\n maxIterations: number;\n status: \"improving\" | \"improved\" | \"plateau\" | \"max_iterations\";\n currentStatus?: string;\n initialFailures?: number;\n finalFailures?: number;\n sourceHints?: SourceHint[];\n};\n\nexport function ImproveCommand({\n maxIterations = 3,\n promptIds,\n verbose = false,\n judge = false,\n}: ImproveCommandProps) {\n const { exit } = useApp();\n const [status, setStatus] = useState<Status>(\"loading\");\n const [error, setError] = useState<string | null>(null);\n const [progress, setProgress] = useState<ImprovementProgress[]>([]);\n const [currentAction, setCurrentAction] = useState<string | null>(null);\n const [results, setResults] = useState<ImprovementResult[]>([]);\n\n useEffect(() => {\n async function run() {\n const cwd = process.cwd();\n const configPath = path.join(cwd, \"nudge.config.json\");\n\n let config: NudgeConfig = {};\n if (fs.existsSync(configPath)) {\n config = JSON.parse(fs.readFileSync(configPath, \"utf-8\"));\n }\n\n if (!config.ai) {\n setError(\"AI config is required in nudge.config.json\");\n setStatus(\"error\");\n setTimeout(() => exit(), 100);\n return;\n }\n\n const outputPath = config.generatedFile\n ? path.join(cwd, config.generatedFile)\n : path.join(cwd, \"src\", \"prompts.gen.ts\");\n\n const targetDir = path.dirname(outputPath);\n\n setStatus(\"improving\");\n\n try {\n const promptIdList = promptIds\n ? promptIds.split(\",\").map((id) => id.trim())\n : undefined;\n\n const improvementResults = await runImprove(targetDir, outputPath, {\n maxIterations,\n promptIds: promptIdList,\n verbose,\n judge,\n aiConfig: config.ai,\n promptFilenamePattern: config.promptFilenamePattern,\n onStatus: (promptId, variantName, statusMessage) => {\n setProgress((prev) => {\n const existing = prev.find(\n (p) => p.promptId === promptId && p.variantName === variantName,\n );\n if (existing) {\n return prev.map((p) =>\n p.promptId === promptId && p.variantName === variantName\n ? { ...p, currentStatus: statusMessage }\n : p,\n );\n }\n return [\n ...prev,\n {\n promptId,\n variantName,\n iteration: 0,\n maxIterations,\n status: \"improving\",\n currentStatus: statusMessage,\n },\n ];\n });\n },\n onIterationStart: (promptId, variantName, iteration) => {\n setProgress((prev) => {\n const existing = prev.find(\n (p) => p.promptId === promptId && p.variantName === variantName,\n );\n if (existing) {\n return prev.map((p) =>\n p.promptId === promptId && p.variantName === variantName\n ? { ...p, iteration, status: \"improving\" }\n : p,\n );\n }\n return [\n ...prev,\n {\n promptId,\n variantName,\n iteration,\n maxIterations,\n status: \"improving\",\n },\n ];\n });\n setCurrentAction(\n `Improving ${promptId}:${variantName} (iteration ${iteration}/${maxIterations})`,\n );\n },\n onIterationDone: (promptId, variantName, result) => {\n setProgress((prev) =>\n prev.map((p) =>\n p.promptId === promptId && p.variantName === variantName\n ? {\n ...p,\n status: result.status,\n initialFailures: result.initialFailures,\n finalFailures: result.finalFailures,\n sourceHints: result.sourceHints,\n }\n : p,\n ),\n );\n setCurrentAction(null);\n },\n });\n\n setResults(improvementResults);\n setStatus(\"done\");\n setTimeout(() => exit(), 100);\n } catch (err) {\n setError(String(err));\n setStatus(\"error\");\n setTimeout(() => exit(), 100);\n }\n }\n\n run();\n }, [maxIterations, promptIds, verbose, judge, exit]);\n\n const improved = results.filter((r) => r.status === \"improved\").length;\n const plateau = results.filter((r) => r.status === \"plateau\").length;\n const maxedOut = results.filter((r) => r.status === \"max_iterations\").length;\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Header\n title=\"Nudge Improve\"\n subtitle=\"Iteratively improving prompts based on failing tests\"\n />\n\n {status === \"loading\" && <Spinner label=\"Loading configuration...\" />}\n\n {(status === \"improving\" || status === \"done\") && (\n <Box flexDirection=\"column\" marginTop={1}>\n {progress.map((p) => (\n <Box key={`${p.promptId}-${p.variantName}`} marginBottom={1}>\n <ImprovementStatus progress={p} />\n </Box>\n ))}\n\n {currentAction && (\n <Box marginTop={1}>\n <Spinner label={currentAction} />\n </Box>\n )}\n </Box>\n )}\n\n {status === \"done\" && results.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n <Box flexDirection=\"column\">\n <Text bold>Summary:</Text>\n {improved > 0 && <Success>{improved} prompt(s) improved</Success>}\n {plateau > 0 && (\n <Warning>\n {plateau} prompt(s) reached plateau (no more improvements\n possible)\n </Warning>\n )}\n {maxedOut > 0 && (\n <Warning>{maxedOut} prompt(s) hit max iterations</Warning>\n )}\n </Box>\n </Box>\n )}\n\n {status === \"done\" && results.length === 0 && (\n <Box marginTop={1}>\n <Success>All prompts are passing their tests!</Success>\n </Box>\n )}\n\n {status === \"error\" && (\n <Box marginTop={1}>\n <ErrorMessage>{error}</ErrorMessage>\n </Box>\n )}\n </Box>\n );\n}\n\nfunction ImprovementStatus({ progress }: { progress: ImprovementProgress }) {\n const icon =\n progress.status === \"improved\"\n ? \"✓\"\n : progress.status === \"improving\"\n ? \"◐\"\n : progress.status === \"plateau\"\n ? \"○\"\n : \"⚠\";\n\n const color =\n progress.status === \"improved\"\n ? \"green\"\n : progress.status === \"improving\"\n ? \"cyan\"\n : \"yellow\";\n\n return (\n <Box flexDirection=\"column\">\n <Box>\n <Text color={color}>{icon} </Text>\n <Text bold>{progress.promptId}</Text>\n {progress.variantName !== \"default\" && (\n <Text dimColor> ({progress.variantName})</Text>\n )}\n {progress.status === \"improving\" && progress.iteration > 0 && (\n <Text dimColor>\n {\" \"}\n - iteration {progress.iteration}/{progress.maxIterations}\n </Text>\n )}\n {progress.status === \"improving\" && progress.currentStatus && (\n <Text dimColor> - {progress.currentStatus}</Text>\n )}\n {progress.status === \"improved\" && (\n <Text color=\"green\">\n {\" \"}\n - improved ({progress.initialFailures} → {progress.finalFailures}{\" \"}\n failures)\n </Text>\n )}\n {progress.status === \"plateau\" && (\n <Text color=\"yellow\"> - plateau reached</Text>\n )}\n {progress.status === \"max_iterations\" && (\n <Text color=\"yellow\">\n {\" \"}\n - max iterations ({progress.finalFailures} failures remaining)\n </Text>\n )}\n </Box>\n\n {/* Show source hints if available */}\n {progress.sourceHints && progress.sourceHints.length > 0 && (\n <Box flexDirection=\"column\" marginLeft={2}>\n <Text dimColor> 💡 Suggested source changes:</Text>\n {progress.sourceHints.map((hint, i) => (\n <Box key={i} flexDirection=\"column\" marginLeft={2}>\n <Text dimColor>\n {hint.action} {hint.stepType}: {hint.suggestion}\n </Text>\n <Text dimColor italic>\n └ {hint.reason}\n </Text>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n );\n}\n","import * as fs from \"fs\";\nimport { Box, Text, useApp } from \"ink\";\nimport SelectInput from \"ink-select-input\";\nimport TextInput from \"ink-text-input\";\nimport * as path from \"path\";\nimport { useEffect, useState } from \"react\";\nimport type { AIConfig } from \"../ai.js\";\nimport { Header, Success, Warning } from \"../components/index.js\";\n\ntype NudgeConfig = {\n generatedFile?: string;\n promptFilenamePattern?: string;\n ai?: AIConfig;\n};\n\ntype Step =\n | \"check-existing\"\n | \"confirm-overwrite\"\n | \"select-provider\"\n | \"enter-api-key-env\"\n | \"enter-base-url\"\n | \"enter-model\"\n | \"done\";\n\nconst PROVIDER_CHOICES = [\n { label: \"OpenAI\", value: \"openai\" as const },\n { label: \"OpenRouter\", value: \"openrouter\" as const },\n { label: \"Local (custom endpoint)\", value: \"local\" as const },\n];\n\nconst DEFAULT_API_KEYS: Record<string, string> = {\n openai: \"OPENAI_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n local: \"API_KEY\",\n};\n\nconst DEFAULT_MODELS: Record<string, string> = {\n openai: \"gpt-4o\",\n openrouter: \"x-ai/grok-code-fast-1\",\n local: \"llama2\",\n};\n\nexport function InitCommand() {\n const { exit } = useApp();\n const cwd = process.cwd();\n const configPath = path.join(cwd, \"nudge.config.json\");\n\n const [step, setStep] = useState<Step>(\"check-existing\");\n const [provider, setProvider] = useState<AIConfig[\"provider\"]>(\"openai\");\n const [apiKeyEnvVar, setApiKeyEnvVar] = useState(\"\");\n const [baseUrl, setBaseUrl] = useState(\"\");\n const [model, setModel] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [configExists, setConfigExists] = useState(false);\n\n // Check if config exists on mount\n useEffect(() => {\n const exists = fs.existsSync(configPath);\n setConfigExists(exists);\n if (exists) {\n setStep(\"confirm-overwrite\");\n } else {\n setStep(\"select-provider\");\n }\n }, [configPath]);\n\n // Handle completion\n useEffect(() => {\n if (step === \"done\") {\n const config: NudgeConfig = {\n ai: {\n provider,\n apiKeyEnvVar,\n model,\n ...(baseUrl && { baseUrl }),\n },\n };\n\n try {\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n } catch (err) {\n setError(`Failed to write config: ${err}`);\n return;\n }\n\n setTimeout(() => exit(), 100);\n }\n }, [step, provider, apiKeyEnvVar, model, baseUrl, configPath, exit]);\n\n const handleProviderSelect = (item: { value: AIConfig[\"provider\"] }) => {\n setProvider(item.value);\n setApiKeyEnvVar(DEFAULT_API_KEYS[item.value]);\n setModel(DEFAULT_MODELS[item.value]);\n setStep(\"enter-api-key-env\");\n };\n\n const handleApiKeySubmit = () => {\n if (provider === \"local\") {\n setBaseUrl(\"http://localhost:11434/v1\");\n setStep(\"enter-base-url\");\n } else {\n setStep(\"enter-model\");\n }\n };\n\n const handleBaseUrlSubmit = () => {\n setStep(\"enter-model\");\n };\n\n const handleModelSubmit = () => {\n setStep(\"done\");\n };\n\n const handleOverwriteSelect = (item: { value: boolean }) => {\n if (item.value) {\n setStep(\"select-provider\");\n } else {\n exit();\n }\n };\n\n if (error) {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"red\">Error: {error}</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Header title=\"Nudge Init\" subtitle=\"Let's set up your configuration!\" />\n\n {step === \"confirm-overwrite\" && (\n <Box flexDirection=\"column\">\n <Warning>nudge.config.json already exists!</Warning>\n <Box marginTop={1}>\n <Text>Do you want to overwrite it?</Text>\n </Box>\n <Box marginTop={1}>\n <SelectInput\n items={[\n { label: \"No\", value: false },\n { label: \"Yes\", value: true },\n ]}\n onSelect={handleOverwriteSelect}\n />\n </Box>\n </Box>\n )}\n\n {step === \"select-provider\" && (\n <Box flexDirection=\"column\">\n <Text>Choose your AI provider:</Text>\n <Box marginTop={1}>\n <SelectInput\n items={PROVIDER_CHOICES}\n onSelect={handleProviderSelect}\n />\n </Box>\n </Box>\n )}\n\n {step === \"enter-api-key-env\" && (\n <Box flexDirection=\"column\">\n <Text>API key environment variable name:</Text>\n <Box marginTop={1}>\n <Text color=\"cyan\">❯ </Text>\n <TextInput\n value={apiKeyEnvVar}\n onChange={setApiKeyEnvVar}\n onSubmit={handleApiKeySubmit}\n />\n </Box>\n </Box>\n )}\n\n {step === \"enter-base-url\" && (\n <Box flexDirection=\"column\">\n <Text>Base URL for your local provider:</Text>\n <Box marginTop={1}>\n <Text color=\"cyan\">❯ </Text>\n <TextInput\n value={baseUrl}\n onChange={setBaseUrl}\n onSubmit={handleBaseUrlSubmit}\n />\n </Box>\n </Box>\n )}\n\n {step === \"enter-model\" && (\n <Box flexDirection=\"column\">\n <Text>Model name:</Text>\n <Box marginTop={1}>\n <Text color=\"cyan\">❯ </Text>\n <TextInput\n value={model}\n onChange={setModel}\n onSubmit={handleModelSubmit}\n />\n </Box>\n </Box>\n )}\n\n {step === \"done\" && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Success>Configuration saved to nudge.config.json</Success>\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">💡 Next steps:</Text>\n <Text> 1. Set your {apiKeyEnvVar} environment variable</Text>\n <Text>\n {\" \"}\n 2. Create your prompt files (e.g., src/prompts/example.prompt.ts)\n </Text>\n <Text>\n {\" \"}\n 3. Run 'npx @nudge-ai/cli generate' to compile your prompts\n </Text>\n <Text>\n {\" \"}\n 4. Import './prompts.gen' once at your app's entry point\n </Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n","#!/usr/bin/env node\nimport { render } from \"ink\";\nimport React from \"react\";\nimport {\n EvalCommand,\n GenerateCommand,\n ImproveCommand,\n InitCommand,\n} from \"./commands/index.js\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nfunction parseArgs(args: string[]): Record<string, string | boolean> {\n const result: Record<string, string | boolean> = {};\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2);\n const next = args[i + 1];\n\n if (next && !next.startsWith(\"--\")) {\n result[key] = next;\n i++;\n } else {\n result[key] = true;\n }\n }\n }\n\n return result;\n}\n\nfunction showHelp() {\n console.log(`\nNudge CLI - Generate type-safe prompt files for AI applications\n\nUsage:\n nudge <command> [options]\n\nCommands:\n init Initialize a new Nudge configuration\n generate Generate type-safe prompt files from your prompt templates\n eval Run tests defined in prompts to evaluate quality\n improve Iteratively improve prompts based on failing tests\n\nOptions:\n generate:\n --force Skip cache and regenerate all prompts\n\n eval:\n --verbose Show detailed test results\n --judge Use LLM to evaluate string assertions\n\n improve:\n --max-iterations Maximum improvement iterations (default: 3)\n --prompt-ids Comma-separated list of specific prompt IDs to improve\n --verbose Show detailed improvement steps\n --judge Use LLM to evaluate string assertions\n\nExamples:\n nudge init\n nudge generate\n nudge generate --force\n nudge eval --verbose\n nudge eval --judge\n nudge improve --max-iterations 5\n nudge improve --prompt-ids summarizer,translator\n`);\n}\n\nasync function main() {\n if (!command || command === \"--help\" || command === \"-h\") {\n showHelp();\n return;\n }\n\n const options = parseArgs(args.slice(1));\n\n switch (command) {\n case \"init\":\n render(React.createElement(InitCommand));\n break;\n\n case \"generate\":\n render(\n React.createElement(GenerateCommand, {\n force: options.force === true,\n }),\n );\n break;\n\n case \"eval\":\n render(\n React.createElement(EvalCommand, {\n verbose: options.verbose === true,\n judge: options.judge === true,\n }),\n );\n break;\n\n case \"improve\":\n render(\n React.createElement(ImproveCommand, {\n maxIterations:\n typeof options[\"max-iterations\"] === \"string\"\n ? parseInt(options[\"max-iterations\"], 10)\n : 3,\n promptIds:\n typeof options[\"prompt-ids\"] === \"string\"\n ? options[\"prompt-ids\"]\n : undefined,\n verbose: options.verbose === true,\n judge: options.judge === true,\n }),\n );\n break;\n\n default:\n console.error(`Unknown command: ${command}`);\n console.log('Run \"nudge --help\" for usage information.');\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n console.error(\"Error:\", err);\n process.exit(1);\n});\n"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import { PromptBuilderState } from "@nudge-ai/core";
|
|
1
|
+
import { PromptBuilderState } from "@nudge-ai/core/internal";
|
|
3
2
|
|
|
4
3
|
//#region src/ai.d.ts
|
|
5
4
|
type AIConfig = {
|
|
6
|
-
provider: "openai" | "openrouter";
|
|
7
|
-
apiKeyEnvVar
|
|
5
|
+
provider: "openai" | "openrouter" | "local";
|
|
6
|
+
apiKeyEnvVar?: string;
|
|
8
7
|
model: string;
|
|
8
|
+
baseUrl?: string;
|
|
9
9
|
};
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/discover.d.ts
|
|
@@ -16,13 +16,79 @@ type DiscoveredPrompt = {
|
|
|
16
16
|
};
|
|
17
17
|
declare function discoverPrompts(dir: string, pattern: string): Promise<DiscoveredPrompt[]>;
|
|
18
18
|
//#endregion
|
|
19
|
+
//#region src/eval.d.ts
|
|
20
|
+
type TestResult = {
|
|
21
|
+
input: string;
|
|
22
|
+
output: string;
|
|
23
|
+
passed: boolean;
|
|
24
|
+
description?: string;
|
|
25
|
+
reason?: string;
|
|
26
|
+
};
|
|
27
|
+
type VariantEvaluation = {
|
|
28
|
+
promptId: string;
|
|
29
|
+
variantName: string;
|
|
30
|
+
results: TestResult[];
|
|
31
|
+
passed: number;
|
|
32
|
+
failed: number;
|
|
33
|
+
total: number;
|
|
34
|
+
successRate: number;
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/improve-ai.d.ts
|
|
38
|
+
type SourceHint = {
|
|
39
|
+
stepType: string;
|
|
40
|
+
action: "add" | "modify" | "remove" | "adjust_nudge";
|
|
41
|
+
suggestion: string;
|
|
42
|
+
reason: string;
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/improve.d.ts
|
|
46
|
+
type ImproveOptions$1 = {
|
|
47
|
+
promptIds?: string[];
|
|
48
|
+
maxIterations: number;
|
|
49
|
+
verbose: boolean;
|
|
50
|
+
judge: boolean;
|
|
51
|
+
onStatus?: (promptId: string, variantName: string, status: string) => void;
|
|
52
|
+
onIterationStart?: (promptId: string, variantName: string, iteration: number) => void;
|
|
53
|
+
onIterationDone?: (promptId: string, variantName: string, result: ImprovementResult) => void;
|
|
54
|
+
};
|
|
55
|
+
type ImprovementResult = {
|
|
56
|
+
promptId: string;
|
|
57
|
+
variantName: string;
|
|
58
|
+
iterations: number;
|
|
59
|
+
initialFailures: number;
|
|
60
|
+
finalFailures: number;
|
|
61
|
+
sourceHints: SourceHint[];
|
|
62
|
+
status: "improved" | "plateau" | "max_iterations";
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
19
65
|
//#region src/index.d.ts
|
|
20
66
|
type GenerateOptions = {
|
|
21
67
|
promptFilenamePattern?: string;
|
|
22
68
|
aiConfig?: AIConfig;
|
|
23
69
|
noCache?: boolean;
|
|
70
|
+
onPromptStart?: (id: string, variantCount: number) => void;
|
|
71
|
+
onPromptCached?: (id: string) => void;
|
|
72
|
+
onPromptDone?: (id: string, variantCount: number) => void;
|
|
73
|
+
onPromptError?: (id: string, error: Error) => void;
|
|
24
74
|
};
|
|
25
75
|
declare function generate(targetDir: string, outputPath: string, options?: GenerateOptions): Promise<void>;
|
|
76
|
+
type EvaluateOptions = {
|
|
77
|
+
promptFilenamePattern?: string;
|
|
78
|
+
aiConfig?: AIConfig;
|
|
79
|
+
verbose?: boolean;
|
|
80
|
+
judge?: boolean;
|
|
81
|
+
onVariantStart?: (promptId: string, variantName: string) => void;
|
|
82
|
+
onVariantDone?: (evaluation: VariantEvaluation) => void;
|
|
83
|
+
};
|
|
84
|
+
declare function evaluate(targetDir: string, outputPath: string, options?: EvaluateOptions): Promise<VariantEvaluation[]>;
|
|
85
|
+
type ImproveOptions = ImproveOptions$1 & {
|
|
86
|
+
aiConfig: AIConfig;
|
|
87
|
+
promptFilenamePattern?: string;
|
|
88
|
+
onIterationStart?: (promptId: string, variantName: string, iteration: number) => void;
|
|
89
|
+
onIterationDone?: (promptId: string, variantName: string, result: ImprovementResult) => void;
|
|
90
|
+
};
|
|
91
|
+
declare function improve(targetDir: string, outputPath: string, options: ImproveOptions): Promise<ImprovementResult[]>;
|
|
26
92
|
//#endregion
|
|
27
|
-
export { type DiscoveredPrompt, GenerateOptions, discoverPrompts, generate };
|
|
93
|
+
export { type AIConfig, type DiscoveredPrompt, EvaluateOptions, GenerateOptions, ImproveOptions, type ImprovementResult, type VariantEvaluation, discoverPrompts, evaluate, generate, improve };
|
|
28
94
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/ai.ts","../src/discover.ts","../src/index.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/ai.ts","../src/discover.ts","../src/eval.ts","../src/improve-ai.ts","../src/improve.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;KAIY,QAAA;;EAAA,YAAQ,CAAA,EAAA,MAAA;;;;;;KCCR,gBAAA;;EDDA,KAAA,ECGH,kBDHW;;;iBCgBE,eAAA,gCAGnB,QAAQ;;;KClBC,UAAA;EFDA,KAAA,EAAA,MAAQ;;;;ECCR,MAAA,CAAA,EAAA,MAAA;AAeZ,CAAA;KCPY,iBAAA;;;EARA,OAAA,EAWD,UAXW,EAAA;EAQV,MAAA,EAAA,MAAA;;;;ACFZ,CAAA;;;AFNY,KEMA,UAAA,GFNgB;EAeN,QAAA,EAAA,MAAA;;;;ACftB,CAAA;;;AFDY,KIWA,gBAAA,GJXQ;;;;ECCR,KAAA,EAAA,OAAA;EAeU,QAAA,CAAA,EAAA,CAAA,QAAe,EAAA,MAAA,EAG1B,WAAA,EAAA,MAAR,EAAA,MAAO,EAAA,MAAA,EAAA,GAAA,IAAA;;oEGOE;;AFzBA,KE6BA,iBAAA,GF7BU;EAQV,QAAA,EAAA,MAAA;;;;ECFA,aAAU,EAAA,MAAA;eC6BP;;;;;KC3BH,eAAA;;EJRA,QAAA,CAAA,EIUC,QJVe;EAeN,OAAA,CAAA,EAAA,OAAA;;;;ECfV,aAAU,CAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EGgBgB,KHhBhB,EAAA,GAAA,IAAA;AAQtB,CAAA;iBG4Be,QAAA,kDAGJ,kBAAoB;KA4HnB,eAAA;;EF7JA,QAAA,CAAA,EE+JC,QF/JS;;;;ECIV,aAAA,CAAA,EAAA,CAAA,UAAc,ECgKK,iBDjJnB,EAAiB,GAAA,IAAA;AAI7B,CAAA;iBCgJe,QAAA,kDAGJ,kBACR,QAAQ;KAuDC,cAAA,GAAiB;YACjB;EAjOA,qBAAe,CAAA,EAAA,MAEd;EA0BE,gBAAQ,CAAA,EAAA,CAAA,QAGZ,EAAA,MAAA,EAAA,WAAoB,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EA4HnB,eAAA,CAAA,EAAe,CAAA,QAAA,EAEd,MAAA,EAAA,WAKkB,EAAA,MAAA,EAAiB,MAAA,EA0EpC,iBA1EoC,EAAA,GAAA,IAAA;AAC9C,CAAA;iBA6Ea,OAAA,CAxEJ,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EA2EA,cA3EA,CAAA,EA4ER,OA5EQ,CA4EA,iBA5EA,EAAA,CAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as discoverPrompts, n as generate, r as improve, t as evaluate } from "./src-B7X5IQ4U.mjs";
|
|
2
2
|
|
|
3
|
-
export { discoverPrompts, generate };
|
|
3
|
+
export { discoverPrompts, evaluate, generate, improve };
|