@sayknow-cli/coding-agent 0.2.4 → 0.2.5
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/types/cli/migrate-cli.d.ts +20 -0
- package/dist/types/cli/update-cli.d.ts +3 -0
- package/dist/types/commands/migrate.d.ts +33 -0
- package/dist/types/config/keybindings.d.ts +4 -0
- package/dist/types/config/model-registry.d.ts +3 -0
- package/dist/types/config/models-config-schema.d.ts +5 -0
- package/dist/types/config/settings-schema.d.ts +27 -0
- package/dist/types/harness-control-plane/storage.d.ts +2 -1
- package/dist/types/hooks/skill-state.d.ts +12 -4
- package/dist/types/lsp/startup-events.d.ts +1 -0
- package/dist/types/migrate/action-planner.d.ts +11 -0
- package/dist/types/migrate/adapters/claude-code.d.ts +2 -0
- package/dist/types/migrate/adapters/codex.d.ts +5 -0
- package/dist/types/migrate/adapters/index.d.ts +45 -0
- package/dist/types/migrate/adapters/opencode.d.ts +2 -0
- package/dist/types/migrate/executor.d.ts +2 -0
- package/dist/types/migrate/mcp-mapper.d.ts +20 -0
- package/dist/types/migrate/report.d.ts +18 -0
- package/dist/types/migrate/skill-normalizer.d.ts +27 -0
- package/dist/types/migrate/types.d.ts +126 -0
- package/dist/types/modes/components/custom-editor.d.ts +1 -1
- package/dist/types/modes/components/welcome.d.ts +3 -1
- package/dist/types/modes/interactive-mode.d.ts +3 -0
- package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -0
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +1 -1
- package/dist/types/research-plan/index.d.ts +1 -0
- package/dist/types/research-plan/ledger.d.ts +33 -0
- package/dist/types/rlm/artifacts.d.ts +1 -1
- package/dist/types/runtime-mcp/config-writer.d.ts +26 -0
- package/dist/types/skc-runtime/deep-interview-recorder.d.ts +2 -0
- package/dist/types/skc-runtime/deep-interview-runtime.d.ts +2 -2
- package/dist/types/skc-runtime/goal-mode-request.d.ts +1 -1
- package/dist/types/skc-runtime/session-layout.d.ts +59 -0
- package/dist/types/skc-runtime/session-resolution.d.ts +47 -0
- package/dist/types/skc-runtime/state-graph.d.ts +1 -1
- package/dist/types/skc-runtime/state-runtime.d.ts +5 -4
- package/dist/types/skc-runtime/state-schema.d.ts +2 -0
- package/dist/types/skc-runtime/state-writer.d.ts +36 -7
- package/dist/types/skc-runtime/tmux-sessions.d.ts +2 -0
- package/dist/types/skc-runtime/ultragoal-runtime.d.ts +7 -4
- package/dist/types/skc-runtime/workflow-command-ref.d.ts +1 -1
- package/dist/types/skc-runtime/workflow-manifest.d.ts +1 -1
- package/dist/types/skill-state/active-state.d.ts +6 -11
- package/dist/types/skill-state/canonical-skills.d.ts +3 -0
- package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +5 -0
- package/dist/types/skill-state/workflow-hud.d.ts +2 -0
- package/dist/types/task/spawn-gate.d.ts +1 -10
- package/package.json +7 -7
- package/scripts/build-binary.ts +0 -7
- package/src/cli/migrate-cli.ts +106 -0
- package/src/cli/setup-cli.ts +14 -1
- package/src/cli/update-cli.ts +53 -3
- package/src/cli.ts +1 -0
- package/src/commands/deep-interview.ts +2 -2
- package/src/commands/launch.ts +1 -1
- package/src/commands/migrate.ts +46 -0
- package/src/commands/state.ts +2 -1
- package/src/commands/team.ts +7 -3
- package/src/config/model-registry.ts +9 -2
- package/src/config/model-resolver.ts +13 -2
- package/src/config/models-config-schema.ts +1 -0
- package/src/config/settings-schema.ts +17 -0
- package/src/coordinator-mcp/policy.ts +10 -2
- package/src/defaults/skc/extensions/grok-cli-vendor/biome.json +0 -1
- package/src/defaults/skc/skills/deep-interview/SKILL.md +30 -24
- package/src/defaults/skc/skills/ralplan/SKILL.md +10 -4
- package/src/defaults/skc/skills/team/SKILL.md +51 -47
- package/src/defaults/skc/skills/ultragoal/SKILL.md +17 -13
- package/src/exec/bash-executor.ts +3 -1
- package/src/extensibility/custom-commands/loader.ts +0 -7
- package/src/extensibility/skc-plugins/injection.ts +23 -4
- package/src/extensibility/skc-plugins/state.ts +16 -1
- package/src/harness-control-plane/storage.ts +14 -4
- package/src/hooks/native-skill-hook.ts +38 -12
- package/src/hooks/skill-state.ts +178 -83
- package/src/internal-urls/docs-index.generated.ts +11 -9
- package/src/lsp/startup-events.ts +24 -0
- package/src/migrate/action-planner.ts +318 -0
- package/src/migrate/adapters/claude-code.ts +39 -0
- package/src/migrate/adapters/codex.ts +70 -0
- package/src/migrate/adapters/index.ts +277 -0
- package/src/migrate/adapters/opencode.ts +52 -0
- package/src/migrate/executor.ts +81 -0
- package/src/migrate/mcp-mapper.ts +152 -0
- package/src/migrate/report.ts +104 -0
- package/src/migrate/skill-normalizer.ts +80 -0
- package/src/migrate/types.ts +163 -0
- package/src/modes/bridge/bridge-mode.ts +2 -2
- package/src/modes/components/custom-editor.ts +30 -20
- package/src/modes/components/welcome.ts +20 -9
- package/src/modes/controllers/input-controller.ts +21 -3
- package/src/modes/interactive-mode.ts +27 -19
- package/src/modes/prompt-action-autocomplete.ts +11 -1
- package/src/modes/rpc/rpc-mode.ts +2 -2
- package/src/modes/shared/agent-wire/unattended-audit.ts +3 -2
- package/src/prompts/agents/init.md +1 -1
- package/src/prompts/system/plan-mode-active.md +1 -1
- package/src/prompts/tools/ast-grep.md +1 -1
- package/src/prompts/tools/search.md +1 -1
- package/src/prompts/tools/task.md +1 -2
- package/src/research-plan/index.ts +1 -0
- package/src/research-plan/ledger.ts +177 -0
- package/src/rlm/artifacts.ts +12 -3
- package/src/rlm/index.ts +7 -0
- package/src/runtime-mcp/config-writer.ts +46 -0
- package/src/session/agent-session.ts +43 -41
- package/src/session/session-manager.ts +19 -2
- package/src/setup/hermes/templates/operator-instructions.v1.md +8 -0
- package/src/setup/hermes-setup.ts +1 -1
- package/src/skc-runtime/deep-interview-recorder.ts +51 -18
- package/src/skc-runtime/deep-interview-runtime.ts +49 -23
- package/src/skc-runtime/goal-mode-request.ts +26 -11
- package/src/skc-runtime/launch-tmux.ts +68 -15
- package/src/skc-runtime/ralplan-runtime.ts +79 -50
- package/src/skc-runtime/session-layout.ts +180 -0
- package/src/skc-runtime/session-resolution.ts +217 -0
- package/src/skc-runtime/state-graph.ts +1 -2
- package/src/skc-runtime/state-migrations.ts +1 -0
- package/src/skc-runtime/state-runtime.ts +237 -114
- package/src/skc-runtime/state-schema.ts +2 -0
- package/src/skc-runtime/state-writer.ts +310 -42
- package/src/skc-runtime/team-runtime.ts +43 -19
- package/src/skc-runtime/tmux-sessions.ts +43 -2
- package/src/skc-runtime/ultragoal-guard.ts +45 -2
- package/src/skc-runtime/ultragoal-runtime.ts +121 -41
- package/src/skc-runtime/workflow-command-ref.ts +1 -2
- package/src/skc-runtime/workflow-manifest.ts +1 -2
- package/src/skill-state/active-state.ts +116 -129
- package/src/skill-state/canonical-skills.ts +4 -0
- package/src/skill-state/deep-interview-mutation-guard.ts +238 -111
- package/src/skill-state/workflow-hud.ts +4 -2
- package/src/skill-state/workflow-state-contract.ts +3 -3
- package/src/slash-commands/builtin-registry.ts +8 -4
- package/src/system-prompt.ts +11 -9
- package/src/task/agents.ts +1 -22
- package/src/task/index.ts +1 -41
- package/src/task/spawn-gate.ts +1 -38
- package/src/task/types.ts +1 -1
- package/src/tools/ask.ts +34 -12
- package/src/tools/ast-edit.ts +2 -2
- package/src/tools/computer.ts +58 -4
- package/src/utils/edit-mode.ts +1 -1
- package/dist/types/extensibility/custom-commands/bundled/review/index.d.ts +0 -10
- package/src/extensibility/custom-commands/bundled/review/index.ts +0 -456
- package/src/prompts/agents/explore.md +0 -58
- package/src/prompts/agents/plan.md +0 -49
- package/src/prompts/agents/reviewer.md +0 -141
- package/src/prompts/agents/task.md +0 -16
- package/src/prompts/review-request.md +0 -70
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type MigrateReport, type MigrateSource } from "../migrate/types";
|
|
2
|
+
export interface MigrateCommandArgs {
|
|
3
|
+
from: string[];
|
|
4
|
+
project: boolean;
|
|
5
|
+
force: boolean;
|
|
6
|
+
dryRun: boolean;
|
|
7
|
+
json: boolean;
|
|
8
|
+
/** Test seam: override home dir for source discovery. */
|
|
9
|
+
homeDir?: string;
|
|
10
|
+
/** Test seam: override cwd for project-scope destinations. */
|
|
11
|
+
cwd?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class MigrateArgsError extends Error {
|
|
14
|
+
}
|
|
15
|
+
/** Expand `all`/repeated `--from`, validate, and return sources in canonical order. */
|
|
16
|
+
export declare function resolveSources(from: string[]): MigrateSource[];
|
|
17
|
+
/** Run the migration and return the report (does not set process.exitCode). */
|
|
18
|
+
export declare function runMigrate(args: MigrateCommandArgs): Promise<MigrateReport>;
|
|
19
|
+
/** CLI entry: run, render, and set the process exit code. */
|
|
20
|
+
export declare function runMigrateCommand(args: MigrateCommandArgs): Promise<void>;
|
|
@@ -3,6 +3,8 @@ export interface InstalledVersionVerification {
|
|
|
3
3
|
ok: boolean;
|
|
4
4
|
actual?: string;
|
|
5
5
|
path?: string;
|
|
6
|
+
smokeTestFailed?: boolean;
|
|
7
|
+
smokeTestOutput?: string;
|
|
6
8
|
}
|
|
7
9
|
/** Paths and verifier used while replacing a downloaded binary update. */
|
|
8
10
|
export interface BinaryReplacementOptions {
|
|
@@ -24,6 +26,7 @@ export declare function resolveUpdateMethodForTest(ompPath: string, bunBinDir: s
|
|
|
24
26
|
export declare function formatBinaryDownloadFailureMessageForTest(binaryName: string, url: string, status: string | number, platform?: NodeJS.Platform): string;
|
|
25
27
|
export declare function buildReleaseBinaryUrlForTest(version: string, platform?: NodeJS.Platform, arch?: string): string;
|
|
26
28
|
export declare function formatManualUpdateInstructionsForTest(platform?: NodeJS.Platform): string;
|
|
29
|
+
export declare function formatVerificationFailureForTest(result: InstalledVersionVerification, expectedVersion: string): string;
|
|
27
30
|
/**
|
|
28
31
|
* Atomically replace the installed binary and roll back if version verification fails.
|
|
29
32
|
*/
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import MCP servers and skills from other coding agents into SKC.
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from "@sayknow-cli/utils/cli";
|
|
5
|
+
export default class Migrate extends Command {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
from: import("@sayknow-cli/utils/cli").FlagDescriptor<"string"> & {
|
|
10
|
+
description: string;
|
|
11
|
+
multiple: true;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
project: import("@sayknow-cli/utils/cli").FlagDescriptor<"boolean"> & {
|
|
15
|
+
description: string;
|
|
16
|
+
default: boolean;
|
|
17
|
+
};
|
|
18
|
+
force: import("@sayknow-cli/utils/cli").FlagDescriptor<"boolean"> & {
|
|
19
|
+
description: string;
|
|
20
|
+
default: boolean;
|
|
21
|
+
};
|
|
22
|
+
"dry-run": import("@sayknow-cli/utils/cli").FlagDescriptor<"boolean"> & {
|
|
23
|
+
description: string;
|
|
24
|
+
default: boolean;
|
|
25
|
+
};
|
|
26
|
+
json: import("@sayknow-cli/utils/cli").FlagDescriptor<"boolean"> & {
|
|
27
|
+
char: string;
|
|
28
|
+
description: string;
|
|
29
|
+
default: boolean;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
run(): Promise<void>;
|
|
33
|
+
}
|
|
@@ -173,6 +173,10 @@ export declare const KEYBINDINGS: {
|
|
|
173
173
|
readonly defaultKeys: ["escape", "ctrl+c"];
|
|
174
174
|
readonly description: "Cancel selection";
|
|
175
175
|
};
|
|
176
|
+
readonly "tui.global.debug": {
|
|
177
|
+
readonly defaultKeys: "shift+ctrl+d";
|
|
178
|
+
readonly description: "Toggle debug overlay";
|
|
179
|
+
};
|
|
176
180
|
readonly "app.interrupt": {
|
|
177
181
|
readonly defaultKeys: "escape";
|
|
178
182
|
readonly description: "Interrupt current operation";
|
|
@@ -51,6 +51,7 @@ export declare const ModelsConfigFile: ConfigFile<{
|
|
|
51
51
|
compat?: {
|
|
52
52
|
supportsStore?: boolean | undefined;
|
|
53
53
|
supportsDeveloperRole?: boolean | undefined;
|
|
54
|
+
sendSessionHeaders?: boolean | undefined;
|
|
54
55
|
supportsMultipleSystemMessages?: boolean | undefined;
|
|
55
56
|
supportsReasoningEffort?: boolean | undefined;
|
|
56
57
|
reasoningEffortMap?: {
|
|
@@ -129,6 +130,7 @@ export declare const ModelsConfigFile: ConfigFile<{
|
|
|
129
130
|
compat?: {
|
|
130
131
|
supportsStore?: boolean | undefined;
|
|
131
132
|
supportsDeveloperRole?: boolean | undefined;
|
|
133
|
+
sendSessionHeaders?: boolean | undefined;
|
|
132
134
|
supportsMultipleSystemMessages?: boolean | undefined;
|
|
133
135
|
supportsReasoningEffort?: boolean | undefined;
|
|
134
136
|
reasoningEffortMap?: {
|
|
@@ -202,6 +204,7 @@ export declare const ModelsConfigFile: ConfigFile<{
|
|
|
202
204
|
compat?: {
|
|
203
205
|
supportsStore?: boolean | undefined;
|
|
204
206
|
supportsDeveloperRole?: boolean | undefined;
|
|
207
|
+
sendSessionHeaders?: boolean | undefined;
|
|
205
208
|
supportsMultipleSystemMessages?: boolean | undefined;
|
|
206
209
|
supportsReasoningEffort?: boolean | undefined;
|
|
207
210
|
reasoningEffortMap?: {
|
|
@@ -2,6 +2,7 @@ import * as z from "zod/v4";
|
|
|
2
2
|
export declare const OpenAICompatSchema: z.ZodObject<{
|
|
3
3
|
supportsStore: z.ZodOptional<z.ZodBoolean>;
|
|
4
4
|
supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
|
|
5
|
+
sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
|
|
5
6
|
supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
|
|
6
7
|
supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
|
|
7
8
|
reasoningEffortMap: z.ZodOptional<z.ZodObject<{
|
|
@@ -163,6 +164,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
|
|
|
163
164
|
compat: z.ZodOptional<z.ZodObject<{
|
|
164
165
|
supportsStore: z.ZodOptional<z.ZodBoolean>;
|
|
165
166
|
supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
|
|
167
|
+
sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
|
|
166
168
|
supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
|
|
167
169
|
supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
|
|
168
170
|
reasoningEffortMap: z.ZodOptional<z.ZodObject<{
|
|
@@ -276,6 +278,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
|
|
|
276
278
|
compat: z.ZodOptional<z.ZodObject<{
|
|
277
279
|
supportsStore: z.ZodOptional<z.ZodBoolean>;
|
|
278
280
|
supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
|
|
281
|
+
sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
|
|
279
282
|
supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
|
|
280
283
|
supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
|
|
281
284
|
reasoningEffortMap: z.ZodOptional<z.ZodObject<{
|
|
@@ -442,6 +445,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
|
|
|
442
445
|
compat: z.ZodOptional<z.ZodObject<{
|
|
443
446
|
supportsStore: z.ZodOptional<z.ZodBoolean>;
|
|
444
447
|
supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
|
|
448
|
+
sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
|
|
445
449
|
supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
|
|
446
450
|
supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
|
|
447
451
|
reasoningEffortMap: z.ZodOptional<z.ZodObject<{
|
|
@@ -582,6 +586,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
|
|
|
582
586
|
compat: z.ZodOptional<z.ZodObject<{
|
|
583
587
|
supportsStore: z.ZodOptional<z.ZodBoolean>;
|
|
584
588
|
supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
|
|
589
|
+
sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
|
|
585
590
|
supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
|
|
586
591
|
supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
|
|
587
592
|
reasoningEffortMap: z.ZodOptional<z.ZodObject<{
|
|
@@ -1238,6 +1238,33 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
1238
1238
|
readonly description: "Skip welcome screen and startup status messages";
|
|
1239
1239
|
};
|
|
1240
1240
|
};
|
|
1241
|
+
readonly "startup.welcomeBannerMode": {
|
|
1242
|
+
readonly type: "enum";
|
|
1243
|
+
readonly values: readonly ["auto", "unicode", "square", "ascii"];
|
|
1244
|
+
readonly default: "auto";
|
|
1245
|
+
readonly ui: {
|
|
1246
|
+
readonly tab: "interaction";
|
|
1247
|
+
readonly label: "Welcome Banner Mode";
|
|
1248
|
+
readonly description: "Logo style for the startup welcome screen";
|
|
1249
|
+
readonly options: readonly [{
|
|
1250
|
+
readonly value: "auto";
|
|
1251
|
+
readonly label: "Auto";
|
|
1252
|
+
readonly description: "Use the rounded Unicode logo";
|
|
1253
|
+
}, {
|
|
1254
|
+
readonly value: "unicode";
|
|
1255
|
+
readonly label: "Unicode";
|
|
1256
|
+
readonly description: "Force the rounded Unicode logo";
|
|
1257
|
+
}, {
|
|
1258
|
+
readonly value: "square";
|
|
1259
|
+
readonly label: "Square Unicode";
|
|
1260
|
+
readonly description: "Force the square-corner Unicode fallback";
|
|
1261
|
+
}, {
|
|
1262
|
+
readonly value: "ascii";
|
|
1263
|
+
readonly label: "ASCII";
|
|
1264
|
+
readonly description: "Force the ASCII-safe logo";
|
|
1265
|
+
}];
|
|
1266
|
+
};
|
|
1267
|
+
};
|
|
1241
1268
|
readonly "startup.checkUpdate": {
|
|
1242
1269
|
readonly type: "boolean";
|
|
1243
1270
|
readonly default: true;
|
|
@@ -29,11 +29,12 @@ export declare class StorageError extends Error {
|
|
|
29
29
|
readonly code: string;
|
|
30
30
|
constructor(message: string, code: string);
|
|
31
31
|
}
|
|
32
|
-
/** Resolve the harness state root from explicit value, env, or cwd default. */
|
|
32
|
+
/** Resolve the harness state root from explicit value, env, or cwd/session default. */
|
|
33
33
|
export declare function resolveHarnessRoot(opts?: {
|
|
34
34
|
root?: string;
|
|
35
35
|
cwd?: string;
|
|
36
36
|
env?: NodeJS.ProcessEnv;
|
|
37
|
+
skcSessionId?: string;
|
|
37
38
|
}): string;
|
|
38
39
|
export declare function assertSafeSessionId(id: string): void;
|
|
39
40
|
export declare function generateSessionId(prefix?: string): string;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { SkillDiscoverySettings } from "../config/skill-settings-defaults";
|
|
2
2
|
import { type SkillActiveState } from "../skill-state/active-state";
|
|
3
|
+
import { initialPhaseForSkill } from "../skill-state/initial-phase";
|
|
4
|
+
export { initialPhaseForSkill };
|
|
3
5
|
import { type SkcWorkflowSkill } from "./skill-keywords";
|
|
4
|
-
export declare const SKC_STATE_DIR = ".skc
|
|
6
|
+
export declare const SKC_STATE_DIR = ".skc";
|
|
5
7
|
export declare const SKILL_ACTIVE_STATE_FILE = "skill-active-state.json";
|
|
6
8
|
export interface EffectiveSkillConfigInput {
|
|
7
9
|
skillsSettings?: SkillDiscoverySettings;
|
|
@@ -55,9 +57,15 @@ export interface UserPromptSubmitStateInput {
|
|
|
55
57
|
export declare function detectSkillKeywords(text: string): SkillKeywordMatch[];
|
|
56
58
|
export declare function detectPrimarySkillKeyword(text: string): SkillKeywordMatch | null;
|
|
57
59
|
export declare function resolveSkcStateDir(cwd: string, stateDir?: string): string;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
export interface StateRecoveryDiagnostic {
|
|
61
|
+
kind: "skill-active-state" | "mode-state";
|
|
62
|
+
statePath: string;
|
|
63
|
+
reason: "missing" | "corrupt" | "unreadable";
|
|
64
|
+
skill?: SkcWorkflowSkill;
|
|
65
|
+
}
|
|
66
|
+
export declare function buildStateRecoveryDiagnosticsContext(diagnostics: readonly StateRecoveryDiagnostic[]): string | null;
|
|
67
|
+
export declare function collectUserPromptStateRecoveryDiagnostics(input: UserPromptSubmitStateInput): Promise<StateRecoveryDiagnostic[]>;
|
|
68
|
+
export declare function readVisibleSkillActiveState(cwd: string, sessionId?: string, _stateDir?: string): Promise<SkillActiveState | null>;
|
|
61
69
|
export declare function recordSkillActivation(input: RecordSkillActivationInput): Promise<SkillActiveState | null>;
|
|
62
70
|
export interface EnsureWorkflowSkillActivationInput {
|
|
63
71
|
cwd: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AdapterResult, MigrateAction, MigrateDestinations, MigrateWarning } from "./types";
|
|
2
|
+
export interface PlanInput {
|
|
3
|
+
results: AdapterResult[];
|
|
4
|
+
destinations: MigrateDestinations;
|
|
5
|
+
force: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface PlanOutput {
|
|
8
|
+
actions: MigrateAction[];
|
|
9
|
+
warnings: MigrateWarning[];
|
|
10
|
+
}
|
|
11
|
+
export declare function planMigration(input: PlanInput): Promise<PlanOutput>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { AdapterResult, MigrateSource, SkillCandidate, SourceDiagnostic } from "../types";
|
|
2
|
+
export interface AdapterOptions {
|
|
3
|
+
/** Home directory root; overridable for tests. */
|
|
4
|
+
homeDir: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Adapter {
|
|
7
|
+
source: MigrateSource;
|
|
8
|
+
collect(options: AdapterOptions): Promise<AdapterResult>;
|
|
9
|
+
}
|
|
10
|
+
export declare function getAdapter(source: MigrateSource): Adapter;
|
|
11
|
+
/** Read a text file, classifying absence/IO errors into source diagnostics. */
|
|
12
|
+
export declare function readSourceText(filePath: string, source: MigrateSource, type: SourceDiagnostic["type"]): Promise<{
|
|
13
|
+
text: string;
|
|
14
|
+
} | {
|
|
15
|
+
diagnostic: SourceDiagnostic;
|
|
16
|
+
}>;
|
|
17
|
+
/** Parse JSON text, classifying parse errors into a `failed_invalid_source` diagnostic. */
|
|
18
|
+
export declare function parseSourceJson(text: string, filePath: string, source: MigrateSource, type: SourceDiagnostic["type"]): {
|
|
19
|
+
data: Record<string, unknown>;
|
|
20
|
+
} | {
|
|
21
|
+
diagnostic: SourceDiagnostic;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Collect skill candidates from a directory of `<name>/SKILL.md` entries.
|
|
25
|
+
* A missing directory yields a `skipped_absent_source` diagnostic.
|
|
26
|
+
*/
|
|
27
|
+
export declare function collectSkillDir(dir: string, source: MigrateSource): Promise<{
|
|
28
|
+
candidates: SkillCandidate[];
|
|
29
|
+
diagnostics: SourceDiagnostic[];
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Collect skill candidates from a flat directory of `*.md` prompt/command files.
|
|
33
|
+
*/
|
|
34
|
+
export declare function collectMarkdownPrompts(dir: string, source: MigrateSource): Promise<{
|
|
35
|
+
candidates: SkillCandidate[];
|
|
36
|
+
diagnostics: SourceDiagnostic[];
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Recursively collect skill candidates from any `**/SKILL.md` under `root`.
|
|
40
|
+
* The slug derives from the directory that directly contains the `SKILL.md`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function collectSkillTree(root: string, source: MigrateSource): Promise<{
|
|
43
|
+
candidates: SkillCandidate[];
|
|
44
|
+
diagnostics: SourceDiagnostic[];
|
|
45
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map raw source MCP server entries onto SKC `MCPServerConfig`.
|
|
3
|
+
*
|
|
4
|
+
* Implements the source-schema compatibility matrix from the consensus plan:
|
|
5
|
+
* preserved (P), transformed (T), omitted-with-warning (OW), skipped (S,
|
|
6
|
+
* `skipped_unmappable`), and failed (F, `failed_invalid_source`). Secret-indirection
|
|
7
|
+
* fields are always omitted-with-warning; their values are never read or emitted.
|
|
8
|
+
*/
|
|
9
|
+
import type { MCPServerConfig } from "../runtime-mcp/types";
|
|
10
|
+
import type { MigrateSource } from "./types";
|
|
11
|
+
export type McpMapOutcome = {
|
|
12
|
+
ok: true;
|
|
13
|
+
config: MCPServerConfig;
|
|
14
|
+
warnings: string[];
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
status: "skipped_unmappable" | "failed_invalid_source";
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function mapMcpEntry(source: MigrateSource, name: string, raw: unknown): McpMapOutcome;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the human-readable and `--json` reports for `skc migrate`.
|
|
3
|
+
*
|
|
4
|
+
* Secret values are never read upstream, so the report only ever contains field
|
|
5
|
+
* names in warnings — but rendering still treats action/warning text as opaque.
|
|
6
|
+
*/
|
|
7
|
+
import { type MigrateAction, type MigrateDestinations, type MigrateReport, type MigrateSource, type MigrateWarning } from "./types";
|
|
8
|
+
export interface BuildReportInput {
|
|
9
|
+
actions: MigrateAction[];
|
|
10
|
+
warnings: MigrateWarning[];
|
|
11
|
+
sources: MigrateSource[];
|
|
12
|
+
destinations: MigrateDestinations;
|
|
13
|
+
dryRun: boolean;
|
|
14
|
+
project: boolean;
|
|
15
|
+
force: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function buildReport(input: BuildReportInput): MigrateReport;
|
|
18
|
+
export declare function renderHuman(report: MigrateReport): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize a skill from another agent into a native SKC `SKILL.md`.
|
|
3
|
+
*
|
|
4
|
+
* SKC derives a skill's loaded name from its directory (`<slug>/SKILL.md`) when no
|
|
5
|
+
* frontmatter `name` is present, and requires a `description`. To guarantee the
|
|
6
|
+
* effective loaded name equals the lowercase-hyphen slug, we drop any frontmatter
|
|
7
|
+
* `name` and place the file at `<slug>/SKILL.md`, synthesizing a `description`
|
|
8
|
+
* when the source lacks one.
|
|
9
|
+
*/
|
|
10
|
+
export interface NormalizeSkillInput {
|
|
11
|
+
/** Raw name from the source (filename stem, frontmatter name, etc.). */
|
|
12
|
+
rawName: string;
|
|
13
|
+
/** Full source markdown (may or may not have frontmatter). */
|
|
14
|
+
content: string;
|
|
15
|
+
}
|
|
16
|
+
export interface NormalizedSkill {
|
|
17
|
+
slug: string;
|
|
18
|
+
content: string;
|
|
19
|
+
warnings: string[];
|
|
20
|
+
}
|
|
21
|
+
/** Convert an arbitrary name into a lowercase-hyphen slug. */
|
|
22
|
+
export declare function slugify(name: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Produce a `{ slug, content }` pair whose effective SKC-loaded name equals `slug`.
|
|
25
|
+
* Throws only on an unusable name (cannot produce a slug).
|
|
26
|
+
*/
|
|
27
|
+
export declare function normalizeSkill(input: NormalizeSkillInput): NormalizedSkill;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for `skc migrate`.
|
|
3
|
+
*
|
|
4
|
+
* Imports MCP servers and skills from other coding agents (Claude Code, Codex,
|
|
5
|
+
* OpenCode) into native SKC config. See the consensus plan under
|
|
6
|
+
* `.skc/plans/ralplan/` for the full taxonomy and force/collision semantics.
|
|
7
|
+
*/
|
|
8
|
+
import type { MCPServerConfig } from "../runtime-mcp/types";
|
|
9
|
+
/** Supported migration sources. */
|
|
10
|
+
export type MigrateSource = "claude-code" | "codex" | "opencode";
|
|
11
|
+
export declare const MIGRATE_SOURCES: readonly MigrateSource[];
|
|
12
|
+
/** Canonical, deterministic ordering used when expanding `--from all` / repeated `--from`. */
|
|
13
|
+
export declare const CANONICAL_SOURCE_ORDER: readonly MigrateSource[];
|
|
14
|
+
/** What kind of thing an action/coverage row is about. */
|
|
15
|
+
export type MigrateItemType = "mcp" | "skill" | "source";
|
|
16
|
+
/**
|
|
17
|
+
* Per-item outcome taxonomy.
|
|
18
|
+
*
|
|
19
|
+
* `skipped_*` outcomes are non-fatal (exit 0). Any `failed_*` outcome sets
|
|
20
|
+
* `ok=false` and a non-zero process exit code.
|
|
21
|
+
*/
|
|
22
|
+
export type MigrationStatus = "imported" | "updated" | "skipped_exists" | "skipped_absent_source" | "skipped_unmappable" | "failed_invalid_source" | "failed_invalid_destination" | "failed_io";
|
|
23
|
+
export declare const MIGRATION_STATUSES: readonly MigrationStatus[];
|
|
24
|
+
/** Statuses that represent a hard failure (drive `ok=false` + non-zero exit). */
|
|
25
|
+
export declare const FAILURE_STATUSES: ReadonlySet<MigrationStatus>;
|
|
26
|
+
export declare function isFailureStatus(status: MigrationStatus): boolean;
|
|
27
|
+
/** Operation the planner decided for an item. */
|
|
28
|
+
export type MigrateOperation = "create" | "update" | "skip" | "fail";
|
|
29
|
+
/** A raw MCP server candidate parsed from a source, before mapping/destination planning. */
|
|
30
|
+
export interface McpCandidate {
|
|
31
|
+
source: MigrateSource;
|
|
32
|
+
name: string;
|
|
33
|
+
/** The raw, unmapped server entry from the source config (mapped by the planner). */
|
|
34
|
+
raw: unknown;
|
|
35
|
+
}
|
|
36
|
+
/** A raw skill candidate parsed from a source, before normalization/destination planning. */
|
|
37
|
+
export interface SkillCandidate {
|
|
38
|
+
source: MigrateSource;
|
|
39
|
+
/** Slug used as the destination directory and effective loaded name. */
|
|
40
|
+
slug: string;
|
|
41
|
+
/** Full SKILL.md content (frontmatter already normalized so loaded name == slug). */
|
|
42
|
+
content: string;
|
|
43
|
+
warnings: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Source-level diagnostic for a single source/type pair (e.g. "codex mcp config
|
|
47
|
+
* was malformed"). Distinct from per-item actions so absent/unreadable sources
|
|
48
|
+
* are reported once instead of per item.
|
|
49
|
+
*/
|
|
50
|
+
export interface SourceDiagnostic {
|
|
51
|
+
source: MigrateSource;
|
|
52
|
+
type: Exclude<MigrateItemType, "source"> | "source";
|
|
53
|
+
status: Extract<MigrationStatus, "skipped_absent_source" | "failed_invalid_source" | "failed_io">;
|
|
54
|
+
message: string;
|
|
55
|
+
}
|
|
56
|
+
/** Normalized candidates + diagnostics returned by an adapter. */
|
|
57
|
+
export interface AdapterResult {
|
|
58
|
+
mcpCandidates: McpCandidate[];
|
|
59
|
+
skillCandidates: SkillCandidate[];
|
|
60
|
+
diagnostics: SourceDiagnostic[];
|
|
61
|
+
}
|
|
62
|
+
/** A single planned action consumed identically by dry-run and live execution. */
|
|
63
|
+
export interface MigrateAction {
|
|
64
|
+
source: MigrateSource;
|
|
65
|
+
type: MigrateItemType;
|
|
66
|
+
name?: string;
|
|
67
|
+
/** For skills: the effective SKC-loaded name (== slug). */
|
|
68
|
+
effectiveName?: string;
|
|
69
|
+
/** Absolute destination path (mcp.json for MCP, <skillsDir>/<slug>/SKILL.md for skills). */
|
|
70
|
+
destination?: string;
|
|
71
|
+
operation: MigrateOperation;
|
|
72
|
+
status: MigrationStatus;
|
|
73
|
+
reason?: string;
|
|
74
|
+
warnings?: string[];
|
|
75
|
+
/** Resolved payload the executor needs; never serialized to the report. */
|
|
76
|
+
mcp?: {
|
|
77
|
+
config: MCPServerConfig;
|
|
78
|
+
force: boolean;
|
|
79
|
+
};
|
|
80
|
+
skill?: {
|
|
81
|
+
content: string;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export interface MigrateWarning {
|
|
85
|
+
source: MigrateSource;
|
|
86
|
+
type: string;
|
|
87
|
+
name?: string;
|
|
88
|
+
message: string;
|
|
89
|
+
}
|
|
90
|
+
export type StatusCounts = Record<MigrationStatus, number>;
|
|
91
|
+
export interface MigrateDestinations {
|
|
92
|
+
mcpConfigPath: string;
|
|
93
|
+
skillsDir: string;
|
|
94
|
+
}
|
|
95
|
+
/** The full machine-readable report emitted with `--json`. */
|
|
96
|
+
export interface MigrateReport {
|
|
97
|
+
ok: boolean;
|
|
98
|
+
dryRun: boolean;
|
|
99
|
+
project: boolean;
|
|
100
|
+
force: boolean;
|
|
101
|
+
sources: MigrateSource[];
|
|
102
|
+
destinations: MigrateDestinations;
|
|
103
|
+
summary: {
|
|
104
|
+
total: StatusCounts;
|
|
105
|
+
byType: {
|
|
106
|
+
mcp: StatusCounts;
|
|
107
|
+
skill: StatusCounts;
|
|
108
|
+
source: StatusCounts;
|
|
109
|
+
};
|
|
110
|
+
bySource: Record<MigrateSource, StatusCounts>;
|
|
111
|
+
};
|
|
112
|
+
actions: Array<{
|
|
113
|
+
source: MigrateSource;
|
|
114
|
+
type: MigrateItemType;
|
|
115
|
+
name?: string;
|
|
116
|
+
effectiveName?: string;
|
|
117
|
+
destination?: string;
|
|
118
|
+
operation: MigrateOperation;
|
|
119
|
+
status: MigrationStatus;
|
|
120
|
+
reason?: string;
|
|
121
|
+
warnings?: string[];
|
|
122
|
+
}>;
|
|
123
|
+
warnings: MigrateWarning[];
|
|
124
|
+
}
|
|
125
|
+
/** Create a zeroed status-count record. */
|
|
126
|
+
export declare function emptyStatusCounts(): StatusCounts;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Editor, type KeyId } from "@sayknow-cli/tui";
|
|
2
|
-
import type
|
|
2
|
+
import { type AppKeybinding } from "../../config/keybindings";
|
|
3
3
|
type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.message.queue" | "app.clipboard.pasteImage" | "app.clipboard.copyPrompt">;
|
|
4
4
|
type PastePendingClearReason = "timeout" | "queue-limit";
|
|
5
5
|
/**
|
|
@@ -8,6 +8,7 @@ export interface LspServerInfo {
|
|
|
8
8
|
status: "ready" | "error" | "connecting";
|
|
9
9
|
fileTypes: string[];
|
|
10
10
|
}
|
|
11
|
+
export type WelcomeLogoMode = "unicode" | "square" | "ascii";
|
|
11
12
|
/**
|
|
12
13
|
* Sayknow-CLI launch surface: a blue-gradient SAYKNOW wordmark, compact
|
|
13
14
|
* command affordances, and project signals — a distinct identity, not a
|
|
@@ -20,7 +21,8 @@ export declare class WelcomeComponent implements Component {
|
|
|
20
21
|
private providerName;
|
|
21
22
|
private recentSessions;
|
|
22
23
|
private lspServers;
|
|
23
|
-
|
|
24
|
+
private readonly logoMode;
|
|
25
|
+
constructor(version: string, modelName: string, providerName: string, recentSessions?: RecentSession[], lspServers?: LspServerInfo[], logoMode?: WelcomeLogoMode);
|
|
24
26
|
invalidate(): void;
|
|
25
27
|
/**
|
|
26
28
|
* Play a one-shot intro that sweeps the gradient through every phase
|
|
@@ -23,9 +23,12 @@ import type { HookInputComponent } from "./components/hook-input";
|
|
|
23
23
|
import type { HookSelectorComponent } from "./components/hook-selector";
|
|
24
24
|
import { StatusLineComponent } from "./components/status-line";
|
|
25
25
|
import type { ToolExecutionHandle } from "./components/tool-execution";
|
|
26
|
+
import { type WelcomeLogoMode } from "./components/welcome";
|
|
26
27
|
import { OAuthManualInputManager } from "./oauth-manual-input";
|
|
27
28
|
import type { Theme } from "./theme/theme";
|
|
28
29
|
import type { CompactionQueuedMessage, InteractiveModeContext, SubmittedUserInput, TodoItem, TodoPhase } from "./types";
|
|
30
|
+
export type WelcomeBannerSettingMode = "auto" | "unicode" | "square" | "ascii";
|
|
31
|
+
export declare function resolveWelcomeLogoMode(mode: WelcomeBannerSettingMode, env?: Record<string, string | undefined>, platform?: NodeJS.Platform): WelcomeLogoMode;
|
|
29
32
|
/** Options for creating an InteractiveMode instance (for future API use) */
|
|
30
33
|
export interface InteractiveModeOptions {
|
|
31
34
|
/** Providers that were migrated during startup */
|
|
@@ -13,6 +13,7 @@ interface PromptActionAutocompleteOptions {
|
|
|
13
13
|
keybindings: KeybindingsManager;
|
|
14
14
|
copyCurrentLine: () => void;
|
|
15
15
|
copyPrompt: () => void;
|
|
16
|
+
pasteImage: () => void;
|
|
16
17
|
undo: (prefix: string) => void;
|
|
17
18
|
moveCursorToMessageEnd: () => void;
|
|
18
19
|
moveCursorToMessageStart: () => void;
|
|
@@ -41,7 +41,7 @@ export interface AuditLogOptions {
|
|
|
41
41
|
now?(): number;
|
|
42
42
|
nextId?(): string;
|
|
43
43
|
}
|
|
44
|
-
export declare function defaultAuditPath(runId: string, root?: string): string;
|
|
44
|
+
export declare function defaultAuditPath(runId: string, root?: string, skcSessionId?: string): string;
|
|
45
45
|
/** Append-only audit log writer + reader for one unattended run. */
|
|
46
46
|
export declare class UnattendedAuditLog {
|
|
47
47
|
private readonly filePath;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ledger";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type ResearchPlanConfidence = "low" | "medium" | "high";
|
|
2
|
+
export type ResearchEvidenceVerdict = "support" | "contradict" | "uncertain";
|
|
3
|
+
export interface ResearchPlanItem {
|
|
4
|
+
claim: string;
|
|
5
|
+
confidence: ResearchPlanConfidence;
|
|
6
|
+
unknowns: string[];
|
|
7
|
+
evidenceNeeded: string[];
|
|
8
|
+
counterexampleQueries: string[];
|
|
9
|
+
sourceConflictPolicy: string;
|
|
10
|
+
dropCondition: string;
|
|
11
|
+
verifierChecks: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface ResearchEvidenceEntry {
|
|
14
|
+
claim: string;
|
|
15
|
+
source: string;
|
|
16
|
+
confidence: ResearchPlanConfidence;
|
|
17
|
+
verdict: ResearchEvidenceVerdict;
|
|
18
|
+
notes?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ResearchLedgerVerdict {
|
|
21
|
+
claim: string;
|
|
22
|
+
finalVerdict: "accepted" | "rejected" | "uncertain";
|
|
23
|
+
survivingSources: ResearchEvidenceEntry[];
|
|
24
|
+
rejectReason?: string;
|
|
25
|
+
unresolvedUnknowns: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ResearchPlanValidationResult {
|
|
28
|
+
valid: boolean;
|
|
29
|
+
errors: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function validateResearchPlanItem(item: Partial<ResearchPlanItem>): ResearchPlanValidationResult;
|
|
32
|
+
export declare function validateResearchEvidenceEntry(entry: Partial<ResearchEvidenceEntry>): ResearchPlanValidationResult;
|
|
33
|
+
export declare function evaluateResearchLedger(item: ResearchPlanItem, evidence: readonly ResearchEvidenceEntry[]): ResearchLedgerVerdict;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RlmArtifactPaths } from "./types";
|
|
2
|
-
export declare const RLM_DIR_SEGMENT
|
|
2
|
+
export declare const RLM_DIR_SEGMENT = "rlm";
|
|
3
3
|
export declare function isValidRlmSessionId(sessionId: string): boolean;
|
|
4
4
|
/** Generate a filesystem-safe, sortable session id (timestamp + random suffix). */
|
|
5
5
|
export declare function generateRlmSessionId(now?: Date): string;
|
|
@@ -28,6 +28,32 @@ export declare function addMCPServer(filePath: string, name: string, config: MCP
|
|
|
28
28
|
* @throws Error if validation fails
|
|
29
29
|
*/
|
|
30
30
|
export declare function updateMCPServer(filePath: string, name: string, config: MCPServerConfig): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Result of an {@link upsertMCPServer} call.
|
|
33
|
+
* - `added`: server did not exist and was written.
|
|
34
|
+
* - `updated`: server existed and was overwritten because `force` was set.
|
|
35
|
+
* - `skipped`: server existed and `force` was not set, so nothing was written.
|
|
36
|
+
*/
|
|
37
|
+
export type UpsertMCPServerResult = {
|
|
38
|
+
status: "added";
|
|
39
|
+
} | {
|
|
40
|
+
status: "updated";
|
|
41
|
+
} | {
|
|
42
|
+
status: "skipped";
|
|
43
|
+
reason: "exists";
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Add an MCP server, or overwrite an existing one only when `force` is set.
|
|
47
|
+
*
|
|
48
|
+
* Collision-aware wrapper over {@link addMCPServer} / {@link updateMCPServer} used by
|
|
49
|
+
* `skc migrate`. Never connects to the server. Reuses the underlying writers so the
|
|
50
|
+
* rest of the config file (including `disabledServers`) is preserved on update.
|
|
51
|
+
*
|
|
52
|
+
* @throws Error if the server name or config is invalid (validated before any write).
|
|
53
|
+
*/
|
|
54
|
+
export declare function upsertMCPServer(filePath: string, name: string, config: MCPServerConfig, options?: {
|
|
55
|
+
force?: boolean;
|
|
56
|
+
}): Promise<UpsertMCPServerResult>;
|
|
31
57
|
/**
|
|
32
58
|
* Remove an MCP server from a config file.
|
|
33
59
|
*
|