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.
@@ -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 300000;
26
+ return 0;
27
27
  }
28
28
  const parsed = Number.parseInt(rawValue, 10);
29
- return Number.isFinite(parsed) && parsed > 0 ? parsed : 300000;
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 90000;
34
+ return 0;
35
35
  }
36
36
  const parsed = Number.parseInt(rawValue, 10);
37
- return Number.isFinite(parsed) && parsed > 0 ? parsed : 90000;
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 : 180000;
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 300000;
262
+ return 0;
263
263
  }
264
264
  const parsed = Number.parseInt(rawValue, 10);
265
- return Number.isFinite(parsed) && parsed > 0 ? parsed : 300000;
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 || '90000';
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 > 0 ? parsed : 90000;
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
- const content = fs.readFileSync(target.absolutePath, 'utf8');
2855
- if (/\.json$/i.test(target.absolutePath))
2856
- JSON.parse(content);
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 || DEFAULT_V3_AGENT_IDLE_TIMEOUT_MS;
3567
- if (isPlannerBuildTask(String(context.agentTaskType || ''), String(context.rawPrompt || ''))) {
3568
- const raw = process.env.VIGTHORIA_AGENT_PLANNER_IDLE_TIMEOUT_MS || '300000';
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
- return base;
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
- const readPromise = reader.read();
3579
- while (true) {
3580
- const timeoutSentinel = Symbol('v3-agent-idle-timeout');
3581
- const result = idleTimeoutMs > 0
3582
- ? await Promise.race([
3583
- readPromise,
3584
- new Promise((resolve) => {
3585
- setTimeout(() => resolve(timeoutSentinel), idleTimeoutMs);
3586
- }),
3587
- ])
3588
- : await readPromise;
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
- throw stalledError;
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 rescueEligibleSaaS = preferLocalV3
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 - Premium cloud models (internal routing)
5606
+ // VIGTHORIA CLOUD - current billing catalog aliases
5564
5607
  // ═══════════════════════════════════════════════════════════════
5565
- 'cloud': 'vigthoria-cloud-pro',
5566
- 'cloud-reason': 'vigthoria-cloud-k2',
5567
- 'ultra': 'vigthoria-cloud-ultra',
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 || '900000';
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
- const floor = Number.isFinite(extended) && extended > 0 ? extended : 900000;
156
- return Math.max(baseTimeoutMs, floor);
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vigthoria-cli",
3
- "version": "1.11.25",
3
+ "version": "1.11.27",
4
4
  "description": "Vigthoria Coder CLI - AI-powered terminal coding assistant",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",