@lazyingart/agintiflow 0.19.0 → 0.19.1

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.
@@ -33,6 +33,7 @@ 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
@@ -40,6 +41,15 @@ Interactive commands:
40
41
  /auxilliary 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.0",
3
+ "version": "0.19.1",
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",
@@ -42,6 +42,7 @@ 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
@@ -49,6 +50,8 @@ Interactive equivalents:
49
50
  /auxilliary 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 |
@@ -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
@@ -67,6 +67,7 @@ const SLASH_COMMANDS = [
67
67
  "/web-search",
68
68
  "/scouts",
69
69
  "/models",
70
+ "/venice",
70
71
  "/route",
71
72
  "/main",
72
73
  "/spare",
@@ -573,6 +574,7 @@ function printHelp() {
573
574
  " /instructions Show AGINTI.md project instructions status.",
574
575
  " /memory Alias for /instructions.",
575
576
  " /models Show route/main/spare/wrapper/auxiliary model roles.",
577
+ " /venice Shortcut: use Venice Uncensored 1.2 for route and main roles.",
576
578
  " /route <mode|provider/model>",
577
579
  " Set routing mode or fast route model, e.g. /route deepseek/deepseek-v4-flash.",
578
580
  " /model <provider/model> Set the active/main model, e.g. /model deepseek/deepseek-v4-pro.",
@@ -1825,6 +1827,21 @@ async function handleCommand(line, state, packageDir) {
1825
1827
  printModelRoles(state);
1826
1828
  return true;
1827
1829
  }
1830
+ if (command === "venice") {
1831
+ state.routingMode = "smart";
1832
+ state.provider = "deepseek";
1833
+ state.model = "";
1834
+ state.routeProvider = "venice";
1835
+ state.routeModel = "venice-uncensored-1-2";
1836
+ state.mainProvider = "venice";
1837
+ state.mainModel = "venice-uncensored-1-2";
1838
+ const keys = providerKeyStatus(process.cwd());
1839
+ printSystemLine("routing=smart route=venice/venice-uncensored-1-2 main=venice/venice-uncensored-1-2");
1840
+ if (!keys.venice) {
1841
+ printAgentMessage("Venice model roles are selected, but no Venice key is configured. Run `/auth venice` to save one.");
1842
+ }
1843
+ return true;
1844
+ }
1828
1845
  if (command === "route") {
1829
1846
  if (!value) {
1830
1847
  printAgentMessage(