@tiny-fish/cli 0.46.1-next.360 → 0.46.1-next.362
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/connect.js +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/onboard.js +1 -1
- package/dist/lib/config/connect-config-file.js +1 -1
- package/dist/lib/config/opencode-config.d.ts +1 -1
- package/dist/lib/config/opencode-config.js +2 -2
- package/dist/lib/connect-all-auth.js +2 -2
- package/dist/lib/connect-all-summary.js +2 -2
- package/dist/lib/connect-all-uninstall.d.ts +1 -1
- package/dist/lib/connect-all-uninstall.js +1 -1
- package/dist/lib/connect-all.d.ts +1 -1
- package/dist/lib/connect-all.js +2 -2
- package/dist/lib/connect-clients.d.ts +1 -1
- package/dist/lib/connect-clients.js +2 -2
- package/dist/lib/connect-harness.js +1 -1
- package/dist/lib/connect-native.js +1 -1
- package/dist/lib/connect-openclaw.js +1 -1
- package/dist/lib/connect-picker.d.ts +1 -1
- package/dist/lib/connect-picker.js +1 -1
- package/dist/lib/connect-runtime.d.ts +2 -2
- package/dist/lib/doctor-checks.js +1 -1
- package/dist/lib/doctor-repairs.js +1 -1
- package/dist/lib/doctor-report.d.ts +1 -1
- package/dist/lib/doctor-report.js +1 -1
- package/dist/lib/{harness-detect.js → harness/harness-detect.js} +2 -2
- package/dist/lib/harness/harness-messages.d.ts +16 -0
- package/dist/lib/harness/harness-messages.js +58 -0
- package/dist/lib/{harness-spec.js → harness/harness-spec.js} +2 -58
- package/dist/lib/registration-detect.d.ts +1 -1
- package/dist/lib/registration-detect.js +2 -2
- package/dist/lib/setup-telemetry.d.ts +1 -1
- package/dist/lib/setup-telemetry.js +1 -1
- package/dist/lib/skill-paths.d.ts +1 -1
- package/dist/lib/skill-vendor.d.ts +1 -1
- package/package.json +1 -1
- /package/dist/lib/{harness-detect.d.ts → harness/harness-detect.d.ts} +0 -0
- /package/dist/lib/{harness-spec.d.ts → harness/harness-spec.d.ts} +0 -0
package/dist/commands/connect.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as fs from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { saveConnectConfigDir, validateKeyFormat, validatedApiKey } from '../lib/auth.js';
|
|
4
4
|
import { runConnectAll } from '../lib/connect-all.js';
|
|
5
|
-
import { ALL_HARNESSES } from '../lib/harness-detect.js';
|
|
5
|
+
import { ALL_HARNESSES } from '../lib/harness/harness-detect.js';
|
|
6
6
|
import { detectHumanInitiated } from '../lib/harness.js';
|
|
7
7
|
import { emitNotice } from '../lib/notice.js';
|
|
8
8
|
import { errLine } from '../lib/output.js';
|
package/dist/commands/doctor.js
CHANGED
|
@@ -3,7 +3,7 @@ import { checkAuthCall, checkCliVersion, checkConnectivity, checkCredential, che
|
|
|
3
3
|
import { DOCTOR_COULD_NOT_RUN, DOCTOR_INVALID_INPUT, DOCTOR_SCHEMA_VERSION, doctorReportSchema, exitCodeFor, renderPretty, verdictFor, } from '../lib/doctor-report.js';
|
|
4
4
|
import { applyRepairs, repairsFor } from '../lib/doctor-repairs.js';
|
|
5
5
|
import { couldNotRunPayload, telemetryKey, telemetryPayload } from '../lib/doctor-telemetry.js';
|
|
6
|
-
import { ALL_HARNESSES } from '../lib/harness-detect.js';
|
|
6
|
+
import { ALL_HARNESSES } from '../lib/harness/harness-detect.js';
|
|
7
7
|
import { err, errLine, out, outLine } from '../lib/output.js';
|
|
8
8
|
import { detectRegistrations } from '../lib/registration-detect.js';
|
|
9
9
|
import { sendDoctorCompleted } from '../lib/setup-telemetry.js';
|
package/dist/commands/onboard.js
CHANGED
|
@@ -4,7 +4,7 @@ import { fetchContentGet, searchQuery } from '../lib/client.js';
|
|
|
4
4
|
import { BASE_URL, TINYFISH_API_KEY_VAR } from '../lib/constants.js';
|
|
5
5
|
import { errLine, handleApiError, outLine } from '../lib/output.js';
|
|
6
6
|
import { connectHarness, launchAgent } from '../lib/connect-harness.js';
|
|
7
|
-
import { HARNESS_DISPLAY_NAMES } from '../lib/harness-detect.js';
|
|
7
|
+
import { HARNESS_DISPLAY_NAMES } from '../lib/harness/harness-detect.js';
|
|
8
8
|
const EXAMPLE_QUERIES = [
|
|
9
9
|
'What are recent changes in the AI dev stack? Give me the top 5 changes that matter, why they matter, and any action needed.',
|
|
10
10
|
'Find a new-grad software engineering role posted in the last 24 hours and fetch the job description.',
|
|
@@ -7,7 +7,7 @@ import { ConnectStepError, createConnectTelemetry, runGuarded, settle, } from '.
|
|
|
7
7
|
import { cursorInstallDeeplink, cursorMcpPath, readCursorTinyfishEntry, writeCursorMcpConfig, } from './cursor-config.js';
|
|
8
8
|
import { ompMcpPath, readOmpTinyfishEntry, writeOmpMcpConfig } from './omp-config.js';
|
|
9
9
|
import { PI_ADAPTER_INSTALL_COMMAND, piMcpAdapterState, piSkillDirMismatch, piMcpPath, readPiTinyfishEntry, writePiMcpConfig, } from './pi-config.js';
|
|
10
|
-
import { AuthMode, HARNESS_DISPLAY_NAMES } from '../harness-detect.js';
|
|
10
|
+
import { AuthMode, HARNESS_DISPLAY_NAMES } from '../harness/harness-detect.js';
|
|
11
11
|
import { detectHumanInitiated } from '../harness.js';
|
|
12
12
|
import { errLine } from '../output.js';
|
|
13
13
|
import { verifyMcpAuth } from '../verify.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Harness } from '../harness-detect.js';
|
|
1
|
+
import { type Harness } from '../harness/harness-detect.js';
|
|
2
2
|
import { type McpJsonServerEntry } from './mcp-json-config.js';
|
|
3
3
|
export type OpencodeStyleHarness = 'kilo' | 'opencode';
|
|
4
4
|
/** Narrows before any path is built, so a future removal-less harness cannot borrow these. */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// OpenCode and its Kilo fork share a config file the CLI reads but never writes.
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import { harnessConfigPath } from '../harness-detect.js';
|
|
5
|
-
import { harnessSpec } from '../harness-spec.js';
|
|
4
|
+
import { harnessConfigPath } from '../harness/harness-detect.js';
|
|
5
|
+
import { harnessSpec } from '../harness/harness-spec.js';
|
|
6
6
|
import { readTinyfishEntry, } from './mcp-json-config.js';
|
|
7
7
|
/** Narrows before any path is built, so a future removal-less harness cannot borrow these. */
|
|
8
8
|
export function isOpencodeStyle(harness) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NATIVE_BY_HARNESS } from './connect-clients.js';
|
|
2
|
-
import { harnessSpec } from './harness-spec.js';
|
|
2
|
+
import { harnessSpec } from './harness/harness-spec.js';
|
|
3
3
|
import { ConnectInterruptedError, ConnectStepError, SignInTimeoutError, } from './connect-runtime.js';
|
|
4
|
-
import { ALL_HARNESSES, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, } from './harness-detect.js';
|
|
4
|
+
import { ALL_HARNESSES, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, } from './harness/harness-detect.js';
|
|
5
5
|
import { errLine } from './output.js';
|
|
6
6
|
// Must undercut agent tool-call budgets (Claude Code Bash defaults to 120s).
|
|
7
7
|
export const OAUTH_SIGN_IN_TIMEOUT_MS = 90_000;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { finishSetupCommand } from './connect-runtime.js';
|
|
2
|
-
import { harnessSpec } from './harness-spec.js';
|
|
3
|
-
import { HARNESS_COMMANDS, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, RELOAD_ACTION, } from './harness-detect.js';
|
|
2
|
+
import { harnessSpec } from './harness/harness-spec.js';
|
|
3
|
+
import { HARNESS_COMMANDS, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, RELOAD_ACTION, } from './harness/harness-detect.js';
|
|
4
4
|
// Naming a harness the user does not have is the noise PF-3708 cut.
|
|
5
5
|
const HIDDEN_ONCE_SOMETHING_WORKED = new Set([
|
|
6
6
|
'deselected',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Harness } from './harness-detect.js';
|
|
1
|
+
import { type Harness } from './harness/harness-detect.js';
|
|
2
2
|
import type { HarnessRunResult } from './connect-all.js';
|
|
3
3
|
export declare function planText(harness: Harness, mcpUrl: string, apiKey?: string): string;
|
|
4
4
|
export declare function uninstallPlanText(harness: Harness): string;
|
|
@@ -7,7 +7,7 @@ import { planOmpWrite, removeOmpMcpServer } from './config/omp-config.js';
|
|
|
7
7
|
import { piMcpPath, planPiWrite, removePiMcpServer } from './config/pi-config.js';
|
|
8
8
|
import { HERMES_KEY_VAR, hermesEnvPath, removeHermesKey, resolveHermesHome } from './hermes-env.js';
|
|
9
9
|
import { clearHermesWebBackends } from './hermes-plugin.js';
|
|
10
|
-
import { HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, harnessDisplayPath, } from './harness-detect.js';
|
|
10
|
+
import { HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, harnessDisplayPath, } from './harness/harness-detect.js';
|
|
11
11
|
import { isOpencodeStyle, opencodeStyleConfigPath } from './config/opencode-config.js';
|
|
12
12
|
import { errLine } from './output.js';
|
|
13
13
|
export function planText(harness, mcpUrl, apiKey) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Harness, type HarnessDetection } from './harness-detect.js';
|
|
1
|
+
import { type Harness, type HarnessDetection } from './harness/harness-detect.js';
|
|
2
2
|
import { type VerifyDepth } from './verify.js';
|
|
3
3
|
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';
|
|
4
4
|
export type HarnessResultBase = {
|
package/dist/lib/connect-all.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as readline from 'node:readline/promises';
|
|
2
|
-
import { harnessSpec } from './harness-spec.js';
|
|
2
|
+
import { harnessSpec } from './harness/harness-spec.js';
|
|
3
3
|
import spawn from 'cross-spawn';
|
|
4
4
|
import { connectHarness } from './connect-harness.js';
|
|
5
5
|
import { loadConfig, validatedApiKey } from './auth.js';
|
|
@@ -12,7 +12,7 @@ import { KEYLESS_ONBOARDING_PROMPT } from './connect-clients.js';
|
|
|
12
12
|
import { gateApiKey } from './connect-preflight.js';
|
|
13
13
|
import { ConnectInterruptedError } from './connect-runtime.js';
|
|
14
14
|
import { pickHarnesses } from './connect-picker.js';
|
|
15
|
-
import { commandOnPath, detectInstalledHarnesses, AuthMode, HARNESS_COMMANDS, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, ALL_HARNESSES, } from './harness-detect.js';
|
|
15
|
+
import { commandOnPath, detectInstalledHarnesses, AuthMode, HARNESS_COMMANDS, HARNESS_DISPLAY_NAMES as DISPLAY_NAMES, ALL_HARNESSES, } from './harness/harness-detect.js';
|
|
16
16
|
import { detectHumanInitiated } from './harness.js';
|
|
17
17
|
import { emitNotice } from './notice.js';
|
|
18
18
|
import { errLine, outLine, setErrIndent } from './output.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import spawn from 'cross-spawn';
|
|
2
2
|
import { type AgentClient, type SupportedCommand } from './connect-runtime.js';
|
|
3
|
-
import { type HarnessSpec, type SkillAgent } from './harness-spec.js';
|
|
3
|
+
import { type HarnessSpec, type SkillAgent } from './harness/harness-spec.js';
|
|
4
4
|
export declare function openclawSkillInstallArgs(ackFlag: string | undefined): string[];
|
|
5
5
|
/** `openclaw skills` has no uninstall; ClawHub removes from the global dir. */
|
|
6
6
|
export declare function openclawSkillUninstall(): {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import spawn from 'cross-spawn';
|
|
2
2
|
import { SKILL_INSTALL_TIMEOUT_MS } from './cli-install.js';
|
|
3
3
|
import { detectHumanInitiated } from './harness.js';
|
|
4
|
-
import { harnessConfigPath } from './harness-detect.js';
|
|
4
|
+
import { harnessConfigPath } from './harness/harness-detect.js';
|
|
5
5
|
import { errLine, sanitizeLine, warnLine } from './output.js';
|
|
6
6
|
import { ConnectInterruptedError, ConnectStepError, spawnStepError, } from './connect-runtime.js';
|
|
7
7
|
import { TINYFISH_ACCESS_MODE_HEADER, TINYFISH_API_KEY_VAR, TINYFISH_KEYLESS_ACCESS_MODE, } from './constants.js';
|
|
8
|
-
import { HARNESS_SPECS, NATIVE_HARNESSES, harnessSpec, } from './harness-spec.js';
|
|
8
|
+
import { HARNESS_SPECS, NATIVE_HARNESSES, harnessSpec, } from './harness/harness-spec.js';
|
|
9
9
|
import { HERMES_KEY_VAR, captureHermesKeyRestore, hermesEnvPath, resolveHermesHome, writeHermesKey, } from './hermes-env.js';
|
|
10
10
|
import { hermesConfigPath, readHermesEntry } from './config/hermes-config.js';
|
|
11
11
|
import { installHermesPlugin, removeHermesMcpEntry, setHermesWebBackends, writeHermesMcpEntry, } from './hermes-plugin.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { KEYLESS_ONBOARDING_PROMPT, NATIVE_BY_HARNESS, launchNativeMcpClient, launchOmpWalkthrough, launchPiWalkthrough, launchOpenClawWalkthrough, } from './connect-clients.js';
|
|
2
|
-
import { AuthMode } from './harness-detect.js';
|
|
2
|
+
import { AuthMode } from './harness/harness-detect.js';
|
|
3
3
|
import { errLine } from './output.js';
|
|
4
4
|
import { connectNativeMcpClient } from './connect-native.js';
|
|
5
5
|
import { connectOpenClaw } from './connect-openclaw.js';
|
|
@@ -6,7 +6,7 @@ import { ensureCliAuthenticated } from './connect-auth.js';
|
|
|
6
6
|
import { installWebSkill } from './skill-install.js';
|
|
7
7
|
import { ConnectInterruptedError, ConnectStepError, createConnectTelemetry, runGuarded, settle, SignInTimeoutError, spawnRemoval, spawnStepError, } from './connect-runtime.js';
|
|
8
8
|
import { TINYFISH_API_KEY_VAR } from './constants.js';
|
|
9
|
-
import { AuthMode, RELOAD_ACTION } from './harness-detect.js';
|
|
9
|
+
import { AuthMode, RELOAD_ACTION } from './harness/harness-detect.js';
|
|
10
10
|
import { SIGN_IN_PROBES } from './registration-detect.js';
|
|
11
11
|
import { errLine, warnLine } from './output.js';
|
|
12
12
|
import { verifyMcpAuth } from './verify.js';
|
|
@@ -4,7 +4,7 @@ import { OPENCLAW, openclawSkillInstallArgs, launchOpenClawWalkthrough, } from '
|
|
|
4
4
|
import { captureStdio, capturedOutput, replay } from './cli-install.js';
|
|
5
5
|
import { ensureCliAuthenticated } from './connect-auth.js';
|
|
6
6
|
import { createConnectTelemetry, runGuarded, settle, spawnStepError, } from './connect-runtime.js';
|
|
7
|
-
import { RELOAD_ACTION } from './harness-detect.js';
|
|
7
|
+
import { RELOAD_ACTION } from './harness/harness-detect.js';
|
|
8
8
|
import { errLine } from './output.js';
|
|
9
9
|
import { finishSetupHint, requireSupportOrRescue, runCliInstallStep, trackPostInstallFailure, walkthroughPhase, } from './connect-steps.js';
|
|
10
10
|
/** Skill install only: no key handoff or post-install callback to honour. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Readable } from 'node:stream';
|
|
2
|
-
import { type Harness, type HarnessDetection } from './harness-detect.js';
|
|
2
|
+
import { type Harness, type HarnessDetection } from './harness/harness-detect.js';
|
|
3
3
|
type PickSelection = Harness[] | 'cancel';
|
|
4
4
|
export interface PickResult {
|
|
5
5
|
selection: PickSelection;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as readline from 'node:readline';
|
|
2
|
-
import { HARNESS_DISPLAY_NAMES } from './harness-detect.js';
|
|
2
|
+
import { HARNESS_DISPLAY_NAMES, } from './harness/harness-detect.js';
|
|
3
3
|
const KEY_HELP = ' ↑↓ move space toggle one a none/all q cancel';
|
|
4
4
|
function header(count) {
|
|
5
5
|
return `Found ${count} agent config${count === 1 ? '' : 's'} on this machine.\n\n`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AuthMode } from './harness-detect.js';
|
|
2
|
-
import type { Harness, HarnessSupportCheck } from './harness-spec.js';
|
|
1
|
+
import { AuthMode } from './harness/harness-detect.js';
|
|
2
|
+
import type { Harness, HarnessSupportCheck } from './harness/harness-spec.js';
|
|
3
3
|
export declare const NON_INTERACTIVE_TIMEOUT_MS = 10000;
|
|
4
4
|
export type AgentClient = Harness;
|
|
5
5
|
type ConnectStage = 'started' | 'checkpoint' | 'completed' | 'failed' | 'aborted' | 'post_install_failed';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { apiKeyStatus } from './auth.js';
|
|
2
2
|
import { CLI_VERSION } from './constants.js';
|
|
3
|
-
import { AuthMode, Registered } from './harness-detect.js';
|
|
3
|
+
import { AuthMode, Registered } from './harness/harness-detect.js';
|
|
4
4
|
import { resolveHermesHome } from './hermes-env.js';
|
|
5
5
|
import { hermesWebBackendsOurs, readHermesPluginStatus, } from './hermes-plugin.js';
|
|
6
6
|
import { endpointOf, isDefaultEndpoint } from './mcp-endpoint.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import spawn from 'cross-spawn';
|
|
2
2
|
import { connectHarness } from './connect-harness.js';
|
|
3
3
|
import { OAUTH_SIGN_IN_TIMEOUT_MS } from './connect-all-auth.js';
|
|
4
|
-
import { Registered } from './harness-detect.js';
|
|
4
|
+
import { Registered } from './harness/harness-detect.js';
|
|
5
5
|
import { detectHumanInitiated } from './harness.js';
|
|
6
6
|
import { errLine } from './output.js';
|
|
7
7
|
export function repairsFor(checks, statuses) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { AuthMode, type Harness, Registered } from './harness-detect.js';
|
|
2
|
+
import { AuthMode, type Harness, Registered } from './harness/harness-detect.js';
|
|
3
3
|
/** Bumped whenever a consumer could misread the payload; the cookbook skill releases separately. */
|
|
4
4
|
export declare const DOCTOR_SCHEMA_VERSION = 3;
|
|
5
5
|
/** Closed: three consumers match these ids by literal. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { ALL_HARNESSES, AuthMode, Registered } from './harness-detect.js';
|
|
2
|
+
import { ALL_HARNESSES, AuthMode, Registered } from './harness/harness-detect.js';
|
|
3
3
|
/** Bumped whenever a consumer could misread the payload; the cookbook skill releases separately. */
|
|
4
4
|
export const DOCTOR_SCHEMA_VERSION = 3;
|
|
5
5
|
/** Closed: three consumers match these ids by literal. */
|
|
@@ -3,8 +3,8 @@ import * as os from 'os';
|
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import which from 'which';
|
|
5
5
|
import { ALL_HARNESSES, harnessSpec } from './harness-spec.js';
|
|
6
|
-
import { clineConfigDir } from '
|
|
7
|
-
import { piAgentDir, piBinaryIsPi } from '
|
|
6
|
+
import { clineConfigDir } from '../config/cline-config.js';
|
|
7
|
+
import { piAgentDir, piBinaryIsPi } from '../config/pi-config.js';
|
|
8
8
|
export { ALL_HARNESSES };
|
|
9
9
|
export const HARNESS_DISPLAY_NAMES = Object.fromEntries(ALL_HARNESSES.map((harness) => [harness, harnessSpec(harness).displayName]));
|
|
10
10
|
export const RELOAD_ACTION = Object.fromEntries(ALL_HARNESSES.map((harness) => [harness, harnessSpec(harness).reloadAction]));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const MCP_ADD_UNAVAILABLE_MESSAGE: string;
|
|
2
|
+
export declare const CLAUDE_CODE_KEYED_FALLBACK_NOTE: string;
|
|
3
|
+
export declare const CLAUDE_CODE_DEFERRED_AUTH_NOTE: string;
|
|
4
|
+
export declare const CODEX_MCP_URL_UNAVAILABLE_MESSAGE: string;
|
|
5
|
+
export declare const CODEX_KEYED_FALLBACK_NOTE: string;
|
|
6
|
+
export declare const CODEX_DEFERRED_AUTH_NOTE: string;
|
|
7
|
+
export declare const HERMES_OAUTH_UNAVAILABLE_MESSAGE: string;
|
|
8
|
+
export declare const GROK_HTTP_UNAVAILABLE_MESSAGE: string;
|
|
9
|
+
export declare const GROK_SIGN_IN_HINT: string;
|
|
10
|
+
export declare const OPENCLAW_SKILL_UNAVAILABLE_MESSAGE: string;
|
|
11
|
+
export declare const OPENCODE_MCP_ADD_UNAVAILABLE_MESSAGE: string;
|
|
12
|
+
export declare const OPENCODE_MODEL_NOTE: string;
|
|
13
|
+
export declare const KILO_MCP_ADD_UNAVAILABLE_MESSAGE: string;
|
|
14
|
+
export declare const HERMES_RESTART_NOTE = "Restart your Hermes session to pick up TinyFish \u2014 Hermes discovers MCP servers at startup.";
|
|
15
|
+
export declare const CLINE_MCP_ADD_UNAVAILABLE_MESSAGE: string;
|
|
16
|
+
export declare const COMMAND_CODE_ADD_JSON_UNAVAILABLE_MESSAGE: string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// User-facing copy for the harness specs; kept apart so the spec file stays structure.
|
|
2
|
+
// An old install is only one reason a flag can go unseen, so no message asserts the cause.
|
|
3
|
+
const SUPPORT_CHECK_DEBUG_HINT = ' Set TINYFISH_DEBUG=1 and retry to print the help output TinyFish read.';
|
|
4
|
+
export const MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Claude Code installation exposes `claude mcp add`: `claude mcp ' +
|
|
5
|
+
'--help` did not list it. Update Claude Code with `claude update` and retry.' +
|
|
6
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
7
|
+
// `claude mcp login` only exists upstream from Claude Code 2.1.186; older installs still register.
|
|
8
|
+
export const CLAUDE_CODE_KEYED_FALLBACK_NOTE = 'Using your stored TinyFish API key: this Claude Code predates one-command sign-in ' +
|
|
9
|
+
'(`claude mcp login`), so no browser sign-in is needed.';
|
|
10
|
+
export const CLAUDE_CODE_DEFERRED_AUTH_NOTE = 'TinyFish is registered in Claude Code but not signed in: this Claude Code predates ' +
|
|
11
|
+
'one-command sign-in (`claude mcp login`). Open Claude Code and run `/mcp` to sign in to ' +
|
|
12
|
+
'TinyFish. `claude update` gets you one-command sign-in. Already have a TinyFish API key? ' +
|
|
13
|
+
'Run `tinyfish connect claude-code --api-key <key>` instead.';
|
|
14
|
+
export const CODEX_MCP_URL_UNAVAILABLE_MESSAGE = 'Could not confirm this Codex installation supports remote MCP servers: `codex mcp add ' +
|
|
15
|
+
'--help` did not list `--url`. Update Codex and retry, or add TinyFish manually with ' +
|
|
16
|
+
'`codex mcp add`.' +
|
|
17
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
18
|
+
export const CODEX_KEYED_FALLBACK_NOTE = 'Using your stored TinyFish API key: this Codex cannot report whether an OAuth sign-in ' +
|
|
19
|
+
'finished, so no browser sign-in is attempted.';
|
|
20
|
+
export const CODEX_DEFERRED_AUTH_NOTE = 'TinyFish is registered in Codex but not signed in: this Codex predates reliable sign-in ' +
|
|
21
|
+
'reporting. Run `codex mcp login tinyfish` to sign in, or update Codex with ' +
|
|
22
|
+
'`npm install -g @openai/codex@latest` for one-command sign-in.';
|
|
23
|
+
export const HERMES_OAUTH_UNAVAILABLE_MESSAGE = 'Could not confirm this Hermes installation supports one-command MCP authentication: `hermes ' +
|
|
24
|
+
'mcp add --help` did not list `--auth oauth`. Update Hermes and retry, or add TinyFish ' +
|
|
25
|
+
'manually with `hermes mcp add`.' +
|
|
26
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
27
|
+
export const GROK_HTTP_UNAVAILABLE_MESSAGE = 'Could not confirm this Grok installation supports remote MCP servers: `grok mcp add --help` ' +
|
|
28
|
+
'did not list `--transport`. Update Grok and retry, or add TinyFish manually with ' +
|
|
29
|
+
'`grok mcp add`.' +
|
|
30
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
31
|
+
// Grok has no `mcp login`; sign-in only happens inside the TUI. No key nudge here: a revoked
|
|
32
|
+
// key leaves Grok with no OAuth fallback, and doctor cannot spot that yet (PF-3618).
|
|
33
|
+
export const GROK_SIGN_IN_HINT = 'TinyFish is registered in Grok. Open Grok, run `/mcps`, select tinyfish, and press `i` to ' +
|
|
34
|
+
'sign in.';
|
|
35
|
+
export const OPENCLAW_SKILL_UNAVAILABLE_MESSAGE = 'Could not confirm this OpenClaw installation supports global skill installation: `openclaw ' +
|
|
36
|
+
'skills install --help` did not list `--global`. Update OpenClaw and retry, or install ' +
|
|
37
|
+
'manually with `openclaw skills install @tinyfish/tinyfish --global`.' +
|
|
38
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
39
|
+
export const OPENCODE_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this OpenCode installation supports one-command MCP setup: `opencode mcp ' +
|
|
40
|
+
'add --help` did not list `--url`. Update OpenCode and retry, or add TinyFish manually with ' +
|
|
41
|
+
'`opencode mcp add`.' +
|
|
42
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
43
|
+
// OpenCode is model-agnostic (unlike Claude Code / Codex), so a fresh install can default to a
|
|
44
|
+
// model with no tool support — TinyFish runs entirely on tool calls, so it would fail there.
|
|
45
|
+
export const OPENCODE_MODEL_NOTE = 'Note: TinyFish runs on tool calls, so OpenCode needs a model that supports tool use. Image-only ' +
|
|
46
|
+
'models (e.g. Nano Banana Pro) will show "No endpoints found that support tool use" — switch ' +
|
|
47
|
+
"OpenCode's model if the walkthrough can't start.";
|
|
48
|
+
export const KILO_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Kilo Code installation supports remote MCP servers: `kilo mcp add ' +
|
|
49
|
+
'--help` did not list `--url`. Update Kilo Code with `kilo upgrade` and retry, or add ' +
|
|
50
|
+
'TinyFish manually with `kilo mcp add`.' +
|
|
51
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
52
|
+
export const HERMES_RESTART_NOTE = 'Restart your Hermes session to pick up TinyFish — Hermes discovers MCP servers at startup.';
|
|
53
|
+
export const CLINE_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Cline installation supports non-interactive MCP setup: `cline mcp add ' +
|
|
54
|
+
'--help` did not list `--transport` and `--yes`. Update Cline with `cline --update` and retry.' +
|
|
55
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
56
|
+
export const COMMAND_CODE_ADD_JSON_UNAVAILABLE_MESSAGE = 'Could not confirm this Command Code installation supports keyed MCP setup: `commandcode mcp ' +
|
|
57
|
+
'--help` did not list `add-json`. Run `commandcode update` and retry.' +
|
|
58
|
+
SUPPORT_CHECK_DEBUG_HINT;
|
|
@@ -1,61 +1,5 @@
|
|
|
1
|
-
import { HERMES_PLUGIN_NAME } from '
|
|
2
|
-
|
|
3
|
-
const SUPPORT_CHECK_DEBUG_HINT = ' Set TINYFISH_DEBUG=1 and retry to print the help output TinyFish read.';
|
|
4
|
-
const MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Claude Code installation exposes `claude mcp add`: `claude mcp ' +
|
|
5
|
-
'--help` did not list it. Update Claude Code with `claude update` and retry.' +
|
|
6
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
7
|
-
// `claude mcp login` only exists upstream from Claude Code 2.1.186; older installs still register.
|
|
8
|
-
const CLAUDE_CODE_KEYED_FALLBACK_NOTE = 'Using your stored TinyFish API key: this Claude Code predates one-command sign-in ' +
|
|
9
|
-
'(`claude mcp login`), so no browser sign-in is needed.';
|
|
10
|
-
const CLAUDE_CODE_DEFERRED_AUTH_NOTE = 'TinyFish is registered in Claude Code but not signed in: this Claude Code predates ' +
|
|
11
|
-
'one-command sign-in (`claude mcp login`). Open Claude Code and run `/mcp` to sign in to ' +
|
|
12
|
-
'TinyFish. `claude update` gets you one-command sign-in. Already have a TinyFish API key? ' +
|
|
13
|
-
'Run `tinyfish connect claude-code --api-key <key>` instead.';
|
|
14
|
-
const CODEX_MCP_URL_UNAVAILABLE_MESSAGE = 'Could not confirm this Codex installation supports remote MCP servers: `codex mcp add ' +
|
|
15
|
-
'--help` did not list `--url`. Update Codex and retry, or add TinyFish manually with ' +
|
|
16
|
-
'`codex mcp add`.' +
|
|
17
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
18
|
-
const CODEX_KEYED_FALLBACK_NOTE = 'Using your stored TinyFish API key: this Codex cannot report whether an OAuth sign-in ' +
|
|
19
|
-
'finished, so no browser sign-in is attempted.';
|
|
20
|
-
const CODEX_DEFERRED_AUTH_NOTE = 'TinyFish is registered in Codex but not signed in: this Codex predates reliable sign-in ' +
|
|
21
|
-
'reporting. Run `codex mcp login tinyfish` to sign in, or update Codex with ' +
|
|
22
|
-
'`npm install -g @openai/codex@latest` for one-command sign-in.';
|
|
23
|
-
const HERMES_OAUTH_UNAVAILABLE_MESSAGE = 'Could not confirm this Hermes installation supports one-command MCP authentication: `hermes ' +
|
|
24
|
-
'mcp add --help` did not list `--auth oauth`. Update Hermes and retry, or add TinyFish ' +
|
|
25
|
-
'manually with `hermes mcp add`.' +
|
|
26
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
27
|
-
const GROK_HTTP_UNAVAILABLE_MESSAGE = 'Could not confirm this Grok installation supports remote MCP servers: `grok mcp add --help` ' +
|
|
28
|
-
'did not list `--transport`. Update Grok and retry, or add TinyFish manually with ' +
|
|
29
|
-
'`grok mcp add`.' +
|
|
30
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
31
|
-
// Grok has no `mcp login`; sign-in only happens inside the TUI. No key nudge here: a revoked
|
|
32
|
-
// key leaves Grok with no OAuth fallback, and doctor cannot spot that yet (PF-3618).
|
|
33
|
-
const GROK_SIGN_IN_HINT = 'TinyFish is registered in Grok. Open Grok, run `/mcps`, select tinyfish, and press `i` to ' +
|
|
34
|
-
'sign in.';
|
|
35
|
-
const OPENCLAW_SKILL_UNAVAILABLE_MESSAGE = 'Could not confirm this OpenClaw installation supports global skill installation: `openclaw ' +
|
|
36
|
-
'skills install --help` did not list `--global`. Update OpenClaw and retry, or install ' +
|
|
37
|
-
'manually with `openclaw skills install @tinyfish/tinyfish --global`.' +
|
|
38
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
39
|
-
const OPENCODE_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this OpenCode installation supports one-command MCP setup: `opencode mcp ' +
|
|
40
|
-
'add --help` did not list `--url`. Update OpenCode and retry, or add TinyFish manually with ' +
|
|
41
|
-
'`opencode mcp add`.' +
|
|
42
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
43
|
-
// OpenCode is model-agnostic (unlike Claude Code / Codex), so a fresh install can default to a
|
|
44
|
-
// model with no tool support — TinyFish runs entirely on tool calls, so it would fail there.
|
|
45
|
-
const OPENCODE_MODEL_NOTE = 'Note: TinyFish runs on tool calls, so OpenCode needs a model that supports tool use. Image-only ' +
|
|
46
|
-
'models (e.g. Nano Banana Pro) will show "No endpoints found that support tool use" — switch ' +
|
|
47
|
-
"OpenCode's model if the walkthrough can't start.";
|
|
48
|
-
const KILO_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Kilo Code installation supports remote MCP servers: `kilo mcp add ' +
|
|
49
|
-
'--help` did not list `--url`. Update Kilo Code with `kilo upgrade` and retry, or add ' +
|
|
50
|
-
'TinyFish manually with `kilo mcp add`.' +
|
|
51
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
52
|
-
const HERMES_RESTART_NOTE = 'Restart your Hermes session to pick up TinyFish — Hermes discovers MCP servers at startup.';
|
|
53
|
-
const CLINE_MCP_ADD_UNAVAILABLE_MESSAGE = 'Could not confirm this Cline installation supports non-interactive MCP setup: `cline mcp add ' +
|
|
54
|
-
'--help` did not list `--transport` and `--yes`. Update Cline with `cline --update` and retry.' +
|
|
55
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
56
|
-
const COMMAND_CODE_ADD_JSON_UNAVAILABLE_MESSAGE = 'Could not confirm this Command Code installation supports keyed MCP setup: `commandcode mcp ' +
|
|
57
|
-
'--help` did not list `add-json`. Run `commandcode update` and retry.' +
|
|
58
|
-
SUPPORT_CHECK_DEBUG_HINT;
|
|
1
|
+
import { HERMES_PLUGIN_NAME } from '../constants.js';
|
|
2
|
+
import { CLAUDE_CODE_DEFERRED_AUTH_NOTE, CLAUDE_CODE_KEYED_FALLBACK_NOTE, CLINE_MCP_ADD_UNAVAILABLE_MESSAGE, CODEX_DEFERRED_AUTH_NOTE, CODEX_KEYED_FALLBACK_NOTE, CODEX_MCP_URL_UNAVAILABLE_MESSAGE, COMMAND_CODE_ADD_JSON_UNAVAILABLE_MESSAGE, GROK_HTTP_UNAVAILABLE_MESSAGE, GROK_SIGN_IN_HINT, HERMES_OAUTH_UNAVAILABLE_MESSAGE, HERMES_RESTART_NOTE, KILO_MCP_ADD_UNAVAILABLE_MESSAGE, MCP_ADD_UNAVAILABLE_MESSAGE, OPENCLAW_SKILL_UNAVAILABLE_MESSAGE, OPENCODE_MCP_ADD_UNAVAILABLE_MESSAGE, OPENCODE_MODEL_NOTE, } from './harness-messages.js';
|
|
59
3
|
const HEADER_FLAG = /(?:^|\s)--header(?:[\s<=]|$)/m;
|
|
60
4
|
const ADD_JSON_COMMAND = /^\s*add-json(?:\s|\[)/m;
|
|
61
5
|
/** One entry per harness; every per-harness list derives from it. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type RecordedAuthMode } from './auth.js';
|
|
2
2
|
import type { AgentClient } from './connect-runtime.js';
|
|
3
|
-
import { AuthMode, type Harness, Registered } from './harness-detect.js';
|
|
3
|
+
import { AuthMode, type Harness, Registered } from './harness/harness-detect.js';
|
|
4
4
|
export interface RegistrationStatus {
|
|
5
5
|
harness: Harness;
|
|
6
6
|
detected: boolean;
|
|
@@ -12,10 +12,10 @@ import { readCursorTinyfishEntry } from './config/cursor-config.js';
|
|
|
12
12
|
import { readOmpTinyfishEntry } from './config/omp-config.js';
|
|
13
13
|
import { readOpencodeStyleEntry } from './config/opencode-config.js';
|
|
14
14
|
import { readPiTinyfishEntry } from './config/pi-config.js';
|
|
15
|
-
import { harnessSpec } from './harness-spec.js';
|
|
15
|
+
import { harnessSpec } from './harness/harness-spec.js';
|
|
16
16
|
import { readHermesKey, resolveHermesHome } from './hermes-env.js';
|
|
17
17
|
import { readHermesEntry } from './config/hermes-config.js';
|
|
18
|
-
import { detectInstalledHarnesses, harnessConfigPath, harnessDisplayPath, AuthMode, Registered, } from './harness-detect.js';
|
|
18
|
+
import { detectInstalledHarnesses, harnessConfigPath, harnessDisplayPath, AuthMode, Registered, } from './harness/harness-detect.js';
|
|
19
19
|
const NOT_REGISTERED = Object.freeze({
|
|
20
20
|
registered: Registered.No,
|
|
21
21
|
authMode: AuthMode.Unknown,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { AuthMode, Registered } from './harness-detect.js';
|
|
2
|
+
import { AuthMode, Registered } from './harness/harness-detect.js';
|
|
3
3
|
/**
|
|
4
4
|
* `TINYFISH_NO_TELEMETRY` suppresses ALL CLI-emitted network analytics
|
|
5
5
|
* (setup_completed, connect-event, update check). Any value except `0`/`false`
|
|
@@ -2,7 +2,7 @@ import { createHash } from 'node:crypto';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { validateKeyFormat } from './auth.js';
|
|
4
4
|
import { BASE_URL, CLI_INVOCATION_ID, CLI_VERSION } from './constants.js';
|
|
5
|
-
import { ALL_HARNESSES, AuthMode, Registered } from './harness-detect.js';
|
|
5
|
+
import { ALL_HARNESSES, AuthMode, Registered } from './harness/harness-detect.js';
|
|
6
6
|
import { detectHarness, detectRuntimeEnv } from './harness.js';
|
|
7
7
|
import { captureNotice } from './notice.js';
|
|
8
8
|
import { errLine } from './output.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SkillAgent } from './harness-spec.js';
|
|
1
|
+
import type { SkillAgent } from './harness/harness-spec.js';
|
|
2
2
|
/** The skill's own dir under where skills@1.5.15 wrote for this agent. */
|
|
3
3
|
export declare function skillTargetDir(agent: SkillAgent): string;
|
|
4
4
|
/** Mirrors skills@1.5.15 getSkillLockPath(); missing the XDG branch strands entries. */
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|