@sayknow-cli/coding-agent 0.2.2 → 0.2.4
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/CHANGELOG.md +29 -0
- package/dist/types/discovery/agents.d.ts +1 -1
- package/dist/types/i18n/messages/en.d.ts +14 -0
- package/dist/types/reminders/star-reminder.d.ts +1 -1
- package/dist/types/runtime-mcp/types.d.ts +1 -1
- package/package.json +7 -7
- package/src/cli/update-cli.ts +1 -1
- package/src/config/mcp-schema.json +1 -1
- package/src/discovery/agents.ts +1 -1
- package/src/i18n/messages/de.ts +14 -0
- package/src/i18n/messages/en.ts +14 -0
- package/src/i18n/messages/es.ts +14 -0
- package/src/i18n/messages/fr.ts +14 -0
- package/src/i18n/messages/ja.ts +14 -0
- package/src/i18n/messages/ko.ts +14 -0
- package/src/i18n/messages/zh.ts +14 -0
- package/src/internal-urls/docs-index.generated.ts +8 -8
- package/src/modes/components/model-selector.ts +42 -18
- package/src/modes/theme/defaults/claude-code.json +1 -1
- package/src/modes/theme/defaults/codex.json +1 -1
- package/src/modes/theme/defaults/opencode.json +1 -1
- package/src/reminders/star-reminder.ts +1 -1
- package/src/runtime-mcp/types.ts +1 -1
- package/src/web/scrapers/discogs.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,35 @@ Sayknow-CLI is a rebranded fork of [gajae-code](https://github.com/Yeachan-Heo/g
|
|
|
4
4
|
This file tracks the **fork's own releases**; upstream's full feature history lives
|
|
5
5
|
in that project. Each release notes the upstream version it is built on.
|
|
6
6
|
|
|
7
|
+
## [0.2.4] — 2026-06-19
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- The model selector is now fully localized — the preset list ("Model presets",
|
|
12
|
+
"Create custom preset", "Browse all models"), the apply/default scope menu,
|
|
13
|
+
action menus, and hints follow the interface language. Model and provider names
|
|
14
|
+
(Claude, Codex, …) stay verbatim.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Release builds no longer fail spuriously on a timing-flaky pi-shell
|
|
19
|
+
process-reaping test: the Rust test runner now retries flaky tests
|
|
20
|
+
(`cargo nextest --retries 2`).
|
|
21
|
+
|
|
22
|
+
## [0.2.3] — 2026-06-19
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- `skc update` and the binary installer pointed at a non-existent repo path
|
|
27
|
+
(`jaybeyond/sayknow-cli`, lowercased by the rebrand) and 404'd. They now use the
|
|
28
|
+
real repo `jaybeyond/Sayknow_CLI`, so in-app updates and the install script work.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **Now on npm.** Install and upgrade with `npm install -g sayknow-cli`
|
|
33
|
+
(`@latest` to upgrade, or `skc update`). The READMEs lead with the npm install;
|
|
34
|
+
building from source moved to its own "Install from source (development)" section.
|
|
35
|
+
|
|
7
36
|
## [0.2.2] — 2026-06-18
|
|
8
37
|
|
|
9
38
|
### Fixed
|
|
@@ -7,6 +7,6 @@ import type { LoadContext } from "../capability/types";
|
|
|
7
7
|
* user-level config and is already enumerated by {@link getUserPathCandidates}.
|
|
8
8
|
* Without this guard, any cwd under `$HOME` (with no closer git repoRoot) would
|
|
9
9
|
* walk up to home and yield duplicate project+user entries for the same
|
|
10
|
-
* directory — see https://github.com/jaybeyond/
|
|
10
|
+
* directory — see https://github.com/jaybeyond/Sayknow_CLI/issues/1116.
|
|
11
11
|
*/
|
|
12
12
|
export declare function getProjectPathCandidates(ctx: LoadContext, ...segments: string[]): string[];
|
|
@@ -62,5 +62,19 @@ export declare const en: {
|
|
|
62
62
|
readonly "cmd.session": "Session management commands";
|
|
63
63
|
readonly "cmd.clear": "Clear the conversation";
|
|
64
64
|
readonly "cmd.quit": "Exit Sayknow-CLI";
|
|
65
|
+
readonly "modelSelector.presets": "Model presets";
|
|
66
|
+
readonly "modelSelector.createCustom": "Create custom preset";
|
|
67
|
+
readonly "modelSelector.browseAll": "Browse all models";
|
|
68
|
+
readonly "modelSelector.applySession": "Apply for this session";
|
|
69
|
+
readonly "modelSelector.setDefault": "Set as default";
|
|
70
|
+
readonly "modelSelector.pressEnterApply": "Press Enter to apply this preset";
|
|
71
|
+
readonly "modelSelector.presetPreview": "Preset preview: {name}";
|
|
72
|
+
readonly "modelSelector.showingScoped": "Showing models from --models scope";
|
|
73
|
+
readonly "modelSelector.modelsTab": "Models";
|
|
74
|
+
readonly "modelSelector.noMatching": "No matching models.";
|
|
75
|
+
readonly "modelSelector.modelName": "Model Name: {value}";
|
|
76
|
+
readonly "modelSelector.actionFor": "Action for: {id}";
|
|
77
|
+
readonly "modelSelector.reasoningFor": "Reasoning for {target}: {id}";
|
|
78
|
+
readonly "modelSelector.temporaryModel": "temporary model";
|
|
65
79
|
};
|
|
66
80
|
export type MsgKey = keyof typeof en;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ImageContent } from "@sayknow-cli/ai";
|
|
2
2
|
import type { CustomMessage } from "../session/messages";
|
|
3
|
-
export declare const STAR_REMINDER_REPO = "jaybeyond/
|
|
3
|
+
export declare const STAR_REMINDER_REPO = "jaybeyond/Sayknow_CLI";
|
|
4
4
|
export declare const STAR_REMINDER_CUSTOM_TYPE = "star-reminder";
|
|
5
5
|
export declare const STARRED_CACHE_TTL_MS: number;
|
|
6
6
|
export interface StarReminderState {
|
|
@@ -79,7 +79,7 @@ export interface MCPSseServerConfig extends MCPServerConfigBase {
|
|
|
79
79
|
headers?: Record<string, string>;
|
|
80
80
|
}
|
|
81
81
|
export type MCPServerConfig = MCPStdioServerConfig | MCPHttpServerConfig | MCPSseServerConfig;
|
|
82
|
-
export declare const MCP_CONFIG_SCHEMA_URL = "https://raw.githubusercontent.com/jaybeyond/
|
|
82
|
+
export declare const MCP_CONFIG_SCHEMA_URL = "https://raw.githubusercontent.com/jaybeyond/Sayknow_CLI/main/packages/coding-agent/src/config/mcp-schema.json";
|
|
83
83
|
/** Root mcp.json/.mcp.json file structure */
|
|
84
84
|
export interface MCPConfigFile {
|
|
85
85
|
$schema?: string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@sayknow-cli/coding-agent",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.4",
|
|
5
5
|
"description": "Sayknow-CLI CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://github.com/jaybeyond/Sayknow_CLI",
|
|
7
7
|
"author": "jaybeyond",
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
"@agentclientprotocol/sdk": "0.21.0",
|
|
52
52
|
"@babel/parser": "^7.29.3",
|
|
53
53
|
"@mozilla/readability": "^0.6.0",
|
|
54
|
-
"@sayknow-cli/stats": "0.2.
|
|
55
|
-
"@sayknow-cli/agent-core": "0.2.
|
|
56
|
-
"@sayknow-cli/ai": "0.2.
|
|
57
|
-
"@sayknow-cli/natives": "0.2.
|
|
58
|
-
"@sayknow-cli/tui": "0.2.
|
|
59
|
-
"@sayknow-cli/utils": "0.2.
|
|
54
|
+
"@sayknow-cli/stats": "0.2.4",
|
|
55
|
+
"@sayknow-cli/agent-core": "0.2.4",
|
|
56
|
+
"@sayknow-cli/ai": "0.2.4",
|
|
57
|
+
"@sayknow-cli/natives": "0.2.4",
|
|
58
|
+
"@sayknow-cli/tui": "0.2.4",
|
|
59
|
+
"@sayknow-cli/utils": "0.2.4",
|
|
60
60
|
"@puppeteer/browsers": "^2.13.0",
|
|
61
61
|
"@types/turndown": "5.0.6",
|
|
62
62
|
"@xterm/headless": "^6.0.0",
|
package/src/cli/update-cli.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { $ } from "bun";
|
|
|
12
12
|
import chalk from "chalk";
|
|
13
13
|
import { theme } from "../modes/theme/theme";
|
|
14
14
|
|
|
15
|
-
const RELEASE_REPO = "jaybeyond/
|
|
15
|
+
const RELEASE_REPO = "jaybeyond/Sayknow_CLI";
|
|
16
16
|
const PACKAGE = "@sayknow-cli/coding-agent";
|
|
17
17
|
|
|
18
18
|
interface ReleaseInfo {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/jaybeyond/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/jaybeyond/Sayknow_CLI/main/packages/coding-agent/src/config/mcp-schema.json",
|
|
4
4
|
"title": "SKC MCP configuration",
|
|
5
5
|
"description": "Schema for mcp.json, .mcp.json, .skc/mcp.json, and ~/.skc/agent/mcp.json used by the SKC coding agent.",
|
|
6
6
|
"type": "object",
|
package/src/discovery/agents.ts
CHANGED
|
@@ -41,7 +41,7 @@ function getUserPathCandidates(ctx: LoadContext, ...segments: string[]): string[
|
|
|
41
41
|
* user-level config and is already enumerated by {@link getUserPathCandidates}.
|
|
42
42
|
* Without this guard, any cwd under `$HOME` (with no closer git repoRoot) would
|
|
43
43
|
* walk up to home and yield duplicate project+user entries for the same
|
|
44
|
-
* directory — see https://github.com/jaybeyond/
|
|
44
|
+
* directory — see https://github.com/jaybeyond/Sayknow_CLI/issues/1116.
|
|
45
45
|
*/
|
|
46
46
|
export function getProjectPathCandidates(ctx: LoadContext, ...segments: string[]): string[] {
|
|
47
47
|
const paths: string[] = [];
|
package/src/i18n/messages/de.ts
CHANGED
|
@@ -62,4 +62,18 @@ export const de: Partial<Record<MsgKey, string>> = {
|
|
|
62
62
|
"cmd.session": "Befehle zur Sitzungsverwaltung",
|
|
63
63
|
"cmd.clear": "Unterhaltung löschen",
|
|
64
64
|
"cmd.quit": "Sayknow-CLI beenden",
|
|
65
|
+
"modelSelector.presets": "Modell-Presets",
|
|
66
|
+
"modelSelector.createCustom": "Eigenes Preset erstellen",
|
|
67
|
+
"modelSelector.browseAll": "Alle Modelle durchsuchen",
|
|
68
|
+
"modelSelector.applySession": "Für diese Sitzung anwenden",
|
|
69
|
+
"modelSelector.setDefault": "Als Standard festlegen",
|
|
70
|
+
"modelSelector.pressEnterApply": "Enter drücken, um dieses Preset anzuwenden",
|
|
71
|
+
"modelSelector.presetPreview": "Preset-Vorschau: {name}",
|
|
72
|
+
"modelSelector.showingScoped": "Zeige Modelle aus dem --models-Bereich",
|
|
73
|
+
"modelSelector.modelsTab": "Modelle",
|
|
74
|
+
"modelSelector.noMatching": "Keine passenden Modelle.",
|
|
75
|
+
"modelSelector.modelName": "Modellname: {value}",
|
|
76
|
+
"modelSelector.actionFor": "Aktion für: {id}",
|
|
77
|
+
"modelSelector.reasoningFor": "Reasoning für {target}: {id}",
|
|
78
|
+
"modelSelector.temporaryModel": "temporäres Modell",
|
|
65
79
|
};
|
package/src/i18n/messages/en.ts
CHANGED
|
@@ -81,6 +81,20 @@ export const en = {
|
|
|
81
81
|
"cmd.session": "Session management commands",
|
|
82
82
|
"cmd.clear": "Clear the conversation",
|
|
83
83
|
"cmd.quit": "Exit Sayknow-CLI",
|
|
84
|
+
"modelSelector.presets": "Model presets",
|
|
85
|
+
"modelSelector.createCustom": "Create custom preset",
|
|
86
|
+
"modelSelector.browseAll": "Browse all models",
|
|
87
|
+
"modelSelector.applySession": "Apply for this session",
|
|
88
|
+
"modelSelector.setDefault": "Set as default",
|
|
89
|
+
"modelSelector.pressEnterApply": "Press Enter to apply this preset",
|
|
90
|
+
"modelSelector.presetPreview": "Preset preview: {name}",
|
|
91
|
+
"modelSelector.showingScoped": "Showing models from --models scope",
|
|
92
|
+
"modelSelector.modelsTab": "Models",
|
|
93
|
+
"modelSelector.noMatching": "No matching models.",
|
|
94
|
+
"modelSelector.modelName": "Model Name: {value}",
|
|
95
|
+
"modelSelector.actionFor": "Action for: {id}",
|
|
96
|
+
"modelSelector.reasoningFor": "Reasoning for {target}: {id}",
|
|
97
|
+
"modelSelector.temporaryModel": "temporary model",
|
|
84
98
|
} as const;
|
|
85
99
|
|
|
86
100
|
export type MsgKey = keyof typeof en;
|
package/src/i18n/messages/es.ts
CHANGED
|
@@ -62,4 +62,18 @@ export const es: Partial<Record<MsgKey, string>> = {
|
|
|
62
62
|
"cmd.session": "Comandos de gestión de sesiones",
|
|
63
63
|
"cmd.clear": "Borrar la conversación",
|
|
64
64
|
"cmd.quit": "Salir de Sayknow-CLI",
|
|
65
|
+
"modelSelector.presets": "Preajustes de modelo",
|
|
66
|
+
"modelSelector.createCustom": "Crear preajuste personalizado",
|
|
67
|
+
"modelSelector.browseAll": "Ver todos los modelos",
|
|
68
|
+
"modelSelector.applySession": "Aplicar en esta sesión",
|
|
69
|
+
"modelSelector.setDefault": "Establecer como predeterminado",
|
|
70
|
+
"modelSelector.pressEnterApply": "Pulsa Enter para aplicar este preajuste",
|
|
71
|
+
"modelSelector.presetPreview": "Vista previa del preajuste: {name}",
|
|
72
|
+
"modelSelector.showingScoped": "Mostrando modelos del ámbito --models",
|
|
73
|
+
"modelSelector.modelsTab": "Modelos",
|
|
74
|
+
"modelSelector.noMatching": "No hay modelos coincidentes.",
|
|
75
|
+
"modelSelector.modelName": "Nombre del modelo: {value}",
|
|
76
|
+
"modelSelector.actionFor": "Acción para: {id}",
|
|
77
|
+
"modelSelector.reasoningFor": "Razonamiento para {target}: {id}",
|
|
78
|
+
"modelSelector.temporaryModel": "modelo temporal",
|
|
65
79
|
};
|
package/src/i18n/messages/fr.ts
CHANGED
|
@@ -62,4 +62,18 @@ export const fr: Partial<Record<MsgKey, string>> = {
|
|
|
62
62
|
"cmd.session": "Commandes de gestion de session",
|
|
63
63
|
"cmd.clear": "Effacer la conversation",
|
|
64
64
|
"cmd.quit": "Quitter Sayknow-CLI",
|
|
65
|
+
"modelSelector.presets": "Préréglages de modèle",
|
|
66
|
+
"modelSelector.createCustom": "Créer un préréglage personnalisé",
|
|
67
|
+
"modelSelector.browseAll": "Parcourir tous les modèles",
|
|
68
|
+
"modelSelector.applySession": "Appliquer pour cette session",
|
|
69
|
+
"modelSelector.setDefault": "Définir par défaut",
|
|
70
|
+
"modelSelector.pressEnterApply": "Appuyez sur Entrée pour appliquer ce préréglage",
|
|
71
|
+
"modelSelector.presetPreview": "Aperçu du préréglage : {name}",
|
|
72
|
+
"modelSelector.showingScoped": "Affichage des modèles de la portée --models",
|
|
73
|
+
"modelSelector.modelsTab": "Modèles",
|
|
74
|
+
"modelSelector.noMatching": "Aucun modèle correspondant.",
|
|
75
|
+
"modelSelector.modelName": "Nom du modèle : {value}",
|
|
76
|
+
"modelSelector.actionFor": "Action pour : {id}",
|
|
77
|
+
"modelSelector.reasoningFor": "Raisonnement pour {target} : {id}",
|
|
78
|
+
"modelSelector.temporaryModel": "modèle temporaire",
|
|
65
79
|
};
|
package/src/i18n/messages/ja.ts
CHANGED
|
@@ -66,4 +66,18 @@ export const ja: Partial<Record<MsgKey, string>> = {
|
|
|
66
66
|
"cmd.session": "セッション管理コマンド",
|
|
67
67
|
"cmd.clear": "会話をクリア",
|
|
68
68
|
"cmd.quit": "Sayknow-CLI を終了",
|
|
69
|
+
"modelSelector.presets": "モデルプリセット",
|
|
70
|
+
"modelSelector.createCustom": "カスタムプリセットを作成",
|
|
71
|
+
"modelSelector.browseAll": "すべてのモデルを表示",
|
|
72
|
+
"modelSelector.applySession": "このセッションのみ適用",
|
|
73
|
+
"modelSelector.setDefault": "デフォルトに設定",
|
|
74
|
+
"modelSelector.pressEnterApply": "Enter キーでこのプリセットを適用",
|
|
75
|
+
"modelSelector.presetPreview": "プリセットのプレビュー: {name}",
|
|
76
|
+
"modelSelector.showingScoped": "--models スコープのモデルを表示中",
|
|
77
|
+
"modelSelector.modelsTab": "モデル",
|
|
78
|
+
"modelSelector.noMatching": "一致するモデルがありません。",
|
|
79
|
+
"modelSelector.modelName": "モデル名: {value}",
|
|
80
|
+
"modelSelector.actionFor": "操作対象: {id}",
|
|
81
|
+
"modelSelector.reasoningFor": "{target} の推論レベル: {id}",
|
|
82
|
+
"modelSelector.temporaryModel": "一時モデル",
|
|
69
83
|
};
|
package/src/i18n/messages/ko.ts
CHANGED
|
@@ -66,4 +66,18 @@ export const ko: Partial<Record<MsgKey, string>> = {
|
|
|
66
66
|
"cmd.session": "세션 관리 명령",
|
|
67
67
|
"cmd.clear": "대화 지우기",
|
|
68
68
|
"cmd.quit": "Sayknow-CLI 종료",
|
|
69
|
+
"modelSelector.presets": "모델 프리셋",
|
|
70
|
+
"modelSelector.createCustom": "커스텀 프리셋 만들기",
|
|
71
|
+
"modelSelector.browseAll": "전체 모델 보기",
|
|
72
|
+
"modelSelector.applySession": "이 세션에만 적용",
|
|
73
|
+
"modelSelector.setDefault": "기본값으로 설정",
|
|
74
|
+
"modelSelector.pressEnterApply": "Enter를 눌러 이 프리셋 적용",
|
|
75
|
+
"modelSelector.presetPreview": "프리셋 미리보기: {name}",
|
|
76
|
+
"modelSelector.showingScoped": "--models 범위의 모델만 표시 중",
|
|
77
|
+
"modelSelector.modelsTab": "모델",
|
|
78
|
+
"modelSelector.noMatching": "일치하는 모델이 없습니다.",
|
|
79
|
+
"modelSelector.modelName": "모델 이름: {value}",
|
|
80
|
+
"modelSelector.actionFor": "작업 대상: {id}",
|
|
81
|
+
"modelSelector.reasoningFor": "{target} 추론 수준: {id}",
|
|
82
|
+
"modelSelector.temporaryModel": "임시 모델",
|
|
69
83
|
};
|
package/src/i18n/messages/zh.ts
CHANGED
|
@@ -66,4 +66,18 @@ export const zh: Partial<Record<MsgKey, string>> = {
|
|
|
66
66
|
"cmd.session": "会话管理命令",
|
|
67
67
|
"cmd.clear": "清空对话",
|
|
68
68
|
"cmd.quit": "退出 Sayknow-CLI",
|
|
69
|
+
"modelSelector.presets": "模型预设",
|
|
70
|
+
"modelSelector.createCustom": "创建自定义预设",
|
|
71
|
+
"modelSelector.browseAll": "浏览全部模型",
|
|
72
|
+
"modelSelector.applySession": "仅本次会话应用",
|
|
73
|
+
"modelSelector.setDefault": "设为默认",
|
|
74
|
+
"modelSelector.pressEnterApply": "按 Enter 应用此预设",
|
|
75
|
+
"modelSelector.presetPreview": "预设预览:{name}",
|
|
76
|
+
"modelSelector.showingScoped": "正在显示 --models 范围内的模型",
|
|
77
|
+
"modelSelector.modelsTab": "模型",
|
|
78
|
+
"modelSelector.noMatching": "没有匹配的模型。",
|
|
79
|
+
"modelSelector.modelName": "模型名称:{value}",
|
|
80
|
+
"modelSelector.actionFor": "操作对象:{id}",
|
|
81
|
+
"modelSelector.reasoningFor": "{target} 的推理级别:{id}",
|
|
82
|
+
"modelSelector.temporaryModel": "临时模型",
|
|
69
83
|
};
|