kly 0.2.0 → 0.3.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.
Files changed (71) hide show
  1. package/dist/ai/storage.mjs +3 -2
  2. package/dist/ai/storage.mjs.map +1 -1
  3. package/dist/bin/bin-registry-DOBspniG.mjs +3 -0
  4. package/dist/bin/kly.mjs +3217 -2430
  5. package/dist/bin/kly.mjs.map +1 -1
  6. package/dist/bin/{permissions-extractor-BfUPS0Tr.mjs → permissions-extractor-ySRyhQut.mjs} +4 -2
  7. package/dist/bin/permissions-extractor-ySRyhQut.mjs.map +1 -0
  8. package/dist/bin/remote-tQeFZX9o.mjs +3 -0
  9. package/dist/cli.mjs +4 -4
  10. package/dist/cli.mjs.map +1 -1
  11. package/dist/define-app.d.mts.map +1 -1
  12. package/dist/define-app.mjs +35 -28
  13. package/dist/define-app.mjs.map +1 -1
  14. package/dist/index.d.mts +3 -3
  15. package/dist/index.mjs +3 -3
  16. package/dist/mcp/schema-converter.d.mts.map +1 -1
  17. package/dist/mcp/schema-converter.mjs +2 -1
  18. package/dist/mcp/schema-converter.mjs.map +1 -1
  19. package/dist/mcp/server.d.mts.map +1 -1
  20. package/dist/mcp/server.mjs +7 -6
  21. package/dist/mcp/server.mjs.map +1 -1
  22. package/dist/permissions/index.mjs +8 -10
  23. package/dist/permissions/index.mjs.map +1 -1
  24. package/dist/sandbox/bundled-executor.d.mts.map +1 -1
  25. package/dist/sandbox/bundled-executor.mjs +67 -10
  26. package/dist/sandbox/bundled-executor.mjs.map +1 -1
  27. package/dist/sandbox/ipc-client.mjs +2 -0
  28. package/dist/sandbox/ipc-client.mjs.map +1 -1
  29. package/dist/shared/constants.mjs +5 -1
  30. package/dist/shared/constants.mjs.map +1 -1
  31. package/dist/shared/errors.mjs +21 -0
  32. package/dist/shared/errors.mjs.map +1 -0
  33. package/dist/types.d.mts +7 -6
  34. package/dist/types.d.mts.map +1 -1
  35. package/dist/types.mjs.map +1 -1
  36. package/dist/ui/components/confirm.d.mts.map +1 -1
  37. package/dist/ui/components/confirm.mjs +4 -8
  38. package/dist/ui/components/confirm.mjs.map +1 -1
  39. package/dist/ui/components/form.d.mts.map +1 -1
  40. package/dist/ui/components/form.mjs +12 -26
  41. package/dist/ui/components/form.mjs.map +1 -1
  42. package/dist/ui/components/input.d.mts.map +1 -1
  43. package/dist/ui/components/input.mjs +3 -7
  44. package/dist/ui/components/input.mjs.map +1 -1
  45. package/dist/ui/{utils/output.d.mts → components/log.d.mts} +22 -2
  46. package/dist/ui/components/log.d.mts.map +1 -0
  47. package/dist/ui/components/log.mjs +92 -0
  48. package/dist/ui/components/log.mjs.map +1 -0
  49. package/dist/ui/components/prompts.d.mts +1 -0
  50. package/dist/ui/components/select.d.mts.map +1 -1
  51. package/dist/ui/components/select.mjs +5 -8
  52. package/dist/ui/components/select.mjs.map +1 -1
  53. package/dist/ui/components/table.d.mts +1 -1
  54. package/dist/ui/components/table.d.mts.map +1 -1
  55. package/dist/ui/components/table.mjs +19 -19
  56. package/dist/ui/components/table.mjs.map +1 -1
  57. package/dist/ui/index.d.mts +3 -2
  58. package/dist/ui/utils/cancel.mjs +17 -0
  59. package/dist/ui/utils/cancel.mjs.map +1 -0
  60. package/dist/ui/utils/colors.d.mts +3 -3
  61. package/dist/ui/utils/colors.d.mts.map +1 -1
  62. package/dist/ui/utils/colors.mjs +21 -33
  63. package/dist/ui/utils/colors.mjs.map +1 -1
  64. package/package.json +14 -12
  65. package/dist/bin/permissions-extractor-BfUPS0Tr.mjs.map +0 -1
  66. package/dist/ui/utils/output.d.mts.map +0 -1
  67. package/dist/ui/utils/output.mjs +0 -42
  68. package/dist/ui/utils/output.mjs.map +0 -1
  69. /package/dist/bin/{config-builder-D5EtwOB3.mjs → config-builder-VSUaGlaV.mjs} +0 -0
  70. /package/dist/bin/{launcher-Ex3ynZdE.mjs → launcher-DD6vpEFb.mjs} +0 -0
  71. /package/dist/bin/{permissions-C_WgoA3t.mjs → permissions-D7-M2lRi.mjs} +0 -0
@@ -1,3 +1,4 @@
1
+ import { error } from "../ui/components/log.mjs";
1
2
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
3
  import { homedir } from "node:os";
3
4
  import { join } from "node:path";
@@ -20,8 +21,8 @@ function loadConfig() {
20
21
  try {
21
22
  const content = readFileSync(CONFIG_FILE, "utf-8");
22
23
  return JSON.parse(content);
23
- } catch (error) {
24
- console.error("Failed to parse config file:", error);
24
+ } catch (err) {
25
+ error(`Failed to parse config file: ${err}`);
25
26
  return { models: {} };
26
27
  }
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.mjs","names":[],"sources":["../../src/ai/storage.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { LLMConfig, LLMProvider } from \"./types\";\n\nconst CONFIG_DIR = join(homedir(), \".kly\");\nconst CONFIG_FILE = join(CONFIG_DIR, \"config.json\");\n\nexport interface KlyConfig {\n currentModel?: string;\n models: Record<string, LLMConfig>;\n}\n\n/**\n * Ensure config directory exists\n */\nfunction ensureConfigDir(): void {\n if (!existsSync(CONFIG_DIR)) {\n mkdirSync(CONFIG_DIR, { recursive: true });\n }\n}\n\n/**\n * Load configuration from ~/.kly/config.json\n */\nexport function loadConfig(): KlyConfig {\n ensureConfigDir();\n\n if (!existsSync(CONFIG_FILE)) {\n return { models: {} };\n }\n\n try {\n const content = readFileSync(CONFIG_FILE, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n console.error(\"Failed to parse config file:\", error);\n return { models: {} };\n }\n}\n\n/**\n * Save configuration to ~/.kly/config.json\n */\nexport function saveConfig(config: KlyConfig): void {\n ensureConfigDir();\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\n/**\n * Get current active model configuration\n */\nexport function getCurrentModelConfig(): LLMConfig | null {\n const config = loadConfig();\n\n if (!config.currentModel) {\n return null;\n }\n\n return config.models[config.currentModel] || null;\n}\n\n/**\n * Set a model as current\n */\nexport function setCurrentModel(modelName: string): void {\n const config = loadConfig();\n\n if (!config.models[modelName]) {\n throw new Error(`Model '${modelName}' not found in config`);\n }\n\n config.currentModel = modelName;\n saveConfig(config);\n}\n\n/**\n * Add or update a model configuration\n */\nexport function saveModelConfig(\n modelName: string,\n modelConfig: LLMConfig,\n): void {\n const config = loadConfig();\n\n config.models[modelName] = modelConfig;\n\n // Set as current if it's the first model\n if (!config.currentModel) {\n config.currentModel = modelName;\n }\n\n saveConfig(config);\n}\n\n/**\n * Remove a model configuration\n */\nexport function removeModelConfig(modelName: string): void {\n const config = loadConfig();\n\n delete config.models[modelName];\n\n // Clear current if it was removed\n if (config.currentModel === modelName) {\n config.currentModel = undefined;\n }\n\n saveConfig(config);\n}\n\n/**\n * List all configured models\n */\nexport function listModels(): Array<{\n name: string;\n config: LLMConfig;\n isCurrent: boolean;\n}> {\n const config = loadConfig();\n\n return Object.entries(config.models).map(([name, modelConfig]) => ({\n name,\n config: modelConfig,\n isCurrent: name === config.currentModel,\n }));\n}\n\n/**\n * Get provider display name\n */\nexport function getProviderDisplayName(provider: LLMProvider): string {\n const displayNames: Record<LLMProvider, string> = {\n openai: \"OpenAI\",\n anthropic: \"Anthropic\",\n google: \"Google\",\n deepseek: \"DeepSeek\",\n ollama: \"Ollama\",\n groq: \"Groq\",\n mistral: \"Mistral\",\n cohere: \"Cohere\",\n \"openai-compatible\": \"OpenAI Compatible\",\n };\n return displayNames[provider];\n}\n"],"mappings":";;;;;AAKA,MAAM,aAAa,KAAK,SAAS,EAAE,OAAO;AAC1C,MAAM,cAAc,KAAK,YAAY,cAAc;;;;AAUnD,SAAS,kBAAwB;AAC/B,KAAI,CAAC,WAAW,WAAW,CACzB,WAAU,YAAY,EAAE,WAAW,MAAM,CAAC;;;;;AAO9C,SAAgB,aAAwB;AACtC,kBAAiB;AAEjB,KAAI,CAAC,WAAW,YAAY,CAC1B,QAAO,EAAE,QAAQ,EAAE,EAAE;AAGvB,KAAI;EACF,MAAM,UAAU,aAAa,aAAa,QAAQ;AAClD,SAAO,KAAK,MAAM,QAAQ;UACnB,OAAO;AACd,UAAQ,MAAM,gCAAgC,MAAM;AACpD,SAAO,EAAE,QAAQ,EAAE,EAAE;;;;;;AAezB,SAAgB,wBAA0C;CACxD,MAAM,SAAS,YAAY;AAE3B,KAAI,CAAC,OAAO,aACV,QAAO;AAGT,QAAO,OAAO,OAAO,OAAO,iBAAiB;;;;;AAuD/C,SAAgB,aAIb;CACD,MAAM,SAAS,YAAY;AAE3B,QAAO,OAAO,QAAQ,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,kBAAkB;EACjE;EACA,QAAQ;EACR,WAAW,SAAS,OAAO;EAC5B,EAAE"}
1
+ {"version":3,"file":"storage.mjs","names":[],"sources":["../../src/ai/storage.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { error } from \"../ui\";\nimport type { LLMConfig, LLMProvider } from \"./types\";\n\nconst CONFIG_DIR = join(homedir(), \".kly\");\nconst CONFIG_FILE = join(CONFIG_DIR, \"config.json\");\n\nexport interface KlyConfig {\n currentModel?: string;\n models: Record<string, LLMConfig>;\n}\n\n/**\n * Ensure config directory exists\n */\nfunction ensureConfigDir(): void {\n if (!existsSync(CONFIG_DIR)) {\n mkdirSync(CONFIG_DIR, { recursive: true });\n }\n}\n\n/**\n * Load configuration from ~/.kly/config.json\n */\nexport function loadConfig(): KlyConfig {\n ensureConfigDir();\n\n if (!existsSync(CONFIG_FILE)) {\n return { models: {} };\n }\n\n try {\n const content = readFileSync(CONFIG_FILE, \"utf-8\");\n return JSON.parse(content);\n } catch (err) {\n error(`Failed to parse config file: ${err}`);\n return { models: {} };\n }\n}\n\n/**\n * Save configuration to ~/.kly/config.json\n */\nexport function saveConfig(config: KlyConfig): void {\n ensureConfigDir();\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\n/**\n * Get current active model configuration\n */\nexport function getCurrentModelConfig(): LLMConfig | null {\n const config = loadConfig();\n\n if (!config.currentModel) {\n return null;\n }\n\n return config.models[config.currentModel] || null;\n}\n\n/**\n * Set a model as current\n */\nexport function setCurrentModel(modelName: string): void {\n const config = loadConfig();\n\n if (!config.models[modelName]) {\n throw new Error(`Model '${modelName}' not found in config`);\n }\n\n config.currentModel = modelName;\n saveConfig(config);\n}\n\n/**\n * Add or update a model configuration\n */\nexport function saveModelConfig(\n modelName: string,\n modelConfig: LLMConfig,\n): void {\n const config = loadConfig();\n\n config.models[modelName] = modelConfig;\n\n // Set as current if it's the first model\n if (!config.currentModel) {\n config.currentModel = modelName;\n }\n\n saveConfig(config);\n}\n\n/**\n * Remove a model configuration\n */\nexport function removeModelConfig(modelName: string): void {\n const config = loadConfig();\n\n delete config.models[modelName];\n\n // Clear current if it was removed\n if (config.currentModel === modelName) {\n config.currentModel = undefined;\n }\n\n saveConfig(config);\n}\n\n/**\n * List all configured models\n */\nexport function listModels(): Array<{\n name: string;\n config: LLMConfig;\n isCurrent: boolean;\n}> {\n const config = loadConfig();\n\n return Object.entries(config.models).map(([name, modelConfig]) => ({\n name,\n config: modelConfig,\n isCurrent: name === config.currentModel,\n }));\n}\n\n/**\n * Get provider display name\n */\nexport function getProviderDisplayName(provider: LLMProvider): string {\n const displayNames: Record<LLMProvider, string> = {\n openai: \"OpenAI\",\n anthropic: \"Anthropic\",\n google: \"Google\",\n deepseek: \"DeepSeek\",\n ollama: \"Ollama\",\n groq: \"Groq\",\n mistral: \"Mistral\",\n cohere: \"Cohere\",\n \"openai-compatible\": \"OpenAI Compatible\",\n };\n return displayNames[provider];\n}\n"],"mappings":";;;;;;AAMA,MAAM,aAAa,KAAK,SAAS,EAAE,OAAO;AAC1C,MAAM,cAAc,KAAK,YAAY,cAAc;;;;AAUnD,SAAS,kBAAwB;AAC/B,KAAI,CAAC,WAAW,WAAW,CACzB,WAAU,YAAY,EAAE,WAAW,MAAM,CAAC;;;;;AAO9C,SAAgB,aAAwB;AACtC,kBAAiB;AAEjB,KAAI,CAAC,WAAW,YAAY,CAC1B,QAAO,EAAE,QAAQ,EAAE,EAAE;AAGvB,KAAI;EACF,MAAM,UAAU,aAAa,aAAa,QAAQ;AAClD,SAAO,KAAK,MAAM,QAAQ;UACnB,KAAK;AACZ,QAAM,gCAAgC,MAAM;AAC5C,SAAO,EAAE,QAAQ,EAAE,EAAE;;;;;;AAezB,SAAgB,wBAA0C;CACxD,MAAM,SAAS,YAAY;AAE3B,KAAI,CAAC,OAAO,aACV,QAAO;AAGT,QAAO,OAAO,OAAO,OAAO,iBAAiB;;;;;AAuD/C,SAAgB,aAIb;CACD,MAAM,SAAS,YAAY;AAE3B,QAAO,OAAO,QAAQ,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,kBAAkB;EACjE;EACA,QAAQ;EACR,WAAW,SAAS,OAAO;EAC5B,EAAE"}
@@ -0,0 +1,3 @@
1
+ import { A as getRegistryPath, C as unregisterCommand, D as removeShim, E as getShimDir, F as detectBins, I as isCommandAvailable, M as readRegistry, N as removeCommand, O as addCommand, P as writeRegistry, S as shouldReregisterLocal, T as generateShimPath, _ as checkPathSetup, b as setupPath, j as listCommands, k as getCommand, v as getShellConfigFile, w as createShim, x as autoRegisterBins, y as isKlyBinInPath } from "./kly.mjs";
2
+
3
+ export { autoRegisterBins };