@juspay/neurolink 11.22.2 → 11.22.3
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/CHANGELOG.md +2 -2
- package/package.json +1 -1
- package/dist/cli/commands/workflow.d.ts +0 -27
- package/dist/cli/commands/workflow.js +0 -216
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
## [11.22.
|
|
1
|
+
## [11.22.3](https://github.com/juspay/neurolink/compare/v11.22.2...v11.22.3) (2026-08-24)
|
|
2
2
|
|
|
3
3
|
### Bug Fixes
|
|
4
4
|
|
|
5
|
-
- **(
|
|
5
|
+
- **(scripts):** stop inferring the security scan's verdict from its log text ([11b30ad](https://github.com/juspay/neurolink/commit/11b30addfaefbd31b306d05066609897fbdb02c5))
|
|
6
6
|
|
|
7
7
|
## [11.2.3](https://github.com/juspay/neurolink/compare/v11.2.2...v11.2.3) (2026-08-19)
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juspay/neurolink",
|
|
3
|
-
"version": "11.22.
|
|
3
|
+
"version": "11.22.3",
|
|
4
4
|
"packageManager": "pnpm@10.15.1",
|
|
5
5
|
"description": "TypeScript AI SDK with 24+ LLM providers behind one consistent API. MCP-native (connect any MCP server), voice TTS/STT/realtime, RAG, agents, memory, context compaction. OpenAI · Anthropic · Gemini · Bedrock · Azure · Ollama · DeepSeek · NVIDIA NIM and more.",
|
|
6
6
|
"author": {
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow CLI Commands for NeuroLink
|
|
3
|
-
*
|
|
4
|
-
* Implements commands for workflow management and execution:
|
|
5
|
-
* - neurolink workflow list - List available predefined workflows
|
|
6
|
-
* - neurolink workflow info <name> - Show details of a workflow
|
|
7
|
-
* - neurolink workflow execute <name> <prompt> - Execute a workflow
|
|
8
|
-
*/
|
|
9
|
-
import type { CommandModule } from "yargs";
|
|
10
|
-
/**
|
|
11
|
-
* Workflow CLI command factory
|
|
12
|
-
*/
|
|
13
|
-
export declare class WorkflowCommandFactory {
|
|
14
|
-
static createWorkflowCommands(): CommandModule;
|
|
15
|
-
/**
|
|
16
|
-
* List all predefined workflows
|
|
17
|
-
*/
|
|
18
|
-
private static executeList;
|
|
19
|
-
/**
|
|
20
|
-
* Show details of a specific workflow
|
|
21
|
-
*/
|
|
22
|
-
private static executeInfo;
|
|
23
|
-
/**
|
|
24
|
-
* Execute a workflow
|
|
25
|
-
*/
|
|
26
|
-
private static executeWorkflow;
|
|
27
|
-
}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow CLI Commands for NeuroLink
|
|
3
|
-
*
|
|
4
|
-
* Implements commands for workflow management and execution:
|
|
5
|
-
* - neurolink workflow list - List available predefined workflows
|
|
6
|
-
* - neurolink workflow info <name> - Show details of a workflow
|
|
7
|
-
* - neurolink workflow execute <name> <prompt> - Execute a workflow
|
|
8
|
-
*/
|
|
9
|
-
import chalk from "chalk";
|
|
10
|
-
import ora from "ora";
|
|
11
|
-
/**
|
|
12
|
-
* All predefined workflow configs keyed by their id.
|
|
13
|
-
* Loaded lazily via dynamic import to avoid circular deps.
|
|
14
|
-
*/
|
|
15
|
-
async function loadPredefinedWorkflows() {
|
|
16
|
-
const [consensus, fallback, adaptive, multiJudge] = await Promise.all([
|
|
17
|
-
import("../../workflow/workflows/consensusWorkflow.js"),
|
|
18
|
-
import("../../workflow/workflows/fallbackWorkflow.js"),
|
|
19
|
-
import("../../workflow/workflows/adaptiveWorkflow.js"),
|
|
20
|
-
import("../../workflow/workflows/multiJudgeWorkflow.js"),
|
|
21
|
-
]);
|
|
22
|
-
const configs = [
|
|
23
|
-
consensus.CONSENSUS_3_WORKFLOW,
|
|
24
|
-
consensus.CONSENSUS_3_FAST_WORKFLOW,
|
|
25
|
-
fallback.FAST_FALLBACK_WORKFLOW,
|
|
26
|
-
fallback.AGGRESSIVE_FALLBACK_WORKFLOW,
|
|
27
|
-
adaptive.QUALITY_MAX_WORKFLOW,
|
|
28
|
-
adaptive.SPEED_FIRST_WORKFLOW,
|
|
29
|
-
adaptive.BALANCED_ADAPTIVE_WORKFLOW,
|
|
30
|
-
multiJudge.MULTI_JUDGE_5_WORKFLOW,
|
|
31
|
-
multiJudge.MULTI_JUDGE_3_WORKFLOW,
|
|
32
|
-
];
|
|
33
|
-
const map = {};
|
|
34
|
-
for (const cfg of configs) {
|
|
35
|
-
map[cfg.id] = cfg;
|
|
36
|
-
}
|
|
37
|
-
return map;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Workflow CLI command factory
|
|
41
|
-
*/
|
|
42
|
-
export class WorkflowCommandFactory {
|
|
43
|
-
static createWorkflowCommands() {
|
|
44
|
-
return {
|
|
45
|
-
command: "workflow <subcommand>",
|
|
46
|
-
describe: "Manage and execute AI workflows",
|
|
47
|
-
builder: (yargs) => {
|
|
48
|
-
return yargs
|
|
49
|
-
.command("list", "List available predefined workflows", (y) => y, async () => {
|
|
50
|
-
await WorkflowCommandFactory.executeList();
|
|
51
|
-
})
|
|
52
|
-
.command("info <name>", "Show details of a workflow", (y) => y.positional("name", {
|
|
53
|
-
type: "string",
|
|
54
|
-
description: "Workflow name/id",
|
|
55
|
-
demandOption: true,
|
|
56
|
-
}), async (argv) => {
|
|
57
|
-
await WorkflowCommandFactory.executeInfo(argv);
|
|
58
|
-
})
|
|
59
|
-
.command("execute <name> <prompt>", "Execute a workflow with a prompt", (y) => y
|
|
60
|
-
.positional("name", {
|
|
61
|
-
type: "string",
|
|
62
|
-
description: "Workflow name/id",
|
|
63
|
-
demandOption: true,
|
|
64
|
-
})
|
|
65
|
-
.positional("prompt", {
|
|
66
|
-
type: "string",
|
|
67
|
-
description: "Prompt to send to the workflow",
|
|
68
|
-
demandOption: true,
|
|
69
|
-
})
|
|
70
|
-
.option("provider", {
|
|
71
|
-
type: "string",
|
|
72
|
-
description: "Override AI provider",
|
|
73
|
-
})
|
|
74
|
-
.option("model", {
|
|
75
|
-
type: "string",
|
|
76
|
-
description: "Override model name",
|
|
77
|
-
})
|
|
78
|
-
.option("timeout", {
|
|
79
|
-
type: "number",
|
|
80
|
-
description: "Execution timeout in milliseconds",
|
|
81
|
-
})
|
|
82
|
-
.option("verbose", {
|
|
83
|
-
type: "boolean",
|
|
84
|
-
description: "Enable verbose output",
|
|
85
|
-
default: false,
|
|
86
|
-
}), async (argv) => {
|
|
87
|
-
await WorkflowCommandFactory.executeWorkflow(argv);
|
|
88
|
-
})
|
|
89
|
-
.demandCommand(1, "Please specify a workflow subcommand");
|
|
90
|
-
},
|
|
91
|
-
handler: () => { },
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* List all predefined workflows
|
|
96
|
-
*/
|
|
97
|
-
static async executeList() {
|
|
98
|
-
const workflows = await loadPredefinedWorkflows();
|
|
99
|
-
const configs = Object.values(workflows);
|
|
100
|
-
console.info(chalk.bold("\nAvailable Workflows:\n"));
|
|
101
|
-
for (const cfg of configs) {
|
|
102
|
-
const tags = cfg.tags?.join(", ") || "";
|
|
103
|
-
console.info(` ${chalk.cyan(cfg.id.padEnd(24))} ${chalk.white(cfg.name)}`);
|
|
104
|
-
console.info(` ${"".padEnd(24)} ${chalk.gray(cfg.description || "")}`);
|
|
105
|
-
if (tags) {
|
|
106
|
-
console.info(` ${"".padEnd(24)} ${chalk.gray(`Tags: ${tags}`)}`);
|
|
107
|
-
}
|
|
108
|
-
console.info();
|
|
109
|
-
}
|
|
110
|
-
console.info(chalk.gray(`Total: ${configs.length} workflows`));
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Show details of a specific workflow
|
|
114
|
-
*/
|
|
115
|
-
static async executeInfo(argv) {
|
|
116
|
-
const workflows = await loadPredefinedWorkflows();
|
|
117
|
-
const cfg = workflows[argv.name];
|
|
118
|
-
if (!cfg) {
|
|
119
|
-
console.error(chalk.red(`Workflow "${argv.name}" not found.`));
|
|
120
|
-
console.info(chalk.gray(`Available: ${Object.keys(workflows).join(", ")}`));
|
|
121
|
-
process.exitCode = 1;
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
console.info(chalk.bold(`\nWorkflow: ${cfg.name}\n`));
|
|
125
|
-
console.info(` ID: ${cfg.id}`);
|
|
126
|
-
console.info(` Type: ${cfg.type}`);
|
|
127
|
-
console.info(` Version: ${cfg.version || "n/a"}`);
|
|
128
|
-
console.info(` Description: ${cfg.description || "n/a"}`);
|
|
129
|
-
if (cfg.models && cfg.models.length > 0) {
|
|
130
|
-
console.info(`\n Models:`);
|
|
131
|
-
for (const m of cfg.models) {
|
|
132
|
-
console.info(` - ${chalk.cyan(m.label || m.model)} (${m.provider})`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (cfg.modelGroups && cfg.modelGroups.length > 0) {
|
|
136
|
-
console.info(`\n Model Groups:`);
|
|
137
|
-
for (const group of cfg.modelGroups) {
|
|
138
|
-
console.info(` ${chalk.cyan(group.id)}:`);
|
|
139
|
-
for (const m of group.models) {
|
|
140
|
-
console.info(` - ${m.label || m.model} (${m.provider})`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (cfg.judge) {
|
|
145
|
-
console.info(`\n Judge: ${cfg.judge.model} (${cfg.judge.provider})`);
|
|
146
|
-
if (cfg.judge.criteria) {
|
|
147
|
-
console.info(` Criteria: ${cfg.judge.criteria.join(", ")}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (cfg.execution) {
|
|
151
|
-
console.info(`\n Execution:`);
|
|
152
|
-
if (cfg.execution.timeout) {
|
|
153
|
-
console.info(` Timeout: ${cfg.execution.timeout}ms`);
|
|
154
|
-
}
|
|
155
|
-
if (cfg.execution.parallelism) {
|
|
156
|
-
console.info(` Parallelism: ${cfg.execution.parallelism}`);
|
|
157
|
-
}
|
|
158
|
-
if (cfg.execution.minResponses) {
|
|
159
|
-
console.info(` Min Responses: ${cfg.execution.minResponses}`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (cfg.tags && cfg.tags.length > 0) {
|
|
163
|
-
console.info(`\n Tags: ${cfg.tags.join(", ")}`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Execute a workflow
|
|
168
|
-
*/
|
|
169
|
-
static async executeWorkflow(argv) {
|
|
170
|
-
const workflows = await loadPredefinedWorkflows();
|
|
171
|
-
let cfg = workflows[argv.name];
|
|
172
|
-
if (!cfg) {
|
|
173
|
-
console.error(chalk.red(`Workflow "${argv.name}" not found.`));
|
|
174
|
-
console.info(chalk.gray(`Available: ${Object.keys(workflows).join(", ")}`));
|
|
175
|
-
process.exitCode = 1;
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
// Apply provider/model overrides if specified
|
|
179
|
-
if (argv.provider || argv.model) {
|
|
180
|
-
cfg = {
|
|
181
|
-
...cfg,
|
|
182
|
-
models: cfg.models?.map((m) => ({
|
|
183
|
-
...m,
|
|
184
|
-
provider: argv.provider || m.provider,
|
|
185
|
-
model: argv.model || m.model,
|
|
186
|
-
})),
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
const spinner = ora("Executing workflow...").start();
|
|
190
|
-
try {
|
|
191
|
-
const { runWorkflow } = await import("../../workflow/core/workflowRunner.js");
|
|
192
|
-
const result = await runWorkflow(cfg, {
|
|
193
|
-
prompt: argv.prompt,
|
|
194
|
-
timeout: argv.timeout,
|
|
195
|
-
verbose: argv.verbose,
|
|
196
|
-
});
|
|
197
|
-
spinner.stop();
|
|
198
|
-
if (result.content) {
|
|
199
|
-
console.info(result.content);
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
console.info(chalk.yellow("Workflow completed but produced no content."));
|
|
203
|
-
if (result.reasoning) {
|
|
204
|
-
console.info(chalk.gray(`Reasoning: ${result.reasoning}`));
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
spinner.stop();
|
|
210
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
211
|
-
console.error(chalk.red(`Workflow execution failed: ${msg}`));
|
|
212
|
-
process.exitCode = 1;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=workflow.js.map
|