@jixo/cli 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.
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +74 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/doctor/config.d.ts +3 -0
- package/dist/commands/doctor/config.d.ts.map +1 -0
- package/dist/commands/doctor/config.js +30 -0
- package/dist/commands/doctor/config.js.map +1 -0
- package/dist/commands/doctor/doctor.d.ts +18 -0
- package/dist/commands/doctor/doctor.d.ts.map +1 -0
- package/dist/commands/doctor/doctor.js +125 -0
- package/dist/commands/doctor/doctor.js.map +1 -0
- package/dist/commands/doctor/doctor.test.d.ts +2 -0
- package/dist/commands/doctor/doctor.test.d.ts.map +1 -0
- package/dist/commands/doctor/doctor.test.js +14 -0
- package/dist/commands/doctor/doctor.test.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +2 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +19 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/doctor/types.d.ts +30 -0
- package/dist/commands/doctor/types.d.ts.map +1 -0
- package/dist/commands/doctor/types.js +3 -0
- package/dist/commands/doctor/types.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +57 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/prompts/list.d.ts +2 -0
- package/dist/commands/prompts/list.d.ts.map +1 -0
- package/dist/commands/prompts/list.js +14 -0
- package/dist/commands/prompts/list.js.map +1 -0
- package/dist/commands/prompts/upgrade.d.ts +4 -0
- package/dist/commands/prompts/upgrade.d.ts.map +1 -0
- package/dist/commands/prompts/upgrade.js +17 -0
- package/dist/commands/prompts/upgrade.js.map +1 -0
- package/dist/commands/run.d.ts +5 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +36 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/tasks/ai-tools.d.ts +268 -0
- package/dist/commands/tasks/ai-tools.d.ts.map +1 -0
- package/dist/commands/tasks/ai-tools.js +64 -0
- package/dist/commands/tasks/ai-tools.js.map +1 -0
- package/dist/commands/tasks/model-providers.d.ts +9 -0
- package/dist/commands/tasks/model-providers.d.ts.map +1 -0
- package/dist/commands/tasks/model-providers.js +53 -0
- package/dist/commands/tasks/model-providers.js.map +1 -0
- package/dist/commands/tasks/run-ai-task.d.ts +4 -0
- package/dist/commands/tasks/run-ai-task.d.ts.map +1 -0
- package/dist/commands/tasks/run-ai-task.js +246 -0
- package/dist/commands/tasks/run-ai-task.js.map +1 -0
- package/dist/commands/tasks/run-ai.d.ts +278 -0
- package/dist/commands/tasks/run-ai.d.ts.map +1 -0
- package/dist/commands/tasks/run-ai.js +179 -0
- package/dist/commands/tasks/run-ai.js.map +1 -0
- package/dist/commands/tasks/run.d.ts +5 -0
- package/dist/commands/tasks/run.d.ts.map +1 -0
- package/dist/commands/tasks/run.js +46 -0
- package/dist/commands/tasks/run.js.map +1 -0
- package/dist/commands/upgrade.d.ts +4 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +17 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/config.d.ts +206 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +35 -0
- package/dist/config.js.map +1 -0
- package/dist/env.d.ts +17 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +26 -0
- package/dist/env.js.map +1 -0
- package/dist/helper/find-changes.d.ts +3 -0
- package/dist/helper/find-changes.d.ts.map +1 -0
- package/dist/helper/find-changes.js +106 -0
- package/dist/helper/find-changes.js.map +1 -0
- package/dist/helper/find-changes.test.d.ts +2 -0
- package/dist/helper/find-changes.test.d.ts.map +1 -0
- package/dist/helper/find-changes.test.js +22 -0
- package/dist/helper/find-changes.test.js.map +1 -0
- package/dist/helper/prompts-loader.d.ts +5 -0
- package/dist/helper/prompts-loader.d.ts.map +1 -0
- package/dist/helper/prompts-loader.js +28 -0
- package/dist/helper/prompts-loader.js.map +1 -0
- package/dist/helper/prompts.d.ts +3 -0
- package/dist/helper/prompts.d.ts.map +1 -0
- package/dist/helper/prompts.js +28 -0
- package/dist/helper/prompts.js.map +1 -0
- package/dist/helper/resolve-ai-tasks.d.ts +25 -0
- package/dist/helper/resolve-ai-tasks.d.ts.map +1 -0
- package/dist/helper/resolve-ai-tasks.js +91 -0
- package/dist/helper/resolve-ai-tasks.js.map +1 -0
- package/dist/helper/run-ai.d.ts +12 -0
- package/dist/helper/run-ai.d.ts.map +1 -0
- package/dist/helper/run-ai.js +179 -0
- package/dist/helper/run-ai.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.json +29 -0
- package/package.json +47 -0
- package/prompts/i18n.md +108 -0
- package/prompts/readme-writer.md +120 -0
- package/prompts/user.md +88 -0
- package/prompts/writer.md +13 -0
- package/scripts/gen-prompts.ts +27 -0
- package/src/cli.ts +96 -0
- package/src/commands/doctor/config.ts +30 -0
- package/src/commands/doctor/doctor.test.ts +17 -0
- package/src/commands/doctor/doctor.ts +151 -0
- package/src/commands/doctor/index.ts +21 -0
- package/src/commands/doctor/types.ts +39 -0
- package/src/commands/init.ts +64 -0
- package/src/commands/prompts/list.ts +14 -0
- package/src/commands/prompts/upgrade.ts +16 -0
- package/src/commands/tasks/ai-tools.ts +65 -0
- package/src/commands/tasks/model-providers.ts +54 -0
- package/src/commands/tasks/run-ai-task.ts +263 -0
- package/src/commands/tasks/run.ts +52 -0
- package/src/config.ts +39 -0
- package/src/env.ts +32 -0
- package/src/helper/find-changes.test.ts +23 -0
- package/src/helper/find-changes.ts +109 -0
- package/src/helper/prompts-loader.ts +33 -0
- package/src/helper/resolve-ai-tasks.ts +126 -0
- package/src/index.ts +8 -0
- package/src/prompts.json +29 -0
- package/tsconfig.json +15 -0
- package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,179 @@
|
|
1
|
+
import { createAnthropic } from "@ai-sdk/anthropic";
|
2
|
+
import { createDeepInfra } from "@ai-sdk/deepinfra";
|
3
|
+
import { createDeepSeek } from "@ai-sdk/deepseek";
|
4
|
+
import { createGoogleGenerativeAI } from "@ai-sdk/google";
|
5
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
6
|
+
import { createXai } from "@ai-sdk/xai";
|
7
|
+
import { cyan, FileEntry, gray, green, spinner } from "@gaubee/nodekit";
|
8
|
+
import { func_lazy, func_remember, map_get_or_put_async, obj_lazify } from "@gaubee/util";
|
9
|
+
import { experimental_createMCPClient as createMCPClient, streamText } from "ai";
|
10
|
+
import { Experimental_StdioMCPTransport } from "ai/mcp-stdio";
|
11
|
+
import { match, P } from "ts-pattern";
|
12
|
+
import { safeEnv } from "../../env.js";
|
13
|
+
import { getModelMessage, getPromptConfigs } from "../../helper/prompts-loader.js";
|
14
|
+
// const wrapper = (provider:)
|
15
|
+
export const providers = obj_lazify({
|
16
|
+
get deepseek() {
|
17
|
+
return createDeepSeek({
|
18
|
+
baseURL: safeEnv.JIXO_DEEPSEEK_BASE_URL || undefined,
|
19
|
+
apiKey: safeEnv.JIXO_DEEPSEEK_API_KEY,
|
20
|
+
});
|
21
|
+
},
|
22
|
+
get anthropic() {
|
23
|
+
// const bashTool = anthropic.tools.bash_20250124({
|
24
|
+
// execute: async ({command, restart}) => execSync(command).toString(),
|
25
|
+
// });
|
26
|
+
const provider = createAnthropic({
|
27
|
+
baseURL: safeEnv.JIXO_ANTHROPIC_BASE_URL || undefined,
|
28
|
+
apiKey: safeEnv.JIXO_ANTHROPIC_API_KEY,
|
29
|
+
});
|
30
|
+
return provider;
|
31
|
+
},
|
32
|
+
get google() {
|
33
|
+
return createGoogleGenerativeAI({
|
34
|
+
baseURL: safeEnv.JIXO_GOOGLE_BASE_URL || undefined,
|
35
|
+
apiKey: safeEnv.JIXO_GOOGLE_API_KEY,
|
36
|
+
});
|
37
|
+
},
|
38
|
+
get openai() {
|
39
|
+
return createOpenAI({
|
40
|
+
baseURL: safeEnv.JIXO_OPENAI_BASE_URL || undefined,
|
41
|
+
apiKey: safeEnv.JIXO_OPENAI_API_KEY,
|
42
|
+
organization: safeEnv.JIXO_OPENAI_ORGANIZATION || undefined,
|
43
|
+
});
|
44
|
+
},
|
45
|
+
get xai() {
|
46
|
+
return createXai({
|
47
|
+
baseURL: safeEnv.JIXO_XAI_BASE_URL || undefined,
|
48
|
+
apiKey: safeEnv.JIXO_XAI_API_KEY,
|
49
|
+
});
|
50
|
+
},
|
51
|
+
get deepinfra() {
|
52
|
+
return createDeepInfra({
|
53
|
+
baseURL: safeEnv.JIXO_DEEPINFRA_BASE_URL || undefined,
|
54
|
+
apiKey: safeEnv.JIXO_DEEPINFRA_API_KEY,
|
55
|
+
});
|
56
|
+
},
|
57
|
+
});
|
58
|
+
const getModel = (model) => {
|
59
|
+
return match(model)
|
60
|
+
.with(P.string.startsWith("deepseek-"), (model) => providers.deepseek(model))
|
61
|
+
.otherwise(() => {
|
62
|
+
if (safeEnv.JIXO_DEEPSEEK_API_KEY) {
|
63
|
+
return providers.deepseek("deepseek-chat");
|
64
|
+
}
|
65
|
+
if (safeEnv.JIXO_GOOGLE_API_KEY) {
|
66
|
+
return providers.google("gemini-2.5-pro-preview-05-06");
|
67
|
+
}
|
68
|
+
if (safeEnv.JIXO_OPENAI_API_KEY) {
|
69
|
+
return providers.openai("o3-mini");
|
70
|
+
}
|
71
|
+
if (safeEnv.JIXO_ANTHROPIC_API_KEY) {
|
72
|
+
return providers.anthropic("claude-4-sonnet-20250514");
|
73
|
+
}
|
74
|
+
if (safeEnv.JIXO_XAI_API_KEY) {
|
75
|
+
return providers.xai("grok-3-beta");
|
76
|
+
}
|
77
|
+
if (safeEnv.JIXO_DEEPINFRA_API_KEY) {
|
78
|
+
return providers.deepinfra("meta-llama/Meta-Llama-3.1-405B-Instruct");
|
79
|
+
}
|
80
|
+
return providers.deepseek("deepseek-reasoner");
|
81
|
+
});
|
82
|
+
};
|
83
|
+
export const tools = {
|
84
|
+
fileSystem: func_lazy(() => {
|
85
|
+
const map = new Map();
|
86
|
+
return (cwd) => {
|
87
|
+
return map_get_or_put_async(map, cwd, async () => {
|
88
|
+
const mcpClient = await createMCPClient({
|
89
|
+
transport: new Experimental_StdioMCPTransport({
|
90
|
+
command: "pnpx",
|
91
|
+
args: ["@modelcontextprotocol/server-filesystem", cwd],
|
92
|
+
}),
|
93
|
+
});
|
94
|
+
const tools = await mcpClient.tools();
|
95
|
+
return tools;
|
96
|
+
});
|
97
|
+
};
|
98
|
+
}),
|
99
|
+
fetch: func_remember(async () => {
|
100
|
+
const mcpClient = await createMCPClient({
|
101
|
+
transport: new Experimental_StdioMCPTransport({
|
102
|
+
command: "uvx",
|
103
|
+
args: ["mcp-server-fetch"],
|
104
|
+
}),
|
105
|
+
});
|
106
|
+
const tools = await mcpClient.tools();
|
107
|
+
return tools;
|
108
|
+
}),
|
109
|
+
git: func_lazy(() => {
|
110
|
+
const map = new Map();
|
111
|
+
return (repo) => {
|
112
|
+
return map_get_or_put_async(map, repo, async () => {
|
113
|
+
const mcpClient = await createMCPClient({
|
114
|
+
transport: new Experimental_StdioMCPTransport({
|
115
|
+
command: "uvx",
|
116
|
+
args: ["mcp-server-git", "--repository", repo],
|
117
|
+
}),
|
118
|
+
});
|
119
|
+
const tools = await mcpClient.tools();
|
120
|
+
return tools;
|
121
|
+
});
|
122
|
+
};
|
123
|
+
}),
|
124
|
+
};
|
125
|
+
export const runAiTask = async (ai_task, allFiles, changedFiles) => {
|
126
|
+
const model = getModel(ai_task.model);
|
127
|
+
const modelMessage = getModelMessage(ai_task.agents);
|
128
|
+
modelMessage.push(
|
129
|
+
//
|
130
|
+
{
|
131
|
+
role: "system",
|
132
|
+
content: getPromptConfigs()
|
133
|
+
.base.content //
|
134
|
+
.replaceAll("{{task.name}}", ai_task.name)
|
135
|
+
.replaceAll("{{task.memory}}", ai_task.memory)
|
136
|
+
.replaceAll("{{task.content}}", ai_task.content)
|
137
|
+
.replaceAll("{{allFiles}}", allFiles.map((file) => `- ${file.path}`).join("\n"))
|
138
|
+
.replaceAll("{{changedFiles}}", changedFiles.map((file) => `- ${file.path}`).join("\n")),
|
139
|
+
});
|
140
|
+
// console.log("QAQ modelMessage", modelMessage);
|
141
|
+
// return;
|
142
|
+
const result = streamText({
|
143
|
+
model: model,
|
144
|
+
prompt: modelMessage,
|
145
|
+
tools: {
|
146
|
+
...(await tools.fileSystem(ai_task.cwd)),
|
147
|
+
// ...(await tools.fetch()),
|
148
|
+
// ...(await tools.git(ai_task.cwd)),
|
149
|
+
},
|
150
|
+
onChunk: ({ chunk }) => {
|
151
|
+
if (chunk.type === "reasoning") {
|
152
|
+
if (reasoning === "") {
|
153
|
+
loading.prefixText = "🤔 ";
|
154
|
+
loading.text = "";
|
155
|
+
}
|
156
|
+
reasoning += chunk.text;
|
157
|
+
loading.text = gray(reasoning.split("\n").slice(-3).join("\n"));
|
158
|
+
}
|
159
|
+
},
|
160
|
+
});
|
161
|
+
const loading = spinner.default(`Connecting To ${model.provider}...`);
|
162
|
+
loading.prefixText = "⏳ ";
|
163
|
+
loading.start();
|
164
|
+
let reasoning = "";
|
165
|
+
let fulltext = "";
|
166
|
+
for await (const text of result.textStream) {
|
167
|
+
if (fulltext === "") {
|
168
|
+
loading.prefixText = "🤖 ";
|
169
|
+
loading.text = "";
|
170
|
+
}
|
171
|
+
fulltext += text;
|
172
|
+
loading.text = fulltext;
|
173
|
+
}
|
174
|
+
loading.stopAndPersist({
|
175
|
+
suffixText: green(`\n✅ ${cyan(`[${ai_task.name}]`)} Completed\n`),
|
176
|
+
});
|
177
|
+
console.log("QAQ done", result.text);
|
178
|
+
};
|
179
|
+
//# sourceMappingURL=run-ai.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"run-ai.js","sourceRoot":"","sources":["../../../src/commands/tasks/run-ai.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} from \"@ai-sdk/openai\";\nimport {createXai} from \"@ai-sdk/xai\";\nimport {cyan, FileEntry, gray, green, spinner} from \"@gaubee/nodekit\";\nimport {func_lazy, func_remember, map_get_or_put_async, obj_lazify} from \"@gaubee/util\";\nimport {experimental_createMCPClient as createMCPClient, streamText, type ModelMessage, type ToolSet} from \"ai\";\nimport {Experimental_StdioMCPTransport} from \"ai/mcp-stdio\";\nimport {match, P} from \"ts-pattern\";\nimport {safeEnv} from \"../../env.js\";\nimport {getModelMessage, getPromptConfigs} from \"../../helper/prompts-loader.js\";\nimport type {AiTask} from \"../../helper/resolve-ai-tasks.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});\nconst getModel = (model?: string) => {\n return match(model)\n .with(P.string.startsWith(\"deepseek-\"), (model) => providers.deepseek(model))\n .otherwise(() => {\n if (safeEnv.JIXO_DEEPSEEK_API_KEY) {\n return providers.deepseek(\"deepseek-chat\");\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\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 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};\nexport const runAiTask = async (ai_task: AiTask, allFiles: FileEntry[], changedFiles: FileEntry[]) => {\n const model = getModel(ai_task.model);\n\n const modelMessage: ModelMessage[] = getModelMessage(ai_task.agents);\n modelMessage.push(\n //\n {\n role: \"system\",\n content: getPromptConfigs()\n .base.content //\n .replaceAll(\"{{task.name}}\", ai_task.name)\n .replaceAll(\"{{task.memory}}\", ai_task.memory)\n .replaceAll(\"{{task.content}}\", ai_task.content)\n .replaceAll(\"{{allFiles}}\", allFiles.map((file) => `- ${file.path}`).join(\"\\n\"))\n .replaceAll(\"{{changedFiles}}\", changedFiles.map((file) => `- ${file.path}`).join(\"\\n\")),\n },\n );\n // console.log(\"QAQ modelMessage\", modelMessage);\n // return;\n const result = streamText({\n model: model,\n prompt: modelMessage,\n tools: {\n ...(await tools.fileSystem(ai_task.cwd)),\n // ...(await tools.fetch()),\n // ...(await tools.git(ai_task.cwd)),\n },\n onChunk: ({chunk}) => {\n if (chunk.type === \"reasoning\") {\n if (reasoning === \"\") {\n loading.prefixText = \"🤔 \";\n loading.text = \"\";\n }\n reasoning += chunk.text;\n loading.text = gray(reasoning.split(\"\\n\").slice(-3).join(\"\\n\"));\n }\n },\n });\n const loading = spinner.default(`Connecting To ${model.provider}...`);\n loading.prefixText = \"⏳ \";\n loading.start();\n let reasoning = \"\";\n let fulltext = \"\";\n for await (const text of result.textStream) {\n if (fulltext === \"\") {\n loading.prefixText = \"🤖 \";\n loading.text = \"\";\n }\n fulltext += text;\n loading.text = fulltext;\n }\n\n loading.stopAndPersist({\n suffixText: green(`\\n✅ ${cyan(`[${ai_task.name}]`)} Completed\\n`),\n });\n\n console.log(\"QAQ done\", result.text);\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/run.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,GAAG,GAAU,MAAM,MAAM,EAAE,SAAS;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAC,kBAyC3F,CAAC"}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { FileEntry, Ignore, normalizeFilePath, walkFiles } from "@gaubee/nodekit";
|
2
|
+
import { iter_map_not_null } from "@gaubee/util";
|
3
|
+
import fs from "node:fs";
|
4
|
+
import path from "node:path";
|
5
|
+
import { loadConfig } from "../../config.js";
|
6
|
+
import { loadJixoEnv } from "../../env.js";
|
7
|
+
import { findChangedFilesSinceCommit } from "../../helper/find-changes.js";
|
8
|
+
import { resolveAiTasks } from "../../helper/resolve-ai-tasks.js";
|
9
|
+
import { runAiTask } from "./run-ai-task.js";
|
10
|
+
export const run = async (_cwd, options) => {
|
11
|
+
const cwd = normalizeFilePath(_cwd);
|
12
|
+
const config = await loadConfig(cwd);
|
13
|
+
const ai_tasks = resolveAiTasks(cwd, config.tasks);
|
14
|
+
const nameMatcher = options.nameFilter.length ? new Ignore(options.nameFilter, cwd) : { isMatch: () => true };
|
15
|
+
const dirMatcher = options.dirFilter.length ? new Ignore(options.dirFilter, cwd) : { isMatch: () => true };
|
16
|
+
const cwdIgnoreFilepath = path.join(cwd, ".gitignore");
|
17
|
+
let ignore;
|
18
|
+
if (fs.existsSync(cwdIgnoreFilepath)) {
|
19
|
+
ignore = fs.readFileSync(cwdIgnoreFilepath, "utf-8").split("\n");
|
20
|
+
}
|
21
|
+
const allFiles = [...walkFiles(cwd, { ignore })];
|
22
|
+
const changedFiles = (await findChangedFilesSinceCommit("@jixo", cwd)).filter((file) => {
|
23
|
+
return file.path.startsWith(cwd + "/");
|
24
|
+
});
|
25
|
+
// const run_tasks: Array<Func> = [];
|
26
|
+
for (const ai_task of ai_tasks) {
|
27
|
+
const { dir: task_dir } = ai_task;
|
28
|
+
if (!dirMatcher.isMatch(task_dir)) {
|
29
|
+
continue;
|
30
|
+
}
|
31
|
+
if (!nameMatcher.isMatch(ai_task.name)) {
|
32
|
+
continue;
|
33
|
+
}
|
34
|
+
const task_changedFiles = cwd === task_dir
|
35
|
+
? changedFiles
|
36
|
+
: iter_map_not_null(changedFiles, (file) => {
|
37
|
+
if (file.path.startsWith(task_dir + "/")) {
|
38
|
+
return new FileEntry(file.path, { cwd: task_dir, state: file.stats });
|
39
|
+
}
|
40
|
+
});
|
41
|
+
const task_allFiles = cwd === task_dir ? allFiles : [...walkFiles(task_dir, { ignore })];
|
42
|
+
loadJixoEnv(cwd);
|
43
|
+
await runAiTask(ai_task, task_allFiles, task_changedFiles);
|
44
|
+
}
|
45
|
+
};
|
46
|
+
//# sourceMappingURL=run.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tasks/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,2BAA2B,EAAC,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAC,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAE,OAAoD,EAAE,EAAE;IAC9F,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAC,CAAC;IAC5G,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAC,CAAC;IACzG,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,MAA4B,CAAC;IACjC,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,CAAC,MAAM,2BAA2B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,MAAM,iBAAiB,GACrB,GAAG,KAAK,QAAQ;YACd,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;oBACzC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;QAET,MAAM,aAAa,GAAG,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC;QAEvF,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {FileEntry, Ignore, normalizeFilePath, walkFiles} from \"@gaubee/nodekit\";\nimport {iter_map_not_null} from \"@gaubee/util\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport {loadConfig} from \"../../config.js\";\nimport {loadJixoEnv} from \"../../env.js\";\nimport {findChangedFilesSinceCommit} from \"../../helper/find-changes.js\";\nimport {resolveAiTasks} from \"../../helper/resolve-ai-tasks.js\";\nimport {runAiTask} from \"./run-ai-task.js\";\n\nexport const run = async (_cwd: string, options: {nameFilter: string[]; dirFilter: string[]}) => {\n const cwd = normalizeFilePath(_cwd);\n const config = await loadConfig(cwd);\n const ai_tasks = resolveAiTasks(cwd, config.tasks);\n const nameMatcher = options.nameFilter.length ? new Ignore(options.nameFilter, cwd) : {isMatch: () => true};\n const dirMatcher = options.dirFilter.length ? new Ignore(options.dirFilter, cwd) : {isMatch: () => true};\n const cwdIgnoreFilepath = path.join(cwd, \".gitignore\");\n let ignore: undefined | string[];\n if (fs.existsSync(cwdIgnoreFilepath)) {\n ignore = fs.readFileSync(cwdIgnoreFilepath, \"utf-8\").split(\"\\n\");\n }\n\n const allFiles = [...walkFiles(cwd, {ignore})];\n const changedFiles = (await findChangedFilesSinceCommit(\"@jixo\", cwd)).filter((file) => {\n return file.path.startsWith(cwd + \"/\");\n });\n\n // const run_tasks: Array<Func> = [];\n for (const ai_task of ai_tasks) {\n const {dir: task_dir} = ai_task;\n if (!dirMatcher.isMatch(task_dir)) {\n continue;\n }\n if (!nameMatcher.isMatch(ai_task.name)) {\n continue;\n }\n\n const task_changedFiles =\n cwd === task_dir\n ? changedFiles\n : iter_map_not_null(changedFiles, (file) => {\n if (file.path.startsWith(task_dir + \"/\")) {\n return new FileEntry(file.path, {cwd: task_dir, state: file.stats});\n }\n });\n\n const task_allFiles = cwd === task_dir ? allFiles : [...walkFiles(task_dir, {ignore})];\n\n loadJixoEnv(cwd);\n await runAiTask(ai_task, task_allFiles, task_changedFiles);\n }\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,SAAS;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAC,kBAavE,CAAC"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { spinner, writeJson } from "@gaubee/nodekit";
|
2
|
+
export const upgrade = async (dir, options) => {
|
3
|
+
// TODO 下载最新的提示词集合
|
4
|
+
const mirrorUrl = options.mirrorUrl || "https://jixo.ai/jixo-prompts.json";
|
5
|
+
const loading = spinner.default("Upgrading prompts");
|
6
|
+
loading.start("Downloading...");
|
7
|
+
// await delay(1000);
|
8
|
+
try {
|
9
|
+
const prompts = await fetch(mirrorUrl).then((res) => res.json());
|
10
|
+
loading.stopAndPersist({ symbol: "✅", text: "Download completed" });
|
11
|
+
writeJson(import.meta.resolve("jixo-prompts.json"), prompts);
|
12
|
+
}
|
13
|
+
catch (e) {
|
14
|
+
loading.stopAndPersist({ symbol: "❌", text: "Download failed" });
|
15
|
+
}
|
16
|
+
};
|
17
|
+
//# sourceMappingURL=upgrade.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,GAAW,EAAE,OAA6B,EAAE,EAAE;IAC1E,kBAAkB;IAClB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,mCAAmC,CAAC;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrD,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChC,uBAAuB;IACvB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,cAAc,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAC,CAAC,CAAC;QAClE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,cAAc,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {spinner, writeJson} from \"@gaubee/nodekit\";\n\nexport const upgrade = async (dir: string, options: {mirrorUrl?: string}) => {\n // TODO 下载最新的提示词集合\n const mirrorUrl = options.mirrorUrl || \"https://jixo.ai/jixo-prompts.json\";\n const loading = spinner.default(\"Upgrading prompts\");\n loading.start(\"Downloading...\");\n // await delay(1000);\n try {\n const prompts = await fetch(mirrorUrl).then((res) => res.json());\n loading.stopAndPersist({symbol: \"✅\", text: \"Download completed\"});\n writeJson(import.meta.resolve(\"jixo-prompts.json\"), prompts);\n } catch (e) {\n loading.stopAndPersist({symbol: \"❌\", text: \"Download failed\"});\n }\n};\n"]}
|
package/dist/config.d.ts
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
import z from "zod";
|
2
|
+
declare const zJixoTask: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
3
|
+
type: z.ZodLiteral<"file">;
|
4
|
+
name: z.ZodOptional<z.ZodString>;
|
5
|
+
filename: z.ZodString;
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
7
|
+
type: "file";
|
8
|
+
filename: string;
|
9
|
+
name?: string | undefined;
|
10
|
+
}, {
|
11
|
+
type: "file";
|
12
|
+
filename: string;
|
13
|
+
name?: string | undefined;
|
14
|
+
}>, z.ZodObject<{
|
15
|
+
type: z.ZodLiteral<"dir">;
|
16
|
+
dirname: z.ZodString;
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
18
|
+
type: "dir";
|
19
|
+
dirname: string;
|
20
|
+
}, {
|
21
|
+
type: "dir";
|
22
|
+
dirname: string;
|
23
|
+
}>, z.ZodObject<{
|
24
|
+
type: z.ZodLiteral<"prompt">;
|
25
|
+
name: z.ZodOptional<z.ZodString>;
|
26
|
+
content: z.ZodString;
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
28
|
+
type: "prompt";
|
29
|
+
content: string;
|
30
|
+
name?: string | undefined;
|
31
|
+
}, {
|
32
|
+
type: "prompt";
|
33
|
+
content: string;
|
34
|
+
name?: string | undefined;
|
35
|
+
}>]>;
|
36
|
+
declare const zJixoConfig: z.ZodObject<{
|
37
|
+
tasks: z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
|
38
|
+
type: z.ZodLiteral<"file">;
|
39
|
+
name: z.ZodOptional<z.ZodString>;
|
40
|
+
filename: z.ZodString;
|
41
|
+
}, "strip", z.ZodTypeAny, {
|
42
|
+
type: "file";
|
43
|
+
filename: string;
|
44
|
+
name?: string | undefined;
|
45
|
+
}, {
|
46
|
+
type: "file";
|
47
|
+
filename: string;
|
48
|
+
name?: string | undefined;
|
49
|
+
}>, z.ZodObject<{
|
50
|
+
type: z.ZodLiteral<"dir">;
|
51
|
+
dirname: z.ZodString;
|
52
|
+
}, "strip", z.ZodTypeAny, {
|
53
|
+
type: "dir";
|
54
|
+
dirname: string;
|
55
|
+
}, {
|
56
|
+
type: "dir";
|
57
|
+
dirname: string;
|
58
|
+
}>, z.ZodObject<{
|
59
|
+
type: z.ZodLiteral<"prompt">;
|
60
|
+
name: z.ZodOptional<z.ZodString>;
|
61
|
+
content: z.ZodString;
|
62
|
+
}, "strip", z.ZodTypeAny, {
|
63
|
+
type: "prompt";
|
64
|
+
content: string;
|
65
|
+
name?: string | undefined;
|
66
|
+
}, {
|
67
|
+
type: "prompt";
|
68
|
+
content: string;
|
69
|
+
name?: string | undefined;
|
70
|
+
}>]>, "many">, z.ZodUnion<[z.ZodString, z.ZodObject<{
|
71
|
+
type: z.ZodLiteral<"file">;
|
72
|
+
name: z.ZodOptional<z.ZodString>;
|
73
|
+
filename: z.ZodString;
|
74
|
+
}, "strip", z.ZodTypeAny, {
|
75
|
+
type: "file";
|
76
|
+
filename: string;
|
77
|
+
name?: string | undefined;
|
78
|
+
}, {
|
79
|
+
type: "file";
|
80
|
+
filename: string;
|
81
|
+
name?: string | undefined;
|
82
|
+
}>, z.ZodObject<{
|
83
|
+
type: z.ZodLiteral<"dir">;
|
84
|
+
dirname: z.ZodString;
|
85
|
+
}, "strip", z.ZodTypeAny, {
|
86
|
+
type: "dir";
|
87
|
+
dirname: string;
|
88
|
+
}, {
|
89
|
+
type: "dir";
|
90
|
+
dirname: string;
|
91
|
+
}>, z.ZodObject<{
|
92
|
+
type: z.ZodLiteral<"prompt">;
|
93
|
+
name: z.ZodOptional<z.ZodString>;
|
94
|
+
content: z.ZodString;
|
95
|
+
}, "strip", z.ZodTypeAny, {
|
96
|
+
type: "prompt";
|
97
|
+
content: string;
|
98
|
+
name?: string | undefined;
|
99
|
+
}, {
|
100
|
+
type: "prompt";
|
101
|
+
content: string;
|
102
|
+
name?: string | undefined;
|
103
|
+
}>]>]>;
|
104
|
+
}, "strip", z.ZodTypeAny, {
|
105
|
+
tasks: string | {
|
106
|
+
type: "file";
|
107
|
+
filename: string;
|
108
|
+
name?: string | undefined;
|
109
|
+
} | {
|
110
|
+
type: "dir";
|
111
|
+
dirname: string;
|
112
|
+
} | {
|
113
|
+
type: "prompt";
|
114
|
+
content: string;
|
115
|
+
name?: string | undefined;
|
116
|
+
} | (string | {
|
117
|
+
type: "file";
|
118
|
+
filename: string;
|
119
|
+
name?: string | undefined;
|
120
|
+
} | {
|
121
|
+
type: "dir";
|
122
|
+
dirname: string;
|
123
|
+
} | {
|
124
|
+
type: "prompt";
|
125
|
+
content: string;
|
126
|
+
name?: string | undefined;
|
127
|
+
})[];
|
128
|
+
}, {
|
129
|
+
tasks: string | {
|
130
|
+
type: "file";
|
131
|
+
filename: string;
|
132
|
+
name?: string | undefined;
|
133
|
+
} | {
|
134
|
+
type: "dir";
|
135
|
+
dirname: string;
|
136
|
+
} | {
|
137
|
+
type: "prompt";
|
138
|
+
content: string;
|
139
|
+
name?: string | undefined;
|
140
|
+
} | (string | {
|
141
|
+
type: "file";
|
142
|
+
filename: string;
|
143
|
+
name?: string | undefined;
|
144
|
+
} | {
|
145
|
+
type: "dir";
|
146
|
+
dirname: string;
|
147
|
+
} | {
|
148
|
+
type: "prompt";
|
149
|
+
content: string;
|
150
|
+
name?: string | undefined;
|
151
|
+
})[];
|
152
|
+
}>;
|
153
|
+
export type JixoTask = z.output<typeof zJixoTask>;
|
154
|
+
export type JixoConfig = z.output<typeof zJixoConfig>;
|
155
|
+
export declare const defineConfig: (config: Partial<JixoConfig>) => {
|
156
|
+
tasks: string | {
|
157
|
+
type: "file";
|
158
|
+
filename: string;
|
159
|
+
name?: string | undefined;
|
160
|
+
} | {
|
161
|
+
type: "dir";
|
162
|
+
dirname: string;
|
163
|
+
} | {
|
164
|
+
type: "prompt";
|
165
|
+
content: string;
|
166
|
+
name?: string | undefined;
|
167
|
+
} | (string | {
|
168
|
+
type: "file";
|
169
|
+
filename: string;
|
170
|
+
name?: string | undefined;
|
171
|
+
} | {
|
172
|
+
type: "dir";
|
173
|
+
dirname: string;
|
174
|
+
} | {
|
175
|
+
type: "prompt";
|
176
|
+
content: string;
|
177
|
+
name?: string | undefined;
|
178
|
+
})[];
|
179
|
+
};
|
180
|
+
export declare const loadConfig: (dir: string) => Promise<{
|
181
|
+
tasks: string | {
|
182
|
+
type: "file";
|
183
|
+
filename: string;
|
184
|
+
name?: string | undefined;
|
185
|
+
} | {
|
186
|
+
type: "dir";
|
187
|
+
dirname: string;
|
188
|
+
} | {
|
189
|
+
type: "prompt";
|
190
|
+
content: string;
|
191
|
+
name?: string | undefined;
|
192
|
+
} | (string | {
|
193
|
+
type: "file";
|
194
|
+
filename: string;
|
195
|
+
name?: string | undefined;
|
196
|
+
} | {
|
197
|
+
type: "dir";
|
198
|
+
dirname: string;
|
199
|
+
} | {
|
200
|
+
type: "prompt";
|
201
|
+
content: string;
|
202
|
+
name?: string | undefined;
|
203
|
+
})[];
|
204
|
+
}>;
|
205
|
+
export {};
|
206
|
+
//# sourceMappingURL=config.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgBb,CAAC;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEf,CAAC;AAKH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAEvD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;EAI3C,CAAC"}
|
package/dist/config.js
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
import { cosmiconfig } from "cosmiconfig";
|
2
|
+
import { defu } from "defu";
|
3
|
+
import z from "zod";
|
4
|
+
const zJixoTask = z.union([
|
5
|
+
z.string(),
|
6
|
+
z.object({
|
7
|
+
type: z.literal("file"),
|
8
|
+
name: z.string().optional(),
|
9
|
+
filename: z.string(),
|
10
|
+
}),
|
11
|
+
z.object({
|
12
|
+
type: z.literal("dir"),
|
13
|
+
dirname: z.string(),
|
14
|
+
}),
|
15
|
+
z.object({
|
16
|
+
type: z.literal("prompt"),
|
17
|
+
name: z.string().optional(),
|
18
|
+
content: z.string(),
|
19
|
+
}),
|
20
|
+
]);
|
21
|
+
const zJixoConfig = z.object({
|
22
|
+
tasks: z.union([z.array(zJixoTask), zJixoTask]),
|
23
|
+
});
|
24
|
+
const defaultConfig = {
|
25
|
+
tasks: { type: "dir", dirname: ".jixo" },
|
26
|
+
};
|
27
|
+
export const defineConfig = (config) => {
|
28
|
+
return zJixoConfig.parse(config);
|
29
|
+
};
|
30
|
+
export const loadConfig = async (dir) => {
|
31
|
+
const explorer = cosmiconfig("jixo");
|
32
|
+
const loaded = await explorer.search(dir);
|
33
|
+
return defu(loaded?.config, defaultConfig);
|
34
|
+
};
|
35
|
+
//# sourceMappingURL=config.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC;CACH,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,aAAa,GAAe;IAChC,KAAK,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAC;CACvC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAA2B,EAAE,EAAE;IAC1D,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,MAAM,EAAE,MAAoB,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC","sourcesContent":["import {cosmiconfig} from \"cosmiconfig\";\nimport {defu} from \"defu\";\nimport z from \"zod\";\n\nconst zJixoTask = z.union([\n z.string(),\n z.object({\n type: z.literal(\"file\"),\n name: z.string().optional(),\n filename: z.string(),\n }),\n z.object({\n type: z.literal(\"dir\"),\n dirname: z.string(),\n }),\n z.object({\n type: z.literal(\"prompt\"),\n name: z.string().optional(),\n content: z.string(),\n }),\n]);\nconst zJixoConfig = z.object({\n tasks: z.union([z.array(zJixoTask), zJixoTask]),\n});\n\nconst defaultConfig: JixoConfig = {\n tasks: {type: \"dir\", dirname: \".jixo\"},\n};\nexport type JixoTask = z.output<typeof zJixoTask>;\nexport type JixoConfig = z.output<typeof zJixoConfig>;\nexport const defineConfig = (config: Partial<JixoConfig>) => {\n return zJixoConfig.parse(config);\n};\n\nexport const loadConfig = async (dir: string) => {\n const explorer = cosmiconfig(\"jixo\");\n const loaded = await explorer.search(dir);\n return defu(loaded?.config as JixoConfig, defaultConfig);\n};\n"]}
|
package/dist/env.d.ts
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
export declare const loadJixoEnv: (dir: string) => void;
|
2
|
+
export declare const safeEnv: import("@gaubee/node").DefineEnvChain<"JIXO", import("@gaubee/node").DefineEnv<"JIXO", {
|
3
|
+
DEEPSEEK_API_KEY: string;
|
4
|
+
DEEPSEEK_BASE_URL: string;
|
5
|
+
ANTHROPIC_API_KEY: string;
|
6
|
+
ANTHROPIC_BASE_URL: string;
|
7
|
+
OPENAI_API_KEY: string;
|
8
|
+
OPENAI_BASE_URL: string;
|
9
|
+
OPENAI_ORGANIZATION: string;
|
10
|
+
GOOGLE_API_KEY: string;
|
11
|
+
GOOGLE_BASE_URL: string;
|
12
|
+
XAI_BASE_URL: string;
|
13
|
+
XAI_API_KEY: string;
|
14
|
+
DEEPINFRA_BASE_URL: string;
|
15
|
+
DEEPINFRA_API_KEY: string;
|
16
|
+
}>>;
|
17
|
+
//# sourceMappingURL=env.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,SAKtC,CAAC;AAGF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;GAmBlB,CAAC"}
|
package/dist/env.js
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
import { defineEnv } from "@gaubee/node";
|
2
|
+
import fs from "node:fs";
|
3
|
+
import path from "node:path";
|
4
|
+
export const loadJixoEnv = (dir) => {
|
5
|
+
const cwdJixoEnvFilepath = path.join(dir, ".jixo.env");
|
6
|
+
if (fs.existsSync(cwdJixoEnvFilepath)) {
|
7
|
+
process.loadEnvFile(cwdJixoEnvFilepath);
|
8
|
+
}
|
9
|
+
};
|
10
|
+
loadJixoEnv(process.cwd());
|
11
|
+
export const safeEnv = defineEnv("JIXO", {
|
12
|
+
DEEPSEEK_API_KEY: "",
|
13
|
+
DEEPSEEK_BASE_URL: "",
|
14
|
+
ANTHROPIC_API_KEY: "",
|
15
|
+
ANTHROPIC_BASE_URL: "",
|
16
|
+
OPENAI_API_KEY: "",
|
17
|
+
OPENAI_BASE_URL: "",
|
18
|
+
OPENAI_ORGANIZATION: "",
|
19
|
+
GOOGLE_API_KEY: "",
|
20
|
+
GOOGLE_BASE_URL: "",
|
21
|
+
XAI_BASE_URL: "",
|
22
|
+
XAI_API_KEY: "",
|
23
|
+
DEEPINFRA_BASE_URL: "",
|
24
|
+
DEEPINFRA_API_KEY: "",
|
25
|
+
});
|
26
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE;IACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC;AACF,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAE3B,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE;IACvC,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,EAAE;IAErB,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,EAAE;IAEtB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IACnB,mBAAmB,EAAE,EAAE;IAEvB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IAEnB,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,EAAE;IAEf,kBAAkB,EAAE,EAAE;IACtB,iBAAiB,EAAE,EAAE;CACtB,CAAC,CAAC","sourcesContent":["import {defineEnv} from \"@gaubee/node\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport const loadJixoEnv = (dir: string) => {\n const cwdJixoEnvFilepath = path.join(dir, \".jixo.env\");\n if (fs.existsSync(cwdJixoEnvFilepath)) {\n process.loadEnvFile(cwdJixoEnvFilepath);\n }\n};\nloadJixoEnv(process.cwd());\n\nexport const safeEnv = defineEnv(\"JIXO\", {\n DEEPSEEK_API_KEY: \"\",\n DEEPSEEK_BASE_URL: \"\",\n\n ANTHROPIC_API_KEY: \"\",\n ANTHROPIC_BASE_URL: \"\",\n\n OPENAI_API_KEY: \"\",\n OPENAI_BASE_URL: \"\",\n OPENAI_ORGANIZATION: \"\",\n\n GOOGLE_API_KEY: \"\",\n GOOGLE_BASE_URL: \"\",\n\n XAI_BASE_URL: \"\",\n XAI_API_KEY: \"\",\n\n DEEPINFRA_BASE_URL: \"\",\n DEEPINFRA_API_KEY: \"\",\n});\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"find-changes.d.ts","sourceRoot":"","sources":["../../src/helper/find-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AAUhE,wBAAsB,2BAA2B,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,GAAE,MAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkGjH"}
|