@controlvector/cv-agent 1.10.1 → 1.11.0
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/bundle.cjs +556 -259
- package/dist/bundle.cjs.map +4 -4
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +5 -1
- package/dist/commands/agent.js.map +1 -1
- package/dist/utils/api.d.ts +5 -1
- package/dist/utils/api.d.ts.map +1 -1
- package/dist/utils/api.js +71 -13
- package/dist/utils/api.js.map +1 -1
- package/dist/utils/org-resolver.d.ts +37 -0
- package/dist/utils/org-resolver.d.ts.map +1 -0
- package/dist/utils/org-resolver.js +227 -0
- package/dist/utils/org-resolver.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multi-Organization Resolver
|
|
4
|
+
*
|
|
5
|
+
* Resolves which CV-Hub organization an executor should register under.
|
|
6
|
+
* Layered precedence: CLI flag > env var > repo-local config > global config > interactive.
|
|
7
|
+
*
|
|
8
|
+
* Design: repo-local persistence is the recommended default to prevent
|
|
9
|
+
* accidental cross-org registration on multi-org workstations.
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.resolveOrg = resolveOrg;
|
|
16
|
+
exports.resolveToUUID = resolveToUUID;
|
|
17
|
+
exports.persistOrg = persistOrg;
|
|
18
|
+
exports.promptPersistScope = promptPersistScope;
|
|
19
|
+
exports.confirmAutoMatch = confirmAutoMatch;
|
|
20
|
+
exports.pickOrg = pickOrg;
|
|
21
|
+
exports.parseMultiOrgError = parseMultiOrgError;
|
|
22
|
+
const node_fs_1 = require("node:fs");
|
|
23
|
+
const node_path_1 = require("node:path");
|
|
24
|
+
const node_os_1 = require("node:os");
|
|
25
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Resolve from config chain (no I/O prompts)
|
|
28
|
+
// ============================================================================
|
|
29
|
+
function resolveOrg(opts) {
|
|
30
|
+
if (opts.cliFlag?.trim()) {
|
|
31
|
+
return { value: opts.cliFlag.trim(), source: 'cli' };
|
|
32
|
+
}
|
|
33
|
+
const envVal = process.env.CV_HUB_ORG?.trim();
|
|
34
|
+
if (envVal) {
|
|
35
|
+
return { value: envVal, source: 'env' };
|
|
36
|
+
}
|
|
37
|
+
const cwd = opts.cwd || process.cwd();
|
|
38
|
+
try {
|
|
39
|
+
const repoConfigPath = (0, node_path_1.join)(cwd, '.cva', 'agent.json');
|
|
40
|
+
if ((0, node_fs_1.existsSync)(repoConfigPath)) {
|
|
41
|
+
const config = JSON.parse((0, node_fs_1.readFileSync)(repoConfigPath, 'utf-8'));
|
|
42
|
+
if (config.organization?.trim()) {
|
|
43
|
+
return { value: config.organization.trim(), source: 'repo-config' };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch { }
|
|
48
|
+
try {
|
|
49
|
+
const globalConfigPath = (0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'cva', 'config.json');
|
|
50
|
+
if ((0, node_fs_1.existsSync)(globalConfigPath)) {
|
|
51
|
+
const config = JSON.parse((0, node_fs_1.readFileSync)(globalConfigPath, 'utf-8'));
|
|
52
|
+
if (config.organization?.trim()) {
|
|
53
|
+
return { value: config.organization.trim(), source: 'global-config' };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch { }
|
|
58
|
+
return { value: '', source: null };
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// UUID / slug resolution
|
|
62
|
+
// ============================================================================
|
|
63
|
+
function resolveToUUID(identifier, orgs) {
|
|
64
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
65
|
+
if (uuidRegex.test(identifier)) {
|
|
66
|
+
const match = orgs.find(o => o.id.toLowerCase() === identifier.toLowerCase());
|
|
67
|
+
if (match)
|
|
68
|
+
return match.id;
|
|
69
|
+
}
|
|
70
|
+
const slugMatch = orgs.find(o => o.slug.toLowerCase() === identifier.toLowerCase());
|
|
71
|
+
if (slugMatch)
|
|
72
|
+
return slugMatch.id;
|
|
73
|
+
throw new Error(`Organization "${identifier}" not found. Valid options: ${orgs.map(o => o.slug).join(', ')}`);
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Persist choice
|
|
77
|
+
// ============================================================================
|
|
78
|
+
function persistOrg(value, scope, cwd) {
|
|
79
|
+
let configPath;
|
|
80
|
+
if (scope === 'repo') {
|
|
81
|
+
const dir = (0, node_path_1.join)(cwd || process.cwd(), '.cva');
|
|
82
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
83
|
+
configPath = (0, node_path_1.join)(dir, 'agent.json');
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const dir = (0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'cva');
|
|
87
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
88
|
+
configPath = (0, node_path_1.join)(dir, 'config.json');
|
|
89
|
+
}
|
|
90
|
+
let existing = {};
|
|
91
|
+
try {
|
|
92
|
+
if ((0, node_fs_1.existsSync)(configPath)) {
|
|
93
|
+
existing = JSON.parse((0, node_fs_1.readFileSync)(configPath, 'utf-8'));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch { }
|
|
97
|
+
existing.organization = value;
|
|
98
|
+
const tmpPath = configPath + '.tmp';
|
|
99
|
+
(0, node_fs_1.writeFileSync)(tmpPath, JSON.stringify(existing, null, 2) + '\n', {
|
|
100
|
+
mode: scope === 'global' ? 0o600 : 0o644,
|
|
101
|
+
});
|
|
102
|
+
(0, node_fs_1.renameSync)(tmpPath, configPath);
|
|
103
|
+
return configPath;
|
|
104
|
+
}
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// Persist scope prompt (reusable)
|
|
107
|
+
// ============================================================================
|
|
108
|
+
async function promptPersistScope() {
|
|
109
|
+
const readline = await import('node:readline');
|
|
110
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
111
|
+
console.log();
|
|
112
|
+
console.log(chalk_1.default.gray(' Save this choice for next time?'));
|
|
113
|
+
console.log(` ${chalk_1.default.cyan('r')}. Save to this repo's .cva/agent.json ${chalk_1.default.gray('(recommended)')}`);
|
|
114
|
+
console.log(` ${chalk_1.default.cyan('g')}. Save globally to ~/.config/cva/config.json`);
|
|
115
|
+
console.log(` ${chalk_1.default.cyan('n')}. Don't save — prompt again next time`);
|
|
116
|
+
console.log();
|
|
117
|
+
const input = await new Promise((resolve) => {
|
|
118
|
+
rl.question(' Choice [r/g/n] (default: r): ', (answer) => {
|
|
119
|
+
rl.close();
|
|
120
|
+
resolve(answer.trim().toLowerCase() || 'r');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
return input === 'g' ? 'global' : input === 'n' ? 'none' : 'repo';
|
|
124
|
+
}
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// Auto-match confirmation
|
|
127
|
+
// ============================================================================
|
|
128
|
+
async function confirmAutoMatch(match, sourceSlug) {
|
|
129
|
+
const readline = await import('node:readline');
|
|
130
|
+
console.log();
|
|
131
|
+
console.log(` Auto-matched organization: ${chalk_1.default.bold(match.name)} (${match.slug})`);
|
|
132
|
+
console.log(chalk_1.default.gray(` from repo owner: ${sourceSlug}`));
|
|
133
|
+
console.log();
|
|
134
|
+
console.log(` Register executor under ${match.name}?`);
|
|
135
|
+
console.log(` ${chalk_1.default.cyan('Y')} — yes, use ${match.name}`);
|
|
136
|
+
console.log(` ${chalk_1.default.cyan('n')} — no, abort`);
|
|
137
|
+
console.log(` ${chalk_1.default.cyan('p')} — show the full org list and pick manually`);
|
|
138
|
+
console.log();
|
|
139
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
140
|
+
let attempts = 0;
|
|
141
|
+
while (attempts < 2) {
|
|
142
|
+
const input = await new Promise((resolve) => {
|
|
143
|
+
rl.question(' Choice [Y/n/p] (default: Y): ', (answer) => {
|
|
144
|
+
resolve(answer.trim().toLowerCase() || 'y');
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
if (input === 'y' || input === 'yes') {
|
|
148
|
+
rl.close();
|
|
149
|
+
return 'accept';
|
|
150
|
+
}
|
|
151
|
+
if (input === 'n' || input === 'no') {
|
|
152
|
+
rl.close();
|
|
153
|
+
return 'abort';
|
|
154
|
+
}
|
|
155
|
+
if (input === 'p' || input === 'pick') {
|
|
156
|
+
rl.close();
|
|
157
|
+
return 'pick';
|
|
158
|
+
}
|
|
159
|
+
attempts++;
|
|
160
|
+
if (attempts < 2) {
|
|
161
|
+
console.log(chalk_1.default.yellow(' Invalid input. Enter Y, n, or p.'));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
rl.close();
|
|
165
|
+
return 'abort'; // Two invalid inputs → abort
|
|
166
|
+
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Full interactive picker
|
|
169
|
+
// ============================================================================
|
|
170
|
+
async function pickOrg(orgs, opts) {
|
|
171
|
+
if (!opts.interactive || !process.stdout.isTTY) {
|
|
172
|
+
throw new Error(`CV-Hub requires organization selection. Set CV_HUB_ORG or pass --org. ` +
|
|
173
|
+
`Valid slugs: ${orgs.map(o => o.slug).join(', ')}`);
|
|
174
|
+
}
|
|
175
|
+
const readline = await import('node:readline');
|
|
176
|
+
console.log();
|
|
177
|
+
console.log(chalk_1.default.bold(' CV-Hub requires organization selection.'));
|
|
178
|
+
console.log(chalk_1.default.gray(' Which organization should this executor register under?'));
|
|
179
|
+
console.log();
|
|
180
|
+
orgs.forEach((o, i) => {
|
|
181
|
+
console.log(` ${chalk_1.default.cyan(String(i + 1))}. ${o.name.padEnd(20)} (${chalk_1.default.gray(o.slug)})`);
|
|
182
|
+
});
|
|
183
|
+
console.log(` ${chalk_1.default.cyan('c')}. Cancel`);
|
|
184
|
+
console.log();
|
|
185
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
186
|
+
const input = await new Promise((resolve) => {
|
|
187
|
+
rl.question(' Enter number, slug, or \'c\': ', (answer) => {
|
|
188
|
+
rl.close();
|
|
189
|
+
resolve(answer.trim());
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
if (input.toLowerCase() === 'c' || !input) {
|
|
193
|
+
throw new Error('Registration aborted. Set CV_HUB_ORG or use --org to skip this prompt.');
|
|
194
|
+
}
|
|
195
|
+
let chosen;
|
|
196
|
+
const num = parseInt(input, 10);
|
|
197
|
+
if (!isNaN(num) && num >= 1 && num <= orgs.length) {
|
|
198
|
+
chosen = orgs[num - 1];
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
chosen = orgs.find(o => o.slug.toLowerCase() === input.toLowerCase());
|
|
202
|
+
}
|
|
203
|
+
if (!chosen) {
|
|
204
|
+
throw new Error(`"${input}" doesn't match any organization. Valid: ${orgs.map(o => o.slug).join(', ')}`);
|
|
205
|
+
}
|
|
206
|
+
console.log();
|
|
207
|
+
console.log(` ${chalk_1.default.green('✓')} ${chosen.name} (${chosen.slug})`);
|
|
208
|
+
const persistScope = await promptPersistScope();
|
|
209
|
+
return { chosen, persistScope };
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Error parser
|
|
213
|
+
// ============================================================================
|
|
214
|
+
function parseMultiOrgError(status, body) {
|
|
215
|
+
if (status !== 400)
|
|
216
|
+
return null;
|
|
217
|
+
try {
|
|
218
|
+
const data = JSON.parse(body);
|
|
219
|
+
const orgs = data?.error?.organizations;
|
|
220
|
+
if (Array.isArray(orgs) && orgs.length > 0 && orgs[0]?.id && orgs[0]?.slug) {
|
|
221
|
+
return orgs;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch { }
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=org-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-resolver.js","sourceRoot":"","sources":["../../src/utils/org-resolver.ts"],"names":[],"mappings":"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"}
|