@jixo/cli 0.12.0 → 0.20.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/README.md +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -95
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +9 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +59 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/gen.d.ts +9 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +43 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/google-aistudio.d.ts +8 -0
- package/dist/commands/google-aistudio.d.ts.map +1 -0
- package/dist/commands/google-aistudio.js +51 -0
- package/dist/commands/google-aistudio.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/package.json +4 -25
- package/dist/commands/doctor/config.d.ts +0 -3
- package/dist/commands/doctor/config.d.ts.map +0 -1
- package/dist/commands/doctor/config.js +0 -30
- package/dist/commands/doctor/config.js.map +0 -1
- package/dist/commands/doctor/doctor.d.ts +0 -18
- package/dist/commands/doctor/doctor.d.ts.map +0 -1
- package/dist/commands/doctor/doctor.js +0 -125
- package/dist/commands/doctor/doctor.js.map +0 -1
- package/dist/commands/doctor/doctor.test.d.ts +0 -2
- package/dist/commands/doctor/doctor.test.d.ts.map +0 -1
- package/dist/commands/doctor/doctor.test.js +0 -14
- package/dist/commands/doctor/doctor.test.js.map +0 -1
- package/dist/commands/doctor/index.d.ts +0 -2
- package/dist/commands/doctor/index.d.ts.map +0 -1
- package/dist/commands/doctor/index.js +0 -19
- package/dist/commands/doctor/index.js.map +0 -1
- package/dist/commands/doctor/types.d.ts +0 -30
- package/dist/commands/doctor/types.d.ts.map +0 -1
- package/dist/commands/doctor/types.js +0 -3
- package/dist/commands/doctor/types.js.map +0 -1
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -63
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/prompts/list.d.ts +0 -2
- package/dist/commands/prompts/list.d.ts.map +0 -1
- package/dist/commands/prompts/list.js +0 -14
- package/dist/commands/prompts/list.js.map +0 -1
- package/dist/commands/prompts/upgrade.d.ts +0 -4
- package/dist/commands/prompts/upgrade.d.ts.map +0 -1
- package/dist/commands/prompts/upgrade.js +0 -17
- package/dist/commands/prompts/upgrade.js.map +0 -1
- package/dist/commands/tasks/AiTaskTui.d.ts +0 -22
- package/dist/commands/tasks/AiTaskTui.d.ts.map +0 -1
- package/dist/commands/tasks/AiTaskTui.js +0 -52
- package/dist/commands/tasks/AiTaskTui.js.map +0 -1
- package/dist/commands/tasks/ai-tasl-tui.d.ts +0 -22
- package/dist/commands/tasks/ai-tasl-tui.d.ts.map +0 -1
- package/dist/commands/tasks/ai-tasl-tui.js +0 -53
- package/dist/commands/tasks/ai-tasl-tui.js.map +0 -1
- package/dist/commands/tasks/ai-tools.d.ts +0 -811
- package/dist/commands/tasks/ai-tools.d.ts.map +0 -1
- package/dist/commands/tasks/ai-tools.js +0 -140
- package/dist/commands/tasks/ai-tools.js.map +0 -1
- package/dist/commands/tasks/model-providers.d.ts +0 -13
- package/dist/commands/tasks/model-providers.d.ts.map +0 -1
- package/dist/commands/tasks/model-providers.js +0 -84
- package/dist/commands/tasks/model-providers.js.map +0 -1
- package/dist/commands/tasks/run-ai-task.d.ts +0 -4
- package/dist/commands/tasks/run-ai-task.d.ts.map +0 -1
- package/dist/commands/tasks/run-ai-task.js +0 -343
- package/dist/commands/tasks/run-ai-task.js.map +0 -1
- package/dist/commands/tasks/run.d.ts +0 -7
- package/dist/commands/tasks/run.d.ts.map +0 -1
- package/dist/commands/tasks/run.js +0 -91
- package/dist/commands/tasks/run.js.map +0 -1
- package/dist/config.d.ts +0 -206
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -35
- package/dist/config.js.map +0 -1
- package/dist/env.d.ts +0 -17
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -26
- package/dist/env.js.map +0 -1
- package/dist/helper/ai-retry-error.d.ts +0 -3
- package/dist/helper/ai-retry-error.d.ts.map +0 -1
- package/dist/helper/ai-retry-error.js +0 -108
- package/dist/helper/ai-retry-error.js.map +0 -1
- package/dist/helper/find-changes.d.ts +0 -3
- package/dist/helper/find-changes.d.ts.map +0 -1
- package/dist/helper/find-changes.js +0 -113
- package/dist/helper/find-changes.js.map +0 -1
- package/dist/helper/find-changes.test.d.ts +0 -2
- package/dist/helper/find-changes.test.d.ts.map +0 -1
- package/dist/helper/find-changes.test.js +0 -22
- package/dist/helper/find-changes.test.js.map +0 -1
- package/dist/helper/handle-ai-error.d.ts +0 -5
- package/dist/helper/handle-ai-error.d.ts.map +0 -1
- package/dist/helper/handle-ai-error.js +0 -122
- package/dist/helper/handle-ai-error.js.map +0 -1
- package/dist/helper/logger.d.ts +0 -3
- package/dist/helper/logger.d.ts.map +0 -1
- package/dist/helper/logger.js +0 -26
- package/dist/helper/logger.js.map +0 -1
- package/dist/helper/parse-progress.d.ts +0 -2
- package/dist/helper/parse-progress.d.ts.map +0 -1
- package/dist/helper/parse-progress.js +0 -28
- package/dist/helper/parse-progress.js.map +0 -1
- package/dist/helper/prompts-loader.d.ts +0 -11
- package/dist/helper/prompts-loader.d.ts.map +0 -1
- package/dist/helper/prompts-loader.js +0 -28
- package/dist/helper/prompts-loader.js.map +0 -1
- package/dist/helper/resolve-ai-tasks.d.ts +0 -42
- package/dist/helper/resolve-ai-tasks.d.ts.map +0 -1
- package/dist/helper/resolve-ai-tasks.js +0 -162
- package/dist/helper/resolve-ai-tasks.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-ai-task.js","sourceRoot":"","sources":["../../../src/commands/tasks/run-ai-task.ts"],"names":[],"mappings":"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","sourcesContent":["import {blue, cyan, FileEntry, gray, green, red, spinner, YAML, yellow} from \"@gaubee/nodekit\";\nimport {func_catch} from \"@gaubee/util\";\nimport {streamText, type AssistantModelMessage, type ModelMessage, type ToolCallPart, type ToolSet} from \"ai\";\nimport ms from \"ms\";\nimport {open} from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport {match, P} from \"ts-pattern\";\nimport {handleError} from \"../../helper/handle-ai-error.js\";\nimport {createDebug} from \"../../helper/logger.js\";\nimport {getAllPromptConfigs, getAllSkillMap as getAllSkillNavMap} from \"../../helper/prompts-loader.js\";\nimport type {AiTask} from \"../../helper/resolve-ai-tasks.js\";\nimport {AiTaskTui} from \"./ai-tasl-tui.js\";\nimport {tools} from \"./ai-tools.js\";\nimport {getModel} from \"./model-providers.js\";\n\nconst log = createDebug(\"jixo:run-ai-task\");\n\nexport const runAiTask = async (ai_task: AiTask, loopTimes: number, allFiles: FileEntry[], changedFilesSet: Record<string, FileEntry[]>) => {\n const tool_spinner = spinner({\n prefixText: \"🧰\",\n text: \"Preparing AI tools...\",\n });\n tool_spinner.start();\n const availableTools: ToolSet = {\n ...(await tools.fileSystem(ai_task.cwd)),\n ...(await tools.pnpm()),\n ...(await tools.jixo(ai_task)),\n ...(await tools.git(ai_task.cwd)),\n };\n tool_spinner.clear();\n tool_spinner.stop();\n\n const json_line_log_file_handle = await open(path.join(ai_task.cwd, \".jixo\", `${ai_task.runner}.log.jsonl`), \"a\");\n const __writeJsonLineLog = (...lineDatas: any[]) => {\n for (const lineData of lineDatas) {\n try {\n json_line_log_file_handle.appendFile(JSON.stringify(lineData) + \"\\n\");\n } catch {}\n }\n };\n\n const tui = new AiTaskTui(ai_task, spinner({text: `Initializing AI task: ${cyan(ai_task.jobName)}...`, prefixText: \"⏳ \"}));\n tui.spinner.start();\n const updateTuiState = () => {\n tui.setStatus(\"loop and time\", `${green(`[${loopTimes}]`)} ${cyan(`+${ms(Date.now() - new Date(ai_task.startTime).getTime())}`)}`);\n };\n const ti = setInterval(updateTuiState, 1000);\n updateTuiState();\n try {\n await _runAiTask(ai_task, availableTools, allFiles, changedFilesSet, tui, __writeJsonLineLog);\n } finally {\n // Fallback spinner stop if loop exits unexpectedly\n clearInterval(ti);\n tui.stop();\n json_line_log_file_handle.close();\n }\n};\n\nconst _runAiTask = async (\n ai_task: AiTask,\n availableTools: ToolSet,\n allFiles: FileEntry[],\n changedFilesSet: Record<string, FileEntry[]>,\n tui: AiTaskTui,\n __writeJsonLineLog: (...lineDatas: any[]) => void,\n) => {\n const model = getModel(ai_task.model);\n\n const initialMessages: ModelMessage[] = [];\n const maxTurns = 40; // Safeguard against infinite loops\n\n const promptConfigs = getAllPromptConfigs();\n\n for (const role of [\"system\", \"user\"] as const) {\n const promptConfig = promptConfigs[role];\n\n const promptContent = promptConfig.content //\n .replace(/\\{\\{task.([\\.\\w]+)\\}\\}/g, (_, key) => {\n if (key.includes(\".\")) {\n const paths = key.split(\".\");\n let res: any = ai_task;\n for (const p of paths) {\n res = Reflect.get(res, p);\n if (!res) {\n break;\n }\n }\n return res;\n } else {\n return Reflect.get(ai_task, key);\n }\n })\n .replace(/\\{\\{env.(\\w+)\\}\\}/g, (_, key) => {\n const envKey = key.toUpperCase();\n const envValue =\n Reflect.get(process.env, envKey) ??\n match(envKey)\n .with(\"USER\", () => os.userInfo().username)\n .otherwise(() => \"\");\n return envValue;\n })\n .replaceAll(\"{{allSkills}}\", (_, key) => {\n return YAML.stringify(getAllSkillNavMap());\n })\n .replaceAll(\n \"{{allFiles}}\",\n YAML.stringify({\n [ai_task.cwd]: {\n count: allFiles.length,\n file: allFiles.map((e) => e.relativePath),\n },\n }),\n )\n .replaceAll(\"{{maxTurns}}\", () => `${maxTurns}`)\n .replaceAll(\n \"{{changedFiles}}\",\n YAML.stringify(\n Object.entries(changedFilesSet).reduce(\n (tree, [dir, changedFiles]) => {\n tree[dir] = {\n count: changedFiles.length,\n files: changedFiles.map((e) => e.relativePath),\n };\n return tree;\n },\n {} as Record<string, {count: number; files: string[]}>,\n ),\n ),\n );\n log(`PROMPT ${role}:`, promptContent);\n initialMessages.push({\n role: role,\n content: promptContent,\n });\n }\n\n const currentMessages: ModelMessage[] = [...initialMessages];\n\n __writeJsonLineLog(...currentMessages);\n\n loop: for (let turn = 0; turn < maxTurns; turn++) {\n if (turn === 0) {\n tui.setStatus(\"turns\", `Connecting To ${model.provider}...`);\n } else {\n tui.setStatus(\"turns\", `Processing step ${turn + 1}/${maxTurns}...`);\n const userTurnMessage: ModelMessage = {\n role: \"user\",\n content: `Turns: ${turn}/${maxTurns}`,\n };\n currentMessages.push(userTurnMessage);\n __writeJsonLineLog(userTurnMessage);\n }\n const result = await streamText({\n model: model,\n messages: currentMessages,\n tools: availableTools,\n toolChoice: \"auto\", // Changed to auto for more flexibility\n onError: () => {},\n });\n\n let fullReasoningText = \"\";\n let fullText = \"\";\n let firstStreamPart = true;\n const requestedToolCalls: ToolCallPart[] = []; // Using any for now, should be ToolCallPart from 'ai'\n\n const assistantMessageContent: AssistantModelMessage[\"content\"] & unknown[] = [];\n const _currentAssistantMessage: AssistantModelMessage = {role: \"assistant\", content: assistantMessageContent};\n\n const LOOP_SIGNALS = {\n RETURN: \"RETURN\",\n BREAK: \"BREAK\",\n CONTINUE: \"CONTINUE\",\n ERROR: \"ERROR\",\n } as const;\n for await (const part of result.fullStream) {\n __writeJsonLineLog(part);\n\n if (firstStreamPart) {\n firstStreamPart = false;\n tui.text = \"\"; // Clear initial connecting/processing message\n }\n\n const LOOP_SIGNAL = await match(part)\n .with({type: \"text\"}, (textPart) => {\n tui.prefixText = \"🤖 \";\n let assistantTextPart = assistantMessageContent.findLast((part) => part.type === \"text\");\n if (assistantTextPart == null) {\n assistantTextPart = {type: \"text\", text: \"\"};\n assistantMessageContent.push(assistantTextPart);\n }\n assistantTextPart.text += textPart.text;\n if (fullText === \"\") tui.text = \"\";\n fullText += textPart.text;\n tui.text = \"\\n\" + fullText.split(\"\\n\").slice(-10).join(\"\\n\");\n })\n .with({type: \"tool-call\"}, (callPart) => {\n tui.prefixText = \"🛠️ \";\n tui.text = \"Requesting tool: \" + blue(callPart.toolName);\n log(\"\\nQAQ tool-call: %y\", callPart);\n requestedToolCalls.push(callPart);\n // Update assistant message to include tool calls\n assistantMessageContent.push({\n type: \"tool-call\",\n toolCallId: callPart.toolCallId,\n toolName: callPart.toolName,\n args: callPart.args,\n });\n })\n .with({type: \"error\"}, async (errorPart) => {\n tui.prefixText = tui.endInfo.prefixText = \"❌ \";\n tui.text = tui.endInfo.text = red(`${errorPart.error}`);\n const handled = await handleError(errorPart.error, tui);\n if (!handled) {\n return LOOP_SIGNALS.BREAK; // Stop processing on error\n }\n })\n .with({type: \"reasoning\"}, (reasoningPart) => {\n tui.prefixText = \"🤔 \";\n if (fullReasoningText === \"\") tui.text = \"\";\n fullReasoningText += reasoningPart.text;\n tui.text = \"\\n\" + gray(fullReasoningText.split(\"\\n\").slice(-3).join(\"\\n\"));\n })\n // Add other console logs for debugging if needed, but keep them minimal for production\n .with({type: \"file\"}, (p) => {\n tui.prefixText = \"📃 \";\n tui.text = p.file.mediaType;\n\n log(\"\\nQAQ file: %y\", p.file);\n })\n .with({type: \"source\"}, (p) => {\n tui.prefixText = \"🔗 \";\n if (p.sourceType === \"url\") {\n if (p.title) {\n tui.text = `[${p.title}](${p.url})`;\n } else {\n tui.text = p.url;\n }\n } else {\n if (p.filename) {\n tui.text = `[${p.title}](${p.filename})`;\n } else {\n tui.text = p.title;\n }\n }\n\n log(\"\\nQAQ source: %y\", p);\n })\n .with({type: \"tool-result\"}, (p) => log(\"\\nQAQ tool-result: %y\", p))\n .with({type: \"tool-call-streaming-start\"}, (p) => log(\"\\nQAQ tool-call-streaming-start: %y\", p))\n .with({type: \"tool-call-delta\"}, (p) => log(\"\\nQAQ tool-call-delta: %y\", p))\n .with({type: \"reasoning-part-finish\"}, (p) => log(\"\\nQAQ reasoning-part-finish: %y\", p))\n .with({type: \"start-step\"}, (p) => log(\"\\nQAQ start-step: %y\", p))\n .with({type: \"finish-step\"}, (p) => {\n log(\"\\nQAQ finish-step: %y\", p);\n /**\n * This event marks the end of an intermediate step, not the entire turn.\n * We handle potential issues here, but the main logic for continuing or\n * stopping the loop is in the final 'finish' event handler.\n */\n return match(p)\n .with({finishReason: P.union(\"content-filter\", \"error\")}, (part) => {\n // A step finishing due to an error or content filter is a serious issue.\n // Update the TUI to reflect this problem immediately.\n const reasonText = part.finishReason === \"content-filter\" ? \"Content filter violation\" : \"Model error\";\n tui.prefixText = tui.endInfo.prefixText = \"⚠️ \";\n tui.text = tui.endInfo.text = red(`Step failed due to ${reasonText}. Will be retry.`);\n log(red(`Step finished with critical reason: ${part.finishReason}`));\n return LOOP_SIGNALS.RETURN;\n })\n .with({finishReason: P.union(\"other\", \"unknown\")}, (part) => {\n // Log unusual finish reasons for debugging purposes.\n log(yellow(`Step finished with an unusual reason: ${part.finishReason}`));\n })\n .otherwise(() => {\n // This covers 'stop', 'length', and 'tool-calls'. These are normal\n // reasons for a step to finish. The final 'finish' event will\n // determine the overall outcome of the turn. No special action is needed here.\n log(`Step finished with normal reason: ${p.finishReason}. Awaiting end of turn.`);\n });\n })\n .with({type: \"start\"}, (p) => log(\"\\nQAQ start: %y\", p))\n .with({type: \"finish\"}, async (finishPart) => {\n log(\"\\nQAQ finish: %y\", finishPart);\n // Add the assistant's message from this step to the history\n currentMessages.push(_currentAssistantMessage);\n __writeJsonLineLog(_currentAssistantMessage);\n\n if (finishPart.finishReason === \"stop\" || finishPart.finishReason === \"length\") {\n tui.prefixText = tui.endInfo.prefixText = \"✅ \";\n tui.text = tui.endInfo.text = green(`${cyan(`[${ai_task.jobName}]`)} Completed`);\n // Task finished without tool calls or after tool calls that didn't lead to more calls.\n return LOOP_SIGNALS.RETURN; // Exit the outer loop and function\n }\n\n if (finishPart.finishReason === \"tool-calls\") {\n if (requestedToolCalls.length === 0) {\n tui.prefixText = tui.endInfo.prefixText = \"🚧 \";\n tui.text = tui.endInfo.text = yellow(`${cyan(`[${ai_task.jobName}]`)} finished with 'tool-calls' but no tools were requested.`);\n return LOOP_SIGNALS.RETURN; // Exit, something is off\n }\n\n const toolResultMessages: ModelMessage[] = [];\n for (const toolCall of requestedToolCalls) {\n const toolToExecute = availableTools[toolCall.toolName];\n if (!toolToExecute || typeof toolToExecute.execute !== \"function\") {\n console.error(`Tool ${toolCall.toolName} not found or not executable.`);\n toolResultMessages.push({\n role: \"tool\",\n content: [\n {\n type: \"tool-result\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n result: JSON.stringify({error: `Tool ${toolCall.toolName} not found or not executable.`}),\n isError: true,\n },\n ],\n });\n continue;\n }\n tui.text = `Executing tool: ${toolCall.toolName}...`;\n const executionResult = await func_catch(() =>\n toolToExecute.execute!(toolCall.args, {\n toolCallId: toolCall.toolCallId,\n messages: currentMessages,\n }),\n )();\n toolResultMessages.push({\n role: \"tool\",\n content: [\n {\n type: \"tool-result\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n isError: !executionResult.success,\n result: JSON.stringify(executionResult.success ? executionResult.result : executionResult.error),\n },\n ],\n });\n if (executionResult.success) {\n tui.text = `Tool ${toolCall.toolName} executed.`;\n } else {\n tui.text = `Error executing tool ${toolCall.toolName}.`;\n }\n }\n currentMessages.push(...toolResultMessages);\n __writeJsonLineLog(...toolResultMessages);\n // Loop continues for the next step\n } else {\n // Other finish reasons, potentially an error or unexpected state\n tui.prefixText = tui.endInfo.prefixText = \"🛑 \";\n tui.text = tui.endInfo.text = red(`${cyan(`[${ai_task.jobName}]`)} task finished with unhandled reason: ${finishPart.finishReason}`);\n return LOOP_SIGNALS.ERROR;\n }\n })\n .otherwise(() => {}); // Handle any other part types if necessary\n\n if (LOOP_SIGNAL === LOOP_SIGNALS.ERROR) {\n throw LOOP_SIGNAL;\n }\n if (LOOP_SIGNAL === LOOP_SIGNALS.RETURN) {\n break loop;\n } else if (LOOP_SIGNAL === LOOP_SIGNALS.BREAK) {\n break;\n }\n }\n // If the stream finishes without a 'finish' part (e.g. error thrown inside), this loop might exit. Ensure spinner stops.\n if (turn === maxTurns - 1) {\n tui.prefixText = tui.endInfo.prefixText = \"🚧 \";\n tui.text = tui.endInfo.text = yellow(`${cyan(`[${ai_task.jobName}]`)} Max interaction turns reached.`);\n break;\n }\n }\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/run.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,GAAG,GACd,MAAM,MAAM,EACZ,SAAS;IACP,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,kBA+FF,CAAC"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { FileEntry, findChangedFilesSinceTime, 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 { resolveAiTasks } from "../../helper/resolve-ai-tasks.js";
|
|
8
|
-
import { runAiTask } from "./run-ai-task.js";
|
|
9
|
-
export const run = async (_cwd, options) => {
|
|
10
|
-
const cwd = normalizeFilePath(_cwd);
|
|
11
|
-
const config = await loadConfig(cwd);
|
|
12
|
-
const nameMatcher = options.nameFilter.length ? new Ignore(options.nameFilter, cwd) : { isMatch: () => true };
|
|
13
|
-
const dirMatcher = options.dirFilter.length ? new Ignore(options.dirFilter, cwd) : { isMatch: () => true };
|
|
14
|
-
const cwdIgnoreFilepath = path.join(cwd, ".gitignore");
|
|
15
|
-
const ignore = [".git"];
|
|
16
|
-
if (fs.existsSync(cwdIgnoreFilepath)) {
|
|
17
|
-
ignore.push(...fs.readFileSync(cwdIgnoreFilepath, "utf-8").split("\n"));
|
|
18
|
-
}
|
|
19
|
-
const exitedJobs = new Set();
|
|
20
|
-
let { force = false } = options;
|
|
21
|
-
const { loopTimes: MAX_LOOP_TIMES = Infinity } = options;
|
|
22
|
-
let currentTimes = 1;
|
|
23
|
-
let retryTimes = 0;
|
|
24
|
-
const MAX_RETRY_TIMES = 3;
|
|
25
|
-
while (currentTimes <= MAX_LOOP_TIMES) {
|
|
26
|
-
const ai_tasks = resolveAiTasks(cwd, config.tasks, currentTimes - 1);
|
|
27
|
-
const allFiles = [...walkFiles(cwd, { ignore })];
|
|
28
|
-
let allDone = true;
|
|
29
|
-
try {
|
|
30
|
-
for (const ai_task of ai_tasks) {
|
|
31
|
-
// 如果进度已经满了,并且没有任何依赖文件的变更,那么跳过这个任务
|
|
32
|
-
if (!force) {
|
|
33
|
-
if (ai_task.log.preProgress >= 1) {
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (exitedJobs.has(ai_task.jobName)) {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
const { dirs: task_dirs } = ai_task;
|
|
41
|
-
if (!task_dirs.some((dir) => dirMatcher.isMatch(dir))) {
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
if (!nameMatcher.isMatch(ai_task.jobName)) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
const isCwdTask = cwd === task_dirs[0] && task_dirs.length === 1;
|
|
48
|
-
const changedFiles = (await findChangedFilesSinceTime(ai_task.log.preUpdateTime, cwd)) ?? allFiles;
|
|
49
|
-
const task_changedFiles = isCwdTask
|
|
50
|
-
? { [cwd]: changedFiles }
|
|
51
|
-
: task_dirs.reduce((tree, task_dir) => {
|
|
52
|
-
tree[task_dir] = iter_map_not_null(changedFiles, (file) => {
|
|
53
|
-
if (file.path.startsWith(task_dirs + "/")) {
|
|
54
|
-
return new FileEntry(file.path, { cwd: task_dir, state: file.stats });
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
return tree;
|
|
58
|
-
}, {});
|
|
59
|
-
const task_allFiles = isCwdTask ? allFiles : task_dirs.map((task_dir) => [...walkFiles(task_dir, { ignore })]).flat();
|
|
60
|
-
loadJixoEnv(cwd);
|
|
61
|
-
/// 只要有一个任务执行了,那么allDone就要标记成false,进入下一次循环来判断
|
|
62
|
-
allDone = false;
|
|
63
|
-
await runAiTask(ai_task, currentTimes, task_allFiles, task_changedFiles);
|
|
64
|
-
if (ai_task.exitCode != null) {
|
|
65
|
-
exitedJobs.add(ai_task.jobName);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
console.error(e);
|
|
71
|
-
// 遇到异常,那么重试
|
|
72
|
-
if (retryTimes < MAX_RETRY_TIMES) {
|
|
73
|
-
retryTimes += 1;
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// force 只能生效一次,避免无限循环
|
|
81
|
-
force = false;
|
|
82
|
-
currentTimes += 1;
|
|
83
|
-
/// 成功一次后,retry计数就重制
|
|
84
|
-
retryTimes = 0;
|
|
85
|
-
/// 如果没有任务执行了,那么退出循环
|
|
86
|
-
if (allDone) {
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
//# sourceMappingURL=run.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tasks/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,yBAAyB,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC3G,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,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EACtB,IAAY,EACZ,OAKC,EACD,EAAE;IACF,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,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,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,IAAI,EAAC,KAAK,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC;IAC9B,MAAM,EAAC,SAAS,EAAE,cAAc,GAAG,QAAQ,EAAC,GAAG,OAAO,CAAC;IACvD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,eAAe,GAAG,CAAC,CAAC;IAC1B,OAAO,YAAY,IAAI,cAAc,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC;YACH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,kCAAkC;gBAClC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;wBACjC,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,SAAS;gBACX,CAAC;gBAED,MAAM,EAAC,IAAI,EAAE,SAAS,EAAC,GAAG,OAAO,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACtD,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1C,SAAS;gBACX,CAAC;gBACD,MAAM,SAAS,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;gBAEjE,MAAM,YAAY,GAAG,CAAC,MAAM,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC;gBAEnG,MAAM,iBAAiB,GAAG,SAAS;oBACjC,CAAC,CAAC,EAAC,CAAC,GAAG,CAAC,EAAE,YAAY,EAAC;oBACvB,CAAC,CAAC,SAAS,CAAC,MAAM,CACd,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;wBACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;4BACxD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;gCAC1C,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;4BACtE,CAAC;wBACH,CAAC,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC;oBACd,CAAC,EACD,EAAiC,CAClC,CAAC;gBAEN,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEpH,WAAW,CAAC,GAAG,CAAC,CAAC;gBAEjB,6CAA6C;gBAC7C,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;gBAEzE,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;oBAC7B,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,YAAY;YACZ,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;gBACjC,UAAU,IAAI,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QACD,sBAAsB;QACtB,KAAK,GAAG,KAAK,CAAC;QACd,YAAY,IAAI,CAAC,CAAC;QAClB,oBAAoB;QACpB,UAAU,GAAG,CAAC,CAAC;QAEf,oBAAoB;QACpB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {FileEntry, findChangedFilesSinceTime, 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 {resolveAiTasks} from \"../../helper/resolve-ai-tasks.js\";\nimport {runAiTask} from \"./run-ai-task.js\";\n\nexport const run = async (\n _cwd: string,\n options: {\n nameFilter: string[];\n dirFilter: string[];\n force?: boolean;\n loopTimes?: number;\n },\n) => {\n const cwd = normalizeFilePath(_cwd);\n const config = await loadConfig(cwd);\n\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 const ignore = [\".git\"];\n if (fs.existsSync(cwdIgnoreFilepath)) {\n ignore.push(...fs.readFileSync(cwdIgnoreFilepath, \"utf-8\").split(\"\\n\"));\n }\n const exitedJobs = new Set<string>();\n\n let {force = false} = options;\n const {loopTimes: MAX_LOOP_TIMES = Infinity} = options;\n let currentTimes = 1;\n let retryTimes = 0;\n const MAX_RETRY_TIMES = 3;\n while (currentTimes <= MAX_LOOP_TIMES) {\n const ai_tasks = resolveAiTasks(cwd, config.tasks, currentTimes - 1);\n\n const allFiles = [...walkFiles(cwd, {ignore})];\n let allDone = true;\n\n try {\n for (const ai_task of ai_tasks) {\n // 如果进度已经满了,并且没有任何依赖文件的变更,那么跳过这个任务\n if (!force) {\n if (ai_task.log.preProgress >= 1) {\n continue;\n }\n }\n if (exitedJobs.has(ai_task.jobName)) {\n continue;\n }\n\n const {dirs: task_dirs} = ai_task;\n if (!task_dirs.some((dir) => dirMatcher.isMatch(dir))) {\n continue;\n }\n if (!nameMatcher.isMatch(ai_task.jobName)) {\n continue;\n }\n const isCwdTask = cwd === task_dirs[0] && task_dirs.length === 1;\n\n const changedFiles = (await findChangedFilesSinceTime(ai_task.log.preUpdateTime, cwd)) ?? allFiles;\n\n const task_changedFiles = isCwdTask\n ? {[cwd]: changedFiles}\n : task_dirs.reduce(\n (tree, task_dir) => {\n tree[task_dir] = iter_map_not_null(changedFiles, (file) => {\n if (file.path.startsWith(task_dirs + \"/\")) {\n return new FileEntry(file.path, {cwd: task_dir, state: file.stats});\n }\n });\n return tree;\n },\n {} as Record<string, FileEntry[]>,\n );\n\n const task_allFiles = isCwdTask ? allFiles : task_dirs.map((task_dir) => [...walkFiles(task_dir, {ignore})]).flat();\n\n loadJixoEnv(cwd);\n\n /// 只要有一个任务执行了,那么allDone就要标记成false,进入下一次循环来判断\n allDone = false;\n await runAiTask(ai_task, currentTimes, task_allFiles, task_changedFiles);\n\n if (ai_task.exitCode != null) {\n exitedJobs.add(ai_task.jobName);\n }\n }\n } catch (e) {\n console.error(e);\n // 遇到异常,那么重试\n if (retryTimes < MAX_RETRY_TIMES) {\n retryTimes += 1;\n continue;\n } else {\n break;\n }\n }\n // force 只能生效一次,避免无限循环\n force = false;\n currentTimes += 1;\n /// 成功一次后,retry计数就重制\n retryTimes = 0;\n\n /// 如果没有任务执行了,那么退出循环\n if (allDone) {\n break;\n }\n }\n};\n"]}
|
package/dist/config.d.ts
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
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
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
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
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
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
|
package/dist/env.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
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
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-retry-error.d.ts","sourceRoot":"","sources":["../../src/helper/ai-retry-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAMhE,eAAO,MAAM,gBAAgB,GAAU,OAAO,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC,kBA0CnG,CAAC"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { gray, red, yellow } from "@gaubee/nodekit";
|
|
2
|
-
import { delay } from "@gaubee/util";
|
|
3
|
-
import { APICallError, RetryError } from "ai";
|
|
4
|
-
import ms from "ms";
|
|
5
|
-
import { match } from "ts-pattern";
|
|
6
|
-
import z from "zod";
|
|
7
|
-
export const handleRetryError = async (error, loading) => {
|
|
8
|
-
if (!RetryError.isInstance(error)) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
for (const inner_error of error.errors) {
|
|
12
|
-
if (!APICallError.isInstance(inner_error)) {
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
try {
|
|
16
|
-
if (!inner_error.isRetryable) {
|
|
17
|
-
const safeData = geminiErrorSchema.safeParse(inner_error.data);
|
|
18
|
-
if (!safeData.success) {
|
|
19
|
-
throw safeData.error;
|
|
20
|
-
}
|
|
21
|
-
const retryDetail = safeData.data.error.details.find((d) => "retryDelay" in d);
|
|
22
|
-
if (retryDetail) {
|
|
23
|
-
const retryDelay = ms(retryDetail.retryDelay);
|
|
24
|
-
if (typeof retryDelay === "number") {
|
|
25
|
-
await waitRetryDelay(loading, retryDelay, yellow(inner_error.message));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
const safeData = commonErrorSchema.safeParse(inner_error.data);
|
|
31
|
-
if (!safeData.success) {
|
|
32
|
-
throw safeData.error;
|
|
33
|
-
}
|
|
34
|
-
console.log("QAQ response.error", safeData);
|
|
35
|
-
await match(safeData.data.error)
|
|
36
|
-
/// 余额不足
|
|
37
|
-
.with({ message: "Insufficient Balance" }, async () => {
|
|
38
|
-
/// 30s重试
|
|
39
|
-
await waitRetryDelay(loading, 1000 * 30, red("Insufficient Balance") + "\n" + red(inner_error.url));
|
|
40
|
-
})
|
|
41
|
-
.otherwise(() => {
|
|
42
|
-
throw inner_error;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
console.error("\nQAQ unknown error", inner_error);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
// const handleError
|
|
52
|
-
const commonErrorSchema = z.object({
|
|
53
|
-
error: z.object({
|
|
54
|
-
message: z.string(),
|
|
55
|
-
type: z.string(),
|
|
56
|
-
param: z.any(),
|
|
57
|
-
code: z.string(),
|
|
58
|
-
}),
|
|
59
|
-
});
|
|
60
|
-
const geminiErrorSchema = z.object({
|
|
61
|
-
error: z.object({
|
|
62
|
-
code: z.number(),
|
|
63
|
-
message: z.string(),
|
|
64
|
-
status: z.string(),
|
|
65
|
-
details: z.array(z.union([
|
|
66
|
-
z.object({
|
|
67
|
-
"@type": z.string(),
|
|
68
|
-
violations: z.array(z.object({
|
|
69
|
-
quotaMetric: z.string(),
|
|
70
|
-
quotaId: z.string(),
|
|
71
|
-
quotaDimensions: z.object({
|
|
72
|
-
location: z.string(),
|
|
73
|
-
model: z.string(),
|
|
74
|
-
}),
|
|
75
|
-
quotaValue: z.string(),
|
|
76
|
-
})),
|
|
77
|
-
}),
|
|
78
|
-
z.object({
|
|
79
|
-
"@type": z.string(),
|
|
80
|
-
links: z.array(z.object({ description: z.string(), url: z.string() })),
|
|
81
|
-
}),
|
|
82
|
-
z.object({ "@type": z.string(), retryDelay: z.string() }),
|
|
83
|
-
])),
|
|
84
|
-
}),
|
|
85
|
-
});
|
|
86
|
-
const waitRetryDelay = async (loading, retryDelay, message) => {
|
|
87
|
-
const { prefixText, text } = loading;
|
|
88
|
-
let remainingDelay = retryDelay;
|
|
89
|
-
const tickInterval = 1000;
|
|
90
|
-
const tick = () => {
|
|
91
|
-
loading.prefixText = "⏲️ ";
|
|
92
|
-
loading.text = [
|
|
93
|
-
//
|
|
94
|
-
message,
|
|
95
|
-
" " + gray("─".repeat(Math.max(4, process.stdout.columns - 2))),
|
|
96
|
-
`Retrying in ${ms(remainingDelay)}...`,
|
|
97
|
-
].join("\n");
|
|
98
|
-
remainingDelay -= tickInterval;
|
|
99
|
-
};
|
|
100
|
-
tick();
|
|
101
|
-
const ti = setInterval(tick, tickInterval);
|
|
102
|
-
await delay(retryDelay);
|
|
103
|
-
clearInterval(ti);
|
|
104
|
-
// 回滚
|
|
105
|
-
loading.prefixText = prefixText;
|
|
106
|
-
loading.text = text;
|
|
107
|
-
};
|
|
108
|
-
//# sourceMappingURL=ai-retry-error.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-retry-error.js","sourceRoot":"","sources":["../../src/helper/ai-retry-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAe,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AACnC,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,IAAI,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAc,EAAE,OAA6C,EAAE,EAAE;IACtG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,MAAM,QAAQ,CAAC,KAAK,CAAC;gBACvB,CAAC;gBACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;gBAC/E,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,UAA4B,CAAC,CAAC;oBAEhE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;wBACnC,MAAM,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,MAAM,QAAQ,CAAC,KAAK,CAAC;gBACvB,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC9B,QAAQ;qBACP,IAAI,CAAC,EAAC,OAAO,EAAE,sBAAsB,EAAC,EAAE,KAAK,IAAI,EAAE;oBAClD,SAAS;oBACT,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,sBAAsB,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtG,CAAC,CAAC;qBACD,SAAS,CAAC,GAAG,EAAE;oBACd,MAAM,WAAW,CAAC;gBACpB,CAAC,CAAC,CAAC;YACP,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,oBAAoB;AAGpB,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,KAAK,CAAC;YACN,CAAC,CAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;gBACnB,UAAU,EAAE,CAAC,CAAC,KAAK,CACjB,CAAC,CAAC,MAAM,CAAC;oBACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;oBACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;oBACnB,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC;wBACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;wBACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;qBAClB,CAAC;oBACF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;iBACvB,CAAC,CACH;aACF,CAAC;YACF,CAAC,CAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;gBACnB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC;aACrE,CAAC;YACF,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,CAAC;SACxD,CAAC,CACH;KACF,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,KAAK,EAAE,OAA6C,EAAE,UAAkB,EAAE,OAAe,EAAE,EAAE;IAClH,MAAM,EAAC,UAAU,EAAE,IAAI,EAAC,GAAG,OAAO,CAAC;IACnC,IAAI,cAAc,GAAG,UAAU,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;QAC3B,OAAO,CAAC,IAAI,GAAG;YACb,EAAE;YACF,OAAO;YACP,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/D,eAAe,EAAE,CAAC,cAAc,CAAC,KAAK;SACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,cAAc,IAAI,YAAY,CAAC;IACjC,CAAC,CAAC;IACF,IAAI,EAAE,CAAC;IAEP,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,CAAC;IAElB,KAAK;IACL,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAChC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,CAAC,CAAC","sourcesContent":["import {gray, red, yellow, type Spinner} from \"@gaubee/nodekit\";\r\nimport {delay} from \"@gaubee/util\";\r\nimport {APICallError, RetryError} from \"ai\";\r\nimport ms from \"ms\";\r\nimport {match} from \"ts-pattern\";\r\nimport z from \"zod\";\r\nexport const handleRetryError = async (error: unknown, loading: Pick<Spinner, \"prefixText\" | \"text\">) => {\r\n if (!RetryError.isInstance(error)) {\r\n return;\r\n }\r\n for (const inner_error of error.errors) {\r\n if (!APICallError.isInstance(inner_error)) {\r\n continue;\r\n }\r\n try {\r\n if (!inner_error.isRetryable) {\r\n const safeData = geminiErrorSchema.safeParse(inner_error.data);\r\n if (!safeData.success) {\r\n throw safeData.error;\r\n }\r\n const retryDetail = safeData.data.error.details.find((d) => \"retryDelay\" in d);\r\n if (retryDetail) {\r\n const retryDelay = ms(retryDetail.retryDelay as ms.StringValue);\r\n\r\n if (typeof retryDelay === \"number\") {\r\n await waitRetryDelay(loading, retryDelay, yellow(inner_error.message));\r\n }\r\n }\r\n } else {\r\n const safeData = commonErrorSchema.safeParse(inner_error.data);\r\n if (!safeData.success) {\r\n throw safeData.error;\r\n }\r\n console.log(\"QAQ response.error\", safeData);\r\n await match(safeData.data.error)\r\n /// 余额不足\r\n .with({message: \"Insufficient Balance\"}, async () => {\r\n /// 30s重试\r\n await waitRetryDelay(loading, 1000 * 30, red(\"Insufficient Balance\") + \"\\n\" + red(inner_error.url));\r\n })\r\n .otherwise(() => {\r\n throw inner_error;\r\n });\r\n }\r\n } catch {\r\n console.error(\"\\nQAQ unknown error\", inner_error);\r\n }\r\n }\r\n};\r\n\r\n// const handleError\r\n\r\n\r\nconst commonErrorSchema = z.object({\r\n error: z.object({\r\n message: z.string(),\r\n type: z.string(),\r\n param: z.any(),\r\n code: z.string(),\r\n }),\r\n});\r\n\r\nconst geminiErrorSchema = z.object({\r\n error: z.object({\r\n code: z.number(),\r\n message: z.string(),\r\n status: z.string(),\r\n details: z.array(\r\n z.union([\r\n z.object({\r\n \"@type\": z.string(),\r\n violations: z.array(\r\n z.object({\r\n quotaMetric: z.string(),\r\n quotaId: z.string(),\r\n quotaDimensions: z.object({\r\n location: z.string(),\r\n model: z.string(),\r\n }),\r\n quotaValue: z.string(),\r\n }),\r\n ),\r\n }),\r\n z.object({\r\n \"@type\": z.string(),\r\n links: z.array(z.object({description: z.string(), url: z.string()})),\r\n }),\r\n z.object({\"@type\": z.string(), retryDelay: z.string()}),\r\n ]),\r\n ),\r\n }),\r\n});\r\n\r\nconst waitRetryDelay = async (loading: Pick<Spinner, \"prefixText\" | \"text\">, retryDelay: number, message: string) => {\r\n const {prefixText, text} = loading;\r\n let remainingDelay = retryDelay;\r\n const tickInterval = 1000;\r\n const tick = () => {\r\n loading.prefixText = \"⏲️ \";\r\n loading.text = [\r\n //\r\n message,\r\n \" \" + gray(\"─\".repeat(Math.max(4, process.stdout.columns - 2))),\r\n `Retrying in ${ms(remainingDelay)}...`,\r\n ].join(\"\\n\");\r\n remainingDelay -= tickInterval;\r\n };\r\n tick();\r\n\r\n const ti = setInterval(tick, tickInterval);\r\n await delay(retryDelay);\r\n clearInterval(ti);\r\n\r\n // 回滚\r\n loading.prefixText = prefixText;\r\n loading.text = text;\r\n};\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
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,CAyGjH"}
|