@lazyingart/agintiflow 0.19.0 → 0.19.2
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 +2 -2
- package/docs/auxiliary-image-generation.md +0 -1
- package/docs/model-selection.md +12 -3
- package/package.json +1 -1
- package/references/model-routing-provider-design.md +5 -2
- package/scripts/smoke-auth.js +1 -1
- package/scripts/smoke-cli-chat.js +6 -0
- package/scripts/smoke-model-roles.js +42 -1
- package/src/agent-runner.js +1 -1
- package/src/auth-onboarding.js +0 -1
- package/src/auxiliary-tools.js +1 -1
- package/src/capabilities.js +1 -1
- package/src/cli.js +1 -1
- package/src/interactive-cli.js +22 -6
- package/src/model-client.js +2 -2
- package/src/model-routing.js +1 -1
- package/src/project.js +0 -2
- package/src/task-profiles.js +1 -1
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ printf '%s' "$VENICE_API_KEY" | aginti keys set venice --stdin
|
|
|
60
60
|
|
|
61
61
|
# optional image-generation auxiliary skill:
|
|
62
62
|
aginti login grsai
|
|
63
|
-
# inside chat, use /
|
|
63
|
+
# inside chat, use /auxiliary grsai
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
Start an interactive Codex-style CLI chat from any project folder:
|
|
@@ -77,7 +77,7 @@ Inside chat, type normal requests such as `write a small Python CLI app with tes
|
|
|
77
77
|
|
|
78
78
|
For code edits, AgInTiFlow routes patch/refactor/database-style tasks to DeepSeek v4 pro by default and exposes `apply_patch` as a deterministic workspace tool. It supports exact replacements, Codex-style patch envelopes, and unified diffs, with preflight checks, path guardrails, hashes, and compact per-file diffs. See [docs/patch-tools.md](docs/patch-tools.md).
|
|
79
79
|
|
|
80
|
-
Model choice is role-based: `/route` defaults to DeepSeek V4 Flash, `/model` or `/main` defaults to DeepSeek V4 Pro, `/spare` defaults to OpenAI GPT-5.4 medium, `/wrapper` defaults to Codex GPT-5.5 medium when enabled, and `/
|
|
80
|
+
Model choice is role-based: `/route` defaults to DeepSeek V4 Flash, `/model` or `/main` defaults to DeepSeek V4 Pro, `/spare` defaults to OpenAI GPT-5.4 medium, `/wrapper` defaults to Codex GPT-5.5 medium when enabled, and `/auxiliary` defaults to GRS AI/Nano Banana for image tools. See [docs/model-selection.md](docs/model-selection.md) and run `aginti models`.
|
|
81
81
|
|
|
82
82
|
For larger repositories, use `--profile large-codebase` or choose **Large codebase engineering** in the web UI. The web default stays **Auto**, and Auto now escalates codebase/system/debugging prompts to the same engineering loop when needed. Complex work routes to DeepSeek v4 pro, starts with `inspect_project`, then uses search/read/patch/check loops inspired by Codex, Copilot SDK, Claude Code, Gemini CLI, Qwen, and Claw Code. See [docs/large-codebase-engineering.md](docs/large-codebase-engineering.md).
|
|
83
83
|
|
package/docs/model-selection.md
CHANGED
|
@@ -10,7 +10,7 @@ AgInTiFlow treats model choice as a role-based control plane. A provider supplie
|
|
|
10
10
|
| Main | `/model` or `/main` | `deepseek/deepseek-v4-pro` | Complex executor for coding, debugging, writing, and long tasks. |
|
|
11
11
|
| Spare | `/spare` | `openai/gpt-5.4` with `medium` reasoning | Optional fallback or cross-check model. |
|
|
12
12
|
| Wrapper | `/wrapper` | `codex gpt-5.5 medium` | External coding assistant when wrapper tools are enabled. |
|
|
13
|
-
| Auxiliary | `/
|
|
13
|
+
| Auxiliary | `/auxiliary` | `grsai/nano-banana-2` | Image/media tools; Venice image models are optional. |
|
|
14
14
|
|
|
15
15
|
Smart routing still works as before: normal work goes to the route model, and complex work goes to the main model. Manual provider/model selection remains available for one-off runs.
|
|
16
16
|
|
|
@@ -33,13 +33,23 @@ Interactive commands:
|
|
|
33
33
|
|
|
34
34
|
```text
|
|
35
35
|
/models
|
|
36
|
+
/venice
|
|
36
37
|
/route deepseek/deepseek-v4-flash
|
|
37
38
|
/model deepseek/deepseek-v4-pro
|
|
38
39
|
/spare openai/gpt-5.4 medium
|
|
39
40
|
/wrapper codex gpt-5.5 medium
|
|
40
|
-
/
|
|
41
|
+
/auxiliary model grsai/nano-banana-2
|
|
41
42
|
```
|
|
42
43
|
|
|
44
|
+
`/venice` is a shortcut for:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
/route venice/venice-uncensored-1-2
|
|
48
|
+
/main venice/venice-uncensored-1-2
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
It keeps smart routing enabled, so normal and complex tasks still use the same route/main policy, but both roles resolve to Venice Uncensored 1.2. If the Venice key is missing, run `/auth venice`.
|
|
52
|
+
|
|
43
53
|
## Provider Buckets
|
|
44
54
|
|
|
45
55
|
| Bucket | Provider | Typical use |
|
|
@@ -67,4 +77,3 @@ printf '%s' "$VENICE_API_KEY" | aginti keys set venice --stdin
|
|
|
67
77
|
```
|
|
68
78
|
|
|
69
79
|
The web UI mirrors the same roles in its **Model roles** panel. Use the top provider/model fields for manual runs; use the role fields to change how smart routing chooses route, main, spare, wrapper, and auxiliary models.
|
|
70
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lazyingart/agintiflow",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AgInTiFlow is a web-first coding agent and CLI with DeepSeek routing, sandboxed tools, model providers, canvas artifacts, and optional wrappers.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,7 +22,7 @@ The UI should be role-first rather than provider-first:
|
|
|
22
22
|
- **Main model (`/model` or `/main`):** complex executor. Default `deepseek/deepseek-v4-pro`.
|
|
23
23
|
- **Spare model (`/spare`):** fallback/cross-check model. Default `openai/gpt-5.4` with `medium` reasoning.
|
|
24
24
|
- **Wrapper (`/wrapper`):** external coding assistant. Default Codex with `gpt-5.5` medium reasoning, disabled unless wrapper tools are enabled.
|
|
25
|
-
- **Auxiliary (`/
|
|
25
|
+
- **Auxiliary (`/auxiliary`):** media/image tools. Default `grsai/nano-banana-2`; Venice image models are optional.
|
|
26
26
|
|
|
27
27
|
This keeps the mental model stable: providers are supply, roles are policy.
|
|
28
28
|
|
|
@@ -42,13 +42,16 @@ Interactive equivalents:
|
|
|
42
42
|
|
|
43
43
|
```text
|
|
44
44
|
/models
|
|
45
|
+
/venice
|
|
45
46
|
/route deepseek/deepseek-v4-flash
|
|
46
47
|
/model deepseek/deepseek-v4-pro
|
|
47
48
|
/spare openai/gpt-5.4 medium
|
|
48
49
|
/wrapper codex gpt-5.5 medium
|
|
49
|
-
/
|
|
50
|
+
/auxiliary model grsai/nano-banana-2
|
|
50
51
|
```
|
|
51
52
|
|
|
53
|
+
`/venice` keeps smart routing enabled and points both route and main roles at `venice/venice-uncensored-1-2`.
|
|
54
|
+
|
|
52
55
|
## OpenAI Model Reference
|
|
53
56
|
|
|
54
57
|
| Model | Role | Reasoning |
|
package/scripts/smoke-auth.js
CHANGED
|
@@ -54,7 +54,7 @@ async function runCli(args, stdin = "") {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
try {
|
|
57
|
-
assert(normalizeAuthProvider("
|
|
57
|
+
assert(normalizeAuthProvider("auxiliary") === "grsai", "auxiliary alias did not normalize to grsai");
|
|
58
58
|
assert(normalizeAuthProvider("qwen") === "qwen", "qwen provider did not normalize");
|
|
59
59
|
assert(normalizeAuthProvider("venice") === "venice", "venice provider did not normalize");
|
|
60
60
|
assert(authProviderKeyUrl("deepseek") === "https://platform.deepseek.com/api_keys", "DeepSeek key URL is missing");
|
|
@@ -159,6 +159,11 @@ try {
|
|
|
159
159
|
if (!instructionsResult.stdout.includes("AGINTI.md") || !instructionsResult.stdout.includes("Project instructions")) {
|
|
160
160
|
throw new Error("interactive /instructions did not show AGINTI.md");
|
|
161
161
|
}
|
|
162
|
+
const helpResult = await runChat("/help\n/exit\n");
|
|
163
|
+
const misspelledAuxiliary = "/auxil" + "liary";
|
|
164
|
+
if (!helpResult.stdout.includes("/auxiliary") || helpResult.stdout.includes(misspelledAuxiliary)) {
|
|
165
|
+
throw new Error("interactive help did not expose only the correctly spelled /auxiliary command");
|
|
166
|
+
}
|
|
162
167
|
const skillsResult = await runChat("/skills website\n/exit\n");
|
|
163
168
|
if (!skillsResult.stdout.includes("website-app") || !skillsResult.stdout.includes("Website And App Builder")) {
|
|
164
169
|
throw new Error("interactive /skills did not show matching built-in skills");
|
|
@@ -217,6 +222,7 @@ try {
|
|
|
217
222
|
"agent-response-gutter",
|
|
218
223
|
"aginti-md",
|
|
219
224
|
"instructions-command",
|
|
225
|
+
"auxiliary-command-spelling",
|
|
220
226
|
"skills-command",
|
|
221
227
|
"slash-prefix-autoselect",
|
|
222
228
|
"instructions-chat-edit",
|
|
@@ -47,6 +47,43 @@ function runCli(args) {
|
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
function runInteractive(input) {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const child = spawn(process.execPath, [path.join(repoRoot, "bin/aginti-cli.js"), "chat"], {
|
|
53
|
+
cwd: repoRoot,
|
|
54
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
55
|
+
env: {
|
|
56
|
+
...process.env,
|
|
57
|
+
DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY || "test-deepseek-key-not-real",
|
|
58
|
+
VENICE_API_KEY: process.env.VENICE_API_KEY || "test-venice-key-not-real",
|
|
59
|
+
AGINTIFLOW_NO_COLOR: "1",
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
let stdout = "";
|
|
63
|
+
let stderr = "";
|
|
64
|
+
const timer = setTimeout(() => {
|
|
65
|
+
child.kill("SIGTERM");
|
|
66
|
+
reject(new Error("model role interactive smoke timed out"));
|
|
67
|
+
}, 12000);
|
|
68
|
+
child.stdout.on("data", (chunk) => {
|
|
69
|
+
stdout += String(chunk);
|
|
70
|
+
});
|
|
71
|
+
child.stderr.on("data", (chunk) => {
|
|
72
|
+
stderr += String(chunk);
|
|
73
|
+
});
|
|
74
|
+
child.on("error", (error) => {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
reject(error);
|
|
77
|
+
});
|
|
78
|
+
child.on("close", (code) => {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
if (code === 0) resolve(stdout);
|
|
81
|
+
else reject(new Error(`model role interactive smoke failed ${code}\n${stdout}\n${stderr}`));
|
|
82
|
+
});
|
|
83
|
+
child.stdin.end(input);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
50
87
|
const roles = getModelRoleDefaults();
|
|
51
88
|
assert(roles.route.provider === "deepseek", "route provider default should be deepseek");
|
|
52
89
|
assert(roles.route.model === "deepseek-v4-flash", "route model default should be deepseek-v4-flash");
|
|
@@ -76,11 +113,15 @@ assert(AUXILIARY_MODEL_CATALOG["venice-image"].some((item) => item.id === "gpt-i
|
|
|
76
113
|
const output = await runCli(["models"]);
|
|
77
114
|
assert(output.includes("/route") && output.includes("/spare") && output.includes("venice-gpt"), "aginti models output missing role details");
|
|
78
115
|
|
|
116
|
+
const interactiveOutput = await runInteractive("/venice\n/status\n/exit\n");
|
|
117
|
+
assert(interactiveOutput.includes("route=venice/venice-uncensored-1-2"), "/venice did not set Venice route role");
|
|
118
|
+
assert(interactiveOutput.includes("main=venice/venice-uncensored-1-2"), "/venice did not set Venice main role");
|
|
119
|
+
|
|
79
120
|
console.log(
|
|
80
121
|
JSON.stringify(
|
|
81
122
|
{
|
|
82
123
|
ok: true,
|
|
83
|
-
checks: ["role-defaults", "route-overrides", "provider-groups", "auxiliary-catalog", "cli-models-command"],
|
|
124
|
+
checks: ["role-defaults", "route-overrides", "provider-groups", "auxiliary-catalog", "cli-models-command", "venice-shortcut"],
|
|
84
125
|
},
|
|
85
126
|
null,
|
|
86
127
|
2
|
package/src/agent-runner.js
CHANGED
|
@@ -319,7 +319,7 @@ async function createInitialState(config, sessionId) {
|
|
|
319
319
|
config.allowAuxiliaryTools
|
|
320
320
|
? `Auxiliary skills are available: ${listAuxiliarySkills()
|
|
321
321
|
.map((skill) => `${skill.id} via ${skill.toolName} (${skill.available ? "key available" : `needs ${skill.keyName}`})`)
|
|
322
|
-
.join(", ")}. Use generate_image for real raster image/photo/illustration/cover/poster/logo requests when appropriate; if image keys are missing, ask the user to run /
|
|
322
|
+
.join(", ")}. Use generate_image for real raster image/photo/illustration/cover/poster/logo requests when appropriate; if image keys are missing, ask the user to run /auxiliary grsai, aginti login grsai, or aginti login venice.`
|
|
323
323
|
: "Auxiliary skills are disabled for this run.",
|
|
324
324
|
config.allowWebSearch
|
|
325
325
|
? "web_search is available for current information, docs, package/toolchain errors, and source discovery. Prefer web_search over browser search-engine navigation."
|
package/src/auth-onboarding.js
CHANGED
package/src/auxiliary-tools.js
CHANGED
|
@@ -424,7 +424,7 @@ export async function generateImage(args = {}, config = {}) {
|
|
|
424
424
|
|
|
425
425
|
const apiKey = grsaiKey();
|
|
426
426
|
if (!apiKey) {
|
|
427
|
-
throw new Error("Missing GRSAI key. Run `aginti login grsai`, `aginti keys set grsai --stdin`, or `/
|
|
427
|
+
throw new Error("Missing GRSAI key. Run `aginti login grsai`, `aginti keys set grsai --stdin`, or `/auxiliary grsai`.");
|
|
428
428
|
}
|
|
429
429
|
|
|
430
430
|
const submitUrl = `${host}/v1/draw/nano-banana`;
|
package/src/capabilities.js
CHANGED
|
@@ -165,7 +165,7 @@ export async function buildCapabilityReport(projectRoot, packageVersion, config)
|
|
|
165
165
|
capability("venice-key", keyStatus.venice, { envVars: keyStatus.envVars.venice }),
|
|
166
166
|
capability("grsai-key", keyStatus.grsai, {
|
|
167
167
|
envVars: keyStatus.envVars.grsai,
|
|
168
|
-
setup: "Optional for image generation. Run `aginti login grsai` or use `/
|
|
168
|
+
setup: "Optional for image generation. Run `aginti login grsai` or use `/auxiliary grsai` in chat.",
|
|
169
169
|
}),
|
|
170
170
|
capability("file-tools", Boolean(config.allowFileTools), { workspace: config.commandCwd }),
|
|
171
171
|
capability("shell-tool", Boolean(config.allowShellTool), {
|
package/src/cli.js
CHANGED
|
@@ -354,7 +354,7 @@ function providerLabel(provider) {
|
|
|
354
354
|
if (normalized === "openai") return "OpenAI";
|
|
355
355
|
if (normalized === "qwen") return "Qwen";
|
|
356
356
|
if (normalized === "venice") return "Venice";
|
|
357
|
-
if (normalized === "grsai" || normalized === "auxiliary"
|
|
357
|
+
if (normalized === "grsai" || normalized === "auxiliary") return "GRSAI";
|
|
358
358
|
return "DeepSeek";
|
|
359
359
|
}
|
|
360
360
|
|
package/src/interactive-cli.js
CHANGED
|
@@ -56,7 +56,6 @@ const SLASH_COMMANDS = [
|
|
|
56
56
|
"/auth",
|
|
57
57
|
"/instructions",
|
|
58
58
|
"/memory",
|
|
59
|
-
"/auxilliary",
|
|
60
59
|
"/auxiliary",
|
|
61
60
|
"/new",
|
|
62
61
|
"/resume",
|
|
@@ -67,6 +66,7 @@ const SLASH_COMMANDS = [
|
|
|
67
66
|
"/web-search",
|
|
68
67
|
"/scouts",
|
|
69
68
|
"/models",
|
|
69
|
+
"/venice",
|
|
70
70
|
"/route",
|
|
71
71
|
"/main",
|
|
72
72
|
"/spare",
|
|
@@ -573,6 +573,7 @@ function printHelp() {
|
|
|
573
573
|
" /instructions Show AGINTI.md project instructions status.",
|
|
574
574
|
" /memory Alias for /instructions.",
|
|
575
575
|
" /models Show route/main/spare/wrapper/auxiliary model roles.",
|
|
576
|
+
" /venice Shortcut: use Venice Uncensored 1.2 for route and main roles.",
|
|
576
577
|
" /route <mode|provider/model>",
|
|
577
578
|
" Set routing mode or fast route model, e.g. /route deepseek/deepseek-v4-flash.",
|
|
578
579
|
" /model <provider/model> Set the active/main model, e.g. /model deepseek/deepseek-v4-pro.",
|
|
@@ -580,7 +581,7 @@ function printHelp() {
|
|
|
580
581
|
" Set spare model, e.g. /spare openai/gpt-5.4 medium.",
|
|
581
582
|
" /wrapper [on|off|codex model reasoning]",
|
|
582
583
|
" Configure optional external wrapper.",
|
|
583
|
-
" /
|
|
584
|
+
" /auxiliary [status|grsai|venice|model grsai/nano-banana-2|on|off|image]",
|
|
584
585
|
" Manage optional auxiliary skills, including image generation.",
|
|
585
586
|
" /new Start a fresh session on the next message.",
|
|
586
587
|
" /resume <session-id> Continue a saved session.",
|
|
@@ -1586,7 +1587,7 @@ function printModelRoles(state) {
|
|
|
1586
1587
|
"/model deepseek/deepseek-v4-pro",
|
|
1587
1588
|
"/spare openai/gpt-5.4 medium",
|
|
1588
1589
|
"/wrapper codex gpt-5.5 medium",
|
|
1589
|
-
"/
|
|
1590
|
+
"/auxiliary model grsai/nano-banana-2",
|
|
1590
1591
|
"",
|
|
1591
1592
|
"Provider groups",
|
|
1592
1593
|
...groups,
|
|
@@ -1693,7 +1694,7 @@ async function handleCommand(line, state, packageDir) {
|
|
|
1693
1694
|
);
|
|
1694
1695
|
return true;
|
|
1695
1696
|
}
|
|
1696
|
-
if (command === "
|
|
1697
|
+
if (command === "auxiliary") {
|
|
1697
1698
|
const action = value || "status";
|
|
1698
1699
|
if (action === "status") {
|
|
1699
1700
|
const keys = providerKeyStatus(process.cwd());
|
|
@@ -1703,7 +1704,7 @@ async function handleCommand(line, state, packageDir) {
|
|
|
1703
1704
|
`Image generation: ${keys.grsai ? "GRSAI key available" : "missing GRSAI key"}`,
|
|
1704
1705
|
`Venice image: ${keys.venice ? "Venice key available" : "missing Venice key"}`,
|
|
1705
1706
|
`Selected auxiliary: ${state.auxiliaryProvider || "grsai"}/${state.auxiliaryModel || "nano-banana-2"}`,
|
|
1706
|
-
"Use `/
|
|
1707
|
+
"Use `/auxiliary grsai` or `/auxiliary venice` to paste a key, `/auxiliary model grsai/nano-banana-2`, `/auxiliary image`, or `/auxiliary off`.",
|
|
1707
1708
|
].join("\n")
|
|
1708
1709
|
);
|
|
1709
1710
|
return true;
|
|
@@ -1735,7 +1736,7 @@ async function handleCommand(line, state, packageDir) {
|
|
|
1735
1736
|
await promptAndSaveProviderKey(action === "venice" ? "venice" : "grsai", state);
|
|
1736
1737
|
return true;
|
|
1737
1738
|
}
|
|
1738
|
-
printAgentMessage("Usage: /
|
|
1739
|
+
printAgentMessage("Usage: /auxiliary [status|grsai|venice|model grsai/nano-banana-2|on|off|image]");
|
|
1739
1740
|
return true;
|
|
1740
1741
|
}
|
|
1741
1742
|
if (command === "new") {
|
|
@@ -1825,6 +1826,21 @@ async function handleCommand(line, state, packageDir) {
|
|
|
1825
1826
|
printModelRoles(state);
|
|
1826
1827
|
return true;
|
|
1827
1828
|
}
|
|
1829
|
+
if (command === "venice") {
|
|
1830
|
+
state.routingMode = "smart";
|
|
1831
|
+
state.provider = "deepseek";
|
|
1832
|
+
state.model = "";
|
|
1833
|
+
state.routeProvider = "venice";
|
|
1834
|
+
state.routeModel = "venice-uncensored-1-2";
|
|
1835
|
+
state.mainProvider = "venice";
|
|
1836
|
+
state.mainModel = "venice-uncensored-1-2";
|
|
1837
|
+
const keys = providerKeyStatus(process.cwd());
|
|
1838
|
+
printSystemLine("routing=smart route=venice/venice-uncensored-1-2 main=venice/venice-uncensored-1-2");
|
|
1839
|
+
if (!keys.venice) {
|
|
1840
|
+
printAgentMessage("Venice model roles are selected, but no Venice key is configured. Run `/auth venice` to save one.");
|
|
1841
|
+
}
|
|
1842
|
+
return true;
|
|
1843
|
+
}
|
|
1828
1844
|
if (command === "route") {
|
|
1829
1845
|
if (!value) {
|
|
1830
1846
|
printAgentMessage(
|
package/src/model-client.js
CHANGED
|
@@ -241,7 +241,7 @@ export async function createPlan(client, config, state) {
|
|
|
241
241
|
config.allowAuxiliaryTools
|
|
242
242
|
? `Auxiliary skills are enabled: ${listAuxiliarySkills()
|
|
243
243
|
.map((skill) => `${skill.id} via ${skill.toolName} (${skill.available ? "key available" : `needs ${skill.keyName}`})`)
|
|
244
|
-
.join(", ")}. For raster image generation requests, plan to use generate_image when a GRSAI or Venice image key is available; otherwise ask the user to run /
|
|
244
|
+
.join(", ")}. For raster image generation requests, plan to use generate_image when a GRSAI or Venice image key is available; otherwise ask the user to run /auxiliary grsai, aginti login grsai, or aginti login venice.`
|
|
245
245
|
: "Auxiliary skills are disabled for this run.",
|
|
246
246
|
config.allowWebSearch
|
|
247
247
|
? "web_search is available for current information, docs, install errors, package/toolchain questions, and source discovery. Prefer web_search over opening a search engine in the browser."
|
|
@@ -703,7 +703,7 @@ export async function requestNextStep(client, config, messages) {
|
|
|
703
703
|
function: {
|
|
704
704
|
name: "generate_image",
|
|
705
705
|
description:
|
|
706
|
-
"Generate a raster image artifact through optional GRS AI Nano Banana or Venice image-generation skills. Use for user requests that explicitly need a real image/photo/illustration/cover/poster/logo concept rather than SVG/code-native graphics. Saves prompt, redacted payload, manifest, and downloaded images in the workspace. If keys are missing, ask the user to run /
|
|
706
|
+
"Generate a raster image artifact through optional GRS AI Nano Banana or Venice image-generation skills. Use for user requests that explicitly need a real image/photo/illustration/cover/poster/logo concept rather than SVG/code-native graphics. Saves prompt, redacted payload, manifest, and downloaded images in the workspace. If keys are missing, ask the user to run /auxiliary grsai, aginti login grsai, or aginti login venice.",
|
|
707
707
|
parameters: {
|
|
708
708
|
type: "object",
|
|
709
709
|
properties: {
|
package/src/model-routing.js
CHANGED
|
@@ -519,7 +519,7 @@ export function getModelRoleDefaults(overrides = {}) {
|
|
|
519
519
|
auxiliary: {
|
|
520
520
|
id: "auxiliary",
|
|
521
521
|
label: "Auxiliary",
|
|
522
|
-
command: "/
|
|
522
|
+
command: "/auxiliary",
|
|
523
523
|
provider: auxiliaryProvider,
|
|
524
524
|
model: auxiliaryModel,
|
|
525
525
|
description: "Image/media tools. Default: GRS AI/Nano Banana; Venice image is optional.",
|
package/src/project.js
CHANGED
|
@@ -306,7 +306,6 @@ export function providerKeyPreview(projectRoot = process.cwd(), provider = "") {
|
|
|
306
306
|
const normalized = String(provider || "").trim().toLowerCase();
|
|
307
307
|
const aliases = {
|
|
308
308
|
auxiliary: "grsai",
|
|
309
|
-
auxilliary: "grsai",
|
|
310
309
|
image: "grsai",
|
|
311
310
|
imagegen: "grsai",
|
|
312
311
|
v: "venice",
|
|
@@ -339,7 +338,6 @@ export async function setProviderKey(projectRoot, provider, value) {
|
|
|
339
338
|
const normalizedProvider = String(provider || "").toLowerCase();
|
|
340
339
|
const aliases = {
|
|
341
340
|
auxiliary: "grsai",
|
|
342
|
-
auxilliary: "grsai",
|
|
343
341
|
image: "grsai",
|
|
344
342
|
imagegen: "grsai",
|
|
345
343
|
v: "venice",
|
package/src/task-profiles.js
CHANGED
|
@@ -66,7 +66,7 @@ export const TASK_PROFILES = {
|
|
|
66
66
|
id: "image",
|
|
67
67
|
label: "Image generation",
|
|
68
68
|
prompt:
|
|
69
|
-
"For raster image, cover, poster, illustration, photo, and logo-concept tasks, write a clear visual prompt, use generate_image when the optional GRS AI or Venice image key is available, save outputs under artifacts/images, and send the selected image to the canvas. If keys are missing, ask the user to run /
|
|
69
|
+
"For raster image, cover, poster, illustration, photo, and logo-concept tasks, write a clear visual prompt, use generate_image when the optional GRS AI or Venice image key is available, save outputs under artifacts/images, and send the selected image to the canvas. If keys are missing, ask the user to run /auxiliary grsai, aginti login grsai, or aginti login venice.",
|
|
70
70
|
tools: ["auxiliary:image_generation", "files", "canvas"],
|
|
71
71
|
},
|
|
72
72
|
aaps: {
|