utils.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { readFile } from "node:fs/promises";
  2. import { join, resolve } from "node:path";
  3. import { config as loadEnv } from "dotenv";
  4. import { createLLMClient, type ProjectConfig, ProjectConfigSchema } from "@actalk/inkos-core";
  5. export function findProjectRoot(): string {
  6. return process.cwd();
  7. }
  8. export async function loadConfig(): Promise<ProjectConfig> {
  9. const root = findProjectRoot();
  10. // Load .env from project root
  11. loadEnv({ path: join(root, ".env") });
  12. const configPath = join(root, "inkos.json");
  13. try {
  14. const raw = await readFile(configPath, "utf-8");
  15. return ProjectConfigSchema.parse(JSON.parse(raw));
  16. } catch (e) {
  17. throw new Error(
  18. `Failed to load inkos.json from ${root}. Run 'inkos init' first.`,
  19. );
  20. }
  21. }
  22. export function createClient(config: ProjectConfig) {
  23. return createLLMClient(config.llm);
  24. }
  25. export function log(message: string): void {
  26. process.stdout.write(`${message}\n`);
  27. }
  28. export function logError(message: string): void {
  29. process.stderr.write(`[ERROR] ${message}\n`);
  30. }