@lazyingart/agintiflow 0.19.1 → 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 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 /auxilliary grsai or /auxiliary grsai
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 `/auxilliary` defaults to GRS AI/Nano Banana for image tools. See [docs/model-selection.md](docs/model-selection.md) and run `aginti models`.
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
 
@@ -22,7 +22,6 @@ printf '%s' "$VENICE_API_KEY" | aginti keys set venice --stdin
22
22
  Inside interactive chat, use either spelling:
23
23
 
24
24
  ```text
25
- /auxilliary grsai
26
25
  /auxiliary grsai
27
26
  ```
28
27
 
@@ -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 | `/auxilliary` | `grsai/nano-banana-2` | Image/media tools; Venice image models are optional. |
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
 
@@ -38,7 +38,7 @@ Interactive commands:
38
38
  /model deepseek/deepseek-v4-pro
39
39
  /spare openai/gpt-5.4 medium
40
40
  /wrapper codex gpt-5.5 medium
41
- /auxilliary model grsai/nano-banana-2
41
+ /auxiliary model grsai/nano-banana-2
42
42
  ```
43
43
 
44
44
  `/venice` is a shortcut for:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyingart/agintiflow",
3
- "version": "0.19.1",
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 (`/auxilliary`):** media/image tools. Default `grsai/nano-banana-2`; Venice image models are optional.
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
 
@@ -47,7 +47,7 @@ Interactive equivalents:
47
47
  /model deepseek/deepseek-v4-pro
48
48
  /spare openai/gpt-5.4 medium
49
49
  /wrapper codex gpt-5.5 medium
50
- /auxilliary model grsai/nano-banana-2
50
+ /auxiliary model grsai/nano-banana-2
51
51
  ```
52
52
 
53
53
  `/venice` keeps smart routing enabled and points both route and main roles at `venice/venice-uncensored-1-2`.
@@ -54,7 +54,7 @@ async function runCli(args, stdin = "") {
54
54
  }
55
55
 
56
56
  try {
57
- assert(normalizeAuthProvider("auxilliary") === "grsai", "auxilliary alias did not normalize to grsai");
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",
@@ -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 /auxilliary grsai, aginti login grsai, or aginti login venice.`
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."
@@ -60,7 +60,6 @@ const AUXILIARY_AUTH_PROVIDER = {
60
60
 
61
61
  const AUTH_ALIASES = {
62
62
  auxiliary: "grsai",
63
- auxilliary: "grsai",
64
63
  image: "grsai",
65
64
  imagegen: "grsai",
66
65
  grs: "grsai",
@@ -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 `/auxilliary grsai`.");
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`;
@@ -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 `/auxilliary grsai` in chat.",
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" || normalized === "auxilliary") return "GRSAI";
357
+ if (normalized === "grsai" || normalized === "auxiliary") return "GRSAI";
358
358
  return "DeepSeek";
359
359
  }
360
360
 
@@ -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",
@@ -582,7 +581,7 @@ function printHelp() {
582
581
  " Set spare model, e.g. /spare openai/gpt-5.4 medium.",
583
582
  " /wrapper [on|off|codex model reasoning]",
584
583
  " Configure optional external wrapper.",
585
- " /auxilliary [status|grsai|venice|model grsai/nano-banana-2|on|off|image]",
584
+ " /auxiliary [status|grsai|venice|model grsai/nano-banana-2|on|off|image]",
586
585
  " Manage optional auxiliary skills, including image generation.",
587
586
  " /new Start a fresh session on the next message.",
588
587
  " /resume <session-id> Continue a saved session.",
@@ -1588,7 +1587,7 @@ function printModelRoles(state) {
1588
1587
  "/model deepseek/deepseek-v4-pro",
1589
1588
  "/spare openai/gpt-5.4 medium",
1590
1589
  "/wrapper codex gpt-5.5 medium",
1591
- "/auxilliary model grsai/nano-banana-2",
1590
+ "/auxiliary model grsai/nano-banana-2",
1592
1591
  "",
1593
1592
  "Provider groups",
1594
1593
  ...groups,
@@ -1695,7 +1694,7 @@ async function handleCommand(line, state, packageDir) {
1695
1694
  );
1696
1695
  return true;
1697
1696
  }
1698
- if (command === "auxilliary" || command === "auxiliary") {
1697
+ if (command === "auxiliary") {
1699
1698
  const action = value || "status";
1700
1699
  if (action === "status") {
1701
1700
  const keys = providerKeyStatus(process.cwd());
@@ -1705,7 +1704,7 @@ async function handleCommand(line, state, packageDir) {
1705
1704
  `Image generation: ${keys.grsai ? "GRSAI key available" : "missing GRSAI key"}`,
1706
1705
  `Venice image: ${keys.venice ? "Venice key available" : "missing Venice key"}`,
1707
1706
  `Selected auxiliary: ${state.auxiliaryProvider || "grsai"}/${state.auxiliaryModel || "nano-banana-2"}`,
1708
- "Use `/auxilliary grsai` or `/auxilliary venice` to paste a key, `/auxilliary model grsai/nano-banana-2`, `/auxilliary image`, or `/auxilliary off`.",
1707
+ "Use `/auxiliary grsai` or `/auxiliary venice` to paste a key, `/auxiliary model grsai/nano-banana-2`, `/auxiliary image`, or `/auxiliary off`.",
1709
1708
  ].join("\n")
1710
1709
  );
1711
1710
  return true;
@@ -1737,7 +1736,7 @@ async function handleCommand(line, state, packageDir) {
1737
1736
  await promptAndSaveProviderKey(action === "venice" ? "venice" : "grsai", state);
1738
1737
  return true;
1739
1738
  }
1740
- printAgentMessage("Usage: /auxilliary [status|grsai|venice|model grsai/nano-banana-2|on|off|image]");
1739
+ printAgentMessage("Usage: /auxiliary [status|grsai|venice|model grsai/nano-banana-2|on|off|image]");
1741
1740
  return true;
1742
1741
  }
1743
1742
  if (command === "new") {
@@ -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 /auxilliary grsai, aginti login grsai, or aginti login venice.`
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 /auxilliary grsai, aginti login grsai, or aginti login venice.",
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: {
@@ -519,7 +519,7 @@ export function getModelRoleDefaults(overrides = {}) {
519
519
  auxiliary: {
520
520
  id: "auxiliary",
521
521
  label: "Auxiliary",
522
- command: "/auxilliary",
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",
@@ -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 /auxilliary grsai, aginti login grsai, or aginti login venice.",
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: {