@vreko/cli 3.2.0 → 3.3.1
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/{InitApp-YM5CK55D.js → InitApp-2J6XGUNQ.js} +3 -3
- package/dist/{InitApp-YM5CK55D.js.map → InitApp-2J6XGUNQ.js.map} +1 -1
- package/dist/{chunk-53BJRUUT.js → chunk-2OPUNVDJ.js} +4 -4
- package/dist/{chunk-53BJRUUT.js.map → chunk-2OPUNVDJ.js.map} +1 -1
- package/dist/{chunk-3YXBGNHD.js → chunk-AXNZWZ26.js} +3 -3
- package/dist/{chunk-3YXBGNHD.js.map → chunk-AXNZWZ26.js.map} +1 -1
- package/dist/{chunk-FROYVC6U.js → chunk-B42UQ2W7.js} +5 -5
- package/dist/{chunk-FROYVC6U.js.map → chunk-B42UQ2W7.js.map} +1 -1
- package/dist/{chunk-HEUTZR52.js → chunk-MWTSOZTM.js} +3 -2
- package/dist/chunk-MWTSOZTM.js.map +1 -0
- package/dist/{dashboardServer-2T7OBLSV.js → dashboardServer-MELKRCBX.js} +3 -3
- package/dist/{dashboardServer-2T7OBLSV.js.map → dashboardServer-MELKRCBX.js.map} +1 -1
- package/dist/index.js +19 -14
- package/dist/index.js.map +1 -1
- package/dist/init-command-ZUISJBCT.js +7 -0
- package/dist/{init-command-LXEBDSYX.js.map → init-command-ZUISJBCT.js.map} +1 -1
- package/dist/{init-core-ETGVVENN.js → init-core-FQYDSJWC.js} +5 -5
- package/dist/{init-core-ETGVVENN.js.map → init-core-FQYDSJWC.js.map} +1 -1
- package/package.json +5 -5
- package/scripts/publish-clean.mjs +45 -37
- package/dist/chunk-HEUTZR52.js.map +0 -1
- package/dist/init-command-LXEBDSYX.js +0 -7
- /package/dist/{._InitApp-YM5CK55D.js → ._InitApp-2J6XGUNQ.js} +0 -0
- /package/dist/{._InitApp-YM5CK55D.js.map → ._InitApp-2J6XGUNQ.js.map} +0 -0
- /package/dist/{._chunk-3YXBGNHD.js → ._chunk-2OPUNVDJ.js} +0 -0
- /package/dist/{._chunk-3YXBGNHD.js.map → ._chunk-2OPUNVDJ.js.map} +0 -0
- /package/dist/{._chunk-53BJRUUT.js → ._chunk-AXNZWZ26.js} +0 -0
- /package/dist/{._chunk-53BJRUUT.js.map → ._chunk-AXNZWZ26.js.map} +0 -0
- /package/dist/{._chunk-FROYVC6U.js → ._chunk-B42UQ2W7.js} +0 -0
- /package/dist/{._chunk-FROYVC6U.js.map → ._chunk-B42UQ2W7.js.map} +0 -0
- /package/dist/{._chunk-HEUTZR52.js → ._chunk-MWTSOZTM.js} +0 -0
- /package/dist/{._chunk-HEUTZR52.js.map → ._chunk-MWTSOZTM.js.map} +0 -0
- /package/dist/{._dashboardServer-2T7OBLSV.js → ._dashboardServer-MELKRCBX.js} +0 -0
- /package/dist/{._dashboardServer-2T7OBLSV.js.map → ._dashboardServer-MELKRCBX.js.map} +0 -0
- /package/dist/{._init-command-LXEBDSYX.js → ._init-command-ZUISJBCT.js} +0 -0
- /package/dist/{._init-command-LXEBDSYX.js.map → ._init-command-ZUISJBCT.js.map} +0 -0
- /package/dist/{._init-core-ETGVVENN.js → ._init-core-FQYDSJWC.js} +0 -0
- /package/dist/{._init-core-ETGVVENN.js.map → ._init-core-FQYDSJWC.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export { createInitCommand } from './chunk-2OPUNVDJ.js';
|
|
3
|
+
import './chunk-EWOJGXRX.js';
|
|
4
|
+
|
|
5
|
+
process.env.VREKO_CLI='true';process.env.NODE_NO_WARNINGS='1';
|
|
6
|
+
//# sourceMappingURL=init-command-ZUISJBCT.js.map
|
|
7
|
+
//# sourceMappingURL=init-command-ZUISJBCT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"init-command-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"init-command-ZUISJBCT.js"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export { createInitCommand } from './chunk-
|
|
2
|
+
export { createInitCommand } from './chunk-B42UQ2W7.js';
|
|
3
3
|
import './chunk-GRMRYWYS.js';
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
4
|
+
import './chunk-MWTSOZTM.js';
|
|
5
|
+
import './chunk-AXNZWZ26.js';
|
|
6
6
|
import './chunk-AV5Y3YR6.js';
|
|
7
7
|
import './chunk-AHZGBIQG.js';
|
|
8
8
|
import './chunk-BZ7DRTR7.js';
|
|
9
9
|
import './chunk-EWOJGXRX.js';
|
|
10
10
|
|
|
11
11
|
process.env.VREKO_CLI='true';process.env.NODE_NO_WARNINGS='1';
|
|
12
|
-
//# sourceMappingURL=init-core-
|
|
13
|
-
//# sourceMappingURL=init-core-
|
|
12
|
+
//# sourceMappingURL=init-core-FQYDSJWC.js.map
|
|
13
|
+
//# sourceMappingURL=init-core-FQYDSJWC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"init-core-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"init-core-FQYDSJWC.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vreko/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "Vreko CLI — AI-aware developer intelligence for the command line",
|
|
5
5
|
"homepage": "https://vreko.dev",
|
|
6
6
|
"repository": {
|
|
@@ -41,11 +41,10 @@
|
|
|
41
41
|
"LICENSE"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@asteasolutions/zod-to-openapi": "7.3.4",
|
|
45
44
|
"@babel/parser": "7.28.5",
|
|
46
45
|
"@babel/traverse": "7.28.5",
|
|
47
|
-
"@better-auth/passkey": "1.6.
|
|
48
|
-
"@better-auth/sso": "1.6.
|
|
46
|
+
"@better-auth/passkey": "1.6.19",
|
|
47
|
+
"@better-auth/sso": "1.6.19",
|
|
49
48
|
"@clack/prompts": "^1.1.0",
|
|
50
49
|
"@electric-sql/pglite": "0.2.0",
|
|
51
50
|
"@hubspot/api-client": "13.0.0",
|
|
@@ -62,7 +61,7 @@
|
|
|
62
61
|
"@sentry/node": "10.32.1",
|
|
63
62
|
"@sindresorhus/slugify": "3.0.0",
|
|
64
63
|
"@typescript-eslint/parser": "8.46.2",
|
|
65
|
-
"better-auth": "1.6.
|
|
64
|
+
"better-auth": "1.6.19",
|
|
66
65
|
"boxen": "8.0.1",
|
|
67
66
|
"chalk": "4.1.2",
|
|
68
67
|
"chokidar": "4.0.3",
|
|
@@ -110,6 +109,7 @@
|
|
|
110
109
|
"keytar": "7.9.0"
|
|
111
110
|
},
|
|
112
111
|
"bundledDependencies": [
|
|
112
|
+
"@asteasolutions/zod-to-openapi",
|
|
113
113
|
"@vreko/auth",
|
|
114
114
|
"@vreko/claims-ledger",
|
|
115
115
|
"@vreko/intelligence",
|
|
@@ -61,55 +61,52 @@ try {
|
|
|
61
61
|
mkdirSync(tmpDir, { recursive: true });
|
|
62
62
|
execFileSync("tar", ["-xzf", tgzPath, "-C", tmpDir]);
|
|
63
63
|
|
|
64
|
-
// Step 3: Strip unresolvable dep fields from bundled
|
|
64
|
+
// Step 3: Strip unresolvable dep fields from ALL bundled packages' package.jsons.
|
|
65
65
|
// Their code is already inlined into dist/index.js via tsup noExternal, or the
|
|
66
66
|
// daemon bundles its own deps. npm doesn't need to resolve their transitive deps
|
|
67
|
-
// and the catalog:/workspace:* specs
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
console.log(` cleaned: @vreko/${pkg}`);
|
|
90
|
-
}
|
|
67
|
+
// and the catalog:/workspace:* specs (or peer dep conflicts) cause install failures.
|
|
68
|
+
const extractedRootPkg = JSON.parse(readFileSync(join(tmpDir, "package", "package.json"), "utf8"));
|
|
69
|
+
const allBundled = extractedRootPkg.bundledDependencies || [];
|
|
70
|
+
const nodeModulesDir = join(tmpDir, "package", "node_modules");
|
|
71
|
+
console.log(`🔧 Stripping dep fields from ${allBundled.length} bundled packages...`);
|
|
72
|
+
for (const bundledPkg of allBundled) {
|
|
73
|
+
const pkgJsonPath = join(nodeModulesDir, bundledPkg, "package.json");
|
|
74
|
+
if (!existsSync(pkgJsonPath)) continue;
|
|
75
|
+
const pkgJson = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
|
|
76
|
+
const hasDeps =
|
|
77
|
+
"dependencies" in pkgJson ||
|
|
78
|
+
"devDependencies" in pkgJson ||
|
|
79
|
+
"peerDependencies" in pkgJson ||
|
|
80
|
+
"optionalDependencies" in pkgJson;
|
|
81
|
+
if (hasDeps) {
|
|
82
|
+
delete pkgJson.dependencies;
|
|
83
|
+
delete pkgJson.devDependencies;
|
|
84
|
+
delete pkgJson.peerDependencies;
|
|
85
|
+
delete pkgJson.optionalDependencies;
|
|
86
|
+
delete pkgJson.peerDependenciesMeta;
|
|
87
|
+
writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + "\n");
|
|
88
|
+
console.log(` cleaned: ${bundledPkg}`);
|
|
91
89
|
}
|
|
92
90
|
}
|
|
93
91
|
|
|
94
|
-
// Step 3b: Fix root package.json — strip bundled
|
|
95
|
-
// pnpm rewrites workspace:* to local semvers
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
// in bundledDependencies and must remain in dependencies at their real semver.
|
|
92
|
+
// Step 3b: Fix root package.json — strip ALL bundled packages from dependencies.
|
|
93
|
+
// pnpm rewrites workspace:* to local semvers (don't exist on npm) and some bundled
|
|
94
|
+
// third-party packages carry peer dep conflicts. A bundled package ships via
|
|
95
|
+
// bundledDependencies; it must not appear in dependencies so npm never tries to
|
|
96
|
+
// resolve it from the registry.
|
|
100
97
|
const rootPkgPath = join(tmpDir, "package", "package.json");
|
|
101
98
|
const rootPkg = JSON.parse(readFileSync(rootPkgPath, "utf8"));
|
|
102
99
|
const bundledSet = new Set(rootPkg.bundledDependencies || []);
|
|
103
100
|
const removedFromDeps = [];
|
|
104
101
|
for (const key of Object.keys(rootPkg.dependencies || {})) {
|
|
105
|
-
if (
|
|
102
|
+
if (bundledSet.has(key)) {
|
|
106
103
|
delete rootPkg.dependencies[key];
|
|
107
104
|
removedFromDeps.push(key);
|
|
108
105
|
}
|
|
109
106
|
}
|
|
110
107
|
if (removedFromDeps.length > 0) {
|
|
111
108
|
writeFileSync(rootPkgPath, JSON.stringify(rootPkg, null, 2) + "\n");
|
|
112
|
-
console.log(`🔧 Removed ${removedFromDeps.length} bundled
|
|
109
|
+
console.log(`🔧 Removed ${removedFromDeps.length} bundled packages from root dependencies:`);
|
|
113
110
|
for (const k of removedFromDeps) console.log(` stripped: ${k}`);
|
|
114
111
|
}
|
|
115
112
|
|
|
@@ -143,10 +140,21 @@ try {
|
|
|
143
140
|
if (v.startsWith("workspace:")) failures.push(`3a FAIL: ${k} still has workspace:${v.slice(10)}`);
|
|
144
141
|
}
|
|
145
142
|
|
|
146
|
-
// 3b:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
143
|
+
// 3b: real invariant — two sub-rules that together prevent E404 at install time:
|
|
144
|
+
// (i) bundled packages must be stripped from dependencies (strip step must have run)
|
|
145
|
+
// (ii) any @vreko/* left in dependencies must be at a published semver, not * or workspace:
|
|
146
|
+
// (an unbundled @vreko/* at * would 404 because no such version exists on npm)
|
|
147
|
+
for (const [key, ver] of Object.entries(verifyDeps)) {
|
|
148
|
+
if (verifyBundled.has(key)) {
|
|
149
|
+
failures.push(`3b FAIL: bundled ${key} still in dependencies as "${ver}" — strip step did not run`);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (key.startsWith("@vreko/")) {
|
|
153
|
+
// Non-bundled @vreko/* must be at a real published semver (e.g. "1.1.0", "^1.0.0")
|
|
154
|
+
const isPublishedSemver = /^[\^~]?\d+\.\d+/.test(ver);
|
|
155
|
+
if (!isPublishedSemver) {
|
|
156
|
+
failures.push(`3b FAIL: ${key}@"${ver}" is not bundled and not a published semver — will E404 on install`);
|
|
157
|
+
}
|
|
150
158
|
}
|
|
151
159
|
}
|
|
152
160
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/workspace.ts"],"names":["validateWorkspacePath","workspacePath","normalizedPath","normalize","absolutePath","resolve","startsWith","process","cwd","valid","root","error","hasGit","existsSync","hasPackageJson","hasVreko","stat","lstatSync","isSymbolicLink","Error","message","resolveWorkspaceRoot","explicitPath","validation","currentPath","maxIterations","i","hasMarker","parent","findWorkspaceRoot","dir","join","findGitRoot","execSync","require","encoding","stdio","trim","resolveWorkspaceJsonPath","primary"],"mappings":"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","file":"chunk-HEUTZR52.js","sourcesContent":["/**\n * Workspace Utilities\n *\n * Shared workspace detection and path utilities for CLI commands.\n * Supersedes @vreko/mcp/middleware workspace helpers - no transitive engine/intelligence deps.\n *\n * @module utils/workspace\n */\n\nimport { existsSync, lstatSync } from \"node:fs\";\nimport { join, normalize, resolve } from \"node:path\";\n\n// =============================================================================\n// WORKSPACE VALIDATION (migrated from @vreko/mcp/middleware - Phase 3A)\n// =============================================================================\n\nexport interface WorkspaceValidationResult {\n\tvalid: boolean;\n\troot: string;\n\terror?: string;\n}\n\n/**\n * Validate a workspace path according to security criteria.\n * Checks for .git, package.json, or .vreko markers; rejects symlinks.\n */\nexport function validateWorkspacePath(workspacePath: string): WorkspaceValidationResult {\n\ttry {\n\t\tconst normalizedPath = normalize(workspacePath);\n\t\tconst absolutePath = resolve(normalizedPath);\n\n\t\tif (!absolutePath.startsWith(process.cwd()) && !absolutePath.startsWith(\"/\")) {\n\t\t\treturn { valid: false, root: \"\", error: \"Invalid workspace path\" };\n\t\t}\n\n\t\tconst hasGit = existsSync(resolve(absolutePath, \".git\"));\n\t\tconst hasPackageJson = existsSync(resolve(absolutePath, \"package.json\"));\n\t\tconst hasVreko = existsSync(resolve(absolutePath, \".vreko\"));\n\n\t\tif (!hasGit && !hasPackageJson && !hasVreko) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\troot: absolutePath,\n\t\t\t\terror: \"Workspace must contain at least one marker: .git, package.json, or .vreko\",\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst stat = lstatSync(absolutePath);\n\t\t\tif (stat.isSymbolicLink()) {\n\t\t\t\treturn {\n\t\t\t\t\tvalid: false,\n\t\t\t\t\troot: absolutePath,\n\t\t\t\t\terror: \"Workspace path cannot be a symbolic link\",\n\t\t\t\t};\n\t\t\t}\n\t\t} catch {\n\t\t\treturn { valid: false, root: absolutePath, error: \"Cannot access workspace path\" };\n\t\t}\n\n\t\treturn { valid: true, root: absolutePath };\n\t} catch (error) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\troot: \"\",\n\t\t\terror: error instanceof Error ? error.message : \"Unknown error validating workspace\",\n\t\t};\n\t}\n}\n\n/**\n * Resolve workspace root with fallback chain:\n * 1. Explicit path (if provided and valid)\n * 2. Traversal upward from cwd looking for .git / package.json / .vreko\n * 3. cwd itself as last resort\n */\nexport function resolveWorkspaceRoot(explicitPath?: string): WorkspaceValidationResult {\n\tif (explicitPath) {\n\t\tconst validation = validateWorkspacePath(explicitPath);\n\t\tif (validation.valid) {\n\t\t\treturn validation;\n\t\t}\n\t}\n\n\t// Traverse upward\n\tlet currentPath = resolve(process.cwd());\n\tconst maxIterations = 50;\n\tfor (let i = 0; i < maxIterations; i++) {\n\t\tconst hasMarker =\n\t\t\texistsSync(resolve(currentPath, \".git\")) ||\n\t\t\texistsSync(resolve(currentPath, \"package.json\")) ||\n\t\t\texistsSync(resolve(currentPath, \".vreko\"));\n\t\tif (hasMarker) {\n\t\t\treturn validateWorkspacePath(currentPath);\n\t\t}\n\t\tconst parent = resolve(currentPath, \"..\");\n\t\tif (parent === currentPath) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrentPath = parent;\n\t}\n\n\t// Fallback: cwd\n\treturn validateWorkspacePath(process.cwd());\n}\n\n/**\n * Find the workspace root by traversing up from the given directory\n * looking for a .vreko directory.\n *\n * @param cwd - Current working directory to start from\n * @returns Absolute path to workspace root, or null if not found\n */\nexport function findWorkspaceRoot(cwd: string): string | null {\n\tlet dir = cwd;\n\twhile (dir !== \"/\") {\n\t\tif (existsSync(join(dir, \".vreko\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tconst parent = join(dir, \"..\");\n\t\tif (parent === dir) {\n\t\t\tbreak;\n\t\t}\n\t\tdir = parent;\n\t}\n\treturn null;\n}\n\n/**\n * Find git root by traversing up from the given directory.\n *\n * @param cwd - Current working directory to start from\n * @returns Absolute path to git root, or null if not in a git repo\n */\nexport function findGitRoot(cwd: string): string | null {\n\ttry {\n\t\tconst { execSync } = require(\"node:child_process\");\n\t\treturn execSync(\"git rev-parse --show-toplevel\", {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t}).trim();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Resolve the canonical path to workspace.json.\n * Tries the v0.4 path first (`.agents/workspace.json`),\n * then falls back to the legacy path (`.agents/agents.workspace.json`).\n *\n * @param workspacePath - Absolute path to the workspace root\n * @returns Absolute path to workspace.json (may or may not exist)\n */\nexport function resolveWorkspaceJsonPath(workspacePath: string): string {\n\tconst primary = join(workspacePath, \".agents\", \"workspace.json\");\n\tif (existsSync(primary)) {\n\t\treturn primary;\n\t}\n\treturn join(workspacePath, \".agents\", \"agents.workspace.json\");\n}\n"]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
export { createInitCommand } from './chunk-53BJRUUT.js';
|
|
3
|
-
import './chunk-EWOJGXRX.js';
|
|
4
|
-
|
|
5
|
-
process.env.VREKO_CLI='true';process.env.NODE_NO_WARNINGS='1';
|
|
6
|
-
//# sourceMappingURL=init-command-LXEBDSYX.js.map
|
|
7
|
-
//# sourceMappingURL=init-command-LXEBDSYX.js.map
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|