@jixo/cli 0.11.0 → 0.13.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 (67) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +41 -67
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/daemon.d.ts +5 -0
  5. package/dist/commands/daemon.d.ts.map +1 -0
  6. package/dist/commands/daemon.js +20 -0
  7. package/dist/commands/daemon.js.map +1 -0
  8. package/dist/commands/doctor/config.d.ts.map +1 -1
  9. package/dist/commands/doctor/config.js +5 -18
  10. package/dist/commands/doctor/config.js.map +1 -1
  11. package/dist/commands/doctor/doctor.d.ts +1 -16
  12. package/dist/commands/doctor/doctor.d.ts.map +1 -1
  13. package/dist/commands/doctor/doctor.js +85 -52
  14. package/dist/commands/doctor/doctor.js.map +1 -1
  15. package/dist/commands/doctor/index.d.ts +1 -1
  16. package/dist/commands/doctor/index.d.ts.map +1 -1
  17. package/dist/commands/doctor/index.js +0 -11
  18. package/dist/commands/doctor/index.js.map +1 -1
  19. package/dist/commands/doctor/types.d.ts +17 -2
  20. package/dist/commands/doctor/types.d.ts.map +1 -1
  21. package/dist/commands/doctor/types.js.map +1 -1
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +32 -49
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/tasks/AiTaskTui.d.ts +22 -0
  26. package/dist/commands/tasks/AiTaskTui.d.ts.map +1 -0
  27. package/dist/commands/tasks/AiTaskTui.js +52 -0
  28. package/dist/commands/tasks/AiTaskTui.js.map +1 -0
  29. package/dist/commands/tasks/ai-tasl-tui.d.ts +22 -0
  30. package/dist/commands/tasks/ai-tasl-tui.d.ts.map +1 -0
  31. package/dist/commands/tasks/ai-tasl-tui.js +53 -0
  32. package/dist/commands/tasks/ai-tasl-tui.js.map +1 -0
  33. package/dist/commands/tasks/ai-tools.d.ts +4 -10
  34. package/dist/commands/tasks/ai-tools.d.ts.map +1 -1
  35. package/dist/commands/tasks/ai-tools.js +15 -11
  36. package/dist/commands/tasks/ai-tools.js.map +1 -1
  37. package/dist/commands/tasks/model-providers.d.ts +5 -1
  38. package/dist/commands/tasks/model-providers.d.ts.map +1 -1
  39. package/dist/commands/tasks/model-providers.js +31 -0
  40. package/dist/commands/tasks/model-providers.js.map +1 -1
  41. package/dist/commands/tasks/run-ai-task.d.ts.map +1 -1
  42. package/dist/commands/tasks/run-ai-task.js +110 -126
  43. package/dist/commands/tasks/run-ai-task.js.map +1 -1
  44. package/dist/commands/tasks/run.d.ts +9 -6
  45. package/dist/commands/tasks/run.d.ts.map +1 -1
  46. package/dist/commands/tasks/run.js +38 -84
  47. package/dist/commands/tasks/run.js.map +1 -1
  48. package/dist/config.d.ts +5 -196
  49. package/dist/config.d.ts.map +1 -1
  50. package/dist/config.js +9 -21
  51. package/dist/config.js.map +1 -1
  52. package/dist/env.d.ts +2 -13
  53. package/dist/env.d.ts.map +1 -1
  54. package/dist/env.js +3 -13
  55. package/dist/env.js.map +1 -1
  56. package/dist/helper/handle-ai-error.js +1 -1
  57. package/dist/helper/handle-ai-error.js.map +1 -1
  58. package/dist/helper/logger.d.ts +3 -0
  59. package/dist/helper/logger.d.ts.map +1 -0
  60. package/dist/helper/logger.js +26 -0
  61. package/dist/helper/logger.js.map +1 -0
  62. package/dist/helper/resolve-ai-tasks.d.ts +7 -6
  63. package/dist/helper/resolve-ai-tasks.d.ts.map +1 -1
  64. package/dist/helper/resolve-ai-tasks.js +22 -19
  65. package/dist/helper/resolve-ai-tasks.js.map +1 -1
  66. package/dist/prompts.json +2 -14
  67. package/package.json +14 -10
@@ -4,13 +4,13 @@ export interface ToolCheckConfig {
4
4
  /** User-friendly name for display purposes (e.g., "PNPM Package Manager") */
5
5
  displayName: string;
6
6
  /** The command to execute to get the version (e.g., "pnpm --version") */
7
- versionCommand: string;
7
+ versionCommand?: string;
8
8
  /**
9
9
  * A regular expression to parse the version string from the command's output.
10
10
  * It MUST have at least one capturing group, which should capture the version string.
11
11
  * Example: For "pnpm 10.11.0", regex could be /pnpm\s+([\d.]+)/ or simply /([\d.]+)/
12
12
  */
13
- versionParseRegex: RegExp;
13
+ versionParseRegex?: RegExp;
14
14
  /**
15
15
  * The minimum required version (Semantic Versioning string).
16
16
  * If undefined, only existence is checked.
@@ -27,4 +27,19 @@ export interface ToolCheckConfig {
27
27
  optional?: boolean;
28
28
  }
29
29
  export type DoctorConfig = ToolCheckConfig[];
30
+ export interface ToolCheckResult {
31
+ id: string;
32
+ displayName: string;
33
+ exists: boolean;
34
+ version?: string;
35
+ requiredVersion?: string;
36
+ meetsVersionRequirement: boolean;
37
+ isOptional: boolean;
38
+ message: string;
39
+ installationHint?: string;
40
+ }
41
+ export interface DoctorReport {
42
+ overallSuccess: boolean;
43
+ results: ToolCheckResult[];
44
+ }
30
45
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IAEX,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IAEX,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,OAAO,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/doctor/types.ts"],"names":[],"mappings":"AACA,2CAA2C","sourcesContent":["\n// types.ts (or directly in your doctor.ts)\n\nexport interface ToolCheckConfig {\n /** A unique identifier for this check (e.g., 'pnpm', 'uvx-cli') */\n id: string;\n\n /** User-friendly name for display purposes (e.g., \"PNPM Package Manager\") */\n displayName: string;\n\n /** The command to execute to get the version (e.g., \"pnpm --version\") */\n versionCommand: string;\n\n /**\n * A regular expression to parse the version string from the command's output.\n * It MUST have at least one capturing group, which should capture the version string.\n * Example: For \"pnpm 10.11.0\", regex could be /pnpm\\s+([\\d.]+)/ or simply /([\\d.]+)/\n */\n versionParseRegex: RegExp;\n\n /**\n * The minimum required version (Semantic Versioning string).\n * If undefined, only existence is checked.\n */\n minVersion?: string;\n\n /**\n * Optional: A hint or URL for installation if the tool is missing or version is too low.\n */\n installationHint?: string;\n\n /**\n * Optional: If true, a failure for this tool won't cause the overall doctor check to fail.\n * It will still be reported. Defaults to false.\n */\n optional?: boolean;\n}\n\nexport type DoctorConfig = ToolCheckConfig[];\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/doctor/types.ts"],"names":[],"mappings":"AAAA,2CAA2C","sourcesContent":["// types.ts (or directly in your doctor.ts)\n\nexport interface ToolCheckConfig {\n /** A unique identifier for this check (e.g., 'pnpm', 'uvx-cli') */\n id: string;\n\n /** User-friendly name for display purposes (e.g., \"PNPM Package Manager\") */\n displayName: string;\n\n /** The command to execute to get the version (e.g., \"pnpm --version\") */\n versionCommand?: string;\n\n /**\n * A regular expression to parse the version string from the command's output.\n * It MUST have at least one capturing group, which should capture the version string.\n * Example: For \"pnpm 10.11.0\", regex could be /pnpm\\s+([\\d.]+)/ or simply /([\\d.]+)/\n */\n versionParseRegex?: RegExp;\n\n /**\n * The minimum required version (Semantic Versioning string).\n * If undefined, only existence is checked.\n */\n minVersion?: string;\n\n /**\n * Optional: A hint or URL for installation if the tool is missing or version is too low.\n */\n installationHint?: string;\n\n /**\n * Optional: If true, a failure for this tool won't cause the overall doctor check to fail.\n * It will still be reported. Defaults to false.\n */\n optional?: boolean;\n}\n\nexport type DoctorConfig = ToolCheckConfig[];\n\nexport interface ToolCheckResult {\n id: string;\n displayName: string;\n exists: boolean;\n version?: string; // Actual version found\n requiredVersion?: string; // From config\n meetsVersionRequirement: boolean; // True if version >= minVersion or if minVersion not set & exists\n isOptional: boolean;\n message: string;\n installationHint?: string;\n}\n\nexport interface DoctorReport {\n overallSuccess: boolean;\n results: ToolCheckResult[];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,SAyD/B,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,SA8B/B,CAAC"}
@@ -1,57 +1,40 @@
1
- import { writeJson, writeMarkdown, writeText } from "@gaubee/nodekit";
1
+ import { writeText } from "@gaubee/nodekit";
2
2
  import { str_trim_indent } from "@gaubee/util";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
- import { safeEnv } from "../env.js";
6
5
  export const init = (dir) => {
7
- {
8
- const jixoDirname = path.join(dir, ".jixo");
9
- /// 创建 .jixo 目录
10
- fs.mkdirSync(jixoDirname, { recursive: true });
11
- /// .jixo/readme.task.md
12
- const readmeTaskFilepath = path.join(jixoDirname, "readme.task.md");
13
- if (!fs.existsSync(readmeTaskFilepath)) {
14
- writeMarkdown(readmeTaskFilepath, str_trim_indent(`
15
- <!-- 您可以自定义 readme.md 文件的格式 -->
16
- 请JIXO帮我生成或者追加 README 文件
17
- `), {
18
- agents: ["readme-writer"],
19
- });
20
- }
6
+ // Create .jixo directory
7
+ const jixoDir = path.join(dir, ".jixo");
8
+ fs.mkdirSync(jixoDir, { recursive: true });
9
+ // Create .jixo.env file
10
+ const jixoEnvFilepath = path.join(dir, ".jixo.env");
11
+ if (!fs.existsSync(jixoEnvFilepath)) {
12
+ writeText(jixoEnvFilepath, str_trim_indent(`
13
+ # JIXO Core Service Configuration
14
+ JIXO_CORE_URL=http://localhost:4111
15
+ JIXO_API_KEY=
16
+
17
+ # LLM Provider API Keys (to be used by jixo-core)
18
+ # ANTHROPIC_API_KEY=
19
+ # GOOGLE_API_KEY=
20
+ # OPENAI_API_KEY=
21
+ `));
22
+ console.log(`✅ Created configuration template at: ${jixoEnvFilepath}`);
21
23
  }
22
- /// jixo.config.json
23
- {
24
- const jixoConfigFilepath = path.join(dir, "jixo.config.json");
25
- if (!fs.existsSync(jixoConfigFilepath)) {
26
- writeJson(jixoConfigFilepath, {
27
- tasks: { type: "dir", dirname: ".jixo" },
28
- });
29
- }
30
- }
31
- /// .jixo.env
32
- {
33
- const jixoEnvFilepath = path.join(dir, ".jixo.env");
34
- if (!fs.existsSync(jixoEnvFilepath)) {
35
- writeText(jixoEnvFilepath, Object.keys(safeEnv)
36
- .filter((key) => key.startsWith("JIXO_"))
37
- .map((key) => `${key}=""`)
38
- .join("\n"));
39
- }
40
- }
41
- /// .gitignore
42
- {
43
- const gitignoreFilepath = path.join(dir, ".gitignore");
44
- const gitignoreLines = (fs.existsSync(gitignoreFilepath) ? fs.readFileSync(gitignoreFilepath, "utf-8") : "").split(/\n+/);
45
- let changed = false;
46
- for (const line of ["*.memory.json", "memory.json", ".jixo.env"]) {
47
- if (!gitignoreLines.includes(line)) {
48
- gitignoreLines.unshift(line);
49
- changed = true;
50
- }
51
- }
52
- if (changed) {
53
- fs.writeFileSync(gitignoreFilepath, gitignoreLines.join("\n"));
54
- }
24
+ // Update root .gitignore
25
+ const gitignoreFilepath = path.join(dir, ".gitignore");
26
+ addRulesToGitIgnore(gitignoreFilepath, [".jixo.env", ".jixo/memory/"]);
27
+ console.log(`✅ Updated .gitignore`);
28
+ console.log("\nJIXO initialized successfully!");
29
+ };
30
+ const addRulesToGitIgnore = (gitignoreFilepath, rules) => {
31
+ const existingRules = fs.existsSync(gitignoreFilepath) ? fs.readFileSync(gitignoreFilepath, "utf-8").split("\n") : [];
32
+ let changed = false;
33
+ const newRules = rules.filter((rule) => !existingRules.includes(rule));
34
+ if (newRules.length > 0) {
35
+ fs.appendFileSync(gitignoreFilepath, "\n# JIXO\n" + newRules.join("\n") + "\n");
36
+ changed = true;
55
37
  }
38
+ return changed;
56
39
  };
57
40
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;IAClC,CAAC;QACC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,eAAe;QACf,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAC7C,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,aAAa,CACX,kBAAkB,EAClB,eAAe,CAAC;;;SAGf,CAAC,EACF;gBACE,MAAM,EAAE,CAAC,eAAe,CAAC;aAC1B,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,oBAAoB;IACpB,CAAC;QACC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,SAAS,CAAC,kBAAkB,EAAE;gBAC5B,KAAK,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAC;aAClB,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,aAAa;IACb,CAAC;QACC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,SAAS,CACP,eAAe,EACf,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBACjB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;iBACxC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC;iBACzB,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACJ,CAAC;IACH,CAAC;IACD,cAAc;IACd,CAAC;QACC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,cAAc,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1H,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {writeJson, writeMarkdown, writeText} from \"@gaubee/nodekit\";\nimport {str_trim_indent} from \"@gaubee/util\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type {JixoConfig} from \"../config.js\";\nimport {safeEnv} from \"../env.js\";\nexport const init = (dir: string) => {\n {\n const jixoDirname = path.join(dir, \".jixo\");\n /// 创建 .jixo 目录\n fs.mkdirSync(jixoDirname, {recursive: true});\n /// .jixo/readme.task.md\n const readmeTaskFilepath = path.join(jixoDirname, \"readme.task.md\");\n if (!fs.existsSync(readmeTaskFilepath)) {\n writeMarkdown(\n readmeTaskFilepath,\n str_trim_indent(`\n <!-- 您可以自定义 readme.md 文件的格式 -->\n 请JIXO帮我生成或者追加 README 文件\n `),\n {\n agents: [\"readme-writer\"],\n },\n );\n }\n }\n /// jixo.config.json\n {\n const jixoConfigFilepath = path.join(dir, \"jixo.config.json\");\n if (!fs.existsSync(jixoConfigFilepath)) {\n writeJson(jixoConfigFilepath, {\n tasks: {type: \"dir\", dirname: \".jixo\"},\n } satisfies JixoConfig);\n }\n }\n /// .jixo.env\n {\n const jixoEnvFilepath = path.join(dir, \".jixo.env\");\n if (!fs.existsSync(jixoEnvFilepath)) {\n writeText(\n jixoEnvFilepath,\n Object.keys(safeEnv)\n .filter((key) => key.startsWith(\"JIXO_\"))\n .map((key) => `${key}=\"\"`)\n .join(\"\\n\"),\n );\n }\n }\n /// .gitignore\n {\n const gitignoreFilepath = path.join(dir, \".gitignore\");\n const gitignoreLines = (fs.existsSync(gitignoreFilepath) ? fs.readFileSync(gitignoreFilepath, \"utf-8\") : \"\").split(/\\n+/);\n let changed = false;\n for (const line of [\"*.memory.json\", \"memory.json\", \".jixo.env\"]) {\n if (!gitignoreLines.includes(line)) {\n gitignoreLines.unshift(line);\n changed = true;\n }\n }\n if (changed) {\n fs.writeFileSync(gitignoreFilepath, gitignoreLines.join(\"\\n\"));\n }\n }\n};\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;IAClC,yBAAyB;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAEzC,wBAAwB;IACxB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,SAAS,CACP,eAAe,EACf,eAAe,CAAC;;;;;;;;;OASf,CAAC,CACH,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,wCAAwC,eAAe,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,yBAAyB;IACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACvD,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,iBAAyB,EAAE,KAAe,EAAE,EAAE;IACzE,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtH,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,cAAc,CAAC,iBAAiB,EAAE,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import {writeText} from \"@gaubee/nodekit\";\nimport {str_trim_indent} from \"@gaubee/util\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport const init = (dir: string) => {\n // Create .jixo directory\n const jixoDir = path.join(dir, \".jixo\");\n fs.mkdirSync(jixoDir, {recursive: true});\n\n // Create .jixo.env file\n const jixoEnvFilepath = path.join(dir, \".jixo.env\");\n if (!fs.existsSync(jixoEnvFilepath)) {\n writeText(\n jixoEnvFilepath,\n str_trim_indent(`\n # JIXO Core Service Configuration\n JIXO_CORE_URL=http://localhost:4111\n JIXO_API_KEY=\n\n # LLM Provider API Keys (to be used by jixo-core)\n # ANTHROPIC_API_KEY=\n # GOOGLE_API_KEY=\n # OPENAI_API_KEY=\n `),\n );\n console.log(`✅ Created configuration template at: ${jixoEnvFilepath}`);\n }\n\n // Update root .gitignore\n const gitignoreFilepath = path.join(dir, \".gitignore\");\n addRulesToGitIgnore(gitignoreFilepath, [\".jixo.env\", \".jixo/memory/\"]);\n console.log(`✅ Updated .gitignore`);\n\n console.log(\"\\nJIXO initialized successfully!\");\n};\n\nconst addRulesToGitIgnore = (gitignoreFilepath: string, rules: string[]) => {\n const existingRules = fs.existsSync(gitignoreFilepath) ? fs.readFileSync(gitignoreFilepath, \"utf-8\").split(\"\\n\") : [];\n let changed = false;\n const newRules = rules.filter((rule) => !existingRules.includes(rule));\n\n if (newRules.length > 0) {\n fs.appendFileSync(gitignoreFilepath, \"\\n# JIXO\\n\" + newRules.join(\"\\n\") + \"\\n\");\n changed = true;\n }\n return changed;\n};\n"]}
@@ -0,0 +1,22 @@
1
+ import { type Spinner } from "@gaubee/nodekit";
2
+ import type { AiTask } from "../../helper/resolve-ai-tasks.js";
3
+ export declare class AiTaskTui {
4
+ #private;
5
+ readonly ai_task: AiTask;
6
+ readonly spinner: Spinner;
7
+ endInfo: {
8
+ prefixText: string;
9
+ text: string;
10
+ readonly suffixText: string;
11
+ };
12
+ constructor(ai_task: AiTask, spinner: Spinner);
13
+ setStatus(key: string, value: string): void;
14
+ getStatus(key: string): string | undefined;
15
+ removeStatus(key: string): boolean;
16
+ get text(): string;
17
+ set text(v: string);
18
+ get prefixText(): string;
19
+ set prefixText(v: string);
20
+ stop(): void;
21
+ }
22
+ //# sourceMappingURL=AiTaskTui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiTaskTui.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/AiTaskTui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAE/D,qBAAa,SAAS;;IAYlB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO;IAZ3B,OAAO;;;;MASF;gBAEM,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO;IAK3B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIpC,SAAS,CAAC,GAAG,EAAE,MAAM;IAGrB,YAAY,CAAC,GAAG,EAAE,MAAM;IAOxB,IAAI,IAAI,WAEP;IACD,IAAI,IAAI,CAAC,CAAC,QAAA,EAET;IACD,IAAI,UAAU,WAEb;IACD,IAAI,UAAU,CAAC,CAAC,QAAA,EAGf;IACD,IAAI;CAGL"}
@@ -0,0 +1,52 @@
1
+ import { gray } from "@gaubee/nodekit";
2
+ export class AiTaskTui {
3
+ ai_task;
4
+ spinner;
5
+ endInfo = (() => {
6
+ const self = this;
7
+ return {
8
+ prefixText: "",
9
+ text: "",
10
+ get suffixText() {
11
+ return `⏱️ ${gray(ms(new Date().getTime() - new Date(self.ai_task.startTime).getTime(), { long: true }))}`;
12
+ },
13
+ };
14
+ })();
15
+ constructor(ai_task, spinner) {
16
+ this.ai_task = ai_task;
17
+ this.spinner = spinner;
18
+ this.prefixText = this.spinner.prefixText;
19
+ }
20
+ #status = new Map();
21
+ setStatus(key, value) {
22
+ this.#status.set(key, value);
23
+ this.#updatePrefixText();
24
+ }
25
+ getStatus(key) {
26
+ return this.#status.get(key);
27
+ }
28
+ removeStatus(key) {
29
+ return this.#status.delete(key);
30
+ }
31
+ #prefixText = "";
32
+ #updatePrefixText = () => {
33
+ this.spinner.prefixText = `${[...this.#status.values()].join(" ")}\n${this.#prefixText}`;
34
+ };
35
+ get text() {
36
+ return this.spinner.text;
37
+ }
38
+ set text(v) {
39
+ this.spinner.text = v;
40
+ }
41
+ get prefixText() {
42
+ return this.#prefixText;
43
+ }
44
+ set prefixText(v) {
45
+ this.#prefixText = v;
46
+ this.#updatePrefixText();
47
+ }
48
+ stop() {
49
+ this.spinner.stopAndPersist(this.endInfo);
50
+ }
51
+ }
52
+ //# sourceMappingURL=AiTaskTui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiTaskTui.js","sourceRoot":"","sources":["../../../src/commands/tasks/AiTaskTui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,iBAAiB,CAAC;AAIrD,MAAM,OAAO,SAAS;IAYT;IACA;IAZX,OAAO,GAAG,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACL,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,EAAE;YACR,IAAI,UAAU;gBACZ,OAAO,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9G,CAAC;SACF,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IACL,YACW,OAAe,EACf,OAAgB;QADhB,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAS;QAEzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,SAAS,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IACD,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,YAAY,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,WAAW,GAAG,EAAE,CAAC;IACjB,iBAAiB,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3F,CAAC,CAAC;IACF,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,CAAC;QACR,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,CAAC,CAAC;QACd,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF","sourcesContent":["import { gray, type Spinner } from \"@gaubee/nodekit\";\nimport type ms from \"ms\";\nimport type { AiTask } from \"../../helper/resolve-ai-tasks.js\";\n\nexport class AiTaskTui {\n endInfo = (() => {\n const self = this;\n return {\n prefixText: \"\",\n text: \"\",\n get suffixText() {\n return `⏱️ ${gray(ms(new Date().getTime() - new Date(self.ai_task.startTime).getTime(), { long: true }))}`;\n },\n };\n })();\n constructor(\n readonly ai_task: AiTask,\n readonly spinner: Spinner\n ) {\n this.prefixText = this.spinner.prefixText;\n }\n #status = new Map<string, string>();\n setStatus(key: string, value: string) {\n this.#status.set(key, value);\n this.#updatePrefixText();\n }\n getStatus(key: string) {\n return this.#status.get(key);\n }\n removeStatus(key: string) {\n return this.#status.delete(key);\n }\n #prefixText = \"\";\n #updatePrefixText = () => {\n this.spinner.prefixText = `${[...this.#status.values()].join(\" \")}\\n${this.#prefixText}`;\n };\n get text() {\n return this.spinner.text;\n }\n set text(v) {\n this.spinner.text = v;\n }\n get prefixText() {\n return this.#prefixText;\n }\n set prefixText(v) {\n this.#prefixText = v;\n this.#updatePrefixText();\n }\n stop() {\n this.spinner.stopAndPersist(this.endInfo);\n }\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { type Spinner } from "@gaubee/nodekit";
2
+ import type { AiTask } from "../../helper/resolve-ai-tasks.js";
3
+ export declare class AiTaskTui {
4
+ #private;
5
+ readonly ai_task: AiTask;
6
+ readonly spinner: Spinner;
7
+ endInfo: {
8
+ prefixText: string;
9
+ text: string;
10
+ readonly suffixText: string;
11
+ };
12
+ constructor(ai_task: AiTask, spinner: Spinner);
13
+ setStatus(key: string, value: string): void;
14
+ getStatus(key: string): string | undefined;
15
+ removeStatus(key: string): boolean;
16
+ get text(): string;
17
+ set text(v: string);
18
+ get prefixText(): string;
19
+ set prefixText(v: string);
20
+ stop(): void;
21
+ }
22
+ //# sourceMappingURL=ai-tasl-tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-tasl-tui.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/ai-tasl-tui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kCAAkC,CAAC;AAE7D,qBAAa,SAAS;;IAYlB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO;IAZ3B,OAAO;;;;MASF;gBAEM,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO;IAK3B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIpC,SAAS,CAAC,GAAG,EAAE,MAAM;IAGrB,YAAY,CAAC,GAAG,EAAE,MAAM;IAOxB,IAAI,IAAI,WAEP;IACD,IAAI,IAAI,CAAC,CAAC,QAAA,EAET;IACD,IAAI,UAAU,WAEb;IACD,IAAI,UAAU,CAAC,CAAC,QAAA,EAGf;IACD,IAAI;CAGL"}
@@ -0,0 +1,53 @@
1
+ import { gray } from "@gaubee/nodekit";
2
+ import ms from "ms";
3
+ export class AiTaskTui {
4
+ ai_task;
5
+ spinner;
6
+ endInfo = (() => {
7
+ const self = this;
8
+ return {
9
+ prefixText: "",
10
+ text: "",
11
+ get suffixText() {
12
+ return `⏱️ ${gray(ms(new Date().getTime() - new Date(self.ai_task.startTime).getTime(), { long: true }))}`;
13
+ },
14
+ };
15
+ })();
16
+ constructor(ai_task, spinner) {
17
+ this.ai_task = ai_task;
18
+ this.spinner = spinner;
19
+ this.prefixText = this.spinner.prefixText;
20
+ }
21
+ #status = new Map();
22
+ setStatus(key, value) {
23
+ this.#status.set(key, value);
24
+ this.#updatePrefixText();
25
+ }
26
+ getStatus(key) {
27
+ return this.#status.get(key);
28
+ }
29
+ removeStatus(key) {
30
+ return this.#status.delete(key);
31
+ }
32
+ #prefixText = "";
33
+ #updatePrefixText = () => {
34
+ this.spinner.prefixText = `${[...this.#status.values()].join(" ")}\n${this.#prefixText}`;
35
+ };
36
+ get text() {
37
+ return this.spinner.text;
38
+ }
39
+ set text(v) {
40
+ this.spinner.text = v;
41
+ }
42
+ get prefixText() {
43
+ return this.#prefixText;
44
+ }
45
+ set prefixText(v) {
46
+ this.#prefixText = v;
47
+ this.#updatePrefixText();
48
+ }
49
+ stop() {
50
+ this.spinner.stopAndPersist(this.endInfo);
51
+ }
52
+ }
53
+ //# sourceMappingURL=ai-tasl-tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-tasl-tui.js","sourceRoot":"","sources":["../../../src/commands/tasks/ai-tasl-tui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAe,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,MAAM,OAAO,SAAS;IAYT;IACA;IAZX,OAAO,GAAG,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACL,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,EAAE;YACR,IAAI,UAAU;gBACZ,OAAO,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,EAAE,CAAC;YAC5G,CAAC;SACF,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IACL,YACW,OAAe,EACf,OAAgB;QADhB,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAS;QAEzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,SAAS,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IACD,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,YAAY,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IACD,WAAW,GAAG,EAAE,CAAC;IACjB,iBAAiB,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3F,CAAC,CAAC;IACF,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,CAAC;QACR,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,CAAC,CAAC;QACd,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF","sourcesContent":["import {gray, type Spinner} from \"@gaubee/nodekit\";\nimport ms from \"ms\";\nimport type {AiTask} from \"../../helper/resolve-ai-tasks.js\";\n\nexport class AiTaskTui {\n endInfo = (() => {\n const self = this;\n return {\n prefixText: \"\",\n text: \"\",\n get suffixText() {\n return `⏱️ ${gray(ms(new Date().getTime() - new Date(self.ai_task.startTime).getTime(), {long: true}))}`;\n },\n };\n })();\n constructor(\n readonly ai_task: AiTask,\n readonly spinner: Spinner,\n ) {\n this.prefixText = this.spinner.prefixText;\n }\n #status = new Map<string, string>();\n setStatus(key: string, value: string) {\n this.#status.set(key, value);\n this.#updatePrefixText();\n }\n getStatus(key: string) {\n return this.#status.get(key);\n }\n removeStatus(key: string) {\n return this.#status.delete(key);\n }\n #prefixText = \"\";\n #updatePrefixText = () => {\n this.spinner.prefixText = `${[...this.#status.values()].join(\" \")}\\n${this.#prefixText}`;\n };\n get text() {\n return this.spinner.text;\n }\n set text(v) {\n this.spinner.text = v;\n }\n get prefixText() {\n return this.#prefixText;\n }\n set prefixText(v) {\n this.#prefixText = v;\n this.#updatePrefixText();\n }\n stop() {\n this.spinner.stopAndPersist(this.endInfo);\n }\n}\n"]}
@@ -789,22 +789,16 @@ export declare const tools: {
789
789
  }>, void | ((this: unknown) => any)>;
790
790
  git: (repo: string) => Promise<ToolSet>;
791
791
  jixo: (ai_task: AiTask) => {
792
- jixo_log_lock: import("ai").Tool<{}, {
792
+ jixo_log_lock: import("ai").Tool<unknown, {
793
793
  type: string;
794
794
  filepath: string;
795
795
  content: string;
796
796
  }>;
797
- jixo_log_unlock: import("ai").Tool<{}, {
797
+ jixo_log_unlock: import("ai").Tool<unknown, {
798
798
  type: string;
799
799
  }>;
800
- jixo_task_exit: import("ai").Tool<{
801
- reason: string;
802
- }, {
803
- type: string;
804
- }>;
805
- get_jixo_skill: import("ai").Tool<{
806
- name: string;
807
- }, any>;
800
+ jixo_tasks_exit: import("ai").Tool<unknown, unknown>;
801
+ get_jixo_skill: any;
808
802
  };
809
803
  };
810
804
  //# sourceMappingURL=ai-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/ai-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,KAAK,OAAO,EAAC,MAAM,IAAI,CAAC;AAEvF,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kCAAkC,CAAC;AAE7D,eAAO,MAAM,KAAK;sBAGD,MAAM;8BAeM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAiDjB,MAAM;oBAkBH,MAAM;;;;;;;;;;;;;;;;;;CA8C1B,CAAC"}
1
+ {"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/ai-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,KAAK,OAAO,EAAC,MAAM,IAAI,CAAC;AAEvF,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kCAAkC,CAAC;AAE7D,eAAO,MAAM,KAAK;sBAGD,MAAM;8BAeM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAmDjB,MAAM;oBAkBH,MAAM;;;;;;;;;;;;CAgD1B,CAAC"}
@@ -10,8 +10,8 @@ export const tools = {
10
10
  return map_get_or_put_async(map, cwd, async () => {
11
11
  const mcpClient = await createMCPClient({
12
12
  transport: new Experimental_StdioMCPTransport({
13
- command: "pnpx",
14
- args: ["@modelcontextprotocol/server-filesystem", cwd],
13
+ command: "pnpm",
14
+ args: ["mcp-fs", cwd],
15
15
  }),
16
16
  });
17
17
  const tools = await mcpClient.tools();
@@ -40,8 +40,10 @@ export const tools = {
40
40
  pnpm: func_remember(async () => {
41
41
  const mcpClient = await createMCPClient({
42
42
  transport: new Experimental_StdioMCPTransport({
43
- command: "pnpx",
44
- args: ["@jixo/mcp-pnpm"],
43
+ // command: "pnpx",
44
+ // args: ["@jixo/mcp-pnpm"],
45
+ command: "pnpm",
46
+ args: ["mcp-pnpm"],
45
47
  }),
46
48
  });
47
49
  const tools = await mcpClient.tools();
@@ -87,8 +89,6 @@ export const tools = {
87
89
  const configs = getAllPromptConfigs();
88
90
  const allSkillMap = getAllSkillMap();
89
91
  return (ai_task) => {
90
- // return map_get_or_put_async(map, ai_task.name, async () => {
91
- // });
92
92
  return {
93
93
  get_jixo_skill: tool({
94
94
  description: "Get the JIXO skill prompt by name",
@@ -109,6 +109,7 @@ export const tools = {
109
109
  description: "Lock the log file for writing, will return log file content",
110
110
  parameters: z.object({}),
111
111
  execute: async () => {
112
+ ai_task.reloadLog();
112
113
  return { type: "success", filepath: ai_task.log.filepath, content: ai_task.log.content };
113
114
  },
114
115
  }),
@@ -119,11 +120,14 @@ export const tools = {
119
120
  return { type: "success" };
120
121
  },
121
122
  }),
122
- jixo_task_exit: tool({
123
- description: "Exit the task.",
124
- parameters: z.object({ reason: z.string() }),
125
- execute: async ({ reason }) => {
126
- ai_task.exit(reason);
123
+ jixo_tasks_exit: tool({
124
+ description: "Exit the tasks.",
125
+ parameters: z.object({
126
+ code: z.number({ description: "Exit code: 0 is Success; 1 is Error; 2 is No Tasks" }),
127
+ reason: z.string({ description: "Exit reasons that provide human-readable information" }),
128
+ }),
129
+ execute: async ({ code, reason }) => {
130
+ ai_task.exit(code, reason);
127
131
  return { type: "success" };
128
132
  },
129
133
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"ai-tools.js","sourceRoot":"","sources":["../../../src/commands/tasks/ai-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import {func_lazy, func_remember, map_get_or_put_async} from \"@gaubee/util\";\nimport {experimental_createMCPClient as createMCPClient, tool, type ToolSet} from \"ai\";\nimport {Experimental_StdioMCPTransport} from \"ai/mcp-stdio\";\nimport z from \"zod\";\nimport {getAllPromptConfigs, getAllSkillMap} from \"../../helper/prompts-loader.js\";\nimport type {AiTask} from \"../../helper/resolve-ai-tasks.js\";\n\nexport const tools = {\n fileSystem: func_lazy(() => {\n const map = new Map<string, ToolSet>();\n return (cwd: string) => {\n return map_get_or_put_async(map, cwd, async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpx\",\n args: [\"@modelcontextprotocol/server-filesystem\", cwd],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n });\n };\n }),\n memory: func_lazy(() => {\n const map = new Map<string, ToolSet>();\n return (memory_filepath: string) => {\n return map_get_or_put_async(map, memory_filepath, async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpx\",\n args: [\"@modelcontextprotocol/server-memory\"],\n env: {\n MEMORY_FILE_PATH: memory_filepath,\n },\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n });\n };\n }),\n pnpm: func_remember(async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpx\",\n args: [\"@jixo/mcp-pnpm\"],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n }),\n sequentialThinking: func_remember(async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpx\",\n args: [\"@modelcontextprotocol/server-sequential-thinking\"],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n }),\n fetch: func_remember(async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"uvx\",\n args: [\"mcp-server-fetch\"],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n }),\n git: func_lazy(() => {\n const map = new Map<string, ToolSet>();\n\n return (repo: string) => {\n return map_get_or_put_async(map, repo, async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"uvx\",\n args: [\"mcp-server-git\", \"--repository\", repo],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n });\n };\n }),\n\n jixo: func_lazy(() => {\n // const map = new Map<string, ToolSet>();\n const configs = getAllPromptConfigs();\n const allSkillMap = getAllSkillMap();\n return (ai_task: AiTask) => {\n // return map_get_or_put_async(map, ai_task.name, async () => {\n // });\n return {\n get_jixo_skill: tool({\n description: \"Get the JIXO skill prompt by name\",\n parameters: z.object({\n name: z.string().describe(\"The name to get the skill for\"),\n }),\n execute: async ({name}) => {\n if (name in allSkillMap) {\n return Reflect.get(configs, name);\n }\n return {type: \"error\", message: \"Skill not found\"};\n },\n }),\n ...(() => {\n // TODO: use process shared lock-manager\n return {\n jixo_log_lock: tool({\n description: \"Lock the log file for writing, will return log file content\",\n parameters: z.object({}),\n execute: async () => {\n return {type: \"success\", filepath: ai_task.log.filepath, content: ai_task.log.content};\n },\n }),\n jixo_log_unlock: tool({\n description: \"Unlock the log file, for other locker can read the log file and then write.\",\n parameters: z.object({}),\n execute: async () => {\n return {type: \"success\"};\n },\n }),\n jixo_task_exit: tool({\n description: \"Exit the task.\",\n parameters: z.object({reason: z.string()}),\n execute: async ({reason}) => {\n ai_task.exit(reason);\n return {type: \"success\"};\n },\n }),\n };\n })(),\n };\n };\n }),\n};\n"]}
1
+ {"version":3,"file":"ai-tools.js","sourceRoot":"","sources":["../../../src/commands/tasks/ai-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import {func_lazy, func_remember, map_get_or_put_async} from \"@gaubee/util\";\nimport {experimental_createMCPClient as createMCPClient, tool, type ToolSet} from \"ai\";\nimport {Experimental_StdioMCPTransport} from \"ai/mcp-stdio\";\nimport z from \"zod\";\nimport {getAllPromptConfigs, getAllSkillMap} from \"../../helper/prompts-loader.js\";\nimport type {AiTask} from \"../../helper/resolve-ai-tasks.js\";\n\nexport const tools = {\n fileSystem: func_lazy(() => {\n const map = new Map<string, ToolSet>();\n return (cwd: string) => {\n return map_get_or_put_async(map, cwd, async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpm\",\n args: [\"mcp-fs\", cwd],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n });\n };\n }),\n memory: func_lazy(() => {\n const map = new Map<string, ToolSet>();\n return (memory_filepath: string) => {\n return map_get_or_put_async(map, memory_filepath, async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpx\",\n args: [\"@modelcontextprotocol/server-memory\"],\n env: {\n MEMORY_FILE_PATH: memory_filepath,\n },\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n });\n };\n }),\n pnpm: func_remember(async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n // command: \"pnpx\",\n // args: [\"@jixo/mcp-pnpm\"],\n command: \"pnpm\",\n args: [\"mcp-pnpm\"],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n }),\n sequentialThinking: func_remember(async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"pnpx\",\n args: [\"@modelcontextprotocol/server-sequential-thinking\"],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n }),\n fetch: func_remember(async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"uvx\",\n args: [\"mcp-server-fetch\"],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n }),\n git: func_lazy(() => {\n const map = new Map<string, ToolSet>();\n\n return (repo: string) => {\n return map_get_or_put_async(map, repo, async () => {\n const mcpClient = await createMCPClient({\n transport: new Experimental_StdioMCPTransport({\n command: \"uvx\",\n args: [\"mcp-server-git\", \"--repository\", repo],\n }),\n });\n const tools = await mcpClient.tools();\n return tools;\n });\n };\n }),\n\n jixo: func_lazy(() => {\n // const map = new Map<string, ToolSet>();\n const configs = getAllPromptConfigs();\n const allSkillMap = getAllSkillMap();\n return (ai_task: AiTask) => {\n return {\n get_jixo_skill: tool({\n description: \"Get the JIXO skill prompt by name\",\n parameters: z.object({\n name: z.string().describe(\"The name to get the skill for\"),\n }),\n execute: async ({name}) => {\n if (name in allSkillMap) {\n return Reflect.get(configs, name);\n }\n return {type: \"error\", message: \"Skill not found\"};\n },\n }),\n ...(() => {\n // TODO: use process shared lock-manager\n return {\n jixo_log_lock: tool({\n description: \"Lock the log file for writing, will return log file content\",\n parameters: z.object({}),\n execute: async () => {\n ai_task.reloadLog();\n return {type: \"success\", filepath: ai_task.log.filepath, content: ai_task.log.content};\n },\n }),\n jixo_log_unlock: tool({\n description: \"Unlock the log file, for other locker can read the log file and then write.\",\n parameters: z.object({}),\n execute: async () => {\n return {type: \"success\"};\n },\n }),\n jixo_tasks_exit: tool({\n description: \"Exit the tasks.\",\n parameters: z.object({\n code: z.number({description: \"Exit code: 0 is Success; 1 is Error; 2 is No Tasks\"}),\n reason: z.string({description: \"Exit reasons that provide human-readable information\"}),\n }),\n execute: async ({code, reason}) => {\n ai_task.exit(code, reason);\n return {type: \"success\"};\n },\n }),\n };\n })(),\n };\n };\n }),\n};\n"]}
@@ -1,9 +1,13 @@
1
+ import { type OpenAIProvider } from "@ai-sdk/openai";
1
2
  export declare const providers: {
2
3
  readonly deepseek: import("@ai-sdk/deepseek").DeepSeekProvider;
3
4
  readonly anthropic: import("@ai-sdk/anthropic").AnthropicProvider;
4
5
  readonly google: import("@ai-sdk/google").GoogleGenerativeAIProvider;
5
- readonly openai: import("@ai-sdk/openai").OpenAIProvider;
6
+ readonly openai: OpenAIProvider;
6
7
  readonly xai: import("@ai-sdk/xai").XaiProvider;
7
8
  readonly deepinfra: import("@ai-sdk/deepinfra").DeepInfraProvider;
8
9
  };
10
+ type LanguageModelV2 = ReturnType<OpenAIProvider>;
11
+ export declare const getModel: (model?: string) => LanguageModelV2;
12
+ export {};
9
13
  //# sourceMappingURL=model-providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-providers.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/model-providers.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,SAAS;;;;;;;CA2CpB,CAAC"}
1
+ {"version":3,"file":"model-providers.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/model-providers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAOjE,eAAO,MAAM,SAAS;;;;;;;CA2CpB,CAAC;AAEH,KAAK,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAClD,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,eA6BzC,CAAC"}
@@ -5,6 +5,7 @@ import { createGoogleGenerativeAI } from "@ai-sdk/google";
5
5
  import { createOpenAI } from "@ai-sdk/openai";
6
6
  import { createXai } from "@ai-sdk/xai";
7
7
  import { obj_lazify } from "@gaubee/util";
8
+ import { match, P } from "ts-pattern";
8
9
  import { safeEnv } from "../../env.js";
9
10
  // const wrapper = (provider:)
10
11
  export const providers = obj_lazify({
@@ -50,4 +51,34 @@ export const providers = obj_lazify({
50
51
  });
51
52
  },
52
53
  });
54
+ export const getModel = (model) => {
55
+ return match(model)
56
+ .with(P.string.startsWith("deepseek-"), (model) => providers.deepseek(model))
57
+ .with(P.string.startsWith("gemini-"), (model) => providers.google(model))
58
+ .with(P.string.startsWith("o3-"), P.string.startsWith("o1-"), P.string.startsWith("gpt-"), (model) => providers.openai(model))
59
+ .with(P.string.startsWith("claude-"), (model) => providers.anthropic(model))
60
+ .with(P.string.startsWith("grok-"), (model) => providers.xai(model))
61
+ .with(P.string.includes("/"), (model) => providers.deepinfra(model))
62
+ .otherwise(() => {
63
+ if (safeEnv.JIXO_DEEPSEEK_API_KEY) {
64
+ return providers.deepseek("deepseek-reasoner");
65
+ }
66
+ if (safeEnv.JIXO_GOOGLE_API_KEY) {
67
+ return providers.google("gemini-2.5-pro-preview-05-06");
68
+ }
69
+ if (safeEnv.JIXO_OPENAI_API_KEY) {
70
+ return providers.openai("o3-mini");
71
+ }
72
+ if (safeEnv.JIXO_ANTHROPIC_API_KEY) {
73
+ return providers.anthropic("claude-4-sonnet-20250514");
74
+ }
75
+ if (safeEnv.JIXO_XAI_API_KEY) {
76
+ return providers.xai("grok-3-beta");
77
+ }
78
+ if (safeEnv.JIXO_DEEPINFRA_API_KEY) {
79
+ return providers.deepinfra("meta-llama/Meta-Llama-3.1-405B-Instruct");
80
+ }
81
+ return providers.deepseek("deepseek-reasoner");
82
+ });
83
+ };
53
84
  //# sourceMappingURL=model-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-providers.js","sourceRoot":"","sources":["../../../src/commands/tasks/model-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,wBAAwB,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,8BAA8B;AAC9B,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,IAAI,QAAQ;QACV,OAAO,cAAc,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC,sBAAsB,IAAI,SAAS;YACpD,MAAM,EAAE,OAAO,CAAC,qBAAqB;SACtC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS;QACX,mDAAmD;QACnD,yEAAyE;QACzE,MAAM;QAEN,MAAM,QAAQ,GAAG,eAAe,CAAC;YAC/B,OAAO,EAAE,OAAO,CAAC,uBAAuB,IAAI,SAAS;YACrD,MAAM,EAAE,OAAO,CAAC,sBAAsB;SACvC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,MAAM;QACR,OAAO,wBAAwB,CAAC;YAC9B,OAAO,EAAE,OAAO,CAAC,oBAAoB,IAAI,SAAS;YAClD,MAAM,EAAE,OAAO,CAAC,mBAAmB;SACpC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM;QACR,OAAO,YAAY,CAAC;YAClB,OAAO,EAAE,OAAO,CAAC,oBAAoB,IAAI,SAAS;YAClD,MAAM,EAAE,OAAO,CAAC,mBAAmB;YACnC,YAAY,EAAE,OAAO,CAAC,wBAAwB,IAAI,SAAS;SAC5D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG;QACL,OAAO,SAAS,CAAC;YACf,OAAO,EAAE,OAAO,CAAC,iBAAiB,IAAI,SAAS;YAC/C,MAAM,EAAE,OAAO,CAAC,gBAAgB;SACjC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS;QACX,OAAO,eAAe,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,uBAAuB,IAAI,SAAS;YACrD,MAAM,EAAE,OAAO,CAAC,sBAAsB;SACvC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC","sourcesContent":["import {createAnthropic} from \"@ai-sdk/anthropic\";\nimport {createDeepInfra} from \"@ai-sdk/deepinfra\";\nimport {createDeepSeek} from \"@ai-sdk/deepseek\";\nimport {createGoogleGenerativeAI} from \"@ai-sdk/google\";\nimport {createOpenAI} from \"@ai-sdk/openai\";\nimport {createXai} from \"@ai-sdk/xai\";\nimport {obj_lazify} from \"@gaubee/util\";\nimport {safeEnv} from \"../../env.js\";\n\n// const wrapper = (provider:)\nexport const providers = obj_lazify({\n get deepseek() {\n return createDeepSeek({\n baseURL: safeEnv.JIXO_DEEPSEEK_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_DEEPSEEK_API_KEY,\n });\n },\n get anthropic() {\n // const bashTool = anthropic.tools.bash_20250124({\n // execute: async ({command, restart}) => execSync(command).toString(),\n // });\n\n const provider = createAnthropic({\n baseURL: safeEnv.JIXO_ANTHROPIC_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_ANTHROPIC_API_KEY,\n });\n return provider;\n },\n get google() {\n return createGoogleGenerativeAI({\n baseURL: safeEnv.JIXO_GOOGLE_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_GOOGLE_API_KEY,\n });\n },\n get openai() {\n return createOpenAI({\n baseURL: safeEnv.JIXO_OPENAI_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_OPENAI_API_KEY,\n organization: safeEnv.JIXO_OPENAI_ORGANIZATION || undefined,\n });\n },\n get xai() {\n return createXai({\n baseURL: safeEnv.JIXO_XAI_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_XAI_API_KEY,\n });\n },\n get deepinfra() {\n return createDeepInfra({\n baseURL: safeEnv.JIXO_DEEPINFRA_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_DEEPINFRA_API_KEY,\n });\n },\n});\n"]}
1
+ {"version":3,"file":"model-providers.js","sourceRoot":"","sources":["../../../src/commands/tasks/model-providers.ts"],"names":[],"mappings":"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","sourcesContent":["import {createAnthropic} from \"@ai-sdk/anthropic\";\nimport {createDeepInfra} from \"@ai-sdk/deepinfra\";\nimport {createDeepSeek} from \"@ai-sdk/deepseek\";\nimport {createGoogleGenerativeAI} from \"@ai-sdk/google\";\nimport {createOpenAI, type OpenAIProvider} from \"@ai-sdk/openai\";\nimport {createXai} from \"@ai-sdk/xai\";\nimport {obj_lazify} from \"@gaubee/util\";\nimport {match, P} from \"ts-pattern\";\nimport {safeEnv} from \"../../env.js\";\n\n// const wrapper = (provider:)\nexport const providers = obj_lazify({\n get deepseek() {\n return createDeepSeek({\n baseURL: safeEnv.JIXO_DEEPSEEK_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_DEEPSEEK_API_KEY,\n });\n },\n get anthropic() {\n // const bashTool = anthropic.tools.bash_20250124({\n // execute: async ({command, restart}) => execSync(command).toString(),\n // });\n\n const provider = createAnthropic({\n baseURL: safeEnv.JIXO_ANTHROPIC_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_ANTHROPIC_API_KEY,\n });\n return provider;\n },\n get google() {\n return createGoogleGenerativeAI({\n baseURL: safeEnv.JIXO_GOOGLE_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_GOOGLE_API_KEY,\n });\n },\n get openai() {\n return createOpenAI({\n baseURL: safeEnv.JIXO_OPENAI_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_OPENAI_API_KEY,\n organization: safeEnv.JIXO_OPENAI_ORGANIZATION || undefined,\n });\n },\n get xai() {\n return createXai({\n baseURL: safeEnv.JIXO_XAI_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_XAI_API_KEY,\n });\n },\n get deepinfra() {\n return createDeepInfra({\n baseURL: safeEnv.JIXO_DEEPINFRA_BASE_URL || undefined,\n apiKey: safeEnv.JIXO_DEEPINFRA_API_KEY,\n });\n },\n});\n\ntype LanguageModelV2 = ReturnType<OpenAIProvider>;\nexport const getModel = (model?: string): LanguageModelV2 => {\n return match(model)\n .with(P.string.startsWith(\"deepseek-\"), (model) => providers.deepseek(model))\n .with(P.string.startsWith(\"gemini-\"), (model) => providers.google(model))\n .with(P.string.startsWith(\"o3-\"), P.string.startsWith(\"o1-\"), P.string.startsWith(\"gpt-\"), (model) => providers.openai(model))\n .with(P.string.startsWith(\"claude-\"), (model) => providers.anthropic(model))\n .with(P.string.startsWith(\"grok-\"), (model) => providers.xai(model))\n .with(P.string.includes(\"/\"), (model) => providers.deepinfra(model))\n .otherwise(() => {\n if (safeEnv.JIXO_DEEPSEEK_API_KEY) {\n return providers.deepseek(\"deepseek-reasoner\");\n }\n if (safeEnv.JIXO_GOOGLE_API_KEY) {\n return providers.google(\"gemini-2.5-pro-preview-05-06\");\n }\n if (safeEnv.JIXO_OPENAI_API_KEY) {\n return providers.openai(\"o3-mini\");\n }\n if (safeEnv.JIXO_ANTHROPIC_API_KEY) {\n return providers.anthropic(\"claude-4-sonnet-20250514\");\n }\n if (safeEnv.JIXO_XAI_API_KEY) {\n return providers.xai(\"grok-3-beta\");\n }\n if (safeEnv.JIXO_DEEPINFRA_API_KEY) {\n return providers.deepinfra(\"meta-llama/Meta-Llama-3.1-405B-Instruct\");\n }\n return providers.deepseek(\"deepseek-reasoner\");\n });\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"run-ai-task.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/run-ai-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAwD,MAAM,iBAAiB,CAAC;AAU7G,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kCAAkC,CAAC;AAyD7D,eAAO,MAAM,SAAS,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM,EAAE,UAAU,SAAS,EAAE,EAAE,iBAAiB,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,kBAsDtI,CAAC"}
1
+ {"version":3,"file":"run-ai-task.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/run-ai-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAA0C,MAAM,iBAAiB,CAAC;AAW/F,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kCAAkC,CAAC;AAO7D,eAAO,MAAM,SAAS,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM,EAAE,UAAU,SAAS,EAAE,EAAE,iBAAiB,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,kBAwCtI,CAAC"}