@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,285 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:harness-spec.d.ts + harness-spec.impl.js */
|
|
2
|
+
/** One entry per harness; every per-harness list derives from it. */
|
|
3
|
+
export declare const HARNESS_SPECS: {
|
|
4
|
+
'claude-code': {
|
|
5
|
+
command: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
configDir: string;
|
|
8
|
+
reloadAction: string;
|
|
9
|
+
skillAgent: "claude-code";
|
|
10
|
+
nonInteractiveAdd: true;
|
|
11
|
+
supportCheck: {
|
|
12
|
+
args: string[];
|
|
13
|
+
patterns: RegExp[];
|
|
14
|
+
optionalPatterns: RegExp[];
|
|
15
|
+
keyAuthPattern: RegExp;
|
|
16
|
+
unavailableMessage: string;
|
|
17
|
+
};
|
|
18
|
+
urlStyle: "positional";
|
|
19
|
+
addFlags: string[];
|
|
20
|
+
header: {
|
|
21
|
+
name: string;
|
|
22
|
+
sep: ": ";
|
|
23
|
+
valuePrefix: string;
|
|
24
|
+
};
|
|
25
|
+
loginArgs: string[];
|
|
26
|
+
degradedAuthNotes: {
|
|
27
|
+
keyed: string;
|
|
28
|
+
deferred: string;
|
|
29
|
+
};
|
|
30
|
+
removals: {
|
|
31
|
+
args: string[];
|
|
32
|
+
label: string;
|
|
33
|
+
}[];
|
|
34
|
+
};
|
|
35
|
+
codex: {
|
|
36
|
+
command: string;
|
|
37
|
+
displayName: string;
|
|
38
|
+
configDir: string;
|
|
39
|
+
reloadAction: string;
|
|
40
|
+
skillAgent: "codex";
|
|
41
|
+
supportCheck: {
|
|
42
|
+
args: string[];
|
|
43
|
+
patterns: RegExp[];
|
|
44
|
+
optionalPatterns: RegExp[];
|
|
45
|
+
keyAuthPattern: RegExp;
|
|
46
|
+
unavailableMessage: string;
|
|
47
|
+
};
|
|
48
|
+
urlStyle: "flag";
|
|
49
|
+
keyEnvFlag: string;
|
|
50
|
+
degradedAuthNotes: {
|
|
51
|
+
keyed: string;
|
|
52
|
+
deferred: string;
|
|
53
|
+
};
|
|
54
|
+
loginArgs: string[];
|
|
55
|
+
authDeferredAtInstall: true;
|
|
56
|
+
};
|
|
57
|
+
'command-code': {
|
|
58
|
+
command: string;
|
|
59
|
+
displayName: string;
|
|
60
|
+
configDir: string;
|
|
61
|
+
reloadAction: string;
|
|
62
|
+
skillAgent: "command-code";
|
|
63
|
+
supportCheck: {
|
|
64
|
+
args: string[];
|
|
65
|
+
patterns: RegExp[];
|
|
66
|
+
timeoutMs: number;
|
|
67
|
+
unavailableMessage: string;
|
|
68
|
+
};
|
|
69
|
+
keyRequired: true;
|
|
70
|
+
header: {
|
|
71
|
+
name: string;
|
|
72
|
+
sep: ": ";
|
|
73
|
+
valuePrefix: string;
|
|
74
|
+
};
|
|
75
|
+
keyedAddJsonFlags: string[];
|
|
76
|
+
removals: {
|
|
77
|
+
args: string[];
|
|
78
|
+
label: string;
|
|
79
|
+
}[];
|
|
80
|
+
};
|
|
81
|
+
cursor: {
|
|
82
|
+
command: string;
|
|
83
|
+
displayName: string;
|
|
84
|
+
configDir: string;
|
|
85
|
+
reloadAction: string;
|
|
86
|
+
skillAgent: "cursor";
|
|
87
|
+
readableWithoutBinary: true;
|
|
88
|
+
canVerifyAuth: true;
|
|
89
|
+
keyHeldByCli: true;
|
|
90
|
+
cliWritesConfig: true;
|
|
91
|
+
};
|
|
92
|
+
grok: {
|
|
93
|
+
command: string;
|
|
94
|
+
displayName: string;
|
|
95
|
+
configDir: string;
|
|
96
|
+
reloadAction: string;
|
|
97
|
+
nonInteractiveAdd: true;
|
|
98
|
+
supportCheck: {
|
|
99
|
+
args: string[];
|
|
100
|
+
patterns: RegExp[];
|
|
101
|
+
keyAuthPattern: RegExp;
|
|
102
|
+
unavailableMessage: string;
|
|
103
|
+
};
|
|
104
|
+
urlStyle: "positional";
|
|
105
|
+
addFlags: string[];
|
|
106
|
+
header: {
|
|
107
|
+
name: string;
|
|
108
|
+
sep: ": ";
|
|
109
|
+
valuePrefix: string;
|
|
110
|
+
viaEnv: true;
|
|
111
|
+
};
|
|
112
|
+
signInHint: string;
|
|
113
|
+
};
|
|
114
|
+
hermes: {
|
|
115
|
+
command: string;
|
|
116
|
+
displayName: string;
|
|
117
|
+
configDir: string;
|
|
118
|
+
reloadAction: string;
|
|
119
|
+
skillAgent: "hermes-agent";
|
|
120
|
+
keyRequired: true;
|
|
121
|
+
supportCheck: {
|
|
122
|
+
args: string[];
|
|
123
|
+
patterns: RegExp[];
|
|
124
|
+
keyAuthPattern: RegExp;
|
|
125
|
+
unavailableMessage: string;
|
|
126
|
+
};
|
|
127
|
+
urlStyle: "flag";
|
|
128
|
+
keyAddFlags: string[];
|
|
129
|
+
uninstallExtra: {
|
|
130
|
+
args: string[];
|
|
131
|
+
label: string;
|
|
132
|
+
};
|
|
133
|
+
postConnectNote: string;
|
|
134
|
+
keyHeldByCli: true;
|
|
135
|
+
};
|
|
136
|
+
omp: {
|
|
137
|
+
command: string;
|
|
138
|
+
displayName: string;
|
|
139
|
+
configDir: string;
|
|
140
|
+
reloadAction: string;
|
|
141
|
+
canVerifyAuth: true;
|
|
142
|
+
keyHeldByCli: true;
|
|
143
|
+
cliWritesConfig: true;
|
|
144
|
+
};
|
|
145
|
+
openclaw: {
|
|
146
|
+
command: string;
|
|
147
|
+
displayName: string;
|
|
148
|
+
configDir: string;
|
|
149
|
+
reloadAction: string;
|
|
150
|
+
supportCheck: {
|
|
151
|
+
args: string[];
|
|
152
|
+
patterns: RegExp[];
|
|
153
|
+
variants: string[];
|
|
154
|
+
unknownVariant: RegExp;
|
|
155
|
+
timeoutMs: number;
|
|
156
|
+
unavailableMessage: string;
|
|
157
|
+
};
|
|
158
|
+
signInViaCliLogin: true;
|
|
159
|
+
canVerifyAuth: true;
|
|
160
|
+
keyHeldByCli: true;
|
|
161
|
+
};
|
|
162
|
+
opencode: {
|
|
163
|
+
command: string;
|
|
164
|
+
displayName: string;
|
|
165
|
+
configDir: string;
|
|
166
|
+
reloadAction: string;
|
|
167
|
+
skillAgent: "opencode";
|
|
168
|
+
nonInteractiveAdd: true;
|
|
169
|
+
supportCheck: {
|
|
170
|
+
args: string[];
|
|
171
|
+
patterns: RegExp[];
|
|
172
|
+
keyAuthPattern: RegExp;
|
|
173
|
+
unavailableMessage: string;
|
|
174
|
+
};
|
|
175
|
+
urlStyle: "flag";
|
|
176
|
+
header: {
|
|
177
|
+
name: string;
|
|
178
|
+
sep: "=";
|
|
179
|
+
valuePrefix: string;
|
|
180
|
+
};
|
|
181
|
+
loginArgs: string[];
|
|
182
|
+
removals: never[];
|
|
183
|
+
postConnectNote: string;
|
|
184
|
+
};
|
|
185
|
+
pi: {
|
|
186
|
+
command: string;
|
|
187
|
+
displayName: string;
|
|
188
|
+
configDir: string;
|
|
189
|
+
reloadAction: string;
|
|
190
|
+
skillAgent: "pi";
|
|
191
|
+
canVerifyAuth: true;
|
|
192
|
+
keyHeldByCli: true;
|
|
193
|
+
cliWritesConfig: true;
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
export declare const ALL_HARNESSES: Harness[];
|
|
197
|
+
export declare function harnessSpec(harness: Harness): HarnessSpec;
|
|
198
|
+
/** Native MCP harnesses generate an add; key-only ones generate only the keyed form. */
|
|
199
|
+
export declare const NATIVE_HARNESSES: ("openclaw" | "omp" | "grok" | "cursor" | "codex" | "hermes" | "command-code" | "opencode" | "pi" | "claude-code")[];
|
|
200
|
+
export type SkillAgent = 'claude-code' | 'codex' | 'command-code' | 'cursor' | 'hermes-agent' | 'opencode' | 'pi';
|
|
201
|
+
export interface HarnessSupportCheck {
|
|
202
|
+
args: string[];
|
|
203
|
+
/** Missing → nothing can work; setup fails. */
|
|
204
|
+
patterns: RegExp[];
|
|
205
|
+
/** Missing → degrade to key or deferred auth, never refuse. */
|
|
206
|
+
optionalPatterns?: RegExp[];
|
|
207
|
+
/** Missing → this install cannot take a stored key; fall back to OAuth. */
|
|
208
|
+
keyAuthPattern?: RegExp;
|
|
209
|
+
/** Ordered alternative flags in one help output; first match wins. */
|
|
210
|
+
variants?: string[];
|
|
211
|
+
/** Matches an alternative we do not know; renames fail loudly. */
|
|
212
|
+
unknownVariant?: RegExp;
|
|
213
|
+
/** Defaults to NON_INTERACTIVE_TIMEOUT_MS; raise for a slow cold start. */
|
|
214
|
+
timeoutMs?: number;
|
|
215
|
+
unavailableMessage: string;
|
|
216
|
+
}
|
|
217
|
+
export interface HarnessSpec {
|
|
218
|
+
command: string;
|
|
219
|
+
displayName: string;
|
|
220
|
+
/** Home-relative; existing dir means the harness ran here once. */
|
|
221
|
+
configDir: string;
|
|
222
|
+
/** MCP config is read at startup; a running harness needs this to see SpringBrand. */
|
|
223
|
+
reloadAction: string;
|
|
224
|
+
skillAgent?: SkillAgent;
|
|
225
|
+
/** Absent for Cursor: its connect writes mcp.json, no binary probe. */
|
|
226
|
+
supportCheck?: HarnessSupportCheck;
|
|
227
|
+
/** Capturable: this `mcp add` never runs OAuth inline; unset stays inherited. */
|
|
228
|
+
nonInteractiveAdd?: true;
|
|
229
|
+
/** Present only on native MCP harnesses; absent means connect is an override. */
|
|
230
|
+
urlStyle?: 'flag' | 'positional';
|
|
231
|
+
/** "positional": before `springbrand <url>`. "flag": after `--url <url>`. */
|
|
232
|
+
addFlags?: string[];
|
|
233
|
+
/** Keyed adds append `--header` built from these parts. */
|
|
234
|
+
header?: {
|
|
235
|
+
name: string;
|
|
236
|
+
sep: ': ' | '=';
|
|
237
|
+
valuePrefix?: string;
|
|
238
|
+
viaEnv?: boolean;
|
|
239
|
+
};
|
|
240
|
+
/** Keyed adds append this flag plus the env var name (Codex). */
|
|
241
|
+
keyEnvFlag?: string;
|
|
242
|
+
/** Keyed adds append these flags; the key itself is seeded elsewhere (Hermes). */
|
|
243
|
+
keyAddFlags?: string[];
|
|
244
|
+
/** Keyed adds go through `mcp add-json`, which takes the URL and header in its body. */
|
|
245
|
+
keyedAddJsonFlags?: string[];
|
|
246
|
+
/** No sign-in exists here, so connect refuses a keyless install (Hermes). */
|
|
247
|
+
keyRequired?: true;
|
|
248
|
+
loginArgs?: string[];
|
|
249
|
+
/** Default: one `mcp remove springbrand` labeled from displayName. */
|
|
250
|
+
removals?: {
|
|
251
|
+
args: string[];
|
|
252
|
+
label: string;
|
|
253
|
+
}[];
|
|
254
|
+
/** Extra --uninstall row beyond `removals`; never runs pre-add. */
|
|
255
|
+
uninstallExtra?: {
|
|
256
|
+
args: string[];
|
|
257
|
+
label: string;
|
|
258
|
+
};
|
|
259
|
+
/** Shown when a keyless install leaves sign-in to the harness. */
|
|
260
|
+
signInHint?: string;
|
|
261
|
+
/** Replaces the `loginArgs` step when `supportCheck.optionalPatterns` miss. */
|
|
262
|
+
degradedAuthNotes?: {
|
|
263
|
+
keyed: string;
|
|
264
|
+
deferred: string;
|
|
265
|
+
};
|
|
266
|
+
/** Printed after a successful connect, on both the launch and non-launch paths. */
|
|
267
|
+
postConnectNote?: string;
|
|
268
|
+
/** Sign-in is the CLI's own interactive `sp auth login`. */
|
|
269
|
+
signInViaCliLogin?: true;
|
|
270
|
+
/** Stored-key auth verification works against this harness's config. */
|
|
271
|
+
canVerifyAuth?: true;
|
|
272
|
+
/** The CLI holds or writes the key; no harness `mcp add` carries it. */
|
|
273
|
+
keyHeldByCli?: true;
|
|
274
|
+
/** Connect writes the MCP config file; no harness binary is spawned. */
|
|
275
|
+
cliWritesConfig?: true;
|
|
276
|
+
/** A second reader (Cursor's IDE) loads the config with no harness binary on PATH. */
|
|
277
|
+
readableWithoutBinary?: true;
|
|
278
|
+
/** `mcp add` succeeds unauthenticated; OAuth lands at first tool use. */
|
|
279
|
+
authDeferredAtInstall?: true;
|
|
280
|
+
}
|
|
281
|
+
export type Harness = keyof typeof HARNESS_SPECS;
|
|
282
|
+
export type NonNativeHarness = {
|
|
283
|
+
[K in Harness]: 'urlStyle' extends keyof (typeof HARNESS_SPECS)[K] ? never : 'keyRequired' extends keyof (typeof HARNESS_SPECS)[K] ? never : K;
|
|
284
|
+
}[Harness];
|
|
285
|
+
//# sourceMappingURL=harness-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-spec.d.ts","sourceRoot":"","sources":["../../src/lib/harness-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:harness-spec.d.ts + harness-spec.impl.js */
|
|
2
|
+
import { HERMES_PLUGIN_NAME } from './constants.js';
|
|
3
|
+
// An old install is only one reason a flag can go unseen, so no message asserts the cause.
|
|
4
|
+
const SUPPORT_CHECK_DEBUG_HINT = ' Set SPRINGBRAND_DEBUG=1 and retry to print the help output SpringBrand read.';
|
|
5
|
+
const MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Claude Code installation exposes `claude mcp add`: `claude mcp ' +
|
|
6
|
+
'--help` did not list it. Update Claude Code with `claude update` and retry.' +
|
|
7
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
8
|
+
// `claude mcp login` only exists upstream from Claude Code 2.1.186; older installs still register.
|
|
9
|
+
const CLAUDE_CODE_KEYED_FALLBACK_NOTE = 'Using your stored SpringBrand API key: this Claude Code predates one-command sign-in ' +
|
|
10
|
+
'(`claude mcp login`), so no browser sign-in is needed.';
|
|
11
|
+
const CLAUDE_CODE_DEFERRED_AUTH_NOTE = 'SpringBrand is registered in Claude Code but not signed in: this Claude Code predates ' +
|
|
12
|
+
'one-command sign-in (`claude mcp login`). Open Claude Code and run `/mcp` to sign in to ' +
|
|
13
|
+
'SpringBrand. `claude update` gets you one-command sign-in. Already have a SpringBrand API key? ' +
|
|
14
|
+
'Run `sp connect claude-code --api-key <key>` instead.';
|
|
15
|
+
const CODEX_MCP_URL_UNAVAILABLE_MESSAGE = 'Could not confirm this Codex installation supports remote MCP servers: `codex mcp add ' +
|
|
16
|
+
'--help` did not list `--url`. Update Codex and retry, or add SpringBrand manually with ' +
|
|
17
|
+
'`codex mcp add`.' +
|
|
18
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
19
|
+
const CODEX_KEYED_FALLBACK_NOTE = 'Using your stored SpringBrand API key: this Codex cannot report whether an OAuth sign-in ' +
|
|
20
|
+
'finished, so no browser sign-in is attempted.';
|
|
21
|
+
const CODEX_DEFERRED_AUTH_NOTE = 'SpringBrand is registered in Codex but not signed in: this Codex predates reliable sign-in ' +
|
|
22
|
+
'reporting. Run `codex mcp login springbrand` to sign in, or update Codex with ' +
|
|
23
|
+
'`npm install -g @openai/codex@latest` for one-command sign-in.';
|
|
24
|
+
const HERMES_OAUTH_UNAVAILABLE_MESSAGE = 'Could not confirm this Hermes installation supports one-command MCP authentication: `hermes ' +
|
|
25
|
+
'mcp add --help` did not list `--auth oauth`. Update Hermes and retry, or add SpringBrand ' +
|
|
26
|
+
'manually with `hermes mcp add`.' +
|
|
27
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
28
|
+
const GROK_HTTP_UNAVAILABLE_MESSAGE = 'Could not confirm this Grok installation supports remote MCP servers: `grok mcp add --help` ' +
|
|
29
|
+
'did not list `--transport`. Update Grok and retry, or add SpringBrand manually with ' +
|
|
30
|
+
'`grok mcp add`.' +
|
|
31
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
32
|
+
// Grok has no `mcp login`; sign-in only happens inside the TUI. No key nudge here: a revoked
|
|
33
|
+
// key leaves Grok with no OAuth fallback, and doctor cannot spot that yet (PF-3618).
|
|
34
|
+
const GROK_SIGN_IN_HINT = 'SpringBrand is registered in Grok. Open Grok, run `/mcps`, select springbrand, and press `i` to ' +
|
|
35
|
+
'sign in.';
|
|
36
|
+
const OPENCLAW_SKILL_UNAVAILABLE_MESSAGE = 'Could not confirm this OpenClaw installation supports global skill installation: `openclaw ' +
|
|
37
|
+
'skills install --help` did not list `--global`. Update OpenClaw and retry, or install ' +
|
|
38
|
+
'manually with `openclaw skills install @springbrand/springbrand --global`.' +
|
|
39
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
40
|
+
const OPENCODE_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this OpenCode installation supports one-command MCP setup: `opencode mcp ' +
|
|
41
|
+
'add --help` did not list `--url`. Update OpenCode and retry, or add SpringBrand manually with ' +
|
|
42
|
+
'`opencode mcp add`.' +
|
|
43
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
44
|
+
// OpenCode is model-agnostic (unlike Claude Code / Codex), so a fresh install can default to a
|
|
45
|
+
// model with no tool support — SpringBrand runs entirely on tool calls, so it would fail there.
|
|
46
|
+
const OPENCODE_MODEL_NOTE = 'Note: SpringBrand runs on tool calls, so OpenCode needs a model that supports tool use. Image-only ' +
|
|
47
|
+
'models (e.g. Nano Banana Pro) will show "No endpoints found that support tool use" — switch ' +
|
|
48
|
+
"OpenCode's model if the walkthrough can't start.";
|
|
49
|
+
const HERMES_RESTART_NOTE = 'Restart your Hermes session to pick up SpringBrand — Hermes discovers MCP servers at startup.';
|
|
50
|
+
const COMMAND_CODE_ADD_JSON_UNAVAILABLE_MESSAGE = 'Could not confirm this Command Code installation supports keyed MCP setup: `commandcode mcp ' +
|
|
51
|
+
'--help` did not list `add-json`. Run `commandcode update` and retry.' +
|
|
52
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
53
|
+
const HEADER_FLAG = /(?:^|\s)--header(?:[\s<=]|$)/m;
|
|
54
|
+
const ADD_JSON_COMMAND = /^\s*add-json(?:\s|\[)/m;
|
|
55
|
+
/** One entry per harness; every per-harness list derives from it. */
|
|
56
|
+
export const HARNESS_SPECS = {
|
|
57
|
+
'claude-code': {
|
|
58
|
+
command: 'claude',
|
|
59
|
+
displayName: 'Claude Code',
|
|
60
|
+
configDir: '.claude',
|
|
61
|
+
reloadAction: 'restart it',
|
|
62
|
+
skillAgent: 'claude-code',
|
|
63
|
+
nonInteractiveAdd: true,
|
|
64
|
+
supportCheck: {
|
|
65
|
+
args: ['mcp', '--help'],
|
|
66
|
+
patterns: [/^\s*add(?:\s|\[)/m],
|
|
67
|
+
optionalPatterns: [/^\s*login(?:\s|\[)/m],
|
|
68
|
+
keyAuthPattern: HEADER_FLAG,
|
|
69
|
+
unavailableMessage: MCP_ADD_UNAVAILABLE_MESSAGE,
|
|
70
|
+
},
|
|
71
|
+
urlStyle: 'positional',
|
|
72
|
+
addFlags: ['--scope', 'user', '--transport', 'http'],
|
|
73
|
+
header: { name: 'Authorization', sep: ': ', valuePrefix: 'Bearer ' },
|
|
74
|
+
loginArgs: ['mcp', 'login', 'springbrand'],
|
|
75
|
+
degradedAuthNotes: {
|
|
76
|
+
keyed: CLAUDE_CODE_KEYED_FALLBACK_NOTE,
|
|
77
|
+
deferred: CLAUDE_CODE_DEFERRED_AUTH_NOTE,
|
|
78
|
+
},
|
|
79
|
+
// Project scope is shared in .mcp.json; a user setup command must not rewrite it.
|
|
80
|
+
removals: [
|
|
81
|
+
{
|
|
82
|
+
args: ['mcp', 'remove', 'springbrand', '--scope', 'user'],
|
|
83
|
+
label: 'user SpringBrand registration',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
args: ['mcp', 'remove', 'springbrand', '--scope', 'local'],
|
|
87
|
+
label: 'local SpringBrand registration',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
codex: {
|
|
92
|
+
command: 'codex',
|
|
93
|
+
displayName: 'Codex',
|
|
94
|
+
configDir: '.codex',
|
|
95
|
+
reloadAction: 'restart it',
|
|
96
|
+
skillAgent: 'codex',
|
|
97
|
+
supportCheck: {
|
|
98
|
+
args: ['mcp', 'add', '--help'],
|
|
99
|
+
patterns: [/--url(?:[\s<=]|$)/m],
|
|
100
|
+
// Codex before ~0.142 reports `o_auth` for a server it never signed in to, so the
|
|
101
|
+
// sign-in probe lies; `--oauth-resource` is the only marker separating the two.
|
|
102
|
+
optionalPatterns: [/--oauth-resource(?:[\s<=]|$)/m],
|
|
103
|
+
keyAuthPattern: /(?:^|\s)--bearer-token-env-var(?:[\s<=]|$)/m,
|
|
104
|
+
unavailableMessage: CODEX_MCP_URL_UNAVAILABLE_MESSAGE,
|
|
105
|
+
},
|
|
106
|
+
urlStyle: 'flag',
|
|
107
|
+
// Codex has no `--header`; it sends the variable's value as `Bearer <key>`, which is
|
|
108
|
+
// exactly what `/mcp` reads.
|
|
109
|
+
keyEnvFlag: '--bearer-token-env-var',
|
|
110
|
+
degradedAuthNotes: { keyed: CODEX_KEYED_FALLBACK_NOTE, deferred: CODEX_DEFERRED_AUTH_NOTE },
|
|
111
|
+
// `--oauth-resource` duplicates the resource Codex discovers; Clerk rejects both.
|
|
112
|
+
// `mcp add` still runs OAuth inline, so `loginArgs` stays a retry.
|
|
113
|
+
loginArgs: ['mcp', 'login', 'springbrand'],
|
|
114
|
+
// TODO(PF-3580): connect now probes Codex sign-in, so this over-warns a signed-in install.
|
|
115
|
+
authDeferredAtInstall: true,
|
|
116
|
+
},
|
|
117
|
+
'command-code': {
|
|
118
|
+
// Same package ships `cmd`, but that is cmd.exe on Windows; this alias collides with nothing.
|
|
119
|
+
command: 'commandcode',
|
|
120
|
+
displayName: 'Command Code',
|
|
121
|
+
configDir: '.commandcode',
|
|
122
|
+
reloadAction: 'restart it',
|
|
123
|
+
skillAgent: 'command-code',
|
|
124
|
+
// add-json is the only command this harness uses, so it is what must exist.
|
|
125
|
+
supportCheck: {
|
|
126
|
+
args: ['mcp', '--help'],
|
|
127
|
+
patterns: [ADD_JSON_COMMAND],
|
|
128
|
+
// Command Code self-updates inside the probe, which outlasts the default budget.
|
|
129
|
+
timeoutMs: 30_000,
|
|
130
|
+
unavailableMessage: COMMAND_CODE_ADD_JSON_UNAVAILABLE_MESSAGE,
|
|
131
|
+
},
|
|
132
|
+
// Key-only: `cmd mcp add` runs browser OAuth even when a header is supplied.
|
|
133
|
+
keyRequired: true,
|
|
134
|
+
header: { name: 'Authorization', sep: ': ', valuePrefix: 'Bearer ' },
|
|
135
|
+
// Default scope is `local`, which writes a per-project entry instead of the user's.
|
|
136
|
+
keyedAddJsonFlags: ['--scope', 'user'],
|
|
137
|
+
removals: [
|
|
138
|
+
{
|
|
139
|
+
args: ['mcp', 'remove', 'springbrand', '--scope', 'user'],
|
|
140
|
+
label: 'user SpringBrand registration',
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
cursor: {
|
|
145
|
+
command: 'cursor-agent',
|
|
146
|
+
displayName: 'Cursor',
|
|
147
|
+
configDir: '.cursor',
|
|
148
|
+
reloadAction: 'reload the window',
|
|
149
|
+
skillAgent: 'cursor',
|
|
150
|
+
readableWithoutBinary: true,
|
|
151
|
+
canVerifyAuth: true,
|
|
152
|
+
keyHeldByCli: true,
|
|
153
|
+
cliWritesConfig: true,
|
|
154
|
+
},
|
|
155
|
+
grok: {
|
|
156
|
+
command: 'grok',
|
|
157
|
+
displayName: 'Grok',
|
|
158
|
+
configDir: '.grok',
|
|
159
|
+
// docs.x.ai/build/features/mcp-servers: `r` in /mcps rereads the config.
|
|
160
|
+
reloadAction: 'run /mcps and press r',
|
|
161
|
+
nonInteractiveAdd: true,
|
|
162
|
+
supportCheck: {
|
|
163
|
+
args: ['mcp', 'add', '--help'],
|
|
164
|
+
patterns: [/--transport(?:[\s<=]|$)/m],
|
|
165
|
+
keyAuthPattern: HEADER_FLAG,
|
|
166
|
+
unavailableMessage: GROK_HTTP_UNAVAILABLE_MESSAGE,
|
|
167
|
+
},
|
|
168
|
+
urlStyle: 'positional',
|
|
169
|
+
addFlags: ['--transport', 'http'],
|
|
170
|
+
// Grok expands `${VAR}` in headers at load, so the key stays out of argv and config.toml.
|
|
171
|
+
header: { name: 'Authorization', sep: ': ', valuePrefix: 'Bearer ', viaEnv: true },
|
|
172
|
+
signInHint: GROK_SIGN_IN_HINT,
|
|
173
|
+
},
|
|
174
|
+
hermes: {
|
|
175
|
+
command: 'hermes',
|
|
176
|
+
displayName: 'Hermes',
|
|
177
|
+
configDir: '.hermes',
|
|
178
|
+
reloadAction: 'restart it',
|
|
179
|
+
skillAgent: 'hermes-agent',
|
|
180
|
+
keyRequired: true,
|
|
181
|
+
supportCheck: {
|
|
182
|
+
args: ['mcp', 'add', '--help'],
|
|
183
|
+
patterns: [/--auth\s+\{[^}]*oauth[^}]*\}/],
|
|
184
|
+
keyAuthPattern: /--auth\s+\{[^}]*header[^}]*\}/,
|
|
185
|
+
unavailableMessage: HERMES_OAUTH_UNAVAILABLE_MESSAGE,
|
|
186
|
+
},
|
|
187
|
+
urlStyle: 'flag',
|
|
188
|
+
// No `header`: the key goes into Hermes' .env, and `--auth header` reads it from there.
|
|
189
|
+
keyAddFlags: ['--auth', 'header'],
|
|
190
|
+
uninstallExtra: {
|
|
191
|
+
args: ['plugins', 'uninstall', HERMES_PLUGIN_NAME],
|
|
192
|
+
label: 'SpringBrand web plugin from Hermes',
|
|
193
|
+
},
|
|
194
|
+
postConnectNote: HERMES_RESTART_NOTE,
|
|
195
|
+
// No canVerifyAuth: keyed already covers auth; true breaks keyless installs.
|
|
196
|
+
keyHeldByCli: true,
|
|
197
|
+
},
|
|
198
|
+
omp: {
|
|
199
|
+
command: 'omp',
|
|
200
|
+
displayName: 'omp',
|
|
201
|
+
configDir: '.omp',
|
|
202
|
+
reloadAction: 'restart it',
|
|
203
|
+
canVerifyAuth: true,
|
|
204
|
+
keyHeldByCli: true,
|
|
205
|
+
cliWritesConfig: true,
|
|
206
|
+
},
|
|
207
|
+
openclaw: {
|
|
208
|
+
command: 'openclaw',
|
|
209
|
+
displayName: 'OpenClaw',
|
|
210
|
+
configDir: '.openclaw',
|
|
211
|
+
reloadAction: 'restart it',
|
|
212
|
+
supportCheck: {
|
|
213
|
+
args: ['skills', 'install', '--help'],
|
|
214
|
+
patterns: [/--global(?:\s|$)/],
|
|
215
|
+
// Renamed in 2026.8.1; absent before 2026.7, where no trust gate existed.
|
|
216
|
+
variants: ['--acknowledge-install-policy-warning', '--acknowledge-clawhub-risk'],
|
|
217
|
+
unknownVariant: /--acknowledge-[a-z-]+/,
|
|
218
|
+
// 212MB dist; win32 cold starts drove most of the 10s timeouts.
|
|
219
|
+
timeoutMs: 30_000,
|
|
220
|
+
unavailableMessage: OPENCLAW_SKILL_UNAVAILABLE_MESSAGE,
|
|
221
|
+
},
|
|
222
|
+
signInViaCliLogin: true,
|
|
223
|
+
canVerifyAuth: true,
|
|
224
|
+
keyHeldByCli: true,
|
|
225
|
+
},
|
|
226
|
+
opencode: {
|
|
227
|
+
command: 'opencode',
|
|
228
|
+
displayName: 'OpenCode',
|
|
229
|
+
configDir: '.config/opencode',
|
|
230
|
+
reloadAction: 'restart it',
|
|
231
|
+
skillAgent: 'opencode',
|
|
232
|
+
nonInteractiveAdd: true,
|
|
233
|
+
supportCheck: {
|
|
234
|
+
args: ['mcp', 'add', '--help'],
|
|
235
|
+
patterns: [/--url(?:\s|$)/m],
|
|
236
|
+
keyAuthPattern: HEADER_FLAG,
|
|
237
|
+
unavailableMessage: OPENCODE_MCP_ADD_UNAVAILABLE_MESSAGE,
|
|
238
|
+
},
|
|
239
|
+
urlStyle: 'flag',
|
|
240
|
+
// OpenCode takes `--header NAME=VALUE`, not Claude Code's `NAME: VALUE`.
|
|
241
|
+
header: { name: 'Authorization', sep: '=', valuePrefix: 'Bearer ' },
|
|
242
|
+
// OpenCode writes its config itself; `mcp auth` is the separate OAuth step.
|
|
243
|
+
loginArgs: ['mcp', 'auth', 'springbrand'],
|
|
244
|
+
// `opencode mcp add` upserts by name and ships no `mcp remove`.
|
|
245
|
+
removals: [],
|
|
246
|
+
postConnectNote: OPENCODE_MODEL_NOTE,
|
|
247
|
+
},
|
|
248
|
+
pi: {
|
|
249
|
+
command: 'pi',
|
|
250
|
+
displayName: 'Pi',
|
|
251
|
+
configDir: '.pi/agent',
|
|
252
|
+
reloadAction: 'restart it',
|
|
253
|
+
skillAgent: 'pi',
|
|
254
|
+
canVerifyAuth: true,
|
|
255
|
+
keyHeldByCli: true,
|
|
256
|
+
cliWritesConfig: true,
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
export const ALL_HARNESSES = Object.keys(HARNESS_SPECS);
|
|
260
|
+
export function harnessSpec(harness) {
|
|
261
|
+
return HARNESS_SPECS[harness];
|
|
262
|
+
}
|
|
263
|
+
/** Native MCP harnesses generate an add; key-only ones generate only the keyed form. */
|
|
264
|
+
export const NATIVE_HARNESSES = ALL_HARNESSES.filter((harness) => {
|
|
265
|
+
const spec = harnessSpec(harness);
|
|
266
|
+
return spec.urlStyle !== undefined || spec.keyRequired === true;
|
|
267
|
+
});
|
|
268
|
+
//# sourceMappingURL=harness-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-spec.js","sourceRoot":"","sources":["../../src/lib/harness-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** 复刻自 tiny-fish CLI 编译产物:harness.d.ts + harness.impl.js */
|
|
2
|
+
type Env = Record<string, string | undefined>;
|
|
3
|
+
export type RuntimeEnv = 'container' | 'desktop';
|
|
4
|
+
interface FsApi {
|
|
5
|
+
existsSync: (path: string) => boolean;
|
|
6
|
+
readFileSync: (path: string, encoding: 'utf8') => string;
|
|
7
|
+
}
|
|
8
|
+
/** Returns the detected harness name, or null when none match. */
|
|
9
|
+
export declare function detectHarness(env?: Env): string | null;
|
|
10
|
+
/** Fails open to desktop: a probe error must never break telemetry. */
|
|
11
|
+
export declare function detectRuntimeEnv(env?: Env, fsApi?: FsApi): RuntimeEnv;
|
|
12
|
+
/**
|
|
13
|
+
* True only when both ends are a real terminal — a human at a prompt. Agents
|
|
14
|
+
* shell out without a TTY, so this reads false for every harness above and is
|
|
15
|
+
* the free agent-vs-human signal behind `X-SP-Human-Initiated`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectHumanInitiated(streams?: HumanInitiatedStreams): boolean;
|
|
18
|
+
interface HumanInitiatedStreams {
|
|
19
|
+
stdin: {
|
|
20
|
+
isTTY?: boolean;
|
|
21
|
+
};
|
|
22
|
+
stdout: {
|
|
23
|
+
isTTY?: boolean;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/lib/harness.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAa5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAEjD,UAAU,KAAK;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5D;AA+BD,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAGtD;AAoCD,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,CAOrE;AA4BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAE7E;AAGD,UAAU,qBAAqB;IAC3B,KAAK,EAAE;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACJ,KAAK,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACL"}
|