@orchagent/cli 0.2.13 → 0.2.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/dist/commands/doctor.js
CHANGED
|
@@ -18,9 +18,8 @@ function registerDoctorCommand(program) {
|
|
|
18
18
|
else {
|
|
19
19
|
(0, doctor_1.printHumanOutput)(results, summary, options.verbose ?? false);
|
|
20
20
|
}
|
|
21
|
-
// Exit with code 1 if
|
|
22
|
-
|
|
23
|
-
if (hasIssues) {
|
|
21
|
+
// Exit with code 1 only if there are errors (not warnings)
|
|
22
|
+
if (summary.errors > 0) {
|
|
24
23
|
process.exit(1);
|
|
25
24
|
}
|
|
26
25
|
});
|
package/dist/commands/skill.js
CHANGED
|
@@ -160,6 +160,7 @@ Instructions and guidance for AI agents...
|
|
|
160
160
|
.command('install <skill>')
|
|
161
161
|
.description('Install skill to local AI tool directories (Claude Code, Cursor, etc.)')
|
|
162
162
|
.option('--global', 'Install to home directory (default: current directory)')
|
|
163
|
+
.option('--dry-run', 'Show what would be installed without making changes')
|
|
163
164
|
.action(async (skillRef, options) => {
|
|
164
165
|
const resolved = await (0, config_1.getResolvedConfig)();
|
|
165
166
|
const parsed = parseSkillRef(skillRef);
|
|
@@ -185,6 +186,18 @@ ${skillData.description || ''}
|
|
|
185
186
|
|
|
186
187
|
${skillData.prompt}
|
|
187
188
|
`;
|
|
189
|
+
// Dry run - show what would be installed
|
|
190
|
+
if (options.dryRun) {
|
|
191
|
+
process.stdout.write(`Would install ${org}/${parsed.skill}@${parsed.version}\n\n`);
|
|
192
|
+
process.stdout.write(`Target directories:\n`);
|
|
193
|
+
for (const tool of AI_TOOL_SKILL_DIRS) {
|
|
194
|
+
const skillDir = path_1.default.join(baseDir, tool.path);
|
|
195
|
+
const skillFile = path_1.default.join(skillDir, `${parsed.skill}.md`);
|
|
196
|
+
process.stdout.write(` - ${tool.name}: ${skillFile}\n`);
|
|
197
|
+
}
|
|
198
|
+
process.stdout.write(`\nNo changes made (dry run)\n`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
188
201
|
// Install to all AI tool directories
|
|
189
202
|
const installed = [];
|
|
190
203
|
for (const tool of AI_TOOL_SKILL_DIRS) {
|
package/dist/commands/status.js
CHANGED
|
@@ -77,6 +77,10 @@ function registerStatusCommand(program) {
|
|
|
77
77
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
78
78
|
}
|
|
79
79
|
const data = (await response.json());
|
|
80
|
+
// Handle missing or malformed services array
|
|
81
|
+
if (!data.services || !Array.isArray(data.services)) {
|
|
82
|
+
data.services = [];
|
|
83
|
+
}
|
|
80
84
|
if (options.json) {
|
|
81
85
|
(0, output_1.printJson)(data);
|
|
82
86
|
return;
|
|
@@ -101,8 +101,17 @@ async function checkLocalLlmEnvVars() {
|
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
103
103
|
* Run all LLM configuration checks.
|
|
104
|
+
* If server keys are configured, local keys warning becomes informational.
|
|
104
105
|
*/
|
|
105
106
|
async function runLlmChecks() {
|
|
106
|
-
const
|
|
107
|
-
|
|
107
|
+
const serverResult = await checkServerLlmKeys();
|
|
108
|
+
const localResult = await checkLocalLlmEnvVars();
|
|
109
|
+
// If server keys are configured, downgrade local keys warning to info
|
|
110
|
+
// Users who only use server-side calls don't need local keys
|
|
111
|
+
if (serverResult.status === 'success' && localResult.status === 'warning') {
|
|
112
|
+
localResult.status = 'info';
|
|
113
|
+
localResult.message = 'No local LLM API keys (using server keys)';
|
|
114
|
+
localResult.fix = undefined;
|
|
115
|
+
}
|
|
116
|
+
return [serverResult, localResult];
|
|
108
117
|
}
|
|
@@ -11,6 +11,7 @@ const SYMBOLS = {
|
|
|
11
11
|
success: chalk_1.default.green('\u2713'), // checkmark
|
|
12
12
|
warning: chalk_1.default.yellow('\u26a0'), // warning sign
|
|
13
13
|
error: chalk_1.default.red('\u2717'), // X mark
|
|
14
|
+
info: chalk_1.default.blue('\u2139'), // info sign
|
|
14
15
|
};
|
|
15
16
|
// Category display names
|
|
16
17
|
const CATEGORY_NAMES = {
|
|
@@ -65,10 +66,10 @@ function printHumanOutput(results, summary, verbose) {
|
|
|
65
66
|
const displayName = CATEGORY_NAMES[category] || category;
|
|
66
67
|
process.stdout.write(chalk_1.default.bold(`${displayName}\n`));
|
|
67
68
|
for (const check of checks) {
|
|
68
|
-
const symbol = SYMBOLS[check.status];
|
|
69
|
+
const symbol = SYMBOLS[check.status] || SYMBOLS.info;
|
|
69
70
|
process.stdout.write(` ${symbol} ${check.message}\n`);
|
|
70
|
-
// Show fix suggestion for warnings/errors
|
|
71
|
-
if (check.fix && check.status
|
|
71
|
+
// Show fix suggestion for warnings/errors (not for success/info)
|
|
72
|
+
if (check.fix && (check.status === 'warning' || check.status === 'error')) {
|
|
72
73
|
process.stdout.write(chalk_1.default.dim(` \u2192 ${check.fix}\n`));
|
|
73
74
|
}
|
|
74
75
|
// Show details in verbose mode
|
|
@@ -58,10 +58,11 @@ async function runAllChecks() {
|
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
60
|
* Calculate summary statistics from check results.
|
|
61
|
+
* 'info' status counts as passed (informational, not a problem).
|
|
61
62
|
*/
|
|
62
63
|
function calculateSummary(results) {
|
|
63
64
|
return {
|
|
64
|
-
passed: results.filter((r) => r.status === 'success').length,
|
|
65
|
+
passed: results.filter((r) => r.status === 'success' || r.status === 'info').length,
|
|
65
66
|
warnings: results.filter((r) => r.status === 'warning').length,
|
|
66
67
|
errors: results.filter((r) => r.status === 'error').length,
|
|
67
68
|
};
|