@claude-flow/cli 3.5.69 → 3.5.71
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/dist/src/commands/autopilot.js +1 -1
- package/dist/src/commands/autopilot.js.map +1 -1
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/guidance.d.ts.map +1 -1
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +4 -7
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +0 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/neural.d.ts.map +1 -1
- package/dist/src/commands/neural.js +1 -0
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/plugins.d.ts.map +1 -1
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/providers.d.ts.map +1 -1
- package/dist/src/commands/providers.js +228 -96
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/security.js +1 -1
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +35 -1
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +81 -0
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +29 -0
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/autopilot-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/autopilot-tools.js +4 -0
- package/dist/src/mcp-tools/autopilot-tools.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +146 -0
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +116 -0
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +53 -0
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +31 -0
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +61 -0
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +26 -0
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +96 -0
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.js +21 -0
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +56 -0
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +176 -0
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +18 -2
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +51 -0
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +11 -0
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.js +31 -0
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +36 -0
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +29 -0
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +30 -0
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +6 -0
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +33 -0
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +31 -0
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +51 -0
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.js +61 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +82 -0
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +6 -1
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +51 -1
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { mkdirSync, writeFileSync, existsSync, readFileSync, statSync, unlinkSync, readdirSync } from 'fs';
|
|
6
6
|
import { dirname, join, resolve } from 'path';
|
|
7
7
|
import { getProjectCwd } from './types.js';
|
|
8
|
+
import { validateIdentifier, validateText, validatePath } from './validate-input.js';
|
|
8
9
|
// Real vector search functions - lazy loaded to avoid circular imports
|
|
9
10
|
let searchEntriesFn = null;
|
|
10
11
|
async function getRealSearchFunction() {
|
|
@@ -578,6 +579,11 @@ export const hooksPreEdit = {
|
|
|
578
579
|
handler: async (params) => {
|
|
579
580
|
const filePath = params.filePath;
|
|
580
581
|
const operation = params.operation || 'update';
|
|
582
|
+
{
|
|
583
|
+
const v = validatePath(filePath, 'filePath');
|
|
584
|
+
if (!v.valid)
|
|
585
|
+
return { success: false, error: v.error };
|
|
586
|
+
}
|
|
581
587
|
const suggestedAgents = suggestAgentsForFile(filePath);
|
|
582
588
|
const ext = getFileExtension(filePath);
|
|
583
589
|
return {
|
|
@@ -616,6 +622,16 @@ export const hooksPostEdit = {
|
|
|
616
622
|
const filePath = params.filePath;
|
|
617
623
|
const success = params.success !== false;
|
|
618
624
|
const agent = params.agent;
|
|
625
|
+
{
|
|
626
|
+
const v = validatePath(filePath, 'filePath');
|
|
627
|
+
if (!v.valid)
|
|
628
|
+
return { success: false, error: v.error };
|
|
629
|
+
}
|
|
630
|
+
if (agent) {
|
|
631
|
+
const v = validateIdentifier(agent, 'agent');
|
|
632
|
+
if (!v.valid)
|
|
633
|
+
return { success: false, error: v.error };
|
|
634
|
+
}
|
|
619
635
|
// Wire recordFeedback through bridge (issue #1209)
|
|
620
636
|
let feedbackResult = null;
|
|
621
637
|
try {
|
|
@@ -656,6 +672,11 @@ export const hooksPreCommand = {
|
|
|
656
672
|
},
|
|
657
673
|
handler: async (params) => {
|
|
658
674
|
const command = params.command;
|
|
675
|
+
{
|
|
676
|
+
const v = validateText(command, 'command');
|
|
677
|
+
if (!v.valid)
|
|
678
|
+
return { success: false, error: v.error };
|
|
679
|
+
}
|
|
659
680
|
const assessment = assessCommandRisk(command);
|
|
660
681
|
const riskLevel = assessment.level >= 0.8 ? 'critical'
|
|
661
682
|
: assessment.level >= 0.6 ? 'high'
|
|
@@ -692,6 +713,11 @@ export const hooksPostCommand = {
|
|
|
692
713
|
const command = params.command;
|
|
693
714
|
const exitCode = params.exitCode || 0;
|
|
694
715
|
const success = exitCode === 0;
|
|
716
|
+
{
|
|
717
|
+
const v = validateText(command, 'command');
|
|
718
|
+
if (!v.valid)
|
|
719
|
+
return { success: false, error: v.error };
|
|
720
|
+
}
|
|
695
721
|
// Persist command outcome via AgentDB
|
|
696
722
|
let _storedIn = 'none';
|
|
697
723
|
try {
|
|
@@ -744,6 +770,16 @@ export const hooksRoute = {
|
|
|
744
770
|
const task = params.task;
|
|
745
771
|
const context = params.context;
|
|
746
772
|
const useSemanticRouter = params.useSemanticRouter !== false;
|
|
773
|
+
{
|
|
774
|
+
const v = validateText(task, 'task');
|
|
775
|
+
if (!v.valid)
|
|
776
|
+
return { success: false, error: v.error };
|
|
777
|
+
}
|
|
778
|
+
if (context) {
|
|
779
|
+
const v = validateText(context, 'context');
|
|
780
|
+
if (!v.valid)
|
|
781
|
+
return { success: false, error: v.error };
|
|
782
|
+
}
|
|
747
783
|
// Phase 5: Try AgentDB's SemanticRouter / LearningSystem first
|
|
748
784
|
if (useSemanticRouter) {
|
|
749
785
|
try {
|
|
@@ -1011,6 +1047,21 @@ export const hooksPreTask = {
|
|
|
1011
1047
|
const taskId = params.taskId;
|
|
1012
1048
|
const description = params.description;
|
|
1013
1049
|
const filePath = params.filePath;
|
|
1050
|
+
{
|
|
1051
|
+
const v = validateIdentifier(taskId, 'taskId');
|
|
1052
|
+
if (!v.valid)
|
|
1053
|
+
return { success: false, error: v.error };
|
|
1054
|
+
}
|
|
1055
|
+
{
|
|
1056
|
+
const v = validateText(description, 'description');
|
|
1057
|
+
if (!v.valid)
|
|
1058
|
+
return { success: false, error: v.error };
|
|
1059
|
+
}
|
|
1060
|
+
if (filePath) {
|
|
1061
|
+
const v = validatePath(filePath, 'filePath');
|
|
1062
|
+
if (!v.valid)
|
|
1063
|
+
return { success: false, error: v.error };
|
|
1064
|
+
}
|
|
1014
1065
|
const suggestion = suggestAgentsForTask(description);
|
|
1015
1066
|
// Determine complexity
|
|
1016
1067
|
const descLower = description.toLowerCase();
|
|
@@ -1099,6 +1150,16 @@ export const hooksPostTask = {
|
|
|
1099
1150
|
const agent = params.agent;
|
|
1100
1151
|
const quality = params.quality || (success ? 0.85 : 0.3);
|
|
1101
1152
|
const startTime = Date.now();
|
|
1153
|
+
{
|
|
1154
|
+
const v = validateIdentifier(taskId, 'taskId');
|
|
1155
|
+
if (!v.valid)
|
|
1156
|
+
return { success: false, error: v.error };
|
|
1157
|
+
}
|
|
1158
|
+
if (agent) {
|
|
1159
|
+
const v = validateIdentifier(agent, 'agent');
|
|
1160
|
+
if (!v.valid)
|
|
1161
|
+
return { success: false, error: v.error };
|
|
1162
|
+
}
|
|
1102
1163
|
// Phase 3: Wire recordFeedback through bridge → LearningSystem + ReasoningBank
|
|
1103
1164
|
let feedbackResult = null;
|
|
1104
1165
|
try {
|
|
@@ -1234,6 +1295,11 @@ export const hooksExplain = {
|
|
|
1234
1295
|
},
|
|
1235
1296
|
handler: async (params) => {
|
|
1236
1297
|
const task = params.task;
|
|
1298
|
+
{
|
|
1299
|
+
const v = validateText(task, 'task');
|
|
1300
|
+
if (!v.valid)
|
|
1301
|
+
return { success: false, error: v.error };
|
|
1302
|
+
}
|
|
1237
1303
|
const suggestion = suggestAgentsForTask(task);
|
|
1238
1304
|
const taskLower = task.toLowerCase();
|
|
1239
1305
|
// Determine matched patterns
|
|
@@ -1469,6 +1535,16 @@ export const hooksTransfer = {
|
|
|
1469
1535
|
const sourcePath = params.sourcePath;
|
|
1470
1536
|
const minConfidence = params.minConfidence || 0.7;
|
|
1471
1537
|
const filter = params.filter;
|
|
1538
|
+
{
|
|
1539
|
+
const v = validatePath(sourcePath, 'sourcePath');
|
|
1540
|
+
if (!v.valid)
|
|
1541
|
+
return { success: false, error: v.error };
|
|
1542
|
+
}
|
|
1543
|
+
if (filter) {
|
|
1544
|
+
const v = validateIdentifier(filter, 'filter');
|
|
1545
|
+
if (!v.valid)
|
|
1546
|
+
return { success: false, error: v.error };
|
|
1547
|
+
}
|
|
1472
1548
|
// Try to load patterns from source project's memory store
|
|
1473
1549
|
const sourceMemoryPath = join(resolve(sourcePath), MEMORY_DIR, MEMORY_FILE);
|
|
1474
1550
|
let sourceStore = { entries: {}, version: '3.0.0' };
|
|
@@ -1540,6 +1616,11 @@ export const hooksSessionStart = {
|
|
|
1540
1616
|
const sessionId = params.sessionId || `session-${Date.now()}`;
|
|
1541
1617
|
const restoreLatest = params.restoreLatest;
|
|
1542
1618
|
const shouldStartDaemon = params.startDaemon === true;
|
|
1619
|
+
if (params.sessionId) {
|
|
1620
|
+
const v = validateIdentifier(params.sessionId, 'sessionId');
|
|
1621
|
+
if (!v.valid)
|
|
1622
|
+
return { success: false, error: v.error };
|
|
1623
|
+
}
|
|
1543
1624
|
// Auto-regenerate statusline if outdated (fixes older installs)
|
|
1544
1625
|
// Checks for the old fake heuristic: "Math.floor(sizeKB / 2)"
|
|
1545
1626
|
try {
|
|
@@ -1765,6 +1846,11 @@ export const hooksSessionRestore = {
|
|
|
1765
1846
|
const requestedId = params.sessionId || 'latest';
|
|
1766
1847
|
const restoreAgents = params.restoreAgents !== false;
|
|
1767
1848
|
const restoreTasks = params.restoreTasks !== false;
|
|
1849
|
+
if (params.sessionId) {
|
|
1850
|
+
const v = validateIdentifier(params.sessionId, 'sessionId');
|
|
1851
|
+
if (!v.valid)
|
|
1852
|
+
return { success: false, error: v.error };
|
|
1853
|
+
}
|
|
1768
1854
|
const originalSessionId = requestedId === 'latest' ? `session-${Date.now() - 86400000}` : requestedId;
|
|
1769
1855
|
const newSessionId = `session-${Date.now()}`;
|
|
1770
1856
|
// Get real memory entry count
|
|
@@ -1804,6 +1890,16 @@ export const hooksNotify = {
|
|
|
1804
1890
|
const message = params.message;
|
|
1805
1891
|
const target = params.target || 'all';
|
|
1806
1892
|
const priority = params.priority || 'normal';
|
|
1893
|
+
{
|
|
1894
|
+
const v = validateText(message, 'message');
|
|
1895
|
+
if (!v.valid)
|
|
1896
|
+
return { success: false, error: v.error };
|
|
1897
|
+
}
|
|
1898
|
+
if (params.target) {
|
|
1899
|
+
const v = validateIdentifier(target, 'target');
|
|
1900
|
+
if (!v.valid)
|
|
1901
|
+
return { success: false, error: v.error };
|
|
1902
|
+
}
|
|
1807
1903
|
return {
|
|
1808
1904
|
notificationId: `notify-${Date.now()}`,
|
|
1809
1905
|
message,
|
|
@@ -2036,6 +2132,16 @@ export const hooksTrajectoryStart = {
|
|
|
2036
2132
|
handler: async (params) => {
|
|
2037
2133
|
const task = params.task;
|
|
2038
2134
|
const agent = params.agent || 'coder';
|
|
2135
|
+
{
|
|
2136
|
+
const v = validateText(task, 'task');
|
|
2137
|
+
if (!v.valid)
|
|
2138
|
+
return { success: false, error: v.error };
|
|
2139
|
+
}
|
|
2140
|
+
if (params.agent) {
|
|
2141
|
+
const v = validateIdentifier(params.agent, 'agent');
|
|
2142
|
+
if (!v.valid)
|
|
2143
|
+
return { success: false, error: v.error };
|
|
2144
|
+
}
|
|
2039
2145
|
const trajectoryId = `traj-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
2040
2146
|
const startedAt = new Date().toISOString();
|
|
2041
2147
|
// Create real trajectory entry in memory
|
|
@@ -2078,6 +2184,16 @@ export const hooksTrajectoryStep = {
|
|
|
2078
2184
|
const quality = params.quality || 0.85;
|
|
2079
2185
|
const timestamp = new Date().toISOString();
|
|
2080
2186
|
const stepId = `step-${Date.now()}`;
|
|
2187
|
+
{
|
|
2188
|
+
const v = validateIdentifier(trajectoryId, 'trajectoryId');
|
|
2189
|
+
if (!v.valid)
|
|
2190
|
+
return { success: false, error: v.error };
|
|
2191
|
+
}
|
|
2192
|
+
{
|
|
2193
|
+
const v = validateText(action, 'action');
|
|
2194
|
+
if (!v.valid)
|
|
2195
|
+
return { success: false, error: v.error };
|
|
2196
|
+
}
|
|
2081
2197
|
// Add step to real trajectory if it exists
|
|
2082
2198
|
const trajectory = activeTrajectories.get(trajectoryId);
|
|
2083
2199
|
if (trajectory) {
|
|
@@ -2115,6 +2231,11 @@ export const hooksTrajectoryEnd = {
|
|
|
2115
2231
|
},
|
|
2116
2232
|
handler: async (params) => {
|
|
2117
2233
|
const trajectoryId = params.trajectoryId;
|
|
2234
|
+
{
|
|
2235
|
+
const v = validateIdentifier(trajectoryId, 'trajectoryId');
|
|
2236
|
+
if (!v.valid)
|
|
2237
|
+
return { success: false, error: v.error };
|
|
2238
|
+
}
|
|
2118
2239
|
const success = params.success !== false;
|
|
2119
2240
|
const feedback = params.feedback;
|
|
2120
2241
|
const endedAt = new Date().toISOString();
|
|
@@ -2253,6 +2374,16 @@ export const hooksPatternStore = {
|
|
|
2253
2374
|
const confidence = params.confidence || 0.8;
|
|
2254
2375
|
const metadata = params.metadata;
|
|
2255
2376
|
const timestamp = new Date().toISOString();
|
|
2377
|
+
{
|
|
2378
|
+
const v = validateText(pattern, 'pattern');
|
|
2379
|
+
if (!v.valid)
|
|
2380
|
+
return { success: false, error: v.error };
|
|
2381
|
+
}
|
|
2382
|
+
if (params.type) {
|
|
2383
|
+
const v = validateIdentifier(params.type, 'type');
|
|
2384
|
+
if (!v.valid)
|
|
2385
|
+
return { success: false, error: v.error };
|
|
2386
|
+
}
|
|
2256
2387
|
const patternId = `pattern-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
2257
2388
|
// Phase 3: Try ReasoningBank via bridge first
|
|
2258
2389
|
let reasoningResult = null;
|
|
@@ -2319,6 +2450,16 @@ export const hooksPatternSearch = {
|
|
|
2319
2450
|
const topK = params.topK || 5;
|
|
2320
2451
|
const minConfidence = params.minConfidence || 0.3;
|
|
2321
2452
|
const namespace = params.namespace || 'pattern';
|
|
2453
|
+
{
|
|
2454
|
+
const v = validateText(query, 'query');
|
|
2455
|
+
if (!v.valid)
|
|
2456
|
+
return { success: false, error: v.error };
|
|
2457
|
+
}
|
|
2458
|
+
if (params.namespace) {
|
|
2459
|
+
const v = validateIdentifier(params.namespace, 'namespace');
|
|
2460
|
+
if (!v.valid)
|
|
2461
|
+
return { success: false, error: v.error };
|
|
2462
|
+
}
|
|
2322
2463
|
// Phase 3: Try ReasoningBank search via bridge first
|
|
2323
2464
|
try {
|
|
2324
2465
|
const bridge = await import('../memory/memory-bridge.js');
|
|
@@ -2654,6 +2795,11 @@ export const hooksIntelligenceAttention = {
|
|
|
2654
2795
|
const mode = params.mode || 'flash';
|
|
2655
2796
|
const topK = params.topK || 5;
|
|
2656
2797
|
const startTime = performance.now();
|
|
2798
|
+
{
|
|
2799
|
+
const v = validateText(query, 'query');
|
|
2800
|
+
if (!v.valid)
|
|
2801
|
+
return { success: false, error: v.error };
|
|
2802
|
+
}
|
|
2657
2803
|
let implementation = 'placeholder';
|
|
2658
2804
|
const results = [];
|
|
2659
2805
|
if (mode === 'moe') {
|
|
@@ -3017,6 +3163,11 @@ export const hooksWorkerDispatch = {
|
|
|
3017
3163
|
const context = params.context || 'default';
|
|
3018
3164
|
const priority = params.priority || WORKER_CONFIGS[trigger]?.priority || 'normal';
|
|
3019
3165
|
const background = params.background !== false;
|
|
3166
|
+
if (params.context) {
|
|
3167
|
+
const v = validateText(params.context, 'context');
|
|
3168
|
+
if (!v.valid)
|
|
3169
|
+
return { success: false, error: v.error };
|
|
3170
|
+
}
|
|
3020
3171
|
if (!WORKER_CONFIGS[trigger]) {
|
|
3021
3172
|
return {
|
|
3022
3173
|
success: false,
|
|
@@ -3092,6 +3243,11 @@ export const hooksWorkerStatus = {
|
|
|
3092
3243
|
handler: async (params) => {
|
|
3093
3244
|
const workerId = params.workerId;
|
|
3094
3245
|
const includeCompleted = params.includeCompleted !== false;
|
|
3246
|
+
if (workerId) {
|
|
3247
|
+
const v = validateIdentifier(workerId, 'workerId');
|
|
3248
|
+
if (!v.valid)
|
|
3249
|
+
return { success: false, error: v.error };
|
|
3250
|
+
}
|
|
3095
3251
|
if (workerId) {
|
|
3096
3252
|
const worker = activeWorkers.get(workerId);
|
|
3097
3253
|
if (!worker) {
|
|
@@ -3147,6 +3303,11 @@ export const hooksWorkerDetect = {
|
|
|
3147
3303
|
const prompt = params.prompt;
|
|
3148
3304
|
const autoDispatch = params.autoDispatch;
|
|
3149
3305
|
const minConfidence = params.minConfidence || 0.5;
|
|
3306
|
+
{
|
|
3307
|
+
const v = validateText(prompt, 'prompt');
|
|
3308
|
+
if (!v.valid)
|
|
3309
|
+
return { success: false, error: v.error };
|
|
3310
|
+
}
|
|
3150
3311
|
const detection = detectWorkerTriggers(prompt);
|
|
3151
3312
|
const result = {
|
|
3152
3313
|
prompt: prompt.slice(0, 200) + (prompt.length > 200 ? '...' : ''),
|
|
@@ -3219,6 +3380,11 @@ export const hooksModelRoute = {
|
|
|
3219
3380
|
},
|
|
3220
3381
|
handler: async (params) => {
|
|
3221
3382
|
const task = params.task;
|
|
3383
|
+
{
|
|
3384
|
+
const v = validateText(task, 'task');
|
|
3385
|
+
if (!v.valid)
|
|
3386
|
+
return { success: false, error: v.error };
|
|
3387
|
+
}
|
|
3222
3388
|
const router = await getModelRouterInstance();
|
|
3223
3389
|
if (!router) {
|
|
3224
3390
|
// Fallback to simple heuristic
|
|
@@ -3262,6 +3428,11 @@ export const hooksModelOutcome = {
|
|
|
3262
3428
|
const task = params.task;
|
|
3263
3429
|
const model = params.model;
|
|
3264
3430
|
const outcome = params.outcome;
|
|
3431
|
+
{
|
|
3432
|
+
const v = validateText(task, 'task');
|
|
3433
|
+
if (!v.valid)
|
|
3434
|
+
return { success: false, error: v.error };
|
|
3435
|
+
}
|
|
3265
3436
|
const router = await getModelRouterInstance();
|
|
3266
3437
|
if (router) {
|
|
3267
3438
|
router.recordOutcome(task, model, outcome);
|
|
@@ -3325,6 +3496,11 @@ export const hooksWorkerCancel = {
|
|
|
3325
3496
|
},
|
|
3326
3497
|
handler: async (params) => {
|
|
3327
3498
|
const workerId = params.workerId;
|
|
3499
|
+
{
|
|
3500
|
+
const v = validateIdentifier(workerId, 'workerId');
|
|
3501
|
+
if (!v.valid)
|
|
3502
|
+
return { success: false, error: v.error };
|
|
3503
|
+
}
|
|
3328
3504
|
const worker = activeWorkers.get(workerId);
|
|
3329
3505
|
if (!worker) {
|
|
3330
3506
|
return {
|