vigthoria-cli 1.11.25 → 1.11.27
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/commands/chat.js +6 -9
- package/dist/utils/api.js +103 -51
- package/dist/utils/requestIntent.js +8 -3
- package/dist/utils/v3-workspace-path.js +1 -1
- package/package.json +1 -1
package/dist/commands/chat.js
CHANGED
|
@@ -23,26 +23,23 @@ import { runTemplateInstantPath } from '../utils/templateInstantPath.js';
|
|
|
23
23
|
const DEFAULT_V3_AGENT_TIMEOUT_MS = (() => {
|
|
24
24
|
const rawValue = process.env.VIGTHORIA_AGENT_TIMEOUT_MS || process.env.V3_AGENT_TIMEOUT_MS;
|
|
25
25
|
if (!rawValue) {
|
|
26
|
-
return
|
|
26
|
+
return 0;
|
|
27
27
|
}
|
|
28
28
|
const parsed = Number.parseInt(rawValue, 10);
|
|
29
|
-
return Number.isFinite(parsed) && parsed
|
|
29
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
|
|
30
30
|
})();
|
|
31
31
|
const DEFAULT_V3_AGENT_IDLE_TIMEOUT_MS = (() => {
|
|
32
32
|
const rawValue = process.env.VIGTHORIA_AGENT_IDLE_TIMEOUT_MS || process.env.V3_AGENT_IDLE_TIMEOUT_MS;
|
|
33
33
|
if (!rawValue) {
|
|
34
|
-
return
|
|
34
|
+
return 0;
|
|
35
35
|
}
|
|
36
36
|
const parsed = Number.parseInt(rawValue, 10);
|
|
37
|
-
return Number.isFinite(parsed) && parsed
|
|
37
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
|
|
38
38
|
})();
|
|
39
39
|
const DEFAULT_V3_AGENT_SOFT_TIMEOUT_MS = (() => {
|
|
40
|
-
const rawValue = process.env.VIGTHORIA_AGENT_SOFT_TIMEOUT_MS || process.env.V3_AGENT_SOFT_TIMEOUT_MS;
|
|
41
|
-
if (!rawValue) {
|
|
42
|
-
return 180000;
|
|
43
|
-
}
|
|
40
|
+
const rawValue = process.env.VIGTHORIA_AGENT_SOFT_TIMEOUT_MS || process.env.V3_AGENT_SOFT_TIMEOUT_MS || '300000';
|
|
44
41
|
const parsed = Number.parseInt(rawValue, 10);
|
|
45
|
-
return Number.isFinite(parsed) && parsed > 0 ? parsed :
|
|
42
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 300000;
|
|
46
43
|
})();
|
|
47
44
|
export class ChatCommand {
|
|
48
45
|
config;
|
package/dist/utils/api.js
CHANGED
|
@@ -259,15 +259,18 @@ export function propagateError(err) {
|
|
|
259
259
|
const DEFAULT_V3_AGENT_TIMEOUT_MS = (() => {
|
|
260
260
|
const rawValue = process.env.VIGTHORIA_AGENT_TIMEOUT_MS || process.env.V3_AGENT_TIMEOUT_MS;
|
|
261
261
|
if (!rawValue) {
|
|
262
|
-
return
|
|
262
|
+
return 0;
|
|
263
263
|
}
|
|
264
264
|
const parsed = Number.parseInt(rawValue, 10);
|
|
265
|
-
return Number.isFinite(parsed) && parsed
|
|
265
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
|
|
266
266
|
})();
|
|
267
267
|
const DEFAULT_V3_AGENT_IDLE_TIMEOUT_MS = (() => {
|
|
268
|
-
const rawValue = process.env.VIGTHORIA_AGENT_IDLE_TIMEOUT_MS || process.env.V3_AGENT_IDLE_TIMEOUT_MS
|
|
268
|
+
const rawValue = process.env.VIGTHORIA_AGENT_IDLE_TIMEOUT_MS || process.env.V3_AGENT_IDLE_TIMEOUT_MS;
|
|
269
|
+
if (!rawValue) {
|
|
270
|
+
return 0;
|
|
271
|
+
}
|
|
269
272
|
const parsed = Number.parseInt(rawValue, 10);
|
|
270
|
-
return Number.isFinite(parsed) && parsed
|
|
273
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : 0;
|
|
271
274
|
})();
|
|
272
275
|
const DEFAULT_OPERATOR_TIMEOUT_MS = (() => {
|
|
273
276
|
const rawValue = process.env.VIGTHORIA_OPERATOR_TIMEOUT_MS || process.env.OPERATOR_TIMEOUT_MS;
|
|
@@ -2851,9 +2854,30 @@ menu {
|
|
|
2851
2854
|
return { success: true, output: matches.slice(0, 100).join('\n') || '(no matches)' };
|
|
2852
2855
|
}
|
|
2853
2856
|
if (name === 'syntax_check') {
|
|
2854
|
-
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
|
+
if (!fs.existsSync(target.absolutePath)) {
|
|
2858
|
+
return {
|
|
2859
|
+
success: false,
|
|
2860
|
+
output: '',
|
|
2861
|
+
error: `File not found: ${target.relativePath}. Write the file before running syntax_check.`,
|
|
2862
|
+
};
|
|
2863
|
+
}
|
|
2864
|
+
const ext = path.extname(target.absolutePath).toLowerCase();
|
|
2865
|
+
if (ext === '.json') {
|
|
2866
|
+
JSON.parse(fs.readFileSync(target.absolutePath, 'utf8'));
|
|
2867
|
+
return { success: true, output: `Syntax check passed: ${target.relativePath}` };
|
|
2868
|
+
}
|
|
2869
|
+
if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {
|
|
2870
|
+
const { execSync } = await import('child_process');
|
|
2871
|
+
try {
|
|
2872
|
+
execSync(`node --check "${target.absolutePath}"`, { stdio: 'pipe' });
|
|
2873
|
+
return { success: true, output: `Syntax check passed: ${target.relativePath}` };
|
|
2874
|
+
}
|
|
2875
|
+
catch (error) {
|
|
2876
|
+
const stderr = error?.stderr?.toString?.() || error?.message || String(error);
|
|
2877
|
+
return { success: false, output: '', error: stderr.trim() || `Syntax check failed: ${target.relativePath}` };
|
|
2878
|
+
}
|
|
2879
|
+
}
|
|
2880
|
+
fs.readFileSync(target.absolutePath, 'utf8');
|
|
2857
2881
|
return { success: true, output: `Syntax check passed: ${target.relativePath}` };
|
|
2858
2882
|
}
|
|
2859
2883
|
if (name === 'run_command') {
|
|
@@ -3563,48 +3587,71 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
3563
3587
|
this.activeV3StreamContext = context;
|
|
3564
3588
|
context.__v3StreamedFiles = streamedFiles;
|
|
3565
3589
|
const idleTimeoutMs = (() => {
|
|
3566
|
-
const base = context.agentIdleTimeoutMs
|
|
3567
|
-
if (
|
|
3568
|
-
|
|
3569
|
-
const extended = Number.parseInt(raw, 10);
|
|
3570
|
-
return Math.max(base, Number.isFinite(extended) && extended > 0 ? extended : 300000);
|
|
3590
|
+
const base = context.agentIdleTimeoutMs ?? DEFAULT_V3_AGENT_IDLE_TIMEOUT_MS;
|
|
3591
|
+
if (base <= 0) {
|
|
3592
|
+
return 0;
|
|
3571
3593
|
}
|
|
3572
|
-
|
|
3594
|
+
if (!isPlannerBuildTask(String(context.agentTaskType || ''), String(context.rawPrompt || ''))) {
|
|
3595
|
+
return base;
|
|
3596
|
+
}
|
|
3597
|
+
const raw = process.env.VIGTHORIA_AGENT_PLANNER_IDLE_TIMEOUT_MS || process.env.V3_AGENT_PLANNER_IDLE_TIMEOUT_MS;
|
|
3598
|
+
if (!raw) {
|
|
3599
|
+
return base;
|
|
3600
|
+
}
|
|
3601
|
+
const extended = Number.parseInt(raw, 10);
|
|
3602
|
+
return Number.isFinite(extended) && extended > 0 ? Math.max(base, extended) : base;
|
|
3573
3603
|
})();
|
|
3574
3604
|
try {
|
|
3575
3605
|
while (true) {
|
|
3576
3606
|
let chunk;
|
|
3577
3607
|
try {
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
|
|
3586
|
-
|
|
3587
|
-
|
|
3588
|
-
|
|
3589
|
-
if (result !== timeoutSentinel) {
|
|
3590
|
-
chunk = result;
|
|
3591
|
-
break;
|
|
3592
|
-
}
|
|
3593
|
-
if (this.pendingV3ClientToolTasks.size > 0) {
|
|
3594
|
-
continue;
|
|
3595
|
-
}
|
|
3596
|
-
if (this.hasAgentWorkspaceOutput(context)) {
|
|
3597
|
-
const stalledError = new Error('V3 agent stream stalled after writing workspace output');
|
|
3598
|
-
stalledError.name = 'AbortError';
|
|
3599
|
-
stalledError.partialData = {
|
|
3600
|
-
task_id: events.find((event) => event && event.task_id)?.task_id || null,
|
|
3601
|
-
context_id: contextId,
|
|
3602
|
-
result: final,
|
|
3603
|
-
events,
|
|
3604
|
-
files: streamedFiles,
|
|
3608
|
+
if (idleTimeoutMs <= 0) {
|
|
3609
|
+
chunk = await reader.read();
|
|
3610
|
+
}
|
|
3611
|
+
else {
|
|
3612
|
+
chunk = await new Promise((resolve, reject) => {
|
|
3613
|
+
let idleTimer = null;
|
|
3614
|
+
const clearIdleTimer = () => {
|
|
3615
|
+
if (idleTimer) {
|
|
3616
|
+
clearTimeout(idleTimer);
|
|
3617
|
+
idleTimer = null;
|
|
3618
|
+
}
|
|
3605
3619
|
};
|
|
3606
|
-
|
|
3607
|
-
|
|
3620
|
+
const scheduleIdleTimer = () => {
|
|
3621
|
+
clearIdleTimer();
|
|
3622
|
+
idleTimer = setTimeout(() => {
|
|
3623
|
+
if (this.pendingV3ClientToolTasks.size > 0) {
|
|
3624
|
+
scheduleIdleTimer();
|
|
3625
|
+
return;
|
|
3626
|
+
}
|
|
3627
|
+
if (this.hasAgentWorkspaceOutput(context)) {
|
|
3628
|
+
const stalledError = new Error('V3 agent stream stalled after writing workspace output');
|
|
3629
|
+
stalledError.name = 'AbortError';
|
|
3630
|
+
stalledError.partialData = {
|
|
3631
|
+
task_id: events.find((event) => event && event.task_id)?.task_id || null,
|
|
3632
|
+
context_id: contextId,
|
|
3633
|
+
result: final,
|
|
3634
|
+
events,
|
|
3635
|
+
files: streamedFiles,
|
|
3636
|
+
};
|
|
3637
|
+
clearIdleTimer();
|
|
3638
|
+
reject(stalledError);
|
|
3639
|
+
return;
|
|
3640
|
+
}
|
|
3641
|
+
scheduleIdleTimer();
|
|
3642
|
+
}, idleTimeoutMs);
|
|
3643
|
+
};
|
|
3644
|
+
scheduleIdleTimer();
|
|
3645
|
+
reader.read()
|
|
3646
|
+
.then((result) => {
|
|
3647
|
+
clearIdleTimer();
|
|
3648
|
+
resolve(result);
|
|
3649
|
+
})
|
|
3650
|
+
.catch((error) => {
|
|
3651
|
+
clearIdleTimer();
|
|
3652
|
+
reject(error);
|
|
3653
|
+
});
|
|
3654
|
+
});
|
|
3608
3655
|
}
|
|
3609
3656
|
}
|
|
3610
3657
|
catch (error) {
|
|
@@ -3770,11 +3817,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
3770
3817
|
const resolvedModel = this.resolvePermittedModelId(requestedModel);
|
|
3771
3818
|
const preferLocalV3 = /(premium|polished|landing|site|page|dashboard|saas|frontend|ui|responsive|animated|create the required project files and write them to the workspace)/i.test(message)
|
|
3772
3819
|
&& context.localMachineCapable !== false;
|
|
3773
|
-
const
|
|
3774
|
-
&& /(saas|dashboard|analytics|billing|team management|activity feed|login screen)/i.test(message);
|
|
3775
|
-
const timeoutMs = rescueEligibleSaaS
|
|
3776
|
-
? Math.min(resolvePlannerAgentTimeoutMs(baseTimeoutMs, String(executionContext.agentTaskType || ''), String(executionContext.rawPrompt || message || '')), 210000)
|
|
3777
|
-
: resolvePlannerAgentTimeoutMs(baseTimeoutMs, String(executionContext.agentTaskType || ''), String(executionContext.rawPrompt || message || ''));
|
|
3820
|
+
const timeoutMs = resolvePlannerAgentTimeoutMs(baseTimeoutMs, String(executionContext.agentTaskType || ''), String(executionContext.rawPrompt || message || ''));
|
|
3778
3821
|
const maxAttempts = preferLocalV3 ? 2 : 1;
|
|
3779
3822
|
let lastErrors = [];
|
|
3780
3823
|
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
@@ -5560,11 +5603,20 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
5560
5603
|
'vigthoria-code': 'vigthoria-v3-code-35b',
|
|
5561
5604
|
'vigthoria-agent': 'vigthoria-v3-code-35b',
|
|
5562
5605
|
// ═══════════════════════════════════════════════════════════════
|
|
5563
|
-
// VIGTHORIA CLOUD -
|
|
5606
|
+
// VIGTHORIA CLOUD - current billing catalog aliases
|
|
5564
5607
|
// ═══════════════════════════════════════════════════════════════
|
|
5565
|
-
'cloud': 'vigthoria-cloud-
|
|
5566
|
-
'cloud-
|
|
5567
|
-
'
|
|
5608
|
+
'cloud': 'vigthoria-cloud-balanced',
|
|
5609
|
+
'cloud-code': 'vigthoria-cloud-code',
|
|
5610
|
+
'cloud-balanced': 'vigthoria-cloud-balanced',
|
|
5611
|
+
'cloud-fast': 'vigthoria-cloud-fast',
|
|
5612
|
+
'cloud-power': 'vigthoria-cloud-power',
|
|
5613
|
+
'cloud-maximum': 'vigthoria-cloud-maximum',
|
|
5614
|
+
'cloud-reason': 'vigthoria-cloud-power',
|
|
5615
|
+
'ultra': 'vigthoria-cloud-maximum',
|
|
5616
|
+
// Legacy aliases kept for backward compatibility
|
|
5617
|
+
'cloud-pro': 'vigthoria-cloud-power',
|
|
5618
|
+
'cloud-k2': 'vigthoria-cloud-power',
|
|
5619
|
+
'cloud-ultra': 'vigthoria-cloud-maximum',
|
|
5568
5620
|
};
|
|
5569
5621
|
// If already a full model ID, return as-is
|
|
5570
5622
|
if (shortName.includes('vigthoria') || shortName.includes('/') || shortName.includes(':')) {
|
|
@@ -150,10 +150,15 @@ export function resolvePlannerAgentTimeoutMs(baseTimeoutMs, agentTaskType, promp
|
|
|
150
150
|
if (!isPlannerBuildTask(agentTaskType, prompt)) {
|
|
151
151
|
return baseTimeoutMs;
|
|
152
152
|
}
|
|
153
|
-
const raw = process.env.VIGTHORIA_AGENT_PLANNER_TIMEOUT_MS || process.env.V3_AGENT_PLANNER_TIMEOUT_MS
|
|
153
|
+
const raw = process.env.VIGTHORIA_AGENT_PLANNER_TIMEOUT_MS || process.env.V3_AGENT_PLANNER_TIMEOUT_MS;
|
|
154
|
+
if (!raw) {
|
|
155
|
+
return baseTimeoutMs;
|
|
156
|
+
}
|
|
154
157
|
const extended = Number.parseInt(raw, 10);
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
if (!Number.isFinite(extended) || extended <= 0) {
|
|
159
|
+
return baseTimeoutMs;
|
|
160
|
+
}
|
|
161
|
+
return Math.max(baseTimeoutMs, extended);
|
|
157
162
|
}
|
|
158
163
|
/** V3 workflow mode: suppress write path when the user did not ask for file changes. */
|
|
159
164
|
export function resolveWorkflowType(agentTaskType, prompt) {
|
|
@@ -36,7 +36,7 @@ export function normalizeV3WorkspaceRelativePath(rawPath, rootPath) {
|
|
|
36
36
|
return null;
|
|
37
37
|
};
|
|
38
38
|
const decodeBoundaryUri = (value) => {
|
|
39
|
-
const match = value.match(/^vigthoria:\/\/(?:workspace|server-internal)\/?(.*)$/i);
|
|
39
|
+
const match = value.match(/^vigthoria:\/\/(?:workspace|server-internal|local-workspace)\/?(.*)$/i);
|
|
40
40
|
if (match) {
|
|
41
41
|
return safeRelative(match[1] || '');
|
|
42
42
|
}
|