@springbrand/cli 0.1.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/README.md +167 -0
- package/dist/commands/auth.d.ts +4 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +241 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check-version.d.ts +3 -0
- package/dist/commands/check-version.d.ts.map +1 -0
- package/dist/commands/check-version.js +112 -0
- package/dist/commands/check-version.js.map +1 -0
- package/dist/commands/config-claude.d.ts +4 -0
- package/dist/commands/config-claude.d.ts.map +1 -0
- package/dist/commands/config-claude.js +78 -0
- package/dist/commands/config-claude.js.map +1 -0
- package/dist/commands/connect.d.ts +41 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +901 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +124 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/upgrade.d.ts +9 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +133 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-detect.d.ts +33 -0
- package/dist/lib/agent-detect.d.ts.map +1 -0
- package/dist/lib/agent-detect.js +81 -0
- package/dist/lib/agent-detect.js.map +1 -0
- package/dist/lib/agent-launcher.d.ts +22 -0
- package/dist/lib/agent-launcher.d.ts.map +1 -0
- package/dist/lib/agent-launcher.js +67 -0
- package/dist/lib/agent-launcher.js.map +1 -0
- package/dist/lib/auth.d.ts +90 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +327 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/bundled-skill.d.ts +5 -0
- package/dist/lib/bundled-skill.d.ts.map +1 -0
- package/dist/lib/bundled-skill.js +13 -0
- package/dist/lib/bundled-skill.js.map +1 -0
- package/dist/lib/claude-config.d.ts +19 -0
- package/dist/lib/claude-config.d.ts.map +1 -0
- package/dist/lib/claude-config.js +202 -0
- package/dist/lib/claude-config.js.map +1 -0
- package/dist/lib/cli-install.d.ts +40 -0
- package/dist/lib/cli-install.d.ts.map +1 -0
- package/dist/lib/cli-install.js +42 -0
- package/dist/lib/cli-install.js.map +1 -0
- package/dist/lib/command-code-config.d.ts +5 -0
- package/dist/lib/command-code-config.d.ts.map +1 -0
- package/dist/lib/command-code-config.js +16 -0
- package/dist/lib/command-code-config.js.map +1 -0
- package/dist/lib/connect-all-auth.d.ts +21 -0
- package/dist/lib/connect-all-auth.d.ts.map +1 -0
- package/dist/lib/connect-all-auth.js +113 -0
- package/dist/lib/connect-all-auth.js.map +1 -0
- package/dist/lib/connect-all-summary.d.ts +10 -0
- package/dist/lib/connect-all-summary.d.ts.map +1 -0
- package/dist/lib/connect-all-summary.js +153 -0
- package/dist/lib/connect-all-summary.js.map +1 -0
- package/dist/lib/connect-all-uninstall.d.ts +7 -0
- package/dist/lib/connect-all-uninstall.d.ts.map +1 -0
- package/dist/lib/connect-all-uninstall.js +249 -0
- package/dist/lib/connect-all-uninstall.js.map +1 -0
- package/dist/lib/connect-all.d.ts +42 -0
- package/dist/lib/connect-all.d.ts.map +1 -0
- package/dist/lib/connect-all.js +438 -0
- package/dist/lib/connect-all.js.map +1 -0
- package/dist/lib/connect-auth.d.ts +7 -0
- package/dist/lib/connect-auth.d.ts.map +1 -0
- package/dist/lib/connect-auth.js +50 -0
- package/dist/lib/connect-auth.js.map +1 -0
- package/dist/lib/connect-clients.d.ts +108 -0
- package/dist/lib/connect-clients.d.ts.map +1 -0
- package/dist/lib/connect-clients.js +358 -0
- package/dist/lib/connect-clients.js.map +1 -0
- package/dist/lib/connect-fallback.d.ts +27 -0
- package/dist/lib/connect-fallback.d.ts.map +1 -0
- package/dist/lib/connect-fallback.js +166 -0
- package/dist/lib/connect-fallback.js.map +1 -0
- package/dist/lib/connect-picker.d.ts +19 -0
- package/dist/lib/connect-picker.d.ts.map +1 -0
- package/dist/lib/connect-picker.js +155 -0
- package/dist/lib/connect-picker.js.map +1 -0
- package/dist/lib/connect-preflight.d.ts +17 -0
- package/dist/lib/connect-preflight.d.ts.map +1 -0
- package/dist/lib/connect-preflight.js +81 -0
- package/dist/lib/connect-preflight.js.map +1 -0
- package/dist/lib/connect-runtime.d.ts +109 -0
- package/dist/lib/connect-runtime.d.ts.map +1 -0
- package/dist/lib/connect-runtime.js +360 -0
- package/dist/lib/connect-runtime.js.map +1 -0
- package/dist/lib/constants.d.ts +23 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +87 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/cursor-config.d.ts +16 -0
- package/dist/lib/cursor-config.d.ts.map +1 -0
- package/dist/lib/cursor-config.js +34 -0
- package/dist/lib/cursor-config.js.map +1 -0
- package/dist/lib/doctor-checks.d.ts +21 -0
- package/dist/lib/doctor-checks.d.ts.map +1 -0
- package/dist/lib/doctor-checks.js +312 -0
- package/dist/lib/doctor-checks.js.map +1 -0
- package/dist/lib/doctor-repairs.d.ts +11 -0
- package/dist/lib/doctor-repairs.d.ts.map +1 -0
- package/dist/lib/doctor-repairs.js +130 -0
- package/dist/lib/doctor-repairs.js.map +1 -0
- package/dist/lib/doctor-report.d.ts +195 -0
- package/dist/lib/doctor-report.d.ts.map +1 -0
- package/dist/lib/doctor-report.js +102 -0
- package/dist/lib/doctor-report.js.map +1 -0
- package/dist/lib/doctor-telemetry.d.ts +9 -0
- package/dist/lib/doctor-telemetry.d.ts.map +1 -0
- package/dist/lib/doctor-telemetry.js +63 -0
- package/dist/lib/doctor-telemetry.js.map +1 -0
- package/dist/lib/harness-detect.d.ts +33 -0
- package/dist/lib/harness-detect.d.ts.map +1 -0
- package/dist/lib/harness-detect.js +70 -0
- package/dist/lib/harness-detect.js.map +1 -0
- package/dist/lib/harness-spec.d.ts +285 -0
- package/dist/lib/harness-spec.d.ts.map +1 -0
- package/dist/lib/harness-spec.js +268 -0
- package/dist/lib/harness-spec.js.map +1 -0
- package/dist/lib/harness.d.ts +27 -0
- package/dist/lib/harness.d.ts.map +1 -0
- package/dist/lib/harness.js +125 -0
- package/dist/lib/harness.js.map +1 -0
- package/dist/lib/hermes-config.d.ts +22 -0
- package/dist/lib/hermes-config.d.ts.map +1 -0
- package/dist/lib/hermes-config.js +76 -0
- package/dist/lib/hermes-config.js.map +1 -0
- package/dist/lib/hermes-env.d.ts +19 -0
- package/dist/lib/hermes-env.d.ts.map +1 -0
- package/dist/lib/hermes-env.js +169 -0
- package/dist/lib/hermes-env.js.map +1 -0
- package/dist/lib/hermes-plugin.d.ts +40 -0
- package/dist/lib/hermes-plugin.d.ts.map +1 -0
- package/dist/lib/hermes-plugin.js +168 -0
- package/dist/lib/hermes-plugin.js.map +1 -0
- package/dist/lib/install-root.d.ts +18 -0
- package/dist/lib/install-root.d.ts.map +1 -0
- package/dist/lib/install-root.js +55 -0
- package/dist/lib/install-root.js.map +1 -0
- package/dist/lib/mcp-config.d.ts +36 -0
- package/dist/lib/mcp-config.d.ts.map +1 -0
- package/dist/lib/mcp-config.js +90 -0
- package/dist/lib/mcp-config.js.map +1 -0
- package/dist/lib/mcp-endpoint.d.ts +16 -0
- package/dist/lib/mcp-endpoint.d.ts.map +1 -0
- package/dist/lib/mcp-endpoint.js +41 -0
- package/dist/lib/mcp-endpoint.js.map +1 -0
- package/dist/lib/mcp-json-config.d.ts +43 -0
- package/dist/lib/mcp-json-config.d.ts.map +1 -0
- package/dist/lib/mcp-json-config.js +164 -0
- package/dist/lib/mcp-json-config.js.map +1 -0
- package/dist/lib/notice.d.ts +13 -0
- package/dist/lib/notice.d.ts.map +1 -0
- package/dist/lib/notice.js +73 -0
- package/dist/lib/notice.js.map +1 -0
- package/dist/lib/omp-config.d.ts +18 -0
- package/dist/lib/omp-config.d.ts.map +1 -0
- package/dist/lib/omp-config.js +73 -0
- package/dist/lib/omp-config.js.map +1 -0
- package/dist/lib/output.d.ts +22 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +92 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/pi-config.d.ts +27 -0
- package/dist/lib/pi-config.d.ts.map +1 -0
- package/dist/lib/pi-config.js +113 -0
- package/dist/lib/pi-config.js.map +1 -0
- package/dist/lib/registration-detect.d.ts +28 -0
- package/dist/lib/registration-detect.d.ts.map +1 -0
- package/dist/lib/registration-detect.js +563 -0
- package/dist/lib/registration-detect.js.map +1 -0
- package/dist/lib/setup-telemetry.d.ts +273 -0
- package/dist/lib/setup-telemetry.d.ts.map +1 -0
- package/dist/lib/setup-telemetry.js +309 -0
- package/dist/lib/setup-telemetry.js.map +1 -0
- package/dist/lib/signals.d.ts +14 -0
- package/dist/lib/signals.d.ts.map +1 -0
- package/dist/lib/signals.js +29 -0
- package/dist/lib/signals.js.map +1 -0
- package/dist/lib/skill-install.d.ts +10 -0
- package/dist/lib/skill-install.d.ts.map +1 -0
- package/dist/lib/skill-install.js +94 -0
- package/dist/lib/skill-install.js.map +1 -0
- package/dist/lib/skill-paths.d.ts +7 -0
- package/dist/lib/skill-paths.d.ts.map +1 -0
- package/dist/lib/skill-paths.js +37 -0
- package/dist/lib/skill-paths.js.map +1 -0
- package/dist/lib/skill-vendor.d.ts +20 -0
- package/dist/lib/skill-vendor.d.ts.map +1 -0
- package/dist/lib/skill-vendor.js +215 -0
- package/dist/lib/skill-vendor.js.map +1 -0
- package/dist/lib/skill.d.ts +14 -0
- package/dist/lib/skill.d.ts.map +1 -0
- package/dist/lib/skill.js +87 -0
- package/dist/lib/skill.js.map +1 -0
- package/dist/lib/verify.d.ts +35 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +169 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/program.d.ts +8 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +54 -0
- package/dist/program.js.map +1 -0
- package/package.json +55 -0
- package/skill/springbrand-action-api/SKILL.md +49 -0
- package/skill/springbrand-action-api/references/action-aliases.md +156 -0
- package/skill/springbrand-action-api/references/action-discovery.md +95 -0
- package/skill/springbrand-connector/SKILL.md +49 -0
- package/skill/springbrand-gtm/SKILL.md +34 -0
- package/skill/springbrand-platform/SKILL.md +55 -0
- package/skill/springbrand-platform/references/plugin-discovery.md +94 -0
- package/skill/use-springbrand/SKILL.md +70 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:connect-all-summary.d.ts + connect-all-summary.impl.js */
|
|
2
|
+
import { finishSetupCommand } from './connect-runtime.js';
|
|
3
|
+
import { harnessSpec } from './harness-spec.js';
|
|
4
|
+
import { HARNESS_COMMANDS, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, RELOAD_ACTION, } from './harness-detect.js';
|
|
5
|
+
// Naming a harness the user does not have is the noise PF-3708 cut.
|
|
6
|
+
const HIDDEN_ONCE_SOMETHING_WORKED = new Set([
|
|
7
|
+
'deselected',
|
|
8
|
+
'not_detected',
|
|
9
|
+
'not_installed',
|
|
10
|
+
]);
|
|
11
|
+
/** A stale config dir is a detection signal with nothing behind it. */
|
|
12
|
+
export function actionable(result) {
|
|
13
|
+
return (result.detected && result.outcome !== 'stale_config' && result.outcome !== 'needs_first_run');
|
|
14
|
+
}
|
|
15
|
+
function absentSummaryLine(result, uninstall) {
|
|
16
|
+
const name = DISPLAY_NAMES[result.harness];
|
|
17
|
+
const next = uninstall
|
|
18
|
+
? 'nothing to remove'
|
|
19
|
+
: `Install ${name}, then run: sp connect ${result.harness}`;
|
|
20
|
+
if (result.outcome === 'not_installed') {
|
|
21
|
+
return `- ${name} — not installed (\`${HARNESS_COMMANDS[result.harness]}\` is on PATH but does not run). ${next}`;
|
|
22
|
+
}
|
|
23
|
+
if (!result.detected) {
|
|
24
|
+
return `- ${name} — not detected (no \`${HARNESS_COMMANDS[result.harness]}\` on PATH, no ${result.configPath}). ${next}`;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function skippedSummaryLine(result) {
|
|
29
|
+
const name = DISPLAY_NAMES[result.harness];
|
|
30
|
+
if (result.outcome === 'stale_config') {
|
|
31
|
+
return `… ${name} — config at ${result.configPath} but no \`${HARNESS_COMMANDS[result.harness]}\` on PATH, skipped. Install ${name}, then run: ${result.fixCommand}`;
|
|
32
|
+
}
|
|
33
|
+
if (result.outcome === 'needs_first_run') {
|
|
34
|
+
return `… ${name} — installed but never run, so ${result.configPath} does not exist yet, skipped. Run \`${HARNESS_COMMANDS[result.harness]}\` once, then: ${result.fixCommand}`;
|
|
35
|
+
}
|
|
36
|
+
if (result.outcome === 'not_reached') {
|
|
37
|
+
return `… ${name} — not reached, the run stopped early. Fix: ${result.fixCommand}`;
|
|
38
|
+
}
|
|
39
|
+
if (result.outcome === 'dry_run') {
|
|
40
|
+
return `… ${name} — ${result.fixCommand}`;
|
|
41
|
+
}
|
|
42
|
+
if (result.outcome === 'no_tty_auth_skip') {
|
|
43
|
+
return `… ${name} — skipped, no stored credentials and no terminal to sign in. Fix: ${result.fixCommand}`;
|
|
44
|
+
}
|
|
45
|
+
if (result.outcome === 'auth_pending') {
|
|
46
|
+
return result.errorMessage
|
|
47
|
+
? `… ${name} — ${result.errorMessage}. Finish it in a terminal: ${result.fixCommand}`
|
|
48
|
+
: `… ${name} — needs a browser sign-in. Run in a terminal: ${result.fixCommand}`;
|
|
49
|
+
}
|
|
50
|
+
if (result.outcome === 'interrupted') {
|
|
51
|
+
return `✗ ${name} — interrupted before finishing. Fix: ${result.fixCommand}`;
|
|
52
|
+
}
|
|
53
|
+
if (result.outcome === 'harness_too_old') {
|
|
54
|
+
return `… ${name} — needs a newer ${name}: ${result.errorMessage} Fix, once upgraded: ${result.fixCommand}`;
|
|
55
|
+
}
|
|
56
|
+
if (result.outcome === 'failed') {
|
|
57
|
+
return `✗ ${name} — install failed: ${result.errorMessage}. Fix: ${result.fixCommand}`;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
function uninstallSummaryLine(result) {
|
|
62
|
+
const name = DISPLAY_NAMES[result.harness];
|
|
63
|
+
if (result.outcome === 'uninstall_pointer') {
|
|
64
|
+
// errorMessage set = a removal was attempted or impossible; absent = no removal command exists.
|
|
65
|
+
return result.errorMessage
|
|
66
|
+
? `… ${name} — ${result.errorMessage} ${result.fixCommand}`
|
|
67
|
+
: `… ${name} — not removed automatically (config is owned by ${name}). Run: ${result.fixCommand}`;
|
|
68
|
+
}
|
|
69
|
+
if (result.outcome === 'uninstall_noop') {
|
|
70
|
+
return `… ${name} — no springbrand entry found, nothing removed`;
|
|
71
|
+
}
|
|
72
|
+
if (result.outcome === 'uninstalled') {
|
|
73
|
+
if (!result.errorMessage)
|
|
74
|
+
return `✓ ${name} — removed`;
|
|
75
|
+
// The removal itself worked; the note is advice, not a failed removal.
|
|
76
|
+
if (!result.removalFailed)
|
|
77
|
+
return `⚠ ${name} — removed, but ${result.errorMessage}`;
|
|
78
|
+
return `✗ ${name} — ${result.errorMessage} Fix: ${result.fixCommand}`;
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
function installedSummaryLine(result) {
|
|
83
|
+
const name = DISPLAY_NAMES[result.harness];
|
|
84
|
+
// The summary is what users read; stderr hints scroll away.
|
|
85
|
+
if (result.postInstallFailed) {
|
|
86
|
+
return (`⚠ ${name} — installed, but a finishing step failed. ` +
|
|
87
|
+
`Fix: ${finishSetupCommand(result.harness)}`);
|
|
88
|
+
}
|
|
89
|
+
// A keyed install has no sign-in left, so the deferred-auth warning would contradict it.
|
|
90
|
+
const authDeferred = harnessSpec(result.harness).authDeferredAtInstall && !result.keyAuthed;
|
|
91
|
+
const verifyLabel = result.verifyDepth ? `verified: ${result.verifyDepth}` : 'not verified';
|
|
92
|
+
if (authDeferred || result.verifyOk === false) {
|
|
93
|
+
const reason = authDeferred
|
|
94
|
+
? 'one step left: sign in when your agent first runs'
|
|
95
|
+
: `verify warning (${verifyLabel}): ${result.verifyReason ?? 'unknown'}`;
|
|
96
|
+
return `⚠ ${name} — installed, ${reason}. Fix: run \`/springbrand:doctor\` in ${name} once it's open.`;
|
|
97
|
+
}
|
|
98
|
+
return `✓ ${name} — installed, ${verifyLabel}`;
|
|
99
|
+
}
|
|
100
|
+
function summaryLine(result, uninstall) {
|
|
101
|
+
return (absentSummaryLine(result, uninstall) ??
|
|
102
|
+
skippedSummaryLine(result) ??
|
|
103
|
+
uninstallSummaryLine(result) ??
|
|
104
|
+
installedSummaryLine(result));
|
|
105
|
+
}
|
|
106
|
+
/** One line for every harness: seven near-identical paragraphs is what this replaces. */
|
|
107
|
+
export function reloadHint(results) {
|
|
108
|
+
const byAction = new Map();
|
|
109
|
+
for (const result of results) {
|
|
110
|
+
if (!result.installed)
|
|
111
|
+
continue;
|
|
112
|
+
const action = RELOAD_ACTION[result.harness];
|
|
113
|
+
byAction.set(action, [...(byAction.get(action) ?? []), DISPLAY_NAMES[result.harness]]);
|
|
114
|
+
}
|
|
115
|
+
if (byAction.size === 0)
|
|
116
|
+
return undefined;
|
|
117
|
+
const parts = [...byAction].map(([action, names]) => `${names.join(', ')} — ${action}`);
|
|
118
|
+
return `SpringBrand tools load when a harness starts. If one is already open: ${parts.join('; ')}.`;
|
|
119
|
+
}
|
|
120
|
+
/** Absent and unpicked harnesses are noise once something real happened. */
|
|
121
|
+
export function renderSummary(results, uninstall) {
|
|
122
|
+
if (!results.some(actionable))
|
|
123
|
+
return results.map((r) => summaryLine(r, uninstall));
|
|
124
|
+
// Ids, not display names: they double as the `connect` argument.
|
|
125
|
+
const skipped = results.filter((r) => r.outcome === 'deselected').map((r) => r.harness);
|
|
126
|
+
const lines = results
|
|
127
|
+
.filter((r) => !HIDDEN_ONCE_SOMETHING_WORKED.has(r.outcome))
|
|
128
|
+
.map((r) => summaryLine(r, uninstall));
|
|
129
|
+
if (skipped.length === 0)
|
|
130
|
+
return lines;
|
|
131
|
+
lines.push('', `Skipped (not selected): ${skipped.join(', ')}`);
|
|
132
|
+
return lines;
|
|
133
|
+
}
|
|
134
|
+
export function computeExitCode(results) {
|
|
135
|
+
// Flag-independent: uninstall interrupts have no other 130 site.
|
|
136
|
+
if (results.some((r) => r.outcome === 'interrupted'))
|
|
137
|
+
return 130;
|
|
138
|
+
// A removal that could not run is a failure, not a silent success.
|
|
139
|
+
if (results.some((r) => r.removalFailed))
|
|
140
|
+
return 1;
|
|
141
|
+
const detected = results.filter(actionable);
|
|
142
|
+
if (detected.length === 0)
|
|
143
|
+
return 1;
|
|
144
|
+
// Only real install attempts count toward the success/failure denominator.
|
|
145
|
+
const attempted = detected.filter((r) => r.outcome === 'installed' ||
|
|
146
|
+
r.outcome === 'failed' ||
|
|
147
|
+
r.outcome === 'harness_too_old' ||
|
|
148
|
+
r.outcome === 'interrupted');
|
|
149
|
+
if (attempted.length === 0)
|
|
150
|
+
return 0;
|
|
151
|
+
return attempted.some((r) => r.outcome === 'installed') ? 0 : 1;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=connect-all-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-all-summary.js","sourceRoot":"","sources":["../../src/lib/connect-all-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:connect-all-uninstall.d.ts + connect-all-uninstall.impl.js */
|
|
2
|
+
import type { Harness } from './harness-detect.js';
|
|
3
|
+
import type { HarnessRunResult } from './connect-all.js';
|
|
4
|
+
export declare function planText(harness: Harness, mcpUrl: string, apiKey?: string): string;
|
|
5
|
+
export declare function uninstallPlanText(harness: Harness): string;
|
|
6
|
+
export declare function uninstallHarness(harness: Harness, configPath: string, verbose: boolean, binaryOnPath: boolean): HarnessRunResult;
|
|
7
|
+
//# sourceMappingURL=connect-all-uninstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-all-uninstall.d.ts","sourceRoot":"","sources":["../../src/lib/connect-all-uninstall.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAazD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAclF;AACD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAkB1D;AA4LD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,gBAAgB,CAyBhI"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:connect-all-uninstall.d.ts + connect-all-uninstall.impl.js */
|
|
2
|
+
import { clearConnectContext, connectContextState } from './auth.js';
|
|
3
|
+
import { NATIVE_BY_HARNESS, openclawSkillUninstall } from './connect-clients.js';
|
|
4
|
+
import { ConnectInterruptedError, spawnRemoval } from './connect-runtime.js';
|
|
5
|
+
import { removeCursorMcpServer, planCursorWrite } from './cursor-config.js';
|
|
6
|
+
import { planOmpWrite, removeOmpMcpServer } from './omp-config.js';
|
|
7
|
+
import { piMcpPath, planPiWrite, removePiMcpServer } from './pi-config.js';
|
|
8
|
+
import { HERMES_KEY_VAR, hermesEnvPath, removeHermesKey, resolveHermesHome } from './hermes-env.js';
|
|
9
|
+
import { clearHermesWebBackends, HERMES_PLUGIN_SHA } from './hermes-plugin.js';
|
|
10
|
+
import { HARNESS_DISPLAY_NAMES as DISPLAY_NAMES } from './harness-detect.js';
|
|
11
|
+
import { errLine } from './output.js';
|
|
12
|
+
// OpenCode ships no `mcp remove`, so the only removal is editing the config it wrote.
|
|
13
|
+
const OPENCODE_UNINSTALL_POINTER = 'remove the springbrand entry from ~/.config/opencode/opencode.json';
|
|
14
|
+
export function planText(harness, mcpUrl, apiKey) {
|
|
15
|
+
if (harness === 'cursor')
|
|
16
|
+
return planCursorWrite(mcpUrl, apiKey);
|
|
17
|
+
if (harness === 'omp')
|
|
18
|
+
return planOmpWrite(mcpUrl, apiKey);
|
|
19
|
+
if (harness === 'pi')
|
|
20
|
+
return planPiWrite(mcpUrl, apiKey);
|
|
21
|
+
// Only the keyed path seeds the .env; a keyless Hermes install writes nothing.
|
|
22
|
+
if (harness === 'hermes' && apiKey) {
|
|
23
|
+
return (`would run \`sp connect hermes\` (harness-owned MCP write; the CLI writes ` +
|
|
24
|
+
`${HERMES_KEY_VAR} to Hermes' .env, installs the springbrand plugin at ` +
|
|
25
|
+
`${HERMES_PLUGIN_SHA.slice(0, 12)}, and points its web backends at springbrand)`);
|
|
26
|
+
}
|
|
27
|
+
return `would run \`sp connect ${harness}\` (harness-owned MCP write; no local file touched by the CLI)`;
|
|
28
|
+
}
|
|
29
|
+
export function uninstallPlanText(harness) {
|
|
30
|
+
if (harness === 'cursor') {
|
|
31
|
+
return 'would remove the springbrand entry from ~/.cursor/mcp.json';
|
|
32
|
+
}
|
|
33
|
+
if (harness === 'omp') {
|
|
34
|
+
return "would remove the springbrand entry from omp's mcp.json (located via `omp config path`)";
|
|
35
|
+
}
|
|
36
|
+
if (harness === 'pi') {
|
|
37
|
+
return `would remove the springbrand entry from ${piMcpPath()}`;
|
|
38
|
+
}
|
|
39
|
+
if (!uninstallRuns(harness)) {
|
|
40
|
+
return `would print \`${uninstallPointer(harness)}\` (no removal command exists)`;
|
|
41
|
+
}
|
|
42
|
+
// Hermes alone leaves a seeded key behind; `mcp remove` never clears it.
|
|
43
|
+
const envNote = harness === 'hermes'
|
|
44
|
+
? ` and clear ${HERMES_KEY_VAR} from Hermes' .env plus its springbrand web backends`
|
|
45
|
+
: '';
|
|
46
|
+
return `would run \`${uninstallPointer(harness)}\`${envNote}`;
|
|
47
|
+
}
|
|
48
|
+
function uninstallRuns(harness) {
|
|
49
|
+
if (harness === 'openclaw') {
|
|
50
|
+
const removal = openclawSkillUninstall();
|
|
51
|
+
return { command: removal.command, runs: [removal.args], timeoutMs: removal.timeoutMs };
|
|
52
|
+
}
|
|
53
|
+
const native = NATIVE_BY_HARNESS.get(harness);
|
|
54
|
+
if (!native || native.removals.length === 0)
|
|
55
|
+
return undefined;
|
|
56
|
+
const extra = native.uninstallExtra ? [native.uninstallExtra.args] : [];
|
|
57
|
+
return { command: native.command, runs: [...native.removals.map((r) => r.args), ...extra] };
|
|
58
|
+
}
|
|
59
|
+
/** Derived from the same args the spawn runs, so the advice cannot drift. */
|
|
60
|
+
function uninstallPointer(harness) {
|
|
61
|
+
const removal = uninstallRuns(harness);
|
|
62
|
+
if (!removal)
|
|
63
|
+
return OPENCODE_UNINSTALL_POINTER;
|
|
64
|
+
// `;` runs every removal but breaks cmd.exe; `&&` is the reverse — see
|
|
65
|
+
// internal-docs/install-command-shell-quirks.md (PS 5.1 stays a known gap).
|
|
66
|
+
const joiner = process.platform === 'win32' ? ' && ' : ' ; ';
|
|
67
|
+
return removal.runs.map((args) => `${removal.command} ${args.join(' ')}`).join(joiner);
|
|
68
|
+
}
|
|
69
|
+
/** `mcp remove` clears neither the key nor the backends we wrote. */
|
|
70
|
+
function clearHermesLocalState() {
|
|
71
|
+
const resolved = resolveHermesHome();
|
|
72
|
+
const home = typeof resolved === 'string' ? resolved : undefined;
|
|
73
|
+
const advisories = [clearHermesEnvKey(home), clearHermesBackends(home)].filter((advisory) => advisory !== undefined);
|
|
74
|
+
return advisories.length > 0 ? advisories.join(' ') : undefined;
|
|
75
|
+
}
|
|
76
|
+
/** Backends left naming an absent provider would break Hermes' web tools. */
|
|
77
|
+
function clearHermesBackends(home) {
|
|
78
|
+
// The key clearer already reported the unresolved home.
|
|
79
|
+
if (!home)
|
|
80
|
+
return undefined;
|
|
81
|
+
try {
|
|
82
|
+
clearHermesWebBackends(home);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
const detail = e instanceof Error ? e.message : String(e);
|
|
87
|
+
return (`could not unset Hermes' springbrand web backends (${detail}). Run \`hermes config unset ` +
|
|
88
|
+
'web.search_backend`, `web.extract_backend` and `web.backend` by hand.');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** `mcp remove` leaves this behind; a stale value gets silently reused. */
|
|
92
|
+
function clearHermesEnvKey(home) {
|
|
93
|
+
const retry = 're-run `sp connect --all --uninstall`';
|
|
94
|
+
if (!home) {
|
|
95
|
+
return (`could not locate Hermes' home, so ${HERMES_KEY_VAR} may still be set in its .env. ` +
|
|
96
|
+
`A stale key is reused by the next install: delete that line, or ${retry}.`);
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
removeHermesKey(home);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
const detail = e instanceof Error ? e.message : String(e);
|
|
104
|
+
return (`could not clear ${HERMES_KEY_VAR} from ${hermesEnvPath(home)} (${detail}). ` +
|
|
105
|
+
`A stale key is reused by the next install: delete that line, or ${retry}.`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Kept on purpose: the entry survives and still interpolates this variable. */
|
|
109
|
+
function hermesKeyKeptAdvisory() {
|
|
110
|
+
return (`left ${HERMES_KEY_VAR} in Hermes' .env because the entry was not removed. ` +
|
|
111
|
+
'Run the command above, then re-run `sp connect --all --uninstall` to clear it.');
|
|
112
|
+
}
|
|
113
|
+
function runRemovalCommands(detection, removal, verbose) {
|
|
114
|
+
const { harness } = detection;
|
|
115
|
+
let removed = false;
|
|
116
|
+
try {
|
|
117
|
+
for (const args of removal.runs) {
|
|
118
|
+
const result = spawnRemoval(removal.command, args, removal.timeoutMs);
|
|
119
|
+
if (result.status !== 0 && verbose) {
|
|
120
|
+
const details = result.stderr?.trim() || result.error?.message || `exit ${result.status}`;
|
|
121
|
+
errLine(`${removal.command} ${args.join(' ')}: ${details}`);
|
|
122
|
+
}
|
|
123
|
+
// Same binary: a spawn-level failure (ENOENT, EPERM) repeats identically.
|
|
124
|
+
if (result.error) {
|
|
125
|
+
return {
|
|
126
|
+
...detection,
|
|
127
|
+
outcome: 'uninstalled',
|
|
128
|
+
removalFailed: true,
|
|
129
|
+
errorMessage: `could not run \`${removal.command} ${args.join(' ')}\` (${result.error.message}) — nothing removed.`,
|
|
130
|
+
fixCommand: uninstallPointer(harness),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Non-zero is ambiguous (nothing registered vs real failure) — the pointer covers both.
|
|
134
|
+
if (result.status === 0)
|
|
135
|
+
removed = true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
if (e instanceof ConnectInterruptedError) {
|
|
140
|
+
return {
|
|
141
|
+
...detection,
|
|
142
|
+
outcome: 'interrupted',
|
|
143
|
+
fixCommand: 'sp connect --all --uninstall',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
throw e;
|
|
147
|
+
}
|
|
148
|
+
return { kind: 'continue', removed };
|
|
149
|
+
}
|
|
150
|
+
function uninstallViaCommands(detection, verbose, binaryOnPath) {
|
|
151
|
+
const { harness } = detection;
|
|
152
|
+
const removal = uninstallRuns(harness);
|
|
153
|
+
if (!removal) {
|
|
154
|
+
return { ...detection, outcome: 'uninstall_pointer', fixCommand: uninstallPointer(harness) };
|
|
155
|
+
}
|
|
156
|
+
// Stale config: the harness binary is gone, so its removal command cannot run.
|
|
157
|
+
// openclaw is exempt — its removal runs through npx, not the harness binary.
|
|
158
|
+
if (harness !== 'openclaw' && !binaryOnPath) {
|
|
159
|
+
return {
|
|
160
|
+
...detection,
|
|
161
|
+
outcome: 'uninstall_pointer',
|
|
162
|
+
errorMessage: `no \`${removal.command}\` binary on PATH — nothing to run.`,
|
|
163
|
+
fixCommand: `Reinstall ${DISPLAY_NAMES[harness]} first, then: ${uninstallPointer(harness)}`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Absent marker = never connected here, so a non-zero removal exit is a no-op.
|
|
167
|
+
// Unreadable config cannot prove that, so it keeps the pointer.
|
|
168
|
+
const connectedBefore = connectContextState(harness) !== 'absent';
|
|
169
|
+
const ran = runRemovalCommands(detection, removal, verbose);
|
|
170
|
+
if (!('kind' in ran))
|
|
171
|
+
return ran;
|
|
172
|
+
if (ran.removed) {
|
|
173
|
+
// Kept marker makes doctor emit a registration-lost repair that undoes this.
|
|
174
|
+
clearConnectContext(harness);
|
|
175
|
+
return { ...detection, outcome: 'uninstalled' };
|
|
176
|
+
}
|
|
177
|
+
if (!connectedBefore)
|
|
178
|
+
return { ...detection, outcome: 'uninstall_noop' };
|
|
179
|
+
return {
|
|
180
|
+
...detection,
|
|
181
|
+
outcome: 'uninstall_pointer',
|
|
182
|
+
errorMessage: 'could not confirm removal (command exited non-zero; there may have been nothing to remove).',
|
|
183
|
+
fixCommand: `Retry by hand: ${uninstallPointer(harness)}`,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const MCP_JSON_UNINSTALLS = {
|
|
187
|
+
cursor: {
|
|
188
|
+
remove: removeCursorMcpServer,
|
|
189
|
+
fix: 'Fix ~/.cursor/mcp.json by hand, then re-run: sp connect --all --uninstall',
|
|
190
|
+
},
|
|
191
|
+
omp: {
|
|
192
|
+
remove: removeOmpMcpServer,
|
|
193
|
+
fix: "Fix omp's mcp.json (at `omp config path`) by hand, then re-run: sp connect --all --uninstall",
|
|
194
|
+
},
|
|
195
|
+
pi: {
|
|
196
|
+
remove: removePiMcpServer,
|
|
197
|
+
fix: `Fix ${piMcpPath()} by hand, then re-run: sp connect --all --uninstall`,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
function uninstallMcpJson(detection, spec) {
|
|
201
|
+
let result;
|
|
202
|
+
try {
|
|
203
|
+
result = spec.remove();
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
result = { status: 'corrupt_skip', error: e instanceof Error ? e.message : String(e) };
|
|
207
|
+
}
|
|
208
|
+
if (result.status === 'corrupt_skip') {
|
|
209
|
+
return {
|
|
210
|
+
...detection,
|
|
211
|
+
outcome: 'uninstalled',
|
|
212
|
+
removalFailed: true,
|
|
213
|
+
errorMessage: `could not update ${DISPLAY_NAMES[detection.harness]}'s mcp.json (${result.error}) — nothing removed.`,
|
|
214
|
+
fixCommand: spec.fix,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (result.status === 'unchanged') {
|
|
218
|
+
return { ...detection, outcome: 'uninstall_noop' };
|
|
219
|
+
}
|
|
220
|
+
clearConnectContext(detection.harness);
|
|
221
|
+
return { ...detection, outcome: 'uninstalled' };
|
|
222
|
+
}
|
|
223
|
+
export function uninstallHarness(harness, configPath, verbose, binaryOnPath) {
|
|
224
|
+
const detection = {
|
|
225
|
+
harness,
|
|
226
|
+
detected: true,
|
|
227
|
+
configPath,
|
|
228
|
+
installed: false,
|
|
229
|
+
outcome: 'uninstall_noop',
|
|
230
|
+
};
|
|
231
|
+
const mcpJson = MCP_JSON_UNINSTALLS[harness];
|
|
232
|
+
const result = mcpJson
|
|
233
|
+
? uninstallMcpJson(detection, mcpJson)
|
|
234
|
+
: uninstallViaCommands(detection, verbose, binaryOnPath);
|
|
235
|
+
if (harness !== 'hermes')
|
|
236
|
+
return result;
|
|
237
|
+
// Clearing a key the entry still references would break a working install.
|
|
238
|
+
const removed = !result.removalFailed &&
|
|
239
|
+
(result.outcome === 'uninstalled' || result.outcome === 'uninstall_noop');
|
|
240
|
+
const advisory = removed ? clearHermesLocalState() : hermesKeyKeptAdvisory();
|
|
241
|
+
if (!advisory)
|
|
242
|
+
return result;
|
|
243
|
+
// Appended, never replacing: an advisory must not hide the removal's message.
|
|
244
|
+
return {
|
|
245
|
+
...result,
|
|
246
|
+
errorMessage: result.errorMessage ? `${result.errorMessage} ${advisory}` : advisory,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=connect-all-uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-all-uninstall.js","sourceRoot":"","sources":["../../src/lib/connect-all-uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:connect-all.d.ts + connect-all.impl.js */
|
|
2
|
+
import type { Harness, HarnessDetection } from './harness-detect.js';
|
|
3
|
+
import type { VerifyDepth } from './verify.js';
|
|
4
|
+
/** The harness has never created its dir, so connecting would build one it does not own. */
|
|
5
|
+
export declare function needsFirstRun(detection: HarnessDetection): boolean;
|
|
6
|
+
export declare function runConnectAll(opts: ConnectAllOptions): Promise<number>;
|
|
7
|
+
export declare const FIRST_TASK_PROMPT: string;
|
|
8
|
+
export type Outcome = 'not_detected' | 'not_installed' | 'stale_config' | 'needs_first_run' | 'installed' | 'failed' | 'harness_too_old' | 'interrupted' | 'auth_pending' | 'no_tty_auth_skip' | 'uninstalled' | 'uninstall_noop' | 'uninstall_pointer' | 'dry_run' | 'not_reached' | 'deselected';
|
|
9
|
+
export type HarnessResultBase = {
|
|
10
|
+
harness: Harness;
|
|
11
|
+
detected: boolean;
|
|
12
|
+
configPath: string;
|
|
13
|
+
installed: boolean;
|
|
14
|
+
};
|
|
15
|
+
export interface HarnessRunResult extends HarnessResultBase {
|
|
16
|
+
outcome: Outcome;
|
|
17
|
+
fixCommand?: string;
|
|
18
|
+
errorMessage?: string;
|
|
19
|
+
verifyDepth?: VerifyDepth;
|
|
20
|
+
verifyOk?: boolean;
|
|
21
|
+
verifyReason?: string;
|
|
22
|
+
keyAuthed?: boolean;
|
|
23
|
+
/** MCP works, but a finishing step (CLI/skill/auth) failed. */
|
|
24
|
+
postInstallFailed?: boolean;
|
|
25
|
+
/** Removal itself failed; an advisory note alone must not exit 1. */
|
|
26
|
+
removalFailed?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface ConnectAllOptions {
|
|
29
|
+
apiKey?: string;
|
|
30
|
+
mcpUrl: string;
|
|
31
|
+
dryRun: boolean;
|
|
32
|
+
uninstall: boolean;
|
|
33
|
+
/** Skip the end-of-install agent launch (finale still prints the ask). */
|
|
34
|
+
noLaunch?: boolean;
|
|
35
|
+
/** Bare connect: offer the checkbox picker over the detected harnesses. */
|
|
36
|
+
pick?: boolean;
|
|
37
|
+
/** Inherit subprocess stdio instead of replaying it only on failure. */
|
|
38
|
+
verbose?: boolean;
|
|
39
|
+
/** Setup-page id riding in on --url; joins "copied the command" to this run. */
|
|
40
|
+
attemptId?: string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=connect-all.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-all.d.ts","sourceRoot":"","sources":["../../src/lib/connect-all.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAgJ7D,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAElE;AAwLD,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkE5E;AACD,eAAO,MAAM,iBAAiB,EAAE,MAUH,CAAC;AAyC9B,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,iBAAiB,GAAG,aAAa,GAAG,cAAc,GAAG,kBAAkB,GAAG,aAAa,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;AAEnS,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
|