@ngocsangairvds/vsaf 4.1.11 → 4.1.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngocsangairvds/vsaf",
3
- "version": "4.1.11",
3
+ "version": "4.1.14",
4
4
  "description": "logging step",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  */
18
18
 
19
19
  import { execSync } from 'child_process';
20
- import { existsSync, cpSync, mkdirSync, writeFileSync, rmSync } from 'fs';
20
+ import { existsSync, cpSync, mkdirSync, writeFileSync, rmSync, readFileSync } from 'fs';
21
21
  import { join } from 'path';
22
22
  import { homedir } from 'os';
23
23
 
@@ -49,7 +49,7 @@ function checkPython() {
49
49
  }
50
50
  const major = Number(match[1]);
51
51
  const minor = Number(match[2]);
52
- if (major < 3 || (major === 3 && minor < 14)) {
52
+ if (major < 3 || (major === 3 && minor < 12)) {
53
53
  printPythonGuide(major, minor);
54
54
  process.exit(1);
55
55
  }
@@ -62,15 +62,15 @@ function checkPython() {
62
62
 
63
63
  function printPythonGuide(major, minor) {
64
64
  const current = major ? `${major}.${minor}` : 'not found';
65
- console.error(`\n ✗ Python >= 3.14 required (current: ${current})\n`);
65
+ console.error(`\n ✗ Python >= 3.12 required (current: ${current})\n`);
66
66
  if (IS_WIN) {
67
- console.error(' Install: winget install Python.Python.3.14');
67
+ console.error(' Install: winget install Python.Python.3.12');
68
68
  console.error(' Or download from: https://www.python.org/downloads/\n');
69
69
  } else if (IS_MAC) {
70
- console.error(' Install: brew install python@3.14\n');
70
+ console.error(' Install: brew install python@3.12\n');
71
71
  } else {
72
- console.error(' Install: sudo apt install python3.14');
73
- console.error(' Or use pyenv: pyenv install 3.14\n');
72
+ console.error(' Install: sudo apt install python3');
73
+ console.error(' Or use pyenv: pyenv install 3.12\n');
74
74
  }
75
75
  }
76
76
 
@@ -220,14 +220,51 @@ VDS_GIT_CONCURRENCY_DEFAULT=8
220
220
  `;
221
221
 
222
222
  function provisionEnv() {
223
- if (existsSync(ENV_FILE)) {
224
- log('⊘', `.env already exists at ${ENV_FILE}`);
223
+ mkdirSync(ENV_DIR, { recursive: true });
224
+
225
+ if (!existsSync(ENV_FILE)) {
226
+ writeFileSync(ENV_FILE, ENV_TEMPLATE, 'utf-8');
227
+ log('✓', `.env template created at ${ENV_FILE}`);
228
+ log('⚠', `Fill in your credentials: ${ENV_FILE}`);
225
229
  return;
226
230
  }
227
- mkdirSync(ENV_DIR, { recursive: true });
228
- writeFileSync(ENV_FILE, ENV_TEMPLATE, 'utf-8');
229
- log('✓', `.env template created at ${ENV_FILE}`);
230
- log('', `Fill in your credentials: ${ENV_FILE}`);
231
+
232
+ if (force) {
233
+ writeFileSync(ENV_FILE, ENV_TEMPLATE, 'utf-8');
234
+ log('', `.env overwritten at ${ENV_FILE}`);
235
+ log('⚠', `Fill in your credentials: ${ENV_FILE}`);
236
+ return;
237
+ }
238
+
239
+ // Merge: add missing variables from template into existing .env
240
+ const existing = readFileSync(ENV_FILE, 'utf-8');
241
+ const existingKeys = new Set(
242
+ existing.split('\n')
243
+ .map(line => line.trim())
244
+ .filter(line => line && !line.startsWith('#'))
245
+ .map(line => line.split('=')[0].trim()),
246
+ );
247
+
248
+ const newLines = [];
249
+ for (const line of ENV_TEMPLATE.split('\n')) {
250
+ const trimmed = line.trim();
251
+ if (!trimmed || trimmed.startsWith('#')) continue;
252
+ const key = trimmed.split('=')[0].trim();
253
+ if (!existingKeys.has(key)) {
254
+ newLines.push(line);
255
+ }
256
+ }
257
+
258
+ if (newLines.length > 0) {
259
+ const append = '\n# ── Added by vds-skill installer ──\n' + newLines.join('\n') + '\n';
260
+ writeFileSync(ENV_FILE, existing.trimEnd() + '\n' + append, 'utf-8');
261
+ log('✓', `${newLines.length} new variable(s) added to ${ENV_FILE}`);
262
+ for (const line of newLines) {
263
+ log(' +', line.split('=')[0]);
264
+ }
265
+ } else {
266
+ log('⊘', `.env already up-to-date at ${ENV_FILE}`);
267
+ }
231
268
  }
232
269
 
233
270
  // ── Main ──
@@ -3,7 +3,7 @@ name = "vds-markdown-orchestrator"
3
3
  version = "0.1.0"
4
4
  description = "VDS Markdown processing and validation orchestrator"
5
5
  readme = "README.md"
6
- requires-python = ">=3.13"
6
+ requires-python = ">=3.12"
7
7
  dependencies = [
8
8
  "vds-cli-common",
9
9
  "typer>=0.24.1",
@@ -3,7 +3,7 @@ name = "vds-pdf-orchestrator"
3
3
  version = "0.1.0"
4
4
  description = "PDF manipulation orchestrator for VDS platform with security-first approach"
5
5
  readme = "README.md"
6
- requires-python = ">=3.13"
6
+ requires-python = ">=3.12"
7
7
  # Pruned 2026-04-25: only the 8 deps that are actually imported in src/ are
8
8
  # kept. Removed 33 phantom deps (presidio + spaCy stack, pymupdf, weasyprint
9
9
  # extras, etc.) — see git log for the full diff. The largest impact: drops
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "vds-scripts-workspace"
3
3
  version = "0.0.0"
4
- requires-python = ">=3.14"
4
+ requires-python = ">=3.12"
5
5
 
6
6
  [tool.uv]
7
7
  package = false
@@ -36,7 +36,7 @@ consider_namespace_packages = true
36
36
 
37
37
  [tool.ruff]
38
38
  line-length = 120
39
- target-version = "py314"
39
+ target-version = "py312"
40
40
  # Exclude intentional non-compliant fixture files
41
41
  exclude = [
42
42
  "**/tests/fixtures/python-noncompliant/**",
@@ -107,7 +107,7 @@ indent-style = "space"
107
107
 
108
108
  # Phase 3: Workspace mypy config — packages opt-in by not overriding
109
109
  [tool.mypy]
110
- python_version = "3.14"
110
+ python_version = "3.12"
111
111
  ignore_missing_imports = true
112
112
  disable_error_code = ["prop-decorator"]
113
113
  show_error_codes = true
@@ -3,7 +3,7 @@ name = "vds-sonarqube-orchestrator"
3
3
  version = "0.2.0"
4
4
  description = "VDS SonarQube orchestrator for code quality scanning and issue management"
5
5
  readme = "README.md"
6
- requires-python = ">=3.13"
6
+ requires-python = ">=3.12"
7
7
  license = { text = "MIT" }
8
8
  authors = [{ name = "VDS Team" }]
9
9
  keywords = ["sonarqube", "code-quality", "scanning", "vds", "orchestrator"]
@@ -2,7 +2,7 @@
2
2
  name = "vds-agent-core"
3
3
  version = "0.10.0"
4
4
  description = "VDS shared agent infrastructure — LLM, config, skills, agentic loop"
5
- requires-python = ">=3.13"
5
+ requires-python = ">=3.12"
6
6
  dependencies = [
7
7
  "pydantic>=2.12.5",
8
8
  "pydantic-settings>=2.3.0",
@@ -2,7 +2,7 @@
2
2
  name = "vds-cli"
3
3
  version = "4.0.0"
4
4
  description = "Cross-platform VDS Platform CLI"
5
- requires-python = ">=3.14"
5
+ requires-python = ">=3.12"
6
6
  dependencies = [
7
7
  "typer>=0.24.1",
8
8
  "rich>=14.3.3", # Latest: 14.3.3 (Feb 2026)